ETH Price: $2,393.39 (+2.92%)

Token

Novawchi (VACHI)
 

Overview

Max Total Supply

9,666,666 VACHI

Holders

16

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Novawchi is a truly decentralized crypto asset built with the mission to revolutionize the entire ecosystem of blockchain technology.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Novawchi

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/// Warning: The code is copyrighted by the Novawchi. All rights reserved.

// SPDX-License-Identifier:MIT
pragma solidity 0.8.18;
pragma experimental ABIEncoderV2;

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

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

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

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

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

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

    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 = payable(address(0));
    }

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

interface IUniswapFactory {
    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 IdexPair {
    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 IdexRouter01 {
    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 IdexRouter02 is IdexRouter01 {
    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 Novawchi is Context, IERC20, Ownable {
    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 safeManager;

    address[] private _excluded;

    address private burnAccount = 0x0000000000000000000000000000000000000001;
    uint256 private _totalBurnt;

    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 9666666 * 10**18; // 9666666 Million Novawchi Tokens Max & Total Supply
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Novawchi"; // Token Name: Novawchi
    string private _symbol = "VACHI"; // Token Ticker: VACHI
    uint8 private _decimals = 18; // Token Decimals: 18

    IdexRouter02 public dexRouter;
    address public dexPair;
    address payable public teamWallet =
        payable(0x2f17eE9Ac9269583BB9b37ef0908e53b14f7d991);
    address payable public treasuryWallet =
        payable(0x4E12457554a3708F5cB7f001765371d7AB71e86E);
    uint256 public maxFee = 1000; // 10% Maximum fee per transaction

    // normal tax fee
    uint256 public rewardFee = 750; // 7.5% Tokens will be distributed among all Novawchi holder as token rewards on Buying & Transfer
    uint256 public teamFee = 100; // 1% Tokens goes to the Team Wallet
    uint256 public treasuryFee = 150; // 1.5% Tokens goes to the Treasury Wallet

    // for smart contract use
    uint256 private _currentRewardFee;
    uint256 private _currentTeamFee;
    uint256 private _currentTreasuryFee;

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

        IdexRouter02 _dexRouter = IdexRouter02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a liquidity pair for Novawchi Token
        dexPair = IUniswapFactory(_dexRouter.factory()).createPair(
            address(this),
            _dexRouter.WETH()
        );

        // set the rest of the contract variables
        dexRouter = _dexRouter;

        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        safeManager[owner()] = true;

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

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

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

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

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()] - (amount)
        );
        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] - (subtractedValue)
        );
        return true;
    }

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

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

    function setSafeManager(address payable _safeManager, bool _value)
        public
        onlyOwner
    {
        safeManager[_safeManager] = _value;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(
            !_isExcluded[sender],
            "Excluded addresses cannot call this function"
        );
        uint256 rAmount = tAmount * (_getRate());
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _rTotal = _rTotal - (rAmount);
        _tFeeTotal = _tFeeTotal + (tAmount);
    }

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            uint256 rAmount = tAmount * (_getRate());
            return rAmount;
        } else {
            uint256 rAmount = tAmount * (_getRate());
            uint256 rTransferAmount = rAmount -
                (totalFeePerTx(tAmount) * (_getRate()));
            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 / (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 excludeMultipleAccountsFromReward(address[] calldata accounts)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            require(!_isExcluded[accounts[i]], "Account is already excluded");
            if (_rOwned[accounts[i]] > 0) {
                _tOwned[accounts[i]] = tokenFromReflection(
                    _rOwned[accounts[i]]
                );
            }
            _isExcluded[accounts[i]] = true;
            _excluded.push(accounts[i]);
        }
    }

    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];
                _rOwned[account] = _tOwned[account] * (_getRate());
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

    function excludeMultipleAccountsFromFees(
        address[] calldata accounts,
        bool excluded
    ) public onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            _isExcludedFromFee[accounts[i]] = excluded;
        }
    }

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

    function setWallet(
        address payable _teamWallet,
        address payable _treasuryWallet
    ) external onlyOwner {
        require(
            _teamWallet != address(0),
            "Market wallet cannot be address zero"
        );
        require(
            _treasuryWallet != address(0),
            "Market wallet cannot be address zero"
        );
        teamWallet = _teamWallet;
        treasuryWallet = _treasuryWallet;
    }

    function setRouter(IdexRouter02 _router, address _pair) external onlyOwner {
        require(
            address(_router) != address(0),
            "Router adress cannot be address zero"
        );
        require(_pair != address(0), "Pair adress cannot be address zero");
        dexRouter = _router;
        dexPair = _pair;
    }

    function withdrawETH(uint256 _amount) external onlyOwner {
        require(address(this).balance >= _amount, "Invalid Amount");
        payable(msg.sender).transfer(_amount);
    }

    function withdrawToken(IERC20 _token, uint256 _amount) external onlyOwner {
        require(_token.balanceOf(address(this)) >= _amount, "Invalid Amount");
        _token.transfer(msg.sender, _amount);
    }

    //to receive ETH from dexRouter when swapping
    receive() external payable {}

    function totalFeePerTx(uint256 tAmount) internal view returns (uint256) {
        uint256 percentage = (tAmount *
            (_currentRewardFee + (_currentTeamFee) + (_currentTreasuryFee))) /
            (10000);
        return percentage;
    }

    function _reflectFee(uint256 tAmount) private {
        uint256 tFee = (tAmount * (_currentRewardFee)) / (10000);
        uint256 rFee = tFee * (_getRate());
        _rTotal = _rTotal - (rFee);
        _tFeeTotal = _tFeeTotal + (tFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply / (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 - (_rOwned[_excluded[i]]);
            tSupply = tSupply - (_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal / (_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeTeamFee(uint256 tAmount, uint256 currentRate) internal {
        uint256 tTeamFee = (tAmount * (_currentTeamFee)) / (10000);
        uint256 rTeamFee = tTeamFee * (currentRate);
        _rOwned[teamWallet] = _rOwned[teamWallet] + (rTeamFee);
        if (_isExcluded[teamWallet])
            _tOwned[teamWallet] = _tOwned[teamWallet] + (tTeamFee);
        emit Transfer(_msgSender(), teamWallet, tTeamFee);
    }

    function _takeTreasuryFee(uint256 tAmount, uint256 currentRate) internal {
        uint256 tTreasuryFee = (tAmount * (_currentTreasuryFee)) / (10000);
        uint256 rTreasuryFee = tTreasuryFee * (currentRate);
        _rOwned[treasuryWallet] = _rOwned[treasuryWallet] + (rTreasuryFee);
        if (_isExcluded[treasuryWallet])
            _tOwned[treasuryWallet] = _tOwned[treasuryWallet] + (tTreasuryFee);
        emit Transfer(_msgSender(), treasuryWallet, tTreasuryFee);
    }

    function removeAllFee() private {
        _currentRewardFee = 0;
        _currentTeamFee = 0;
        _currentTreasuryFee = 0;
    }

    function setNormalFee() private {
        _currentRewardFee = rewardFee;
        _currentTeamFee = teamFee;
        _currentTreasuryFee = treasuryFee;
    }

    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, "ERC20: Transfer amount must be greater than zero");

        //indicates if fee should be deducted from transfer
        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }
        if (!takeFee) {
            removeAllFee();
        }
        // buying handler
        else if (from == dexPair) {
            setNormalFee();
        }
        // selling handler
        else if (to == dexPair) {
            removeAllFee();
        }
        // normal transaction handler
        else {
            setNormalFee();
        }

        //transfer amount, it will take tax, burn, liquidity fee
        _tokenTransfer(from, to, amount);
    }

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) private {
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount - (totalFeePerTx(tAmount));
        uint256 rAmount = tAmount * (currentRate);
        uint256 rTransferAmount = rAmount -
            (totalFeePerTx(tAmount) * (currentRate));
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeTeamFee(tAmount, currentRate);
        _takeTreasuryFee(tAmount, currentRate);

        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount - (totalFeePerTx(tAmount));
        uint256 rAmount = tAmount * (currentRate);
        uint256 rTransferAmount = rAmount -
            (totalFeePerTx(tAmount) * (currentRate));
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeTeamFee(tAmount, currentRate);
        _takeTreasuryFee(tAmount, currentRate);

        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount - (totalFeePerTx(tAmount));
        uint256 rAmount = tAmount * (currentRate);
        uint256 rTransferAmount = rAmount -
            (totalFeePerTx(tAmount) * (currentRate));
        _tOwned[sender] = _tOwned[sender] - (tAmount);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeTeamFee(tAmount, currentRate);
        _takeTreasuryFee(tAmount, currentRate);

        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferBothExcluded(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        uint256 currentRate = _getRate();
        uint256 tTransferAmount = tAmount - (totalFeePerTx(tAmount));
        uint256 rAmount = tAmount * (currentRate);
        uint256 rTransferAmount = rAmount -
            (totalFeePerTx(tAmount) * (currentRate));
        _tOwned[sender] = _tOwned[sender] - (tAmount);
        _rOwned[sender] = _rOwned[sender] - (rAmount);
        _tOwned[recipient] = _tOwned[recipient] + (tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient] + (rTransferAmount);
        _takeTeamFee(tAmount, currentRate);
        _takeTreasuryFee(tAmount, currentRate);

        _reflectFee(tAmount);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function burn(uint256 amount) public virtual {
        require(safeManager[_msgSender()] == true);
        _burn(msg.sender, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != burnAccount, "ERC20: burn from the burn address");

        uint256 accountBalance = balanceOf(account);
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");

        uint256 rAmount = _getRate();

        // Transfer from account to the burnAccount
        _rOwned[account] -= rAmount;

        _tOwned[burnAccount] += amount;
        _rOwned[burnAccount] += rAmount;

        _tTotal -= amount;

        _totalBurnt += amount;

        emit Transfer(account, burnAccount, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IdexRouter02","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":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeMultipleAccountsFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"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":"rewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IdexRouter02","name":"_router","type":"address"},{"internalType":"address","name":"_pair","type":"address"}],"name":"setRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_safeManager","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setSafeManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"_teamWallet","type":"address"},{"internalType":"address payable","name":"_treasuryWallet","type":"address"}],"name":"setWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a80546001600160a01b03191660011790556a07feff038e98814f680000600c8190556200003690600019620003d4565b6200004490600019620003f7565b600d556040805180820190915260088152674e6f76617763686960c01b6020820152600f90620000759082620004c4565b50604080518082019091526005815264564143484960d81b6020820152601090620000a19082620004c4565b506011805460ff19166012179055601380546001600160a01b0319908116732f17ee9ac9269583bb9b37ef0908e53b14f7d9911790915560148054909116734e12457554a3708f5cb7f001765371d7ab71e86e1790556103e86015556102ee601655606460175560966018553480156200011a57600080fd5b50600080546001600160a01b0319163390811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600d5460036000620001746000546001600160a01b031690565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000216919062000590565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200028a919062000590565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fe919062000590565b601280546001600160a01b0319166001600160a01b0392831617905560118054610100600160a81b031916610100848416021790556000805482168152600660209081526040808320805460ff19908116600190811790925530855282852080548216831790558454861685526008909352908320805490921617905554166001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c54604051620003c591815260200190565b60405180910390a350620005c2565b600082620003f257634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156200041957634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200044a57607f821691505b6020821081036200046b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620004bf57600081815260208120601f850160051c810160208610156200049a5750805b601f850160051c820191505b81811015620004bb57828155600101620004a6565b5050505b505050565b81516001600160401b03811115620004e057620004e06200041f565b620004f881620004f1845462000435565b8462000471565b602080601f831160018114620005305760008415620005175750858301515b600019600386901b1c1916600185901b178555620004bb565b600085815260208120601f198616915b82811015620005615788860151825594840194600190910190840162000540565b5085821015620005805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620005a357600080fd5b81516001600160a01b0381168114620005bb57600080fd5b9392505050565b6129ea80620005d26000396000f3fe60806040526004361061023f5760003560e01c806370a082311161012e578063c492f046116100ab578063f14210a61161006f578063f14210a6146106f3578063f1b234ad14610713578063f242ab4114610733578063f2fde38b14610753578063ffb4c7ad1461077357600080fd5b8063c492f04614610641578063cc32d17614610661578063d7c94efd14610677578063dd62ed3e1461068d578063ea2f0b37146106d357600080fd5b806395d89b41116100f257806395d89b41146105ac5780639e281a98146105c1578063a457c2d7146105e1578063a9059cbb14610601578063b7a49a901461062157600080fd5b806370a082311461050a578063715018a61461052a57806388f820201461053f5780638b424267146105785780638da5cb5b1461058e57600080fd5b806339509351116101bc5780634549b039116101805780634549b039146104515780634626402b1461047157806352390c02146104915780635342acb4146104b157806359927044146104ea57600080fd5b806339509351146103b15780633bd5d173146103d157806341d68b8f146103f157806342966c6814610411578063437823ec1461043157600080fd5b806318160ddd1161020357806318160ddd1461031857806323b872dd1461032d5780632d8381191461034d578063313ce5671461036d5780633685d4191461038f57600080fd5b806301f59d161461024b57806306fdde03146102745780630758d92414610296578063095ea7b3146102d357806313114a9d1461030357600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026160155481565b6040519081526020015b60405180910390f35b34801561028057600080fd5b50610289610793565b60405161026b9190612555565b3480156102a257600080fd5b506011546102bb9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161026b565b3480156102df57600080fd5b506102f36102ee3660046125b8565b610825565b604051901515815260200161026b565b34801561030f57600080fd5b50600e54610261565b34801561032457600080fd5b50600c54610261565b34801561033957600080fd5b506102f36103483660046125e4565b61083c565b34801561035957600080fd5b50610261610368366004612625565b61088e565b34801561037957600080fd5b5060115460405160ff909116815260200161026b565b34801561039b57600080fd5b506103af6103aa36600461263e565b610917565b005b3480156103bd57600080fd5b506102f36103cc3660046125b8565b610ae5565b3480156103dd57600080fd5b506103af6103ec366004612625565b610b1c565b3480156103fd57600080fd5b506103af61040c36600461265b565b610c0c565b34801561041d57600080fd5b506103af61042c366004612625565b610d31565b34801561043d57600080fd5b506103af61044c36600461263e565b610d5f565b34801561045d57600080fd5b5061026161046c3660046126a2565b610dad565b34801561047d57600080fd5b506014546102bb906001600160a01b031681565b34801561049d57600080fd5b506103af6104ac36600461263e565b610e6a565b3480156104bd57600080fd5b506102f36104cc36600461263e565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104f657600080fd5b506013546102bb906001600160a01b031681565b34801561051657600080fd5b5061026161052536600461263e565b610f8d565b34801561053657600080fd5b506103af610fec565b34801561054b57600080fd5b506102f361055a36600461263e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561058457600080fd5b5061026160165481565b34801561059a57600080fd5b506000546001600160a01b03166102bb565b3480156105b857600080fd5b50610289611060565b3480156105cd57600080fd5b506103af6105dc3660046125b8565b61106f565b3480156105ed57600080fd5b506102f36105fc3660046125b8565b6111b8565b34801561060d57600080fd5b506102f361061c3660046125b8565b6111ef565b34801561062d57600080fd5b506103af61063c3660046126c7565b6111fc565b34801561064d57600080fd5b506103af61065c366004612741565b611251565b34801561066d57600080fd5b5061026160185481565b34801561068357600080fd5b5061026160175481565b34801561069957600080fd5b506102616106a836600461265b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156106df57600080fd5b506103af6106ee36600461263e565b6112f2565b3480156106ff57600080fd5b506103af61070e366004612625565b61133d565b34801561071f57600080fd5b506103af61072e36600461265b565b6113d5565b34801561073f57600080fd5b506012546102bb906001600160a01b031681565b34801561075f57600080fd5b506103af61076e36600461263e565b611479565b34801561077f57600080fd5b506103af61078e366004612798565b611563565b6060600f80546107a2906127da565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce906127da565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050905090565b60006108323384846117ad565b5060015b92915050565b60006108498484846118d1565b6001600160a01b03841660009081526005602090815260408083203380855292529091205461088491869161087f90869061282a565b6117ad565b5060019392505050565b6000600d548211156108fa5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610904611ae2565b9050610910818461283d565b9392505050565b6000546001600160a01b031633146109415760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03811660009081526007602052604090205460ff166109795760405162461bcd60e51b81526004016108f190612894565b60005b600954811015610ae157816001600160a01b0316600982815481106109a3576109a36128cb565b6000918252602090912001546001600160a01b031603610acf57600980546109cd9060019061282a565b815481106109dd576109dd6128cb565b600091825260209091200154600980546001600160a01b039092169183908110610a0957610a096128cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610a3f611ae2565b6001600160a01b038316600090815260046020526040902054610a6291906128e1565b6001600160a01b038316600090815260036020908152604080832093909355600481528282208290556007905220805460ff191690556009805480610aa957610aa96128f8565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ad98161290e565b91505061097c565b5050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161083291859061087f908690612927565b3360008181526007602052604090205460ff1615610b915760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108f1565b6000610b9b611ae2565b610ba590846128e1565b6001600160a01b038316600090815260036020526040902054909150610bcc90829061282a565b6001600160a01b038316600090815260036020526040902055600d54610bf390829061282a565b600d55600e54610c04908490612927565b600e55505050565b6000546001600160a01b03163314610c365760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b038216610c985760405162461bcd60e51b8152602060048201526024808201527f526f75746572206164726573732063616e6e6f742062652061646472657373206044820152637a65726f60e01b60648201526084016108f1565b6001600160a01b038116610cf95760405162461bcd60e51b815260206004820152602260248201527f50616972206164726573732063616e6e6f742062652061646472657373207a65604482015261726f60f01b60648201526084016108f1565b60118054610100600160a81b0319166101006001600160a01b0394851602179055601280546001600160a01b03191691909216179055565b3360009081526008602052604090205460ff161515600114610d5257600080fd5b610d5c3382611b05565b50565b6000546001600160a01b03163314610d895760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600c54831115610e015760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108f1565b81610e23576000610e10611ae2565b610e1a90856128e1565b91506108369050565b6000610e2d611ae2565b610e3790856128e1565b90506000610e43611ae2565b610e4c86611ced565b610e5691906128e1565b610e60908361282a565b9250610836915050565b6000546001600160a01b03163314610e945760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03811660009081526007602052604090205460ff1615610ecd5760405162461bcd60e51b81526004016108f190612894565b6001600160a01b03811660009081526003602052604090205415610f27576001600160a01b038116600090815260036020526040902054610f0d9061088e565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff1615610fca57506001600160a01b031660009081526004602052604090205490565b6001600160a01b0382166000908152600360205260409020546108369061088e565b6000546001600160a01b031633146110165760405162461bcd60e51b81526004016108f19061285f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601080546107a2906127da565b6000546001600160a01b031633146110995760405162461bcd60e51b81526004016108f19061285f565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156110df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611103919061293a565b10156111425760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b60448201526064016108f1565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190612953565b505050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161083291859061087f90869061282a565b60006108323384846118d1565b6000546001600160a01b031633146112265760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461127b5760405162461bcd60e51b81526004016108f19061285f565b60005b828110156112ec57816006600086868581811061129d5761129d6128cb565b90506020020160208101906112b2919061263e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112e48161290e565b91505061127e565b50505050565b6000546001600160a01b0316331461131c5760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146113675760405162461bcd60e51b81526004016108f19061285f565b804710156113a85760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b60448201526064016108f1565b604051339082156108fc029083906000818181858888f19350505050158015610ae1573d6000803e3d6000fd5b6000546001600160a01b031633146113ff5760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b0382166114255760405162461bcd60e51b81526004016108f190612970565b6001600160a01b03811661144b5760405162461bcd60e51b81526004016108f190612970565b601380546001600160a01b039384166001600160a01b03199182161790915560148054929093169116179055565b6000546001600160a01b031633146114a35760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b0381166115085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461158d5760405162461bcd60e51b81526004016108f19061285f565b60005b818110156111b357600760008484848181106115ae576115ae6128cb565b90506020020160208101906115c3919061263e565b6001600160a01b0316815260208101919091526040016000205460ff16156115fd5760405162461bcd60e51b81526004016108f190612894565b600060036000858585818110611615576116156128cb565b905060200201602081019061162a919061263e565b6001600160a01b03166001600160a01b031681526020019081526020016000205411156116eb576116a56003600085858581811061166a5761166a6128cb565b905060200201602081019061167f919061263e565b6001600160a01b03166001600160a01b031681526020019081526020016000205461088e565b600460008585858181106116bb576116bb6128cb565b90506020020160208101906116d0919061263e565b6001600160a01b031681526020810191909152604001600020555b600160076000858585818110611703576117036128cb565b9050602002016020810190611718919061263e565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556009838383818110611754576117546128cb565b9050602002016020810190611769919061263e565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055806117a58161290e565b915050611590565b6001600160a01b03831661180f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108f1565b6001600160a01b0382166118705760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108f1565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119355760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108f1565b6001600160a01b0382166119975760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108f1565b60008111611a005760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108f1565b6001600160a01b03831660009081526006602052604090205460019060ff1680611a4257506001600160a01b03831660009081526006602052604090205460ff165b15611a4b575060005b80611a6957611a6460006019819055601a819055601b55565b611ad7565b6012546001600160a01b0390811690851603611a9657611a64601654601955601754601a55601854601b55565b6012546001600160a01b0390811690841603611ac057611a6460006019819055601a819055601b55565b611ad7601654601955601754601a55601854601b55565b6112ec848484611d24565b6000806000611aef611e21565b9092509050611afe818361283d565b9250505090565b600a546001600160a01b0390811690831603611b6d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b60648201526084016108f1565b6000611b7883610f8d565b905081811015611bd55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108f1565b6000611bdf611ae2565b6001600160a01b038516600090815260036020526040812080549293508392909190611c0c90849061282a565b9091555050600a546001600160a01b031660009081526004602052604081208054859290611c3b908490612927565b9091555050600a546001600160a01b031660009081526003602052604081208054839290611c6a908490612927565b9250508190555082600c6000828254611c83919061282a565b9250508190555082600b6000828254611c9c9190612927565b9091555050600a546040518481526001600160a01b03918216918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350505050565b600080612710601b54601a54601954611d069190612927565b611d109190612927565b611d1a90856128e1565b610910919061283d565b6001600160a01b03831660009081526007602052604090205460ff168015611d6557506001600160a01b03821660009081526007602052604090205460ff16155b15611d75576111b3838383611fa4565b6001600160a01b03831660009081526007602052604090205460ff16158015611db657506001600160a01b03821660009081526007602052604090205460ff165b15611dc6576111b3838383612108565b6001600160a01b03831660009081526007602052604090205460ff168015611e0657506001600160a01b03821660009081526007602052604090205460ff165b15611e16576111b38383836121e7565b6111b383838361228f565b600d54600c546000918291825b600954811015611f7357826003600060098481548110611e5057611e506128cb565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ebb5750816004600060098481548110611e9457611e946128cb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611ed157600d54600c54945094505050509091565b6003600060098381548110611ee857611ee86128cb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611f17908461282a565b92506004600060098381548110611f3057611f306128cb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611f5f908361282a565b915080611f6b8161290e565b915050611e2e565b50600c54600d54611f84919061283d565b821015611f9b57600d54600c549350935050509091565b90939092509050565b6000611fae611ae2565b90506000611fbb83611ced565b611fc5908461282a565b90506000611fd383856128e1565b9050600083611fe186611ced565b611feb91906128e1565b611ff5908361282a565b6001600160a01b03881660009081526004602052604090205490915061201c90869061282a565b6001600160a01b03881660009081526004602090815260408083209390935560039052205461204c90839061282a565b6001600160a01b03808916600090815260036020526040808220939093559088168152205461207c908290612927565b6001600160a01b03871660009081526003602052604090205561209f8585612307565b6120a9858561241f565b6120b285612501565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120f791815260200190565b60405180910390a350505050505050565b6000612112611ae2565b9050600061211f83611ced565b612129908461282a565b9050600061213783856128e1565b905060008361214586611ced565b61214f91906128e1565b612159908361282a565b6001600160a01b03881660009081526003602052604090205490915061218090839061282a565b6001600160a01b038089166000908152600360209081526040808320949094559189168152600490915220546121b7908490612927565b6001600160a01b03871660009081526004602090815260408083209390935560039052205461207c908290612927565b60006121f1611ae2565b905060006121fe83611ced565b612208908461282a565b9050600061221683856128e1565b905060008361222486611ced565b61222e91906128e1565b612238908361282a565b6001600160a01b03881660009081526004602052604090205490915061225f90869061282a565b6001600160a01b03881660009081526004602090815260408083209390935560039052205461218090839061282a565b6000612299611ae2565b905060006122a683611ced565b6122b0908461282a565b905060006122be83856128e1565b90506000836122cc86611ced565b6122d691906128e1565b6122e0908361282a565b6001600160a01b03881660009081526003602052604090205490915061204c90839061282a565b6000612710601a548461231a91906128e1565b612324919061283d565b9050600061233283836128e1565b6013546001600160a01b031660009081526003602052604090205490915061235b908290612927565b601380546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff16156123d7576013546001600160a01b03166000908152600460205260409020546123bb908390612927565b6013546001600160a01b03166000908152600460205260409020555b6013546001600160a01b0316335b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cdf91815260200190565b6000612710601b548461243291906128e1565b61243c919061283d565b9050600061244a83836128e1565b6014546001600160a01b0316600090815260036020526040902054909150612473908290612927565b601480546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff16156124ef576014546001600160a01b03166000908152600460205260409020546124d3908390612927565b6014546001600160a01b03166000908152600460205260409020555b6014546001600160a01b0316336123e5565b60006127106019548361251491906128e1565b61251e919061283d565b9050600061252a611ae2565b61253490836128e1565b905080600d54612544919061282a565b600d55600e54610c04908390612927565b600060208083528351808285015260005b8181101561258257858101830151858201604001528201612566565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d5c57600080fd5b600080604083850312156125cb57600080fd5b82356125d6816125a3565b946020939093013593505050565b6000806000606084860312156125f957600080fd5b8335612604816125a3565b92506020840135612614816125a3565b929592945050506040919091013590565b60006020828403121561263757600080fd5b5035919050565b60006020828403121561265057600080fd5b8135610910816125a3565b6000806040838503121561266e57600080fd5b8235612679816125a3565b91506020830135612689816125a3565b809150509250929050565b8015158114610d5c57600080fd5b600080604083850312156126b557600080fd5b82359150602083013561268981612694565b600080604083850312156126da57600080fd5b82356126e5816125a3565b9150602083013561268981612694565b60008083601f84011261270757600080fd5b50813567ffffffffffffffff81111561271f57600080fd5b6020830191508360208260051b850101111561273a57600080fd5b9250929050565b60008060006040848603121561275657600080fd5b833567ffffffffffffffff81111561276d57600080fd5b612779868287016126f5565b909450925050602084013561278d81612694565b809150509250925092565b600080602083850312156127ab57600080fd5b823567ffffffffffffffff8111156127c257600080fd5b6127ce858286016126f5565b90969095509350505050565b600181811c908216806127ee57607f821691505b60208210810361280e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561083657610836612814565b60008261285a57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761083657610836612814565b634e487b7160e01b600052603160045260246000fd5b60006001820161292057612920612814565b5060010190565b8082018082111561083657610836612814565b60006020828403121561294c57600080fd5b5051919050565b60006020828403121561296557600080fd5b815161091081612694565b60208082526024908201527f4d61726b65742077616c6c65742063616e6e6f742062652061646472657373206040820152637a65726f60e01b60608201526080019056fea2646970667358221220491c2d2028850c55810261f5ee90a77f3c1d2600ef1161a48044e041055748da64736f6c63430008120033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806370a082311161012e578063c492f046116100ab578063f14210a61161006f578063f14210a6146106f3578063f1b234ad14610713578063f242ab4114610733578063f2fde38b14610753578063ffb4c7ad1461077357600080fd5b8063c492f04614610641578063cc32d17614610661578063d7c94efd14610677578063dd62ed3e1461068d578063ea2f0b37146106d357600080fd5b806395d89b41116100f257806395d89b41146105ac5780639e281a98146105c1578063a457c2d7146105e1578063a9059cbb14610601578063b7a49a901461062157600080fd5b806370a082311461050a578063715018a61461052a57806388f820201461053f5780638b424267146105785780638da5cb5b1461058e57600080fd5b806339509351116101bc5780634549b039116101805780634549b039146104515780634626402b1461047157806352390c02146104915780635342acb4146104b157806359927044146104ea57600080fd5b806339509351146103b15780633bd5d173146103d157806341d68b8f146103f157806342966c6814610411578063437823ec1461043157600080fd5b806318160ddd1161020357806318160ddd1461031857806323b872dd1461032d5780632d8381191461034d578063313ce5671461036d5780633685d4191461038f57600080fd5b806301f59d161461024b57806306fdde03146102745780630758d92414610296578063095ea7b3146102d357806313114a9d1461030357600080fd5b3661024657005b600080fd5b34801561025757600080fd5b5061026160155481565b6040519081526020015b60405180910390f35b34801561028057600080fd5b50610289610793565b60405161026b9190612555565b3480156102a257600080fd5b506011546102bb9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161026b565b3480156102df57600080fd5b506102f36102ee3660046125b8565b610825565b604051901515815260200161026b565b34801561030f57600080fd5b50600e54610261565b34801561032457600080fd5b50600c54610261565b34801561033957600080fd5b506102f36103483660046125e4565b61083c565b34801561035957600080fd5b50610261610368366004612625565b61088e565b34801561037957600080fd5b5060115460405160ff909116815260200161026b565b34801561039b57600080fd5b506103af6103aa36600461263e565b610917565b005b3480156103bd57600080fd5b506102f36103cc3660046125b8565b610ae5565b3480156103dd57600080fd5b506103af6103ec366004612625565b610b1c565b3480156103fd57600080fd5b506103af61040c36600461265b565b610c0c565b34801561041d57600080fd5b506103af61042c366004612625565b610d31565b34801561043d57600080fd5b506103af61044c36600461263e565b610d5f565b34801561045d57600080fd5b5061026161046c3660046126a2565b610dad565b34801561047d57600080fd5b506014546102bb906001600160a01b031681565b34801561049d57600080fd5b506103af6104ac36600461263e565b610e6a565b3480156104bd57600080fd5b506102f36104cc36600461263e565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156104f657600080fd5b506013546102bb906001600160a01b031681565b34801561051657600080fd5b5061026161052536600461263e565b610f8d565b34801561053657600080fd5b506103af610fec565b34801561054b57600080fd5b506102f361055a36600461263e565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561058457600080fd5b5061026160165481565b34801561059a57600080fd5b506000546001600160a01b03166102bb565b3480156105b857600080fd5b50610289611060565b3480156105cd57600080fd5b506103af6105dc3660046125b8565b61106f565b3480156105ed57600080fd5b506102f36105fc3660046125b8565b6111b8565b34801561060d57600080fd5b506102f361061c3660046125b8565b6111ef565b34801561062d57600080fd5b506103af61063c3660046126c7565b6111fc565b34801561064d57600080fd5b506103af61065c366004612741565b611251565b34801561066d57600080fd5b5061026160185481565b34801561068357600080fd5b5061026160175481565b34801561069957600080fd5b506102616106a836600461265b565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156106df57600080fd5b506103af6106ee36600461263e565b6112f2565b3480156106ff57600080fd5b506103af61070e366004612625565b61133d565b34801561071f57600080fd5b506103af61072e36600461265b565b6113d5565b34801561073f57600080fd5b506012546102bb906001600160a01b031681565b34801561075f57600080fd5b506103af61076e36600461263e565b611479565b34801561077f57600080fd5b506103af61078e366004612798565b611563565b6060600f80546107a2906127da565b80601f01602080910402602001604051908101604052809291908181526020018280546107ce906127da565b801561081b5780601f106107f05761010080835404028352916020019161081b565b820191906000526020600020905b8154815290600101906020018083116107fe57829003601f168201915b5050505050905090565b60006108323384846117ad565b5060015b92915050565b60006108498484846118d1565b6001600160a01b03841660009081526005602090815260408083203380855292529091205461088491869161087f90869061282a565b6117ad565b5060019392505050565b6000600d548211156108fa5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084015b60405180910390fd5b6000610904611ae2565b9050610910818461283d565b9392505050565b6000546001600160a01b031633146109415760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03811660009081526007602052604090205460ff166109795760405162461bcd60e51b81526004016108f190612894565b60005b600954811015610ae157816001600160a01b0316600982815481106109a3576109a36128cb565b6000918252602090912001546001600160a01b031603610acf57600980546109cd9060019061282a565b815481106109dd576109dd6128cb565b600091825260209091200154600980546001600160a01b039092169183908110610a0957610a096128cb565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550610a3f611ae2565b6001600160a01b038316600090815260046020526040902054610a6291906128e1565b6001600160a01b038316600090815260036020908152604080832093909355600481528282208290556007905220805460ff191690556009805480610aa957610aa96128f8565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ad98161290e565b91505061097c565b5050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161083291859061087f908690612927565b3360008181526007602052604090205460ff1615610b915760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108f1565b6000610b9b611ae2565b610ba590846128e1565b6001600160a01b038316600090815260036020526040902054909150610bcc90829061282a565b6001600160a01b038316600090815260036020526040902055600d54610bf390829061282a565b600d55600e54610c04908490612927565b600e55505050565b6000546001600160a01b03163314610c365760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b038216610c985760405162461bcd60e51b8152602060048201526024808201527f526f75746572206164726573732063616e6e6f742062652061646472657373206044820152637a65726f60e01b60648201526084016108f1565b6001600160a01b038116610cf95760405162461bcd60e51b815260206004820152602260248201527f50616972206164726573732063616e6e6f742062652061646472657373207a65604482015261726f60f01b60648201526084016108f1565b60118054610100600160a81b0319166101006001600160a01b0394851602179055601280546001600160a01b03191691909216179055565b3360009081526008602052604090205460ff161515600114610d5257600080fd5b610d5c3382611b05565b50565b6000546001600160a01b03163314610d895760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600c54831115610e015760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108f1565b81610e23576000610e10611ae2565b610e1a90856128e1565b91506108369050565b6000610e2d611ae2565b610e3790856128e1565b90506000610e43611ae2565b610e4c86611ced565b610e5691906128e1565b610e60908361282a565b9250610836915050565b6000546001600160a01b03163314610e945760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03811660009081526007602052604090205460ff1615610ecd5760405162461bcd60e51b81526004016108f190612894565b6001600160a01b03811660009081526003602052604090205415610f27576001600160a01b038116600090815260036020526040902054610f0d9061088e565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff1615610fca57506001600160a01b031660009081526004602052604090205490565b6001600160a01b0382166000908152600360205260409020546108369061088e565b6000546001600160a01b031633146110165760405162461bcd60e51b81526004016108f19061285f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6060601080546107a2906127da565b6000546001600160a01b031633146110995760405162461bcd60e51b81526004016108f19061285f565b6040516370a0823160e01b815230600482015281906001600160a01b038416906370a0823190602401602060405180830381865afa1580156110df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611103919061293a565b10156111425760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b60448201526064016108f1565b60405163a9059cbb60e01b8152336004820152602481018290526001600160a01b0383169063a9059cbb906044016020604051808303816000875af115801561118f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b39190612953565b505050565b3360008181526005602090815260408083206001600160a01b0387168452909152812054909161083291859061087f90869061282a565b60006108323384846118d1565b6000546001600160a01b031633146112265760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b6000546001600160a01b0316331461127b5760405162461bcd60e51b81526004016108f19061285f565b60005b828110156112ec57816006600086868581811061129d5761129d6128cb565b90506020020160208101906112b2919061263e565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806112e48161290e565b91505061127e565b50505050565b6000546001600160a01b0316331461131c5760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146113675760405162461bcd60e51b81526004016108f19061285f565b804710156113a85760405162461bcd60e51b815260206004820152600e60248201526d125b9d985b1a5908105b5bdd5b9d60921b60448201526064016108f1565b604051339082156108fc029083906000818181858888f19350505050158015610ae1573d6000803e3d6000fd5b6000546001600160a01b031633146113ff5760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b0382166114255760405162461bcd60e51b81526004016108f190612970565b6001600160a01b03811661144b5760405162461bcd60e51b81526004016108f190612970565b601380546001600160a01b039384166001600160a01b03199182161790915560148054929093169116179055565b6000546001600160a01b031633146114a35760405162461bcd60e51b81526004016108f19061285f565b6001600160a01b0381166115085760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f1565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461158d5760405162461bcd60e51b81526004016108f19061285f565b60005b818110156111b357600760008484848181106115ae576115ae6128cb565b90506020020160208101906115c3919061263e565b6001600160a01b0316815260208101919091526040016000205460ff16156115fd5760405162461bcd60e51b81526004016108f190612894565b600060036000858585818110611615576116156128cb565b905060200201602081019061162a919061263e565b6001600160a01b03166001600160a01b031681526020019081526020016000205411156116eb576116a56003600085858581811061166a5761166a6128cb565b905060200201602081019061167f919061263e565b6001600160a01b03166001600160a01b031681526020019081526020016000205461088e565b600460008585858181106116bb576116bb6128cb565b90506020020160208101906116d0919061263e565b6001600160a01b031681526020810191909152604001600020555b600160076000858585818110611703576117036128cb565b9050602002016020810190611718919061263e565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556009838383818110611754576117546128cb565b9050602002016020810190611769919061263e565b81546001810183556000928352602090922090910180546001600160a01b0319166001600160a01b03909216919091179055806117a58161290e565b915050611590565b6001600160a01b03831661180f5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108f1565b6001600160a01b0382166118705760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108f1565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166119355760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108f1565b6001600160a01b0382166119975760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108f1565b60008111611a005760405162461bcd60e51b815260206004820152603060248201527f45524332303a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b60648201526084016108f1565b6001600160a01b03831660009081526006602052604090205460019060ff1680611a4257506001600160a01b03831660009081526006602052604090205460ff165b15611a4b575060005b80611a6957611a6460006019819055601a819055601b55565b611ad7565b6012546001600160a01b0390811690851603611a9657611a64601654601955601754601a55601854601b55565b6012546001600160a01b0390811690841603611ac057611a6460006019819055601a819055601b55565b611ad7601654601955601754601a55601854601b55565b6112ec848484611d24565b6000806000611aef611e21565b9092509050611afe818361283d565b9250505090565b600a546001600160a01b0390811690831603611b6d5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865206275726e206164647265736044820152607360f81b60648201526084016108f1565b6000611b7883610f8d565b905081811015611bd55760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016108f1565b6000611bdf611ae2565b6001600160a01b038516600090815260036020526040812080549293508392909190611c0c90849061282a565b9091555050600a546001600160a01b031660009081526004602052604081208054859290611c3b908490612927565b9091555050600a546001600160a01b031660009081526003602052604081208054839290611c6a908490612927565b9250508190555082600c6000828254611c83919061282a565b9250508190555082600b6000828254611c9c9190612927565b9091555050600a546040518481526001600160a01b03918216918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350505050565b600080612710601b54601a54601954611d069190612927565b611d109190612927565b611d1a90856128e1565b610910919061283d565b6001600160a01b03831660009081526007602052604090205460ff168015611d6557506001600160a01b03821660009081526007602052604090205460ff16155b15611d75576111b3838383611fa4565b6001600160a01b03831660009081526007602052604090205460ff16158015611db657506001600160a01b03821660009081526007602052604090205460ff165b15611dc6576111b3838383612108565b6001600160a01b03831660009081526007602052604090205460ff168015611e0657506001600160a01b03821660009081526007602052604090205460ff165b15611e16576111b38383836121e7565b6111b383838361228f565b600d54600c546000918291825b600954811015611f7357826003600060098481548110611e5057611e506128cb565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ebb5750816004600060098481548110611e9457611e946128cb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611ed157600d54600c54945094505050509091565b6003600060098381548110611ee857611ee86128cb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611f17908461282a565b92506004600060098381548110611f3057611f306128cb565b60009182526020808320909101546001600160a01b03168352820192909252604001902054611f5f908361282a565b915080611f6b8161290e565b915050611e2e565b50600c54600d54611f84919061283d565b821015611f9b57600d54600c549350935050509091565b90939092509050565b6000611fae611ae2565b90506000611fbb83611ced565b611fc5908461282a565b90506000611fd383856128e1565b9050600083611fe186611ced565b611feb91906128e1565b611ff5908361282a565b6001600160a01b03881660009081526004602052604090205490915061201c90869061282a565b6001600160a01b03881660009081526004602090815260408083209390935560039052205461204c90839061282a565b6001600160a01b03808916600090815260036020526040808220939093559088168152205461207c908290612927565b6001600160a01b03871660009081526003602052604090205561209f8585612307565b6120a9858561241f565b6120b285612501565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516120f791815260200190565b60405180910390a350505050505050565b6000612112611ae2565b9050600061211f83611ced565b612129908461282a565b9050600061213783856128e1565b905060008361214586611ced565b61214f91906128e1565b612159908361282a565b6001600160a01b03881660009081526003602052604090205490915061218090839061282a565b6001600160a01b038089166000908152600360209081526040808320949094559189168152600490915220546121b7908490612927565b6001600160a01b03871660009081526004602090815260408083209390935560039052205461207c908290612927565b60006121f1611ae2565b905060006121fe83611ced565b612208908461282a565b9050600061221683856128e1565b905060008361222486611ced565b61222e91906128e1565b612238908361282a565b6001600160a01b03881660009081526004602052604090205490915061225f90869061282a565b6001600160a01b03881660009081526004602090815260408083209390935560039052205461218090839061282a565b6000612299611ae2565b905060006122a683611ced565b6122b0908461282a565b905060006122be83856128e1565b90506000836122cc86611ced565b6122d691906128e1565b6122e0908361282a565b6001600160a01b03881660009081526003602052604090205490915061204c90839061282a565b6000612710601a548461231a91906128e1565b612324919061283d565b9050600061233283836128e1565b6013546001600160a01b031660009081526003602052604090205490915061235b908290612927565b601380546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff16156123d7576013546001600160a01b03166000908152600460205260409020546123bb908390612927565b6013546001600160a01b03166000908152600460205260409020555b6013546001600160a01b0316335b6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cdf91815260200190565b6000612710601b548461243291906128e1565b61243c919061283d565b9050600061244a83836128e1565b6014546001600160a01b0316600090815260036020526040902054909150612473908290612927565b601480546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff16156124ef576014546001600160a01b03166000908152600460205260409020546124d3908390612927565b6014546001600160a01b03166000908152600460205260409020555b6014546001600160a01b0316336123e5565b60006127106019548361251491906128e1565b61251e919061283d565b9050600061252a611ae2565b61253490836128e1565b905080600d54612544919061282a565b600d55600e54610c04908390612927565b600060208083528351808285015260005b8181101561258257858101830151858201604001528201612566565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d5c57600080fd5b600080604083850312156125cb57600080fd5b82356125d6816125a3565b946020939093013593505050565b6000806000606084860312156125f957600080fd5b8335612604816125a3565b92506020840135612614816125a3565b929592945050506040919091013590565b60006020828403121561263757600080fd5b5035919050565b60006020828403121561265057600080fd5b8135610910816125a3565b6000806040838503121561266e57600080fd5b8235612679816125a3565b91506020830135612689816125a3565b809150509250929050565b8015158114610d5c57600080fd5b600080604083850312156126b557600080fd5b82359150602083013561268981612694565b600080604083850312156126da57600080fd5b82356126e5816125a3565b9150602083013561268981612694565b60008083601f84011261270757600080fd5b50813567ffffffffffffffff81111561271f57600080fd5b6020830191508360208260051b850101111561273a57600080fd5b9250929050565b60008060006040848603121561275657600080fd5b833567ffffffffffffffff81111561276d57600080fd5b612779868287016126f5565b909450925050602084013561278d81612694565b809150509250925092565b600080602083850312156127ab57600080fd5b823567ffffffffffffffff8111156127c257600080fd5b6127ce858286016126f5565b90969095509350505050565b600181811c908216806127ee57607f821691505b60208210810361280e57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561083657610836612814565b60008261285a57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601b908201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604082015260600190565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141761083657610836612814565b634e487b7160e01b600052603160045260246000fd5b60006001820161292057612920612814565b5060010190565b8082018082111561083657610836612814565b60006020828403121561294c57600080fd5b5051919050565b60006020828403121561296557600080fd5b815161091081612694565b60208082526024908201527f4d61726b65742077616c6c65742063616e6e6f742062652061646472657373206040820152637a65726f60e01b60608201526080019056fea2646970667358221220491c2d2028850c55810261f5ee90a77f3c1d2600ef1161a48044e041055748da64736f6c63430008120033

Deployed Bytecode Sourcemap

11782:18405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13029:28;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;13029:28:0;;;;;;;;14282:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12754:29::-;;;;;;;;;;-1:-1:-1;12754:29:0;;;;;;;-1:-1:-1;;;;;12754:29:0;;;;;;-1:-1:-1;;;;;933:32:1;;;915:51;;903:2;888:18;12754:29:0;749:223:1;15275:193:0;;;;;;;;;;-1:-1:-1;15275:193:0;;;;;:::i;:::-;;:::i;:::-;;;1598:14:1;;1591:22;1573:41;;1561:2;1546:18;15275:193:0;1433:187:1;16588:87:0;;;;;;;;;;-1:-1:-1;16657:10:0;;16588:87;;14565:97;;;;;;;;;;-1:-1:-1;14647:7:0;;14565:97;;15476:352;;;;;;;;;;-1:-1:-1;15476:352:0;;;;;:::i;:::-;;:::i;17834:321::-;;;;;;;;;;-1:-1:-1;17834:321:0;;;;;:::i;:::-;;:::i;14472:85::-;;;;;;;;;;-1:-1:-1;14540:9:0;;14472:85;;14540:9;;;;2413:36:1;;2401:2;2386:18;14472:85:0;2271:184:1;19050:546:0;;;;;;;;;;-1:-1:-1;19050:546:0;;;;;:::i;:::-;;:::i;:::-;;15836:299;;;;;;;;;;-1:-1:-1;15836:299:0;;;;;:::i;:::-;;:::i;16851:407::-;;;;;;;;;;-1:-1:-1;16851:407:0;;;;;:::i;:::-;;:::i;20576:343::-;;;;;;;;;;-1:-1:-1;20576:343:0;;;;;:::i;:::-;;:::i;29405:142::-;;;;;;;;;;-1:-1:-1;29405:142:0;;;;;:::i;:::-;;:::i;19604:111::-;;;;;;;;;;-1:-1:-1;19604:111:0;;;;;:::i;:::-;;:::i;17266:560::-;;;;;;;;;;-1:-1:-1;17266:560:0;;;;;:::i;:::-;;:::i;12922:100::-;;;;;;;;;;-1:-1:-1;12922:100:0;;;;-1:-1:-1;;;;;12922:100:0;;;18163:332;;;;;;;;;;-1:-1:-1;18163:332:0;;;;;:::i;:::-;;:::i;23965:124::-;;;;;;;;;;-1:-1:-1;23965:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;24054:27:0;24030:4;24054:27;;;:18;:27;;;;;;;;;23965:124;12819:96;;;;;;;;;;-1:-1:-1;12819:96:0;;;;-1:-1:-1;;;;;12819:96:0;;;14670:198;;;;;;;;;;-1:-1:-1;14670:198:0;;;;;:::i;:::-;;:::i;1972:157::-;;;;;;;;;;;;;:::i;16460:120::-;;;;;;;;;;-1:-1:-1;16460:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;16552:20:0;16528:4;16552:20;;;:11;:20;;;;;;;;;16460:120;13124:30;;;;;;;;;;;;;;;;1758:79;;;;;;;;;;-1:-1:-1;1796:7:0;1823:6;-1:-1:-1;;;;;1823:6:0;1758:79;;14375:89;;;;;;;;;;;;;:::i;21118:209::-;;;;;;;;;;-1:-1:-1;21118:209:0;;;;;:::i;:::-;;:::i;16143:309::-;;;;;;;;;;-1:-1:-1;16143:309:0;;;;;:::i;:::-;;:::i;14876:199::-;;;;;;;;;;-1:-1:-1;14876:199:0;;;;;:::i;:::-;;:::i;16683:160::-;;;;;;;;;;-1:-1:-1;16683:160:0;;;;;:::i;:::-;;:::i;19723:260::-;;;;;;;;;;-1:-1:-1;19723:260:0;;;;;:::i;:::-;;:::i;13332:32::-;;;;;;;;;;;;;;;;13260:28;;;;;;;;;;;;;;;;15083:184;;;;;;;;;;-1:-1:-1;15083:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;15232:18:0;;;15200:7;15232:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;15083:184;19991:110;;;;;;;;;;-1:-1:-1;19991:110:0;;;;;:::i;:::-;;:::i;20927:183::-;;;;;;;;;;-1:-1:-1;20927:183:0;;;;;:::i;:::-;;:::i;20109:459::-;;;;;;;;;;-1:-1:-1;20109:459:0;;;;;:::i;:::-;;:::i;12790:22::-;;;;;;;;;;-1:-1:-1;12790:22:0;;;;-1:-1:-1;;;;;12790:22:0;;;2137:321;;;;;;;;;;-1:-1:-1;2137:321:0;;;;;:::i;:::-;;:::i;18503:539::-;;;;;;;;;;-1:-1:-1;18503:539:0;;;;;:::i;:::-;;:::i;14282:85::-;14321:13;14354:5;14347:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14282:85;:::o;15275:193::-;15377:4;15399:39;1105:10;15422:7;15431:6;15399:8;:39::i;:::-;-1:-1:-1;15456:4:0;15275:193;;;;;:::o;15476:352::-;15608:4;15625:36;15635:6;15643:9;15654:6;15625:9;:36::i;:::-;-1:-1:-1;;;;;15743:19:0;;;;;;:11;:19;;;;;;;;1105:10;15743:33;;;;;;;;;15672:126;;15695:6;;15743:44;;15780:6;;15743:44;:::i;:::-;15672:8;:126::i;:::-;-1:-1:-1;15816:4:0;15476:352;;;;;:::o;17834:321::-;17928:7;17986;;17975;:18;;17953:110;;;;-1:-1:-1;;;17953:110:0;;8021:2:1;17953:110:0;;;8003:21:1;8060:2;8040:18;;;8033:30;8099:34;8079:18;;;8072:62;-1:-1:-1;;;8150:18:1;;;8143:40;8200:19;;17953:110:0;;;;;;;;;18074:19;18096:10;:8;:10::i;:::-;18074:32;-1:-1:-1;18124:23:0;18074:32;18124:7;:23;:::i;:::-;18117:30;17834:321;-1:-1:-1;;;17834:321:0:o;19050:546::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19130:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;19122:60;;;;-1:-1:-1::0;;;19122:60:0::1;;;;;;;:::i;:::-;19198:9;19193:396;19217:9;:16:::0;19213:20;::::1;19193:396;;;19275:7;-1:-1:-1::0;;;;;19259:23:0::1;:9;19269:1;19259:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;19259:12:0::1;:23:::0;19255:323:::1;;19318:9;19328:16:::0;;:20:::1;::::0;19347:1:::1;::::0;19328:20:::1;:::i;:::-;19318:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;19303:9:::1;:12:::0;;-1:-1:-1;;;;;19318:31:0;;::::1;::::0;19313:1;;19303:12;::::1;;;;;:::i;:::-;;;;;;;;;:46;;;;;-1:-1:-1::0;;;;;19303:46:0::1;;;;;-1:-1:-1::0;;;;;19303:46:0::1;;;;;;19407:10;:8;:10::i;:::-;-1:-1:-1::0;;;;;19387:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;:31:::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;;;;19368:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:50;;;;19437:7:::1;:16:::0;;;;;:20;;;19476:11:::1;:20:::0;;;:28;;-1:-1:-1;;19476:28:0::1;::::0;;19523:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;19523:15:0;;;;;-1:-1:-1;;;;;;19523:15:0::1;::::0;;;;;19193:396:::1;19050:546:::0;:::o;19255:323::-:1;19235:3:::0;::::1;::::0;::::1;:::i;:::-;;;;19193:396;;;;19050:546:::0;:::o;15836:299::-;1105:10;15951:4;16045:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16045:34:0;;;;;;;;;;15951:4;;15973:132;;16023:7;;16045:49;;16083:10;;16045:49;:::i;16851:407::-;1105:10;16903:14;16966:19;;;:11;:19;;;;;;;;16965:20;16943:114;;;;-1:-1:-1;;;16943:114:0;;10078:2:1;16943:114:0;;;10060:21:1;10117:2;10097:18;;;10090:30;10156:34;10136:18;;;10129:62;-1:-1:-1;;;10207:18:1;;;10200:42;10259:19;;16943:114:0;9876:408:1;16943:114:0;17068:15;17097:10;:8;:10::i;:::-;17086:22;;:7;:22;:::i;:::-;-1:-1:-1;;;;;17137:15:0;;;;;;:7;:15;;;;;;17068:40;;-1:-1:-1;17137:27:0;;17068:40;;17137:27;:::i;:::-;-1:-1:-1;;;;;17119:15:0;;;;;;:7;:15;;;;;:45;17185:7;;:19;;17196:7;;17185:19;:::i;:::-;17175:7;:29;17228:10;;:22;;17242:7;;17228:22;:::i;:::-;17215:10;:35;-1:-1:-1;;;16851:407:0:o;20576:343::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20684:30:0;::::1;20662:116;;;::::0;-1:-1:-1;;;20662:116:0;;10491:2:1;20662:116:0::1;::::0;::::1;10473:21:1::0;10530:2;10510:18;;;10503:30;10569:34;10549:18;;;10542:62;-1:-1:-1;;;10620:18:1;;;10613:34;10664:19;;20662:116:0::1;10289:400:1::0;20662:116:0::1;-1:-1:-1::0;;;;;20797:19:0;::::1;20789:66;;;::::0;-1:-1:-1;;;20789:66:0;;10896:2:1;20789:66:0::1;::::0;::::1;10878:21:1::0;10935:2;10915:18;;;10908:30;10974:34;10954:18;;;10947:62;-1:-1:-1;;;11025:18:1;;;11018:32;11067:19;;20789:66:0::1;10694:398:1::0;20789:66:0::1;20866:9;:19:::0;;-1:-1:-1;;;;;;20866:19:0::1;;-1:-1:-1::0;;;;;20866:19:0;;::::1;;;::::0;;20896:7:::1;:15:::0;;-1:-1:-1;;;;;;20896:15:0::1;::::0;;;::::1;;::::0;;20576:343::o;29405:142::-;1105:10;29469:25;;;;:11;:25;;;;;;;;:33;;:25;:33;29461:42;;;;;;29514:25;29520:10;29532:6;29514:5;:25::i;:::-;29405:142;:::o;19604:111::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19673:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;19673:34:0::1;19703:4;19673:34;::::0;;19604:111::o;17266:560::-;17384:7;17428;;17417;:18;;17409:62;;;;-1:-1:-1;;;17409:62:0;;11299:2:1;17409:62:0;;;11281:21:1;11338:2;11318:18;;;11311:30;11377:33;11357:18;;;11350:61;11428:18;;17409:62:0;11097:355:1;17409:62:0;17487:17;17482:337;;17521:15;17550:10;:8;:10::i;:::-;17539:22;;:7;:22;:::i;:::-;17521:40;-1:-1:-1;17576:14:0;;-1:-1:-1;17576:14:0;17482:337;17623:15;17652:10;:8;:10::i;:::-;17641:22;;:7;:22;:::i;:::-;17623:40;;17678:23;17758:10;:8;:10::i;:::-;17732:22;17746:7;17732:13;:22::i;:::-;:37;;;;:::i;:::-;17704:66;;:7;:66;:::i;:::-;17678:92;-1:-1:-1;17785:22:0;;-1:-1:-1;;17785:22:0;18163:332;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18244:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;18243:21;18235:61;;;;-1:-1:-1::0;;;18235:61:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18311:16:0;::::1;18330:1;18311:16:::0;;;:7:::1;:16;::::0;;;;;:20;18307:109:::1;;-1:-1:-1::0;;;;;18387:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;18367:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;18348:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;18307:109:::1;-1:-1:-1::0;;;;;18426:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;18426:27:0::1;18449:4;18426:27:::0;;::::1;::::0;;;18464:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;18464:23:0::1;::::0;;::::1;::::0;;18163:332::o;14670:198::-;-1:-1:-1;;;;;14760:20:0;;14736:7;14760:20;;;:11;:20;;;;;;;;14756:49;;;-1:-1:-1;;;;;;14789:16:0;;;;;:7;:16;;;;;;;14670:198::o;14756:49::-;-1:-1:-1;;;;;14843:16:0;;;;;;:7;:16;;;;;;14823:37;;:19;:37::i;1972:157::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;2079:1:::1;2063:6:::0;;2042:40:::1;::::0;-1:-1:-1;;;;;2063:6:0;;::::1;::::0;2042:40:::1;::::0;2079:1;;2042:40:::1;2118:1;2093:28:::0;;-1:-1:-1;;;;;;2093:28:0::1;::::0;;1972:157::o;14375:89::-;14416:13;14449:7;14442:14;;;;;:::i;21118:209::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;21211:31:::1;::::0;-1:-1:-1;;;21211:31:0;;21236:4:::1;21211:31;::::0;::::1;915:51:1::0;21246:7:0;;-1:-1:-1;;;;;21211:16:0;::::1;::::0;::::1;::::0;888:18:1;;21211:31:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;21203:69;;;::::0;-1:-1:-1;;;21203:69:0;;11848:2:1;21203:69:0::1;::::0;::::1;11830:21:1::0;11887:2;11867:18;;;11860:30;-1:-1:-1;;;11906:18:1;;;11899:44;11960:18;;21203:69:0::1;11646:338:1::0;21203:69:0::1;21283:36;::::0;-1:-1:-1;;;21283:36:0;;21299:10:::1;21283:36;::::0;::::1;12163:51:1::0;12230:18;;;12223:34;;;-1:-1:-1;;;;;21283:15:0;::::1;::::0;::::1;::::0;12136:18:1;;21283:36:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21118:209:::0;;:::o;16143:309::-;1105:10;16263:4;16357:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;16357:34:0;;;;;;;;;;16263:4;;16285:137;;16335:7;;16357:54;;16395:15;;16357:54;:::i;14876:199::-;14981:4;15003:42;1105:10;15027:9;15038:6;15003:9;:42::i;16683:160::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16801:25:0;;;::::1;;::::0;;;:11:::1;:25;::::0;;;;:34;;-1:-1:-1;;16801:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;16683:160::o;19723:260::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;19866:9:::1;19861:115;19881:19:::0;;::::1;19861:115;;;19956:8;19922:18;:31;19941:8;;19950:1;19941:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19922:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;19922:31:0;:42;;-1:-1:-1;;19922:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;19902:3;::::1;::::0;::::1;:::i;:::-;;;;19861:115;;;;19723:260:::0;;;:::o;19991:110::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20058:27:0::1;20088:5;20058:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;20058:35:0::1;::::0;;19991:110::o;20927:183::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;21028:7:::1;21003:21;:32;;20995:59;;;::::0;-1:-1:-1;;;20995:59:0;;11848:2:1;20995:59:0::1;::::0;::::1;11830:21:1::0;11887:2;11867:18;;;11860:30;-1:-1:-1;;;11906:18:1;;;11899:44;11960:18;;20995:59:0::1;11646:338:1::0;20995:59:0::1;21065:37;::::0;21073:10:::1;::::0;21065:37;::::1;;;::::0;21094:7;;21065:37:::1;::::0;;;21094:7;21073:10;21065:37;::::1;;;;;;;;;;;;;::::0;::::1;;;;20109:459:::0;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20267:25:0;::::1;20245:111;;;;-1:-1:-1::0;;;20245:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20389:29:0;::::1;20367:115;;;;-1:-1:-1::0;;;20367:115:0::1;;;;;;;:::i;:::-;20493:10;:24:::0;;-1:-1:-1;;;;;20493:24:0;;::::1;-1:-1:-1::0;;;;;;20493:24:0;;::::1;;::::0;;;20528:14:::1;:32:::0;;;;;::::1;::::0;::::1;;::::0;;20109:459::o;2137:321::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2280:22:0;::::1;2258:110;;;::::0;-1:-1:-1;;;2258:110:0;;13125:2:1;2258:110:0::1;::::0;::::1;13107:21:1::0;13164:2;13144:18;;;13137:30;13203:34;13183:18;;;13176:62;-1:-1:-1;;;13254:18:1;;;13247:36;13300:19;;2258:110:0::1;12923:402:1::0;2258:110:0::1;2405:6;::::0;;2384:38:::1;::::0;-1:-1:-1;;;;;2384:38:0;;::::1;::::0;2405:6;::::1;::::0;2384:38:::1;::::0;::::1;2433:6;:17:::0;;-1:-1:-1;;;;;;2433:17:0::1;-1:-1:-1::0;;;;;2433:17:0;;;::::1;::::0;;;::::1;::::0;;2137:321::o;18503:539::-;1885:6;;-1:-1:-1;;;;;1885:6:0;1105:10;1885:22;1877:67;;;;-1:-1:-1;;;1877:67:0;;;;;;;:::i;:::-;18631:9:::1;18626:409;18646:19:::0;;::::1;18626:409;;;18696:11;:24;18708:8;;18717:1;18708:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18696:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18696:24:0;;::::1;;18695:25;18687:65;;;;-1:-1:-1::0;;;18687:65:0::1;;;;;;;:::i;:::-;18794:1;18771:7;:20;18779:8;;18788:1;18779:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18771:20:0::1;-1:-1:-1::0;;;;;18771:20:0::1;;;;;;;;;;;;;:24;18767:169;;;18839:81;18881:7;:20;18889:8;;18898:1;18889:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18881:20:0::1;-1:-1:-1::0;;;;;18881:20:0::1;;;;;;;;;;;;;18839:19;:81::i;:::-;18816:7;:20;18824:8;;18833:1;18824:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18816:20:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18816:20:0;:104;18767:169:::1;18977:4;18950:11;:24;18962:8;;18971:1;18962:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18950:24:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;18950:24:0;:31;;-1:-1:-1;;18950:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;18996:9:::1;19011:8:::0;;19020:1;19011:11;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18996:27:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;18996:27:0;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;18996:27:0::1;-1:-1:-1::0;;;;;18996:27:0;;::::1;::::0;;;::::1;::::0;;18667:3;::::1;::::0;::::1;:::i;:::-;;;;18626:409;;24097:371:::0;-1:-1:-1;;;;;24224:19:0;;24216:68;;;;-1:-1:-1;;;24216:68:0;;13532:2:1;24216:68:0;;;13514:21:1;13571:2;13551:18;;;13544:30;13610:34;13590:18;;;13583:62;-1:-1:-1;;;13661:18:1;;;13654:34;13705:19;;24216:68:0;13330:400:1;24216:68:0;-1:-1:-1;;;;;24303:21:0;;24295:68;;;;-1:-1:-1;;;24295:68:0;;13937:2:1;24295:68:0;;;13919:21:1;13976:2;13956:18;;;13949:30;14015:34;13995:18;;;13988:62;-1:-1:-1;;;14066:18:1;;;14059:32;14108:19;;24295:68:0;13735:398:1;24295:68:0;-1:-1:-1;;;;;24376:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;24428:32;;160:25:1;;;24428:32:0;;133:18:1;24428:32:0;;;;;;;24097:371;;;:::o;24476:1112::-;-1:-1:-1;;;;;24598:18:0;;24590:68;;;;-1:-1:-1;;;24590:68:0;;14340:2:1;24590:68:0;;;14322:21:1;14379:2;14359:18;;;14352:30;14418:34;14398:18;;;14391:62;-1:-1:-1;;;14469:18:1;;;14462:35;14514:19;;24590:68:0;14138:401:1;24590:68:0;-1:-1:-1;;;;;24677:16:0;;24669:64;;;;-1:-1:-1;;;24669:64:0;;14746:2:1;24669:64:0;;;14728:21:1;14785:2;14765:18;;;14758:30;14824:34;14804:18;;;14797:62;-1:-1:-1;;;14875:18:1;;;14868:33;14918:19;;24669:64:0;14544:399:1;24669:64:0;24761:1;24752:6;:10;24744:71;;;;-1:-1:-1;;;24744:71:0;;15150:2:1;24744:71:0;;;15132:21:1;15189:2;15169:18;;;15162:30;15228:34;15208:18;;;15201:62;-1:-1:-1;;;15279:18:1;;;15272:46;15335:19;;24744:71:0;14948:412:1;24744:71:0;-1:-1:-1;;;;;25009:24:0;;24889:12;25009:24;;;:18;:24;;;;;;24904:4;;25009:24;;;:50;;-1:-1:-1;;;;;;25037:22:0;;;;;;:18;:22;;;;;;;;25009:50;25005:98;;;-1:-1:-1;25086:5:0;25005:98;25118:7;25113:357;;25142:14;23716:1;23696:17;:21;;;23728:15;:19;;;23758;:23;23653:136;25142:14;25113:357;;;25222:7;;-1:-1:-1;;;;;25222:7:0;;;25214:15;;;;25210:260;;25246:14;23860:9;;23840:17;:29;23898:7;;23880:15;:25;23938:11;;23916:19;:33;23797:160;25210:260;25325:7;;-1:-1:-1;;;;;25325:7:0;;;25319:13;;;;25315:155;;25349:14;23716:1;23696:17;:21;;;23728:15;:19;;;23758;:23;23653:136;25315:155;25444:14;23860:9;;23840:17;:29;23898:7;;23880:15;:25;23938:11;;23916:19;:33;23797:160;25444:14;25548:32;25563:4;25569:2;25573:6;25548:14;:32::i;21936:163::-;21978:7;21999:15;22016;22035:19;:17;:19::i;:::-;21998:56;;-1:-1:-1;21998:56:0;-1:-1:-1;22072:19:0;21998:56;;22072:19;:::i;:::-;22065:26;;;;21936:163;:::o;29555:629::-;29650:11;;-1:-1:-1;;;;;29650:11:0;;;29639:22;;;;29631:68;;;;-1:-1:-1;;;29631:68:0;;15567:2:1;29631:68:0;;;15549:21:1;15606:2;15586:18;;;15579:30;15645:34;15625:18;;;15618:62;-1:-1:-1;;;15696:18:1;;;15689:31;15737:19;;29631:68:0;15365:397:1;29631:68:0;29712:22;29737:18;29747:7;29737:9;:18::i;:::-;29712:43;;29792:6;29774:14;:24;;29766:71;;;;-1:-1:-1;;;29766:71:0;;15969:2:1;29766:71:0;;;15951:21:1;16008:2;15988:18;;;15981:30;16047:34;16027:18;;;16020:62;-1:-1:-1;;;16098:18:1;;;16091:32;16140:19;;29766:71:0;15767:398:1;29766:71:0;29850:15;29868:10;:8;:10::i;:::-;-1:-1:-1;;;;;29944:16:0;;;;;;:7;:16;;;;;:27;;29850:28;;-1:-1:-1;29850:28:0;;29944:16;;;:27;;29850:28;;29944:27;:::i;:::-;;;;-1:-1:-1;;29992:11:0;;-1:-1:-1;;;;;29992:11:0;29984:20;;;;:7;:20;;;;;:30;;30008:6;;29984:20;:30;;30008:6;;29984:30;:::i;:::-;;;;-1:-1:-1;;30033:11:0;;-1:-1:-1;;;;;30033:11:0;30025:20;;;;:7;:20;;;;;:31;;30049:7;;30025:20;:31;;30049:7;;30025:31;:::i;:::-;;;;;;;;30080:6;30069:7;;:17;;;;;;;:::i;:::-;;;;;;;;30114:6;30099:11;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;30156:11:0;;30138:38;;160:25:1;;;-1:-1:-1;;;;;30156:11:0;;;;30138:38;;;;;148:2:1;133:18;30138:38:0;;;;;;;;29620:564;;29555:629;;:::o;21423:251::-;21486:7;21506:18;21632:5;21593:19;;21573:15;;21552:17;;:37;;;;:::i;:::-;:61;;;;:::i;:::-;21528:86;;:7;:86;:::i;:::-;21527:111;;;;:::i;25669:602::-;-1:-1:-1;;;;;25801:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;25825:22:0;;;;;;:11;:22;;;;;;;;25824:23;25801:46;25797:467;;;25864:48;25886:6;25894:9;25905:6;25864:21;:48::i;25797:467::-;-1:-1:-1;;;;;25935:19:0;;;;;;:11;:19;;;;;;;;25934:20;:46;;;;-1:-1:-1;;;;;;25958:22:0;;;;;;:11;:22;;;;;;;;25934:46;25930:334;;;25997:46;26017:6;26025:9;26036:6;25997:19;:46::i;25930:334::-;-1:-1:-1;;;;;26065:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;26088:22:0;;;;;;:11;:22;;;;;;;;26065:45;26061:203;;;26127:48;26149:6;26157:9;26168:6;26127:21;:48::i;26061:203::-;26208:44;26226:6;26234:9;26245:6;26208:17;:44::i;22107:602::-;22205:7;;22241;;22158;;;;;22259:336;22283:9;:16;22279:20;;22259:336;;;22367:7;22343;:21;22351:9;22361:1;22351:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22351:12:0;22343:21;;;;;;;;;;;;;:31;;:83;;;22419:7;22395;:21;22403:9;22413:1;22403:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22403:12:0;22395:21;;;;;;;;;;;;;:31;22343:83;22321:146;;;22450:7;;22459;;22442:25;;;;;;;22107:602;;:::o;22321:146::-;22503:7;:21;22511:9;22521:1;22511:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22511:12:0;22503:21;;;;;;;;;;;;;22492:33;;:7;:33;:::i;:::-;22482:43;;22561:7;:21;22569:9;22579:1;22569:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22569:12:0;22561:21;;;;;;;;;;;;;22550:33;;:7;:33;:::i;:::-;22540:43;-1:-1:-1;22301:3:0;;;;:::i;:::-;;;;22259:336;;;;22630:7;;22619;;:19;;;;:::i;:::-;22609:7;:29;22605:60;;;22648:7;;22657;;22640:25;;;;;;22107:602;;:::o;22605:60::-;22684:7;;22693;;-1:-1:-1;22107:602:0;-1:-1:-1;22107:602:0:o;27783:768::-;27919:19;27941:10;:8;:10::i;:::-;27919:32;;27962:23;27999:22;28013:7;27999:13;:22::i;:::-;27988:34;;:7;:34;:::i;:::-;27962:60;-1:-1:-1;28033:15:0;28051:23;28062:11;28051:7;:23;:::i;:::-;28033:41;;28085:23;28161:11;28135:22;28149:7;28135:13;:22::i;:::-;:38;;;;:::i;:::-;28111:63;;:7;:63;:::i;:::-;-1:-1:-1;;;;;28203:15:0;;;;;;:7;:15;;;;;;28085:89;;-1:-1:-1;28203:27:0;;28222:7;;28203:27;:::i;:::-;-1:-1:-1;;;;;28185:15:0;;;;;;:7;:15;;;;;;;;:45;;;;28259:7;:15;;;;:27;;28278:7;;28259:27;:::i;:::-;-1:-1:-1;;;;;28241:15:0;;;;;;;:7;:15;;;;;;:45;;;;28318:18;;;;;;;:38;;28340:15;;28318:38;:::i;:::-;-1:-1:-1;;;;;28297:18:0;;;;;;:7;:18;;;;;:59;28367:34;28380:7;28389:11;28367:12;:34::i;:::-;28412:38;28429:7;28438:11;28412:16;:38::i;:::-;28463:20;28475:7;28463:11;:20::i;:::-;28516:9;-1:-1:-1;;;;;28499:44:0;28508:6;-1:-1:-1;;;;;28499:44:0;;28527:15;28499:44;;;;160:25:1;;148:2;133:18;;14:177;28499:44:0;;;;;;;;27908:643;;;;27783:768;;;:::o;26995:780::-;27129:19;27151:10;:8;:10::i;:::-;27129:32;;27172:23;27209:22;27223:7;27209:13;:22::i;:::-;27198:34;;:7;:34;:::i;:::-;27172:60;-1:-1:-1;27243:15:0;27261:23;27272:11;27261:7;:23;:::i;:::-;27243:41;;27295:23;27371:11;27345:22;27359:7;27345:13;:22::i;:::-;:38;;;;:::i;:::-;27321:63;;:7;:63;:::i;:::-;-1:-1:-1;;;;;27413:15:0;;;;;;:7;:15;;;;;;27295:89;;-1:-1:-1;27413:27:0;;27432:7;;27413:27;:::i;:::-;-1:-1:-1;;;;;27395:15:0;;;;;;;:7;:15;;;;;;;;:45;;;;27472:18;;;;;:7;:18;;;;;:38;;27494:15;;27472:38;:::i;:::-;-1:-1:-1;;;;;27451:18:0;;;;;;:7;:18;;;;;;;;:59;;;;27542:7;:18;;;;:38;;27564:15;;27542:38;:::i;28559:838::-;28695:19;28717:10;:8;:10::i;:::-;28695:32;;28738:23;28775:22;28789:7;28775:13;:22::i;:::-;28764:34;;:7;:34;:::i;:::-;28738:60;-1:-1:-1;28809:15:0;28827:23;28838:11;28827:7;:23;:::i;:::-;28809:41;;28861:23;28937:11;28911:22;28925:7;28911:13;:22::i;:::-;:38;;;;:::i;:::-;28887:63;;:7;:63;:::i;:::-;-1:-1:-1;;;;;28979:15:0;;;;;;:7;:15;;;;;;28861:89;;-1:-1:-1;28979:27:0;;28998:7;;28979:27;:::i;:::-;-1:-1:-1;;;;;28961:15:0;;;;;;:7;:15;;;;;;;;:45;;;;29035:7;:15;;;;:27;;29054:7;;29035:27;:::i;26279:708::-;26411:19;26433:10;:8;:10::i;:::-;26411:32;;26454:23;26491:22;26505:7;26491:13;:22::i;:::-;26480:34;;:7;:34;:::i;:::-;26454:60;-1:-1:-1;26525:15:0;26543:23;26554:11;26543:7;:23;:::i;:::-;26525:41;;26577:23;26653:11;26627:22;26641:7;26627:13;:22::i;:::-;:38;;;;:::i;:::-;26603:63;;:7;:63;:::i;:::-;-1:-1:-1;;;;;26695:15:0;;;;;;:7;:15;;;;;;26577:89;;-1:-1:-1;26695:27:0;;26714:7;;26695:27;:::i;22717:432::-;22797:16;22849:5;22828:15;;22817:7;:27;;;;:::i;:::-;22816:39;;;;:::i;:::-;22797:58;-1:-1:-1;22866:16:0;22885:24;22897:11;22797:58;22885:24;:::i;:::-;22950:10;;-1:-1:-1;;;;;22950:10:0;22942:19;;;;:7;:19;;;;;;22866:43;;-1:-1:-1;22942:32:0;;22866:43;;22942:32;:::i;:::-;22928:10;;;-1:-1:-1;;;;;22928:10:0;;;22920:19;;;;:7;:19;;;;;;;;:54;;;;23001:10;;;;;22989:23;;:11;:23;;;;;;;22985:96;;;23057:10;;-1:-1:-1;;;;;23057:10:0;23049:19;;;;:7;:19;;;;;;:32;;23072:8;;23049:32;:::i;:::-;23035:10;;-1:-1:-1;;;;;23035:10:0;23027:19;;;;:7;:19;;;;;:54;22985:96;23120:10;;-1:-1:-1;;;;;23120:10:0;1105;23106:12;-1:-1:-1;;;;;23097:44:0;;23132:8;23097:44;;;;160:25:1;;148:2;133:18;;14:177;23157:488:0;23241:20;23301:5;23276:19;;23265:7;:31;;;;:::i;:::-;23264:43;;;;:::i;:::-;23241:66;-1:-1:-1;23318:20:0;23341:28;23357:11;23241:66;23341:28;:::i;:::-;23414:14;;-1:-1:-1;;;;;23414:14:0;23406:23;;;;:7;:23;;;;;;23318:51;;-1:-1:-1;23406:40:0;;23318:51;;23406:40;:::i;:::-;23388:14;;;-1:-1:-1;;;;;23388:14:0;;;23380:23;;;;:7;:23;;;;;;;;:66;;;;23473:14;;;;;23461:27;;:11;:27;;;;;;;23457:112;;;23537:14;;-1:-1:-1;;;;;23537:14:0;23529:23;;;;:7;:23;;;;;;:40;;23556:12;;23529:40;:::i;:::-;23511:14;;-1:-1:-1;;;;;23511:14:0;23503:23;;;;:7;:23;;;;;:66;23457:112;23608:14;;-1:-1:-1;;;;;23608:14:0;1105:10;23594:12;1009:115;21682:246;21739:12;21789:5;21766:17;;21755:7;:29;;;;:::i;:::-;21754:41;;;;:::i;:::-;21739:56;;21806:12;21829:10;:8;:10::i;:::-;21821:19;;:4;:19;:::i;:::-;21806:34;;21872:4;21861:7;;:16;;;;:::i;:::-;21851:7;:26;21901:10;;:19;;21915:4;;21901:19;:::i;196:548:1:-;308:4;337:2;366;355:9;348:21;398:6;392:13;441:6;436:2;425:9;421:18;414:34;466:1;476:140;490:6;487:1;484:13;476:140;;;585:14;;;581:23;;575:30;551:17;;;570:2;547:26;540:66;505:10;;476:140;;;480:3;665:1;660:2;651:6;640:9;636:22;632:31;625:42;735:2;728;724:7;719:2;711:6;707:15;703:29;692:9;688:45;684:54;676:62;;;;196:548;;;;:::o;977:131::-;-1:-1:-1;;;;;1052:31:1;;1042:42;;1032:70;;1098:1;1095;1088:12;1113:315;1181:6;1189;1242:2;1230:9;1221:7;1217:23;1213:32;1210:52;;;1258:1;1255;1248:12;1210:52;1297:9;1284:23;1316:31;1341:5;1316:31;:::i;:::-;1366:5;1418:2;1403:18;;;;1390:32;;-1:-1:-1;;;1113:315:1:o;1625:456::-;1702:6;1710;1718;1771:2;1759:9;1750:7;1746:23;1742:32;1739:52;;;1787:1;1784;1777:12;1739:52;1826:9;1813:23;1845:31;1870:5;1845:31;:::i;:::-;1895:5;-1:-1:-1;1952:2:1;1937:18;;1924:32;1965:33;1924:32;1965:33;:::i;:::-;1625:456;;2017:7;;-1:-1:-1;;;2071:2:1;2056:18;;;;2043:32;;1625:456::o;2086:180::-;2145:6;2198:2;2186:9;2177:7;2173:23;2169:32;2166:52;;;2214:1;2211;2204:12;2166:52;-1:-1:-1;2237:23:1;;2086:180;-1:-1:-1;2086:180:1:o;2460:247::-;2519:6;2572:2;2560:9;2551:7;2547:23;2543:32;2540:52;;;2588:1;2585;2578:12;2540:52;2627:9;2614:23;2646:31;2671:5;2646:31;:::i;2712:408::-;2800:6;2808;2861:2;2849:9;2840:7;2836:23;2832:32;2829:52;;;2877:1;2874;2867:12;2829:52;2916:9;2903:23;2935:31;2960:5;2935:31;:::i;:::-;2985:5;-1:-1:-1;3042:2:1;3027:18;;3014:32;3055:33;3014:32;3055:33;:::i;:::-;3107:7;3097:17;;;2712:408;;;;;:::o;3125:118::-;3211:5;3204:13;3197:21;3190:5;3187:32;3177:60;;3233:1;3230;3223:12;3248:309;3313:6;3321;3374:2;3362:9;3353:7;3349:23;3345:32;3342:52;;;3390:1;3387;3380:12;3342:52;3426:9;3413:23;3403:33;;3486:2;3475:9;3471:18;3458:32;3499:28;3521:5;3499:28;:::i;4327:390::-;4400:6;4408;4461:2;4449:9;4440:7;4436:23;4432:32;4429:52;;;4477:1;4474;4467:12;4429:52;4516:9;4503:23;4535:31;4560:5;4535:31;:::i;:::-;4585:5;-1:-1:-1;4642:2:1;4627:18;;4614:32;4655:30;4614:32;4655:30;:::i;4722:367::-;4785:8;4795:6;4849:3;4842:4;4834:6;4830:17;4826:27;4816:55;;4867:1;4864;4857:12;4816:55;-1:-1:-1;4890:20:1;;4933:18;4922:30;;4919:50;;;4965:1;4962;4955:12;4919:50;5002:4;4994:6;4990:17;4978:29;;5062:3;5055:4;5045:6;5042:1;5038:14;5030:6;5026:27;5022:38;5019:47;5016:67;;;5079:1;5076;5069:12;5016:67;4722:367;;;;;:::o;5094:566::-;5186:6;5194;5202;5255:2;5243:9;5234:7;5230:23;5226:32;5223:52;;;5271:1;5268;5261:12;5223:52;5311:9;5298:23;5344:18;5336:6;5333:30;5330:50;;;5376:1;5373;5366:12;5330:50;5415:70;5477:7;5468:6;5457:9;5453:22;5415:70;:::i;:::-;5504:8;;-1:-1:-1;5389:96:1;-1:-1:-1;;5589:2:1;5574:18;;5561:32;5602:28;5561:32;5602:28;:::i;:::-;5649:5;5639:15;;;5094:566;;;;;:::o;6727:437::-;6813:6;6821;6874:2;6862:9;6853:7;6849:23;6845:32;6842:52;;;6890:1;6887;6880:12;6842:52;6930:9;6917:23;6963:18;6955:6;6952:30;6949:50;;;6995:1;6992;6985:12;6949:50;7034:70;7096:7;7087:6;7076:9;7072:22;7034:70;:::i;:::-;7123:8;;7008:96;;-1:-1:-1;6727:437:1;-1:-1:-1;;;;6727:437:1:o;7169:380::-;7248:1;7244:12;;;;7291;;;7312:61;;7366:4;7358:6;7354:17;7344:27;;7312:61;7419:2;7411:6;7408:14;7388:18;7385:38;7382:161;;7465:10;7460:3;7456:20;7453:1;7446:31;7500:4;7497:1;7490:15;7528:4;7525:1;7518:15;7382:161;;7169:380;;;:::o;7554:127::-;7615:10;7610:3;7606:20;7603:1;7596:31;7646:4;7643:1;7636:15;7670:4;7667:1;7660:15;7686:128;7753:9;;;7774:11;;;7771:37;;;7788:18;;:::i;8230:217::-;8270:1;8296;8286:132;;8340:10;8335:3;8331:20;8328:1;8321:31;8375:4;8372:1;8365:15;8403:4;8400:1;8393:15;8286:132;-1:-1:-1;8432:9:1;;8230:217::o;8452:356::-;8654:2;8636:21;;;8673:18;;;8666:30;8732:34;8727:2;8712:18;;8705:62;8799:2;8784:18;;8452:356::o;8813:351::-;9015:2;8997:21;;;9054:2;9034:18;;;9027:30;9093:29;9088:2;9073:18;;9066:57;9155:2;9140:18;;8813:351::o;9169:127::-;9230:10;9225:3;9221:20;9218:1;9211:31;9261:4;9258:1;9251:15;9285:4;9282:1;9275:15;9301:168;9374:9;;;9405;;9422:15;;;9416:22;;9402:37;9392:71;;9443:18;;:::i;9474:127::-;9535:10;9530:3;9526:20;9523:1;9516:31;9566:4;9563:1;9556:15;9590:4;9587:1;9580:15;9606:135;9645:3;9666:17;;;9663:43;;9686:18;;:::i;:::-;-1:-1:-1;9733:1:1;9722:13;;9606:135::o;9746:125::-;9811:9;;;9832:10;;;9829:36;;;9845:18;;:::i;11457:184::-;11527:6;11580:2;11568:9;11559:7;11555:23;11551:32;11548:52;;;11596:1;11593;11586:12;11548:52;-1:-1:-1;11619:16:1;;11457:184;-1:-1:-1;11457:184:1:o;12268:245::-;12335:6;12388:2;12376:9;12367:7;12363:23;12359:32;12356:52;;;12404:1;12401;12394:12;12356:52;12436:9;12430:16;12455:28;12477:5;12455:28;:::i;12518:400::-;12720:2;12702:21;;;12759:2;12739:18;;;12732:30;12798:34;12793:2;12778:18;;12771:62;-1:-1:-1;;;12864:2:1;12849:18;;12842:34;12908:3;12893:19;;12518:400::o

Swarm Source

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