ETH Price: $3,492.64 (+2.53%)
Gas: 2 Gwei

Token

Olympus AI (OMAI)
 

Overview

Max Total Supply

100,000,000 OMAI

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
699,999.63784217831 OMAI

Value
$0.00
0x1a6c16f54843BC67F5Ec937Afe15bfA68e9bf6D7
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
OLYMPUSAI

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/* Olympus AI <OMAI> has it's own telegram bot which goes through all the products on Amazon.com and allows users to find out which products have the highest ROI for Amazon FBA.
It also tracks volume in different niches throughout Amazon and users can find out winning products.
It also has OpenAI’s GPT-4 included into the bot to ensure it's scalability of information is far and wide.

Join the revolution of AI:
https://olympus-ai.org/
https://t.me/OlympusAI_ETH
https://t.me/OlympusAI_BOT
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;

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

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

interface IERC20 {
    function totalSupply() external view returns (uint256);

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

    function transfer(
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function factory() external view returns (address);
}

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

    function WETH() external pure returns (address);

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

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

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

contract LockToken is Ownable {
    bool public isOpen = false;
    mapping(address => bool) private _whiteList;
    modifier open(address from, address to) {
        require(isOpen || _whiteList[from] || _whiteList[to], "Not Open");
        _;
    }

    constructor() {
        _whiteList[msg.sender] = true;
        _whiteList[address(this)] = true;
    }

    function openTrade() external onlyOwner {
        isOpen = true;
    }

    function includeToWhiteList(address _address) public onlyOwner {
        _whiteList[_address] = true;
    }

    function includeManyToWhiteList(
        address[] memory _addresses
    ) public onlyOwner {
        for (uint i = 0; i < _addresses.length; i++) {
            _whiteList[_addresses[i]] = true;
        }
    }
}

contract OLYMPUSAI is Context, IERC20, LockToken {
    using SafeMath for uint256;
    address payable public treasuryAddress =
        payable(0xea978B8D7465ddD9462edD570ddB73dA5161E87e);
    address payable public projectAddress =
        payable(0xea978B8D7465ddD9462edD570ddB73dA5161E87e);
    address public newOwner = 0xea978B8D7465ddD9462edD570ddB73dA5161E87e;
    address public uniV2RouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;

    mapping(address => bool) private _isWhitelistedFee;
    mapping(address => bool) private _isExcludedFromWhale;
    mapping(address => bool) private _isExcluded;

    address[] private _excluded;

    string private _name = "Olympus AI";
    string private _symbol = "OMAI";
    uint8 private _decimals = 18;

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

    uint256 public _buyAutoLPFee = 0;
    uint256 public _buyTreasuryFee = 250;
    uint256 public _buyProjectFee = 50;

    uint256 public buyTotalFee =
        _buyAutoLPFee + _buyTreasuryFee + _buyProjectFee;
    uint256[] public buyFeesBackup = [
        _buyAutoLPFee,
        _buyTreasuryFee,
        _buyProjectFee
    ];

    uint256 public _sellAutoLPFee = 0;
    uint256 public _sellTreasuryFee = 250;
    uint256 public _sellProjectFee = 50;
    uint256 public sellTotalFee =
        _sellAutoLPFee + _sellTreasuryFee + _sellProjectFee;

    uint256 public _tfrAutoLPFee = 0;
    uint256 public _tfrTreasuryFee = 0;
    uint256 public _tfrProjectFee = 0;
    uint256 public transferTotalFee =
        _tfrAutoLPFee + _tfrTreasuryFee + _tfrProjectFee;

    uint256 public _maxTxAmount = _tTotal.div(100).mul(1); //x% of total supply
    uint256 public _walletHoldingMaxLimit = _tTotal.div(100).mul(2); //x% of total supply
    uint256 private minimumTokensBeforeSwap = 1000000 * 10 ** _decimals;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

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

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

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

    constructor() {
        _rOwned[newOwner] = _rTotal;
        emit Transfer(address(0), newOwner, _tTotal);
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(uniV2RouterAddress);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isWhitelistedFee[newOwner] = true;
        _isWhitelistedFee[address(this)] = true;
        includeToWhiteList(newOwner);
        _isExcludedFromWhale[newOwner] = true;
        excludeWalletsFromWhales();
        transferOwnership(newOwner);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

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

    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 open(from, to) {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        if (from != owner() && to != owner()) {
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );
        }

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

        checkForWhale(from, to, amount);

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

        bool takeFee = true;

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

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        uint256 __buyTotalFee = _buyAutoLPFee.add(_buyTreasuryFee).add(
            _buyProjectFee
        );
        uint256 __sellTotalFee = _sellAutoLPFee.add(_sellTreasuryFee).add(
            _sellProjectFee
        );
        uint256 totalSwapableFees = __buyTotalFee.add(__sellTotalFee);
        
        if (totalSwapableFees == 0) {
            return;
        }

        uint256 halfLiquidityTokens = contractTokenBalance
            .mul(_buyAutoLPFee + _sellAutoLPFee)
            .div(totalSwapableFees)
            .div(2);
        uint256 swapableTokens = contractTokenBalance.sub(halfLiquidityTokens);
        swapTokensForEth(swapableTokens);

        uint256 newBalance = address(this).balance;
        uint256 ethForLiquidity = newBalance
            .mul(_buyAutoLPFee + _sellAutoLPFee)
            .div(totalSwapableFees)
            .div(2);

        if (halfLiquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(halfLiquidityTokens, ethForLiquidity);
        }

        uint256 ethForTreasury = newBalance
            .mul(_buyTreasuryFee + _sellTreasuryFee)
            .div(totalSwapableFees);
        if (ethForTreasury > 0) {
            treasuryAddress.transfer(ethForTreasury);
        }

        uint256 ethForDev = newBalance.sub(ethForLiquidity).sub(ethForTreasury);
        if (ethForDev > 0) {
            projectAddress.transfer(ethForDev);
        }
    }

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

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

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

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) {
            removeAllFee();
        } else {
            if (recipient == uniswapV2Pair) {
                setSellFee();
            }

            if (sender != uniswapV2Pair && recipient != uniswapV2Pair) {
                setWalletToWalletTransferFee();
            }
        }

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

        restoreAllFee();
    }

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

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

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

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

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

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

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

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

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

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

    function calculateAutoLPFee(
        uint256 _amount
    ) private view returns (uint256) {
        uint256 fees = _buyAutoLPFee.add(_buyTreasuryFee).add(
            _buyProjectFee
        );
        return _amount.mul(fees).div(1000);
    }

    function isWhitelistedFee(
        address account
    ) public view onlyOwner returns (bool) {
        return _isWhitelistedFee[account];
    }

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

    function excludeFromFeeMany(address[] memory accounts) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _isWhitelistedFee[accounts[i]] = true;
        }
    }

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

    function removeAllFee() private {
        _buyAutoLPFee = 0;
        _buyTreasuryFee = 0;
        _buyProjectFee = 0;
    }

    function restoreAllFee() private {
        _buyAutoLPFee = buyFeesBackup[0];
        _buyTreasuryFee = buyFeesBackup[1];
        _buyProjectFee = buyFeesBackup[2];
    }

    function setSellFee() private {
        _buyAutoLPFee = _sellAutoLPFee;
        _buyTreasuryFee = _sellTreasuryFee;
        _buyProjectFee = _sellProjectFee;
    }

    function setWalletToWalletTransferFee() private {
        _buyAutoLPFee = _tfrAutoLPFee;
        _buyTreasuryFee = _tfrTreasuryFee;
        _buyProjectFee = _tfrProjectFee;
    }

    function setBuyFeePercentages(
        uint256 _autoLPFee,
        uint256 _treasuryFee,
        uint256 _projectFee
    ) external onlyOwner {
        _buyAutoLPFee = _autoLPFee;
        _buyTreasuryFee = _treasuryFee;
        _buyProjectFee = _projectFee;
        buyFeesBackup = [_buyAutoLPFee, _buyTreasuryFee, _buyProjectFee];
        uint256 totalFee = _autoLPFee.add(_treasuryFee).add(_projectFee);
        buyTotalFee = _buyAutoLPFee + _buyTreasuryFee + _buyProjectFee;
        require(totalFee <= 600, "Too High Fee");
    }

    function setSellFeePercentages(
        uint256 _autoLPFee,
        uint256 _treasuryFee,
        uint256 _projectFee
    ) external onlyOwner {
        _sellAutoLPFee = _autoLPFee;
        _sellTreasuryFee = _treasuryFee;
        _sellProjectFee = _projectFee;
        uint256 totalFee = _autoLPFee.add(_treasuryFee).add(_projectFee);
        sellTotalFee = _sellAutoLPFee + _sellTreasuryFee + _sellProjectFee;
        require(totalFee <= 600, "Too High Fee");
    }

    function setTransferFeePercentages(
        uint256 _autoLPFee,
        uint256 _treasuryFee,
        uint256 _projectFee
    ) external onlyOwner {
        _tfrAutoLPFee = _autoLPFee;
        _tfrTreasuryFee = _treasuryFee;
        _tfrProjectFee = _projectFee;
        transferTotalFee = _tfrAutoLPFee + _tfrTreasuryFee + _tfrProjectFee;
        uint256 totalFee = _autoLPFee.add(_treasuryFee).add(_projectFee);
        require(totalFee <= 100, "Too High Fee");
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _maxTxAmount = maxTxAmount;
        require(_maxTxAmount >= _tTotal.div(10000).mul(1), "Too low limit");
    }

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

    function setTreasuryAddress(address _treasuryAddress) external onlyOwner {
        treasuryAddress = payable(_treasuryAddress);
    }

    function setProjectAddress(address _projectAddress) external onlyOwner {
        projectAddress = payable(_projectAddress);
    }

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

    function excludeWalletsFromWhales() private {
        _isExcludedFromWhale[owner()] = true;
        _isExcludedFromWhale[address(this)] = true;
        _isExcludedFromWhale[uniswapV2Pair] = true;
        _isExcludedFromWhale[projectAddress] = true;
        _isExcludedFromWhale[treasuryAddress] = true;
    }

    function checkForWhale(
        address from,
        address to,
        uint256 amount
    ) private view {
        uint256 newBalance = balanceOf(to).add(amount);
        if (!_isExcludedFromWhale[from] && !_isExcludedFromWhale[to]) {
            require(
                newBalance <= _walletHoldingMaxLimit,
                "Exceeding max tokens limit in the wallet"
            );
        }
        if (from == uniswapV2Pair && !_isExcludedFromWhale[to]) {
            require(
                newBalance <= _walletHoldingMaxLimit,
                "Exceeding max tokens limit in the wallet"
            );
        }
    }

    function setExcludedFromWhale(
        address account,
        bool _enabled
    ) public onlyOwner {
        _isExcludedFromWhale[account] = _enabled;
    }

    function setExcludedFromWhaleMany(
        address[] memory accounts,
        bool _enabled
    ) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            _isExcludedFromWhale[accounts[i]] = _enabled;
        }
    }

    function setWalletMaxHoldingLimit(uint256 _amount) public onlyOwner {
        _walletHoldingMaxLimit = _amount;
        require(
            _walletHoldingMaxLimit > _tTotal.div(10000).mul(1),
            "Too less limit"
        );
    }

    function rescueStuckBalance() public onlyOwner {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_buyAutoLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyProjectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellAutoLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellProjectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tfrAutoLPFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tfrProjectFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tfrTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletHoldingMaxLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"buyFeesBackup","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeFromFeeMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"name":"includeManyToWhiteList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"includeToWhiteList","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":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isWhitelistedFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":"newOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_autoLPFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"setBuyFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setExcludedFromWhaleMany","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_projectAddress","type":"address"}],"name":"setProjectAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_autoLPFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"setSellFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_autoLPFee","type":"uint256"},{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"setTransferFeePercentages","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryAddress","type":"address"}],"name":"setTreasuryAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setWalletMaxHoldingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniV2RouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6003805460ff19169055600580546001600160a01b031990811673ea978b8d7465ddd9462edd570ddb73da5161e87e9081179092556006805482168317905560078054821690921790915560088054909116737a250d5630b4cf539739df2c5dacb4c659f2488d179055610100604052600a60c0908152694f6c796d70757320414960b01b60e05260109062000096908262000932565b506040805180820190915260048152634f4d414960e01b6020820152601190620000c1908262000932565b506012805460ff191681178155620000db90600a62000b11565b620000eb906305f5e10062000b22565b6013819055620000fe9060001962000b52565b6200010c9060001962000b69565b601455600060165560fa601755603260185560185460175460165462000133919062000b7f565b6200013f919062000b7f565b601955604051806060016040528060165481526020016017548152602001601854815250601a9060036200017592919062000826565b506000601b5560fa601c556032601d55601d54601c54601b546200019a919062000b7f565b620001a6919062000b7f565b601e556000601f81905560208190556021819055620001c6818062000b7f565b620001d2919062000b7f565b602255601354620001f490600190620001ed90606462000508565b906200055b565b6023556013546200020f90600290620001ed90606462000508565b602455601254620002259060ff16600a62000b11565b6200023490620f424062000b22565b6025556026805461ff0019166101001790553480156200025357600080fd5b50600080546001600160a01b0319163390811782556040519091829160008051602062003de5833981519152908290a3503360009081526004602090815260408083208054600160ff19918216811790925530855282852080549091169091179055601454600780546001600160a01b03908116865260098552838620929092555460135492519283521692917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a36008546040805163c45a015560e01b815290516001600160a01b0390921691829163c45a01559160048083019260209291908290030181865afa15801562000357573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037d919062000b95565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f1919062000b95565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200043f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000465919062000b95565b6001600160a01b0390811660a0528181166080526007805482166000908152600c60205260408082208054600160ff199182168117909255308452919092208054909116909117905554620004bb9116620005e9565b6007546001600160a01b03166000908152600d60205260409020805460ff19166001179055620004ea62000658565b60075462000501906001600160a01b0316620006ee565b5062000c27565b60006200055283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007ea60201b60201c565b90505b92915050565b6000826000036200056f5750600062000555565b60006200057d838562000b22565b9050826200058c858362000bc0565b14620005525760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000546001600160a01b03163314620006345760405162461bcd60e51b8152602060048201819052602482015260008051602062003dc58339815191526044820152606401620005e0565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600d6000620006716000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d90935281832080548516600190811790915560a051821684528284208054861682179055600654821684528284208054861682179055600554909116835291208054909216179055565b6000546001600160a01b03163314620007395760405162461bcd60e51b8152602060048201819052602482015260008051602062003dc58339815191526044820152606401620005e0565b6001600160a01b038116620007a05760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005e0565b600080546040516001600160a01b038085169392169160008051602062003de583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b600081836200080e5760405162461bcd60e51b8152600401620005e0919062000bd7565b5060006200081d848662000bc0565b95945050505050565b82805482825590600052602060002090810192821562000864579160200282015b828111156200086457825182559160200191906001019062000847565b506200087292915062000876565b5090565b5b8082111562000872576000815560010162000877565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620008b857607f821691505b602082108103620008d957634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200092d57600081815260208120601f850160051c81016020861015620009085750805b601f850160051c820191505b81811015620009295782815560010162000914565b5050505b505050565b81516001600160401b038111156200094e576200094e6200088d565b62000966816200095f8454620008a3565b84620008df565b602080601f8311600181146200099e5760008415620009855750858301515b600019600386901b1c1916600185901b17855562000929565b600085815260208120601f198616915b82811015620009cf57888601518255948401946001909101908401620009ae565b5085821015620009ee5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562000a5557816000190482111562000a395762000a39620009fe565b8085161562000a4757918102915b93841c939080029062000a19565b509250929050565b60008262000a6e5750600162000555565b8162000a7d5750600062000555565b816001811462000a96576002811462000aa15762000ac1565b600191505062000555565b60ff84111562000ab55762000ab5620009fe565b50506001821b62000555565b5060208310610133831016604e8410600b841016171562000ae6575081810a62000555565b62000af2838362000a14565b806000190482111562000b095762000b09620009fe565b029392505050565b60006200055260ff84168362000a5d565b8082028115828204841417620005555762000555620009fe565b634e487b7160e01b600052601260045260246000fd5b60008262000b645762000b6462000b3c565b500690565b81810381811115620005555762000555620009fe565b80820180821115620005555762000555620009fe565b60006020828403121562000ba857600080fd5b81516001600160a01b03811681146200055257600080fd5b60008262000bd25762000bd262000b3c565b500490565b600060208083528351808285015260005b8181101562000c065785810183015185820160400152820162000be8565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a05161313262000c936000396000818161061301528181611a8901528181611d3001528181611f9c01528181611fec015261202901526000818161048c0152818161226e015281816123270152818161236301528181612416015261247201526131326000f3fe6080604052600436106103845760003560e01c806372b28e45116101d1578063c5f956af11610102578063dfb8b09b116100a0578063ec28438a1161006f578063ec28438a14610a08578063f2fde38b14610a28578063fb201b1d14610a48578063fce0f92814610a5d57600080fd5b8063dfb8b09b1461099c578063dfceb64d146109b2578063ea2f0b37146109c8578063ea377c2a146109e857600080fd5b8063d628df9c116100dc578063d628df9c14610900578063d6a694f514610916578063d6c0e80d14610936578063dd62ed3e1461095657600080fd5b8063c5f956af146108aa578063ccb7c4e0146108ca578063d4ee1d90146108e057600080fd5b8063a457c2d71161016f578063aee50b1e11610149578063aee50b1e14610834578063b863864c14610854578063bab184481461086a578063c49b9a801461088a57600080fd5b8063a457c2d7146107de578063a89e3556146107fe578063a9059cbb1461081457600080fd5b80638da5cb5b116101ab5780638da5cb5b1461077657806390a3dd9b1461079457806395d89b41146107b4578063a073d37f146107c957600080fd5b806372b28e451461072a5780637d1db4a5146107405780638986092d1461075657600080fd5b80633cf96af1116102b65780634b880e88116102545780636605bfda116102235780636605bfda146106c05780636fee4f7a146106e057806370a08231146106f5578063715018a61461071557600080fd5b80634b880e88146106545780634e3c06b1146106745780635d4445ce146106945780636411ff07146106aa57600080fd5b806344d4225f1161029057806344d4225f146105c757806347535d7b146105e757806349bd5a5e146106015780634a74bb021461063557600080fd5b80633cf96af11461056757806342683de214610587578063437823ec146105a757600080fd5b806318160ddd1161032357806324fcf8cf116102fd57806324fcf8cf146104f9578063313ce5671461050f5780633705b39214610531578063395093511461054757600080fd5b806318160ddd146104ae57806319dea646146104c357806323b872dd146104d957600080fd5b8063100759301161035f578063100759301461040b57806312eb7c791461044357806313114a9d146104655780631694505e1461047a57600080fd5b8062afb3251461039057806306fdde03146103b9578063095ea7b3146103db57600080fd5b3661038b57005b600080fd5b34801561039c57600080fd5b506103a6601e5481565b6040519081526020015b60405180910390f35b3480156103c557600080fd5b506103ce610a7d565b6040516103b09190612b3a565b3480156103e757600080fd5b506103fb6103f6366004612ba8565b610b0f565b60405190151581526020016103b0565b34801561041757600080fd5b5060085461042b906001600160a01b031681565b6040516001600160a01b0390911681526020016103b0565b34801561044f57600080fd5b5061046361045e366004612bd4565b610b26565b005b34801561047157600080fd5b506015546103a6565b34801561048657600080fd5b5061042b7f000000000000000000000000000000000000000000000000000000000000000081565b3480156104ba57600080fd5b506013546103a6565b3480156104cf57600080fd5b506103a6601f5481565b3480156104e557600080fd5b506103fb6104f4366004612c00565b610bbf565b34801561050557600080fd5b506103a6601c5481565b34801561051b57600080fd5b5060125460405160ff90911681526020016103b0565b34801561053d57600080fd5b506103a660195481565b34801561055357600080fd5b506103fb610562366004612ba8565b610c28565b34801561057357600080fd5b5060065461042b906001600160a01b031681565b34801561059357600080fd5b506103fb6105a2366004612c41565b610c5e565b3480156105b357600080fd5b506104636105c2366004612c41565b610cac565b3480156105d357600080fd5b506104636105e2366004612c5e565b610cfa565b3480156105f357600080fd5b506003546103fb9060ff1681565b34801561060d57600080fd5b5061042b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064157600080fd5b506026546103fb90610100900460ff1681565b34801561066057600080fd5b5061046361066f366004612c41565b610d89565b34801561068057600080fd5b5061046361068f366004612c87565b610dd7565b3480156106a057600080fd5b506103a6601d5481565b3480156106b657600080fd5b506103a660205481565b3480156106cc57600080fd5b506104636106db366004612c41565b610e2c565b3480156106ec57600080fd5b50610463610e78565b34801561070157600080fd5b506103a6610710366004612c41565b610f2d565b34801561072157600080fd5b50610463610f8c565b34801561073657600080fd5b506103a660245481565b34801561074c57600080fd5b506103a660235481565b34801561076257600080fd5b506103a6610771366004612c5e565b611000565b34801561078257600080fd5b506000546001600160a01b031661042b565b3480156107a057600080fd5b506104636107af366004612bd4565b611021565b3480156107c057600080fd5b506103ce6110d7565b3480156107d557600080fd5b506025546103a6565b3480156107ea57600080fd5b506103fb6107f9366004612ba8565b6110e6565b34801561080a57600080fd5b506103a6601b5481565b34801561082057600080fd5b506103fb61082f366004612ba8565b611135565b34801561084057600080fd5b5061046361084f366004612c5e565b611142565b34801561086057600080fd5b506103a660225481565b34801561087657600080fd5b50610463610885366004612d74565b611171565b34801561089657600080fd5b506104636108a5366004612db1565b611207565b3480156108b657600080fd5b5060055461042b906001600160a01b031681565b3480156108d657600080fd5b506103a660215481565b3480156108ec57600080fd5b5060075461042b906001600160a01b031681565b34801561090c57600080fd5b506103a660175481565b34801561092257600080fd5b50610463610931366004612bd4565b611285565b34801561094257600080fd5b50610463610951366004612d74565b611312565b34801561096257600080fd5b506103a6610971366004612dcc565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b3480156109a857600080fd5b506103a660165481565b3480156109be57600080fd5b506103a660185481565b3480156109d457600080fd5b506104636109e3366004612c41565b6113a4565b3480156109f457600080fd5b50610463610a03366004612e05565b6113ef565b348015610a1457600080fd5b50610463610a23366004612c5e565b611485565b348015610a3457600080fd5b50610463610a43366004612c41565b61150b565b348015610a5457600080fd5b506104636115f5565b348015610a6957600080fd5b50610463610a78366004612c41565b61162e565b606060108054610a8c90612e4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab890612e4a565b8015610b055780601f10610ada57610100808354040283529160200191610b05565b820191906000526020600020905b815481529060010190602001808311610ae857829003601f168201915b5050505050905090565b6000610b1c33848461167a565b5060015b92915050565b6000546001600160a01b03163314610b595760405162461bcd60e51b8152600401610b5090612e84565b60405180910390fd5b601f8390556020829055602181905580610b738385612ecf565b610b7d9190612ecf565b6022556000610b9682610b90868661179e565b9061179e565b90506064811115610bb95760405162461bcd60e51b8152600401610b5090612ee2565b50505050565b6000610bcc848484611804565b610c1e8433610c19856040518060600160405280602881526020016130b0602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611b38565b61167a565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610b1c918590610c19908661179e565b600080546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b5090612e84565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610cd65760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610d245760405162461bcd60e51b8152600401610b5090612e84565b6024819055601354610d4590600190610d3f90612710611b72565b90611bb4565b60245411610d865760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b50565b50565b6000546001600160a01b03163314610db35760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610e015760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e565760405162461bcd60e51b8152600401610b5090612e84565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ea25760405162461bcd60e51b8152600401610b5090612e84565b604051600090339047908381818185875af1925050503d8060008114610ee4576040519150601f19603f3d011682016040523d82523d6000602084013e610ee9565b606091505b5050905080610d865760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b50565b6001600160a01b0381166000908152600e602052604081205460ff1615610f6a57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610b2090611c36565b6000546001600160a01b03163314610fb65760405162461bcd60e51b8152600401610b5090612e84565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601a818154811061101057600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461104b5760405162461bcd60e51b8152600401610b5090612e84565b601683905560178290556018819055604080516060810182528481526020810184905290810182905261108290601a906003612ada565b50600061109382610b90868661179e565b90506018546017546016546110a89190612ecf565b6110b29190612ecf565b601955610258811115610bb95760405162461bcd60e51b8152600401610b5090612ee2565b606060118054610a8c90612e4a565b6000610b1c3384610c19856040518060600160405280602581526020016130d860259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611b38565b6000610b1c338484611804565b6000546001600160a01b0316331461116c5760405162461bcd60e51b8152600401610b5090612e84565b602555565b6000546001600160a01b0316331461119b5760405162461bcd60e51b8152600401610b5090612e84565b60005b8151811015611203576001600c60008484815181106111bf576111bf612f08565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806111fb81612f1e565b91505061119e565b5050565b6000546001600160a01b031633146112315760405162461bcd60e51b8152600401610b5090612e84565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061127a90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112af5760405162461bcd60e51b8152600401610b5090612e84565b601b839055601c829055601d81905560006112ce82610b90868661179e565b9050601d54601c54601b546112e39190612ecf565b6112ed9190612ecf565b601e55610258811115610bb95760405162461bcd60e51b8152600401610b5090612ee2565b6000546001600160a01b0316331461133c5760405162461bcd60e51b8152600401610b5090612e84565b60005b81518110156112035760016004600084848151811061136057611360612f08565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061139c81612f1e565b91505061133f565b6000546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b031633146114195760405162461bcd60e51b8152600401610b5090612e84565b60005b82518110156114805781600d600085848151811061143c5761143c612f08565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061147881612f1e565b91505061141c565b505050565b6000546001600160a01b031633146114af5760405162461bcd60e51b8152600401610b5090612e84565b60238190556013546114ca90600190610d3f90612710611b72565b6023541015610d865760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b50565b6000546001600160a01b031633146115355760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03811661159a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b50565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610b5090612e84565b6003805460ff19166001179055565b6000546001600160a01b031633146116585760405162461bcd60e51b8152600401610b5090612e84565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b50565b6001600160a01b03821661173d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b50565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806117ab8385612ecf565b9050838110156117fd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b50565b9392505050565b6003548390839060ff168061183157506001600160a01b03821660009081526004602052604090205460ff165b8061185457506001600160a01b03811660009081526004602052604090205460ff165b61188b5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b50565b6001600160a01b0385166118ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b50565b6001600160a01b0384166119515760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b50565b600083116119b35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b50565b6000546001600160a01b038681169116148015906119df57506000546001600160a01b03858116911614155b15611a4757602354831115611a475760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b50565b6000611a5230610f2d565b602554909150811015611a66878787611cb3565b60265460ff16158015611a805750602654610100900460ff165b8015611abe57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b15611ad7578015611ad7576025549150611ad782611daf565b6001600160a01b0387166000908152600c602052604090205460019060ff1680611b1957506001600160a01b0387166000908152600c602052604090205460ff165b15611b22575060005b611b2e88888884611f7c565b5050505050505050565b60008184841115611b5c5760405162461bcd60e51b8152600401610b509190612b3a565b506000611b698486612f37565b95945050505050565b60006117fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612184565b600082600003611bc657506000610b20565b6000611bd28385612f4a565b905082611bdf8583612f61565b146117fd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b50565b6000601454821115611c9d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b50565b6000611ca76121b2565b90506117fd8382611b72565b6000611cc282610b9085610f2d565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611d0757506001600160a01b0383166000908152600d602052604090205460ff16155b15611d2e57602454811115611d2e5760405162461bcd60e51b8152600401610b5090612f83565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015611d8857506001600160a01b0383166000908152600d602052604090205460ff16155b15610bb957602454811115610bb95760405162461bcd60e51b8152600401610b5090612f83565b6026805460ff19166001179055601854601754601654600092611dd7929091610b909161179e565b90506000611df8601d54610b90601c54601b5461179e90919063ffffffff16565b90506000611e06838361179e565b905080600003611e1857505050611f6f565b6000611e436002611e3d84611e3d601b54601654611e369190612ecf565b8a90611bb4565b90611b72565b90506000611e5186836121d5565b9050611e5c81612217565b60004790506000611e866002611e3d87611e3d601b54601654611e7f9190612ecf565b8790611bb4565b9050600084118015611e985750600081115b15611ea757611ea78482612410565b6000611ec786611e3d601c54601754611ec09190612ecf565b8690611bb4565b90508015611f0b576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f09573d6000803e3d6000fd5b505b6000611f2182611f1b86866121d5565b906121d5565b90508015611f65576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f63573d6000803e3d6000fd5b505b5050505050505050505b506026805460ff19169055565b80611f9a57611f95600060168190556017819055601855565b61207a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603611fea57611fea601b54601655601c54601755601d54601855565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161415801561205e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b1561207a5761207a601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff1680156120bb57506001600160a01b0383166000908152600e602052604090205460ff16155b156120d0576120cb8484846124f0565b61217c565b6001600160a01b0384166000908152600e602052604090205460ff1615801561211157506001600160a01b0383166000908152600e602052604090205460ff165b15612121576120cb848484612649565b6001600160a01b0384166000908152600e602052604090205460ff16801561216157506001600160a01b0383166000908152600e602052604090205460ff165b15612171576120cb8484846126ea565b61217c848484612755565b610bb9612791565b600081836121a55760405162461bcd60e51b8152600401610b509190612b3a565b506000611b698486612f61565b60008060006121bf612800565b90925090506121ce8282611b72565b9250505090565b60006117fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b38565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061224c5761224c612f08565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee9190612fcb565b8160018151811061230157612301612f08565b60200260200101906001600160a01b031690816001600160a01b03168152505061234c307f00000000000000000000000000000000000000000000000000000000000000008461167a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123a190859060009086903090429060040161302c565b600060405180830381600087803b1580156123bb57600080fd5b505af11580156123cf573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612404929190613068565b60405180910390a15050565b61243b307f00000000000000000000000000000000000000000000000000000000000000008461167a565b60405163f305d71960e01b8152306004820152602481018390526000604482018190526064820181905260848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156124c4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124e99190613081565b5050505050565b6000806000806124ff85612982565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061252c90866121d5565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461255b90856121d5565b6001600160a01b03808916600090815260096020526040808220939093559088168152205461258a908461179e565b6001600160a01b0387166000908152600960205260409020556125ac816129c0565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125f191815260200190565b60405180910390a380156126405760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b60008060008061265885612982565b6001600160a01b038b166000908152600960205260409020549397509195509350915061268590856121d5565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a90915220546126bb908361179e565b6001600160a01b0387166000908152600a602090815260408083209390935560099052205461258a908461179e565b6000806000806126f985612982565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061272690866121d5565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461268590856121d5565b60008060008061276485612982565b6001600160a01b038b166000908152600960205260409020549397509195509350915061255b90856121d5565b601a6000815481106127a5576127a5612f08565b9060005260206000200154601681905550601a6001815481106127ca576127ca612f08565b9060005260206000200154601781905550601a6002815481106127ef576127ef612f08565b600091825260209091200154601855565b6014546013546000918291825b600f54811015612952578260096000600f848154811061282f5761282f612f08565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061289a575081600a6000600f848154811061287357612873612f08565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128b057601454601354945094505050509091565b6128f660096000600f84815481106128ca576128ca612f08565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121d5565b925061293e600a6000600f848154811061291257612912612f08565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121d5565b91508061294a81612f1e565b91505061280d565b5060135460145461296291611b72565b821015612979576014546013549350935050509091565b90939092509050565b60008060008060008061299487612a48565b915091506000806129ad89846129a86121b2565b612a6f565b909a909950939750919550919350505050565b60006129ca6121b2565b905060006129d88383611bb4565b306000908152600960205260409020549091506129f5908261179e565b30600090815260096020908152604080832093909355600e9052205460ff161561148057306000908152600a6020526040902054612a33908461179e565b306000908152600a6020526040902055505050565b6000806000612a5684612aa8565b90506000612a6485836121d5565b959194509092505050565b60008080612a7d8685611bb4565b90506000612a8b8686611bb4565b90506000612a9983836121d5565b92989297509195505050505050565b600080612ac8601854610b9060175460165461179e90919063ffffffff16565b90506117fd6103e8611e3d8584611bb4565b828054828255906000526020600020908101928215612b15579160200282015b82811115612b15578251825591602001919060010190612afa565b50612b21929150612b25565b5090565b5b80821115612b215760008155600101612b26565b600060208083528351808285015260005b81811015612b6757858101830151858201604001528201612b4b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d8657600080fd5b8035610ca781612b88565b60008060408385031215612bbb57600080fd5b8235612bc681612b88565b946020939093013593505050565b600080600060608486031215612be957600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612c1557600080fd5b8335612c2081612b88565b92506020840135612c3081612b88565b929592945050506040919091013590565b600060208284031215612c5357600080fd5b81356117fd81612b88565b600060208284031215612c7057600080fd5b5035919050565b80358015158114610ca757600080fd5b60008060408385031215612c9a57600080fd5b8235612ca581612b88565b9150612cb360208401612c77565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612ce357600080fd5b8135602067ffffffffffffffff80831115612d0057612d00612cbc565b8260051b604051601f19603f83011681018181108482111715612d2557612d25612cbc565b604052938452858101830193838101925087851115612d4357600080fd5b83870191505b84821015612d6957612d5a82612b9d565b83529183019190830190612d49565b979650505050505050565b600060208284031215612d8657600080fd5b813567ffffffffffffffff811115612d9d57600080fd5b612da984828501612cd2565b949350505050565b600060208284031215612dc357600080fd5b6117fd82612c77565b60008060408385031215612ddf57600080fd5b8235612dea81612b88565b91506020830135612dfa81612b88565b809150509250929050565b60008060408385031215612e1857600080fd5b823567ffffffffffffffff811115612e2f57600080fd5b612e3b85828601612cd2565b925050612cb360208401612c77565b600181811c90821680612e5e57607f821691505b602082108103612e7e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b2057610b20612eb9565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201612f3057612f30612eb9565b5060010190565b81810381811115610b2057610b20612eb9565b8082028115828204841417610b2057610b20612eb9565b600082612f7e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b600060208284031215612fdd57600080fd5b81516117fd81612b88565b600081518084526020808501945080840160005b838110156130215781516001600160a01b031687529582019590820190600101612ffc565b509495945050505050565b85815284602082015260a06040820152600061304b60a0830186612fe8565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612da96040830184612fe8565b60008060006060848603121561309657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122081c4b643a6dd7a6624d5281c55bfff3923e234db60cdb6d7265b89f6a455803064736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103845760003560e01c806372b28e45116101d1578063c5f956af11610102578063dfb8b09b116100a0578063ec28438a1161006f578063ec28438a14610a08578063f2fde38b14610a28578063fb201b1d14610a48578063fce0f92814610a5d57600080fd5b8063dfb8b09b1461099c578063dfceb64d146109b2578063ea2f0b37146109c8578063ea377c2a146109e857600080fd5b8063d628df9c116100dc578063d628df9c14610900578063d6a694f514610916578063d6c0e80d14610936578063dd62ed3e1461095657600080fd5b8063c5f956af146108aa578063ccb7c4e0146108ca578063d4ee1d90146108e057600080fd5b8063a457c2d71161016f578063aee50b1e11610149578063aee50b1e14610834578063b863864c14610854578063bab184481461086a578063c49b9a801461088a57600080fd5b8063a457c2d7146107de578063a89e3556146107fe578063a9059cbb1461081457600080fd5b80638da5cb5b116101ab5780638da5cb5b1461077657806390a3dd9b1461079457806395d89b41146107b4578063a073d37f146107c957600080fd5b806372b28e451461072a5780637d1db4a5146107405780638986092d1461075657600080fd5b80633cf96af1116102b65780634b880e88116102545780636605bfda116102235780636605bfda146106c05780636fee4f7a146106e057806370a08231146106f5578063715018a61461071557600080fd5b80634b880e88146106545780634e3c06b1146106745780635d4445ce146106945780636411ff07146106aa57600080fd5b806344d4225f1161029057806344d4225f146105c757806347535d7b146105e757806349bd5a5e146106015780634a74bb021461063557600080fd5b80633cf96af11461056757806342683de214610587578063437823ec146105a757600080fd5b806318160ddd1161032357806324fcf8cf116102fd57806324fcf8cf146104f9578063313ce5671461050f5780633705b39214610531578063395093511461054757600080fd5b806318160ddd146104ae57806319dea646146104c357806323b872dd146104d957600080fd5b8063100759301161035f578063100759301461040b57806312eb7c791461044357806313114a9d146104655780631694505e1461047a57600080fd5b8062afb3251461039057806306fdde03146103b9578063095ea7b3146103db57600080fd5b3661038b57005b600080fd5b34801561039c57600080fd5b506103a6601e5481565b6040519081526020015b60405180910390f35b3480156103c557600080fd5b506103ce610a7d565b6040516103b09190612b3a565b3480156103e757600080fd5b506103fb6103f6366004612ba8565b610b0f565b60405190151581526020016103b0565b34801561041757600080fd5b5060085461042b906001600160a01b031681565b6040516001600160a01b0390911681526020016103b0565b34801561044f57600080fd5b5061046361045e366004612bd4565b610b26565b005b34801561047157600080fd5b506015546103a6565b34801561048657600080fd5b5061042b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156104ba57600080fd5b506013546103a6565b3480156104cf57600080fd5b506103a6601f5481565b3480156104e557600080fd5b506103fb6104f4366004612c00565b610bbf565b34801561050557600080fd5b506103a6601c5481565b34801561051b57600080fd5b5060125460405160ff90911681526020016103b0565b34801561053d57600080fd5b506103a660195481565b34801561055357600080fd5b506103fb610562366004612ba8565b610c28565b34801561057357600080fd5b5060065461042b906001600160a01b031681565b34801561059357600080fd5b506103fb6105a2366004612c41565b610c5e565b3480156105b357600080fd5b506104636105c2366004612c41565b610cac565b3480156105d357600080fd5b506104636105e2366004612c5e565b610cfa565b3480156105f357600080fd5b506003546103fb9060ff1681565b34801561060d57600080fd5b5061042b7f00000000000000000000000094e0c7fdaf4bf32ef1aefd0595dcda428b65a95181565b34801561064157600080fd5b506026546103fb90610100900460ff1681565b34801561066057600080fd5b5061046361066f366004612c41565b610d89565b34801561068057600080fd5b5061046361068f366004612c87565b610dd7565b3480156106a057600080fd5b506103a6601d5481565b3480156106b657600080fd5b506103a660205481565b3480156106cc57600080fd5b506104636106db366004612c41565b610e2c565b3480156106ec57600080fd5b50610463610e78565b34801561070157600080fd5b506103a6610710366004612c41565b610f2d565b34801561072157600080fd5b50610463610f8c565b34801561073657600080fd5b506103a660245481565b34801561074c57600080fd5b506103a660235481565b34801561076257600080fd5b506103a6610771366004612c5e565b611000565b34801561078257600080fd5b506000546001600160a01b031661042b565b3480156107a057600080fd5b506104636107af366004612bd4565b611021565b3480156107c057600080fd5b506103ce6110d7565b3480156107d557600080fd5b506025546103a6565b3480156107ea57600080fd5b506103fb6107f9366004612ba8565b6110e6565b34801561080a57600080fd5b506103a6601b5481565b34801561082057600080fd5b506103fb61082f366004612ba8565b611135565b34801561084057600080fd5b5061046361084f366004612c5e565b611142565b34801561086057600080fd5b506103a660225481565b34801561087657600080fd5b50610463610885366004612d74565b611171565b34801561089657600080fd5b506104636108a5366004612db1565b611207565b3480156108b657600080fd5b5060055461042b906001600160a01b031681565b3480156108d657600080fd5b506103a660215481565b3480156108ec57600080fd5b5060075461042b906001600160a01b031681565b34801561090c57600080fd5b506103a660175481565b34801561092257600080fd5b50610463610931366004612bd4565b611285565b34801561094257600080fd5b50610463610951366004612d74565b611312565b34801561096257600080fd5b506103a6610971366004612dcc565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b3480156109a857600080fd5b506103a660165481565b3480156109be57600080fd5b506103a660185481565b3480156109d457600080fd5b506104636109e3366004612c41565b6113a4565b3480156109f457600080fd5b50610463610a03366004612e05565b6113ef565b348015610a1457600080fd5b50610463610a23366004612c5e565b611485565b348015610a3457600080fd5b50610463610a43366004612c41565b61150b565b348015610a5457600080fd5b506104636115f5565b348015610a6957600080fd5b50610463610a78366004612c41565b61162e565b606060108054610a8c90612e4a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ab890612e4a565b8015610b055780601f10610ada57610100808354040283529160200191610b05565b820191906000526020600020905b815481529060010190602001808311610ae857829003601f168201915b5050505050905090565b6000610b1c33848461167a565b5060015b92915050565b6000546001600160a01b03163314610b595760405162461bcd60e51b8152600401610b5090612e84565b60405180910390fd5b601f8390556020829055602181905580610b738385612ecf565b610b7d9190612ecf565b6022556000610b9682610b90868661179e565b9061179e565b90506064811115610bb95760405162461bcd60e51b8152600401610b5090612ee2565b50505050565b6000610bcc848484611804565b610c1e8433610c19856040518060600160405280602881526020016130b0602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611b38565b61167a565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610b1c918590610c19908661179e565b600080546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b5090612e84565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610cd65760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610d245760405162461bcd60e51b8152600401610b5090612e84565b6024819055601354610d4590600190610d3f90612710611b72565b90611bb4565b60245411610d865760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b50565b50565b6000546001600160a01b03163314610db35760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610e015760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610e565760405162461bcd60e51b8152600401610b5090612e84565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610ea25760405162461bcd60e51b8152600401610b5090612e84565b604051600090339047908381818185875af1925050503d8060008114610ee4576040519150601f19603f3d011682016040523d82523d6000602084013e610ee9565b606091505b5050905080610d865760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b50565b6001600160a01b0381166000908152600e602052604081205460ff1615610f6a57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610b2090611c36565b6000546001600160a01b03163314610fb65760405162461bcd60e51b8152600401610b5090612e84565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b601a818154811061101057600080fd5b600091825260209091200154905081565b6000546001600160a01b0316331461104b5760405162461bcd60e51b8152600401610b5090612e84565b601683905560178290556018819055604080516060810182528481526020810184905290810182905261108290601a906003612ada565b50600061109382610b90868661179e565b90506018546017546016546110a89190612ecf565b6110b29190612ecf565b601955610258811115610bb95760405162461bcd60e51b8152600401610b5090612ee2565b606060118054610a8c90612e4a565b6000610b1c3384610c19856040518060600160405280602581526020016130d860259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611b38565b6000610b1c338484611804565b6000546001600160a01b0316331461116c5760405162461bcd60e51b8152600401610b5090612e84565b602555565b6000546001600160a01b0316331461119b5760405162461bcd60e51b8152600401610b5090612e84565b60005b8151811015611203576001600c60008484815181106111bf576111bf612f08565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806111fb81612f1e565b91505061119e565b5050565b6000546001600160a01b031633146112315760405162461bcd60e51b8152600401610b5090612e84565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061127a90831515815260200190565b60405180910390a150565b6000546001600160a01b031633146112af5760405162461bcd60e51b8152600401610b5090612e84565b601b839055601c829055601d81905560006112ce82610b90868661179e565b9050601d54601c54601b546112e39190612ecf565b6112ed9190612ecf565b601e55610258811115610bb95760405162461bcd60e51b8152600401610b5090612ee2565b6000546001600160a01b0316331461133c5760405162461bcd60e51b8152600401610b5090612e84565b60005b81518110156112035760016004600084848151811061136057611360612f08565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061139c81612f1e565b91505061133f565b6000546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b031633146114195760405162461bcd60e51b8152600401610b5090612e84565b60005b82518110156114805781600d600085848151811061143c5761143c612f08565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061147881612f1e565b91505061141c565b505050565b6000546001600160a01b031633146114af5760405162461bcd60e51b8152600401610b5090612e84565b60238190556013546114ca90600190610d3f90612710611b72565b6023541015610d865760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b50565b6000546001600160a01b031633146115355760405162461bcd60e51b8152600401610b5090612e84565b6001600160a01b03811661159a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b50565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461161f5760405162461bcd60e51b8152600401610b5090612e84565b6003805460ff19166001179055565b6000546001600160a01b031633146116585760405162461bcd60e51b8152600401610b5090612e84565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166116dc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b50565b6001600160a01b03821661173d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b50565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000806117ab8385612ecf565b9050838110156117fd5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b50565b9392505050565b6003548390839060ff168061183157506001600160a01b03821660009081526004602052604090205460ff165b8061185457506001600160a01b03811660009081526004602052604090205460ff165b61188b5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b50565b6001600160a01b0385166118ef5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b50565b6001600160a01b0384166119515760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b50565b600083116119b35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b50565b6000546001600160a01b038681169116148015906119df57506000546001600160a01b03858116911614155b15611a4757602354831115611a475760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b50565b6000611a5230610f2d565b602554909150811015611a66878787611cb3565b60265460ff16158015611a805750602654610100900460ff165b8015611abe57507f00000000000000000000000094e0c7fdaf4bf32ef1aefd0595dcda428b65a9516001600160a01b0316876001600160a01b031614155b15611ad7578015611ad7576025549150611ad782611daf565b6001600160a01b0387166000908152600c602052604090205460019060ff1680611b1957506001600160a01b0387166000908152600c602052604090205460ff165b15611b22575060005b611b2e88888884611f7c565b5050505050505050565b60008184841115611b5c5760405162461bcd60e51b8152600401610b509190612b3a565b506000611b698486612f37565b95945050505050565b60006117fd83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612184565b600082600003611bc657506000610b20565b6000611bd28385612f4a565b905082611bdf8583612f61565b146117fd5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b50565b6000601454821115611c9d5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b50565b6000611ca76121b2565b90506117fd8382611b72565b6000611cc282610b9085610f2d565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611d0757506001600160a01b0383166000908152600d602052604090205460ff16155b15611d2e57602454811115611d2e5760405162461bcd60e51b8152600401610b5090612f83565b7f00000000000000000000000094e0c7fdaf4bf32ef1aefd0595dcda428b65a9516001600160a01b0316846001600160a01b0316148015611d8857506001600160a01b0383166000908152600d602052604090205460ff16155b15610bb957602454811115610bb95760405162461bcd60e51b8152600401610b5090612f83565b6026805460ff19166001179055601854601754601654600092611dd7929091610b909161179e565b90506000611df8601d54610b90601c54601b5461179e90919063ffffffff16565b90506000611e06838361179e565b905080600003611e1857505050611f6f565b6000611e436002611e3d84611e3d601b54601654611e369190612ecf565b8a90611bb4565b90611b72565b90506000611e5186836121d5565b9050611e5c81612217565b60004790506000611e866002611e3d87611e3d601b54601654611e7f9190612ecf565b8790611bb4565b9050600084118015611e985750600081115b15611ea757611ea78482612410565b6000611ec786611e3d601c54601754611ec09190612ecf565b8690611bb4565b90508015611f0b576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f09573d6000803e3d6000fd5b505b6000611f2182611f1b86866121d5565b906121d5565b90508015611f65576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611f63573d6000803e3d6000fd5b505b5050505050505050505b506026805460ff19169055565b80611f9a57611f95600060168190556017819055601855565b61207a565b7f00000000000000000000000094e0c7fdaf4bf32ef1aefd0595dcda428b65a9516001600160a01b0316836001600160a01b031603611fea57611fea601b54601655601c54601755601d54601855565b7f00000000000000000000000094e0c7fdaf4bf32ef1aefd0595dcda428b65a9516001600160a01b0316846001600160a01b03161415801561205e57507f00000000000000000000000094e0c7fdaf4bf32ef1aefd0595dcda428b65a9516001600160a01b0316836001600160a01b031614155b1561207a5761207a601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff1680156120bb57506001600160a01b0383166000908152600e602052604090205460ff16155b156120d0576120cb8484846124f0565b61217c565b6001600160a01b0384166000908152600e602052604090205460ff1615801561211157506001600160a01b0383166000908152600e602052604090205460ff165b15612121576120cb848484612649565b6001600160a01b0384166000908152600e602052604090205460ff16801561216157506001600160a01b0383166000908152600e602052604090205460ff165b15612171576120cb8484846126ea565b61217c848484612755565b610bb9612791565b600081836121a55760405162461bcd60e51b8152600401610b509190612b3a565b506000611b698486612f61565b60008060006121bf612800565b90925090506121ce8282611b72565b9250505090565b60006117fd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b38565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061224c5761224c612f08565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee9190612fcb565b8160018151811061230157612301612f08565b60200260200101906001600160a01b031690816001600160a01b03168152505061234c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461167a565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906123a190859060009086903090429060040161302c565b600060405180830381600087803b1580156123bb57600080fd5b505af11580156123cf573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051612404929190613068565b60405180910390a15050565b61243b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461167a565b60405163f305d71960e01b8152306004820152602481018390526000604482018190526064820181905260848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03169063f305d71990839060c40160606040518083038185885af11580156124c4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906124e99190613081565b5050505050565b6000806000806124ff85612982565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061252c90866121d5565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461255b90856121d5565b6001600160a01b03808916600090815260096020526040808220939093559088168152205461258a908461179e565b6001600160a01b0387166000908152600960205260409020556125ac816129c0565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125f191815260200190565b60405180910390a380156126405760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b60008060008061265885612982565b6001600160a01b038b166000908152600960205260409020549397509195509350915061268590856121d5565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a90915220546126bb908361179e565b6001600160a01b0387166000908152600a602090815260408083209390935560099052205461258a908461179e565b6000806000806126f985612982565b6001600160a01b038b166000908152600a60205260409020549397509195509350915061272690866121d5565b6001600160a01b0388166000908152600a602090815260408083209390935560099052205461268590856121d5565b60008060008061276485612982565b6001600160a01b038b166000908152600960205260409020549397509195509350915061255b90856121d5565b601a6000815481106127a5576127a5612f08565b9060005260206000200154601681905550601a6001815481106127ca576127ca612f08565b9060005260206000200154601781905550601a6002815481106127ef576127ef612f08565b600091825260209091200154601855565b6014546013546000918291825b600f54811015612952578260096000600f848154811061282f5761282f612f08565b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061289a575081600a6000600f848154811061287357612873612f08565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128b057601454601354945094505050509091565b6128f660096000600f84815481106128ca576128ca612f08565b60009182526020808320909101546001600160a01b0316835282019290925260400190205484906121d5565b925061293e600a6000600f848154811061291257612912612f08565b60009182526020808320909101546001600160a01b0316835282019290925260400190205483906121d5565b91508061294a81612f1e565b91505061280d565b5060135460145461296291611b72565b821015612979576014546013549350935050509091565b90939092509050565b60008060008060008061299487612a48565b915091506000806129ad89846129a86121b2565b612a6f565b909a909950939750919550919350505050565b60006129ca6121b2565b905060006129d88383611bb4565b306000908152600960205260409020549091506129f5908261179e565b30600090815260096020908152604080832093909355600e9052205460ff161561148057306000908152600a6020526040902054612a33908461179e565b306000908152600a6020526040902055505050565b6000806000612a5684612aa8565b90506000612a6485836121d5565b959194509092505050565b60008080612a7d8685611bb4565b90506000612a8b8686611bb4565b90506000612a9983836121d5565b92989297509195505050505050565b600080612ac8601854610b9060175460165461179e90919063ffffffff16565b90506117fd6103e8611e3d8584611bb4565b828054828255906000526020600020908101928215612b15579160200282015b82811115612b15578251825591602001919060010190612afa565b50612b21929150612b25565b5090565b5b80821115612b215760008155600101612b26565b600060208083528351808285015260005b81811015612b6757858101830151858201604001528201612b4b565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610d8657600080fd5b8035610ca781612b88565b60008060408385031215612bbb57600080fd5b8235612bc681612b88565b946020939093013593505050565b600080600060608486031215612be957600080fd5b505081359360208301359350604090920135919050565b600080600060608486031215612c1557600080fd5b8335612c2081612b88565b92506020840135612c3081612b88565b929592945050506040919091013590565b600060208284031215612c5357600080fd5b81356117fd81612b88565b600060208284031215612c7057600080fd5b5035919050565b80358015158114610ca757600080fd5b60008060408385031215612c9a57600080fd5b8235612ca581612b88565b9150612cb360208401612c77565b90509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612ce357600080fd5b8135602067ffffffffffffffff80831115612d0057612d00612cbc565b8260051b604051601f19603f83011681018181108482111715612d2557612d25612cbc565b604052938452858101830193838101925087851115612d4357600080fd5b83870191505b84821015612d6957612d5a82612b9d565b83529183019190830190612d49565b979650505050505050565b600060208284031215612d8657600080fd5b813567ffffffffffffffff811115612d9d57600080fd5b612da984828501612cd2565b949350505050565b600060208284031215612dc357600080fd5b6117fd82612c77565b60008060408385031215612ddf57600080fd5b8235612dea81612b88565b91506020830135612dfa81612b88565b809150509250929050565b60008060408385031215612e1857600080fd5b823567ffffffffffffffff811115612e2f57600080fd5b612e3b85828601612cd2565b925050612cb360208401612c77565b600181811c90821680612e5e57607f821691505b602082108103612e7e57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b2057610b20612eb9565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b600060018201612f3057612f30612eb9565b5060010190565b81810381811115610b2057610b20612eb9565b8082028115828204841417610b2057610b20612eb9565b600082612f7e57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b600060208284031215612fdd57600080fd5b81516117fd81612b88565b600081518084526020808501945080840160005b838110156130215781516001600160a01b031687529582019590820190600101612ffc565b509495945050505050565b85815284602082015260a06040820152600061304b60a0830186612fe8565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612da96040830184612fe8565b60008060006060848603121561309657600080fd5b835192506020840151915060408401519050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122081c4b643a6dd7a6624d5281c55bfff3923e234db60cdb6d7265b89f6a455803064736f6c63430008130033

Deployed Bytecode Sourcemap

6792:22399:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8423:90;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;8423:90:0;;;;;;;;10196:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11158:186::-;;;;;;;;;;-1:-1:-1;11158:186:0;;;;;:::i;:::-;;:::i;:::-;;;1509:14:1;;1502:22;1484:41;;1472:2;1457:18;11158:186:0;1344:187:1;7171:78:0;;;;;;;;;;-1:-1:-1;7171:78:0;;;;-1:-1:-1;;;;;7171:78:0;;;;;;-1:-1:-1;;;;;1700:32:1;;;1682:51;;1670:2;1655:18;7171:78:0;1536:203:1;25988:480:0;;;;;;;;;;-1:-1:-1;25988:480:0;;;;;:::i;:::-;;:::i;:::-;;12508:87;;;;;;;;;;-1:-1:-1;12577:10:0;;12508:87;;8990:51;;;;;;;;;;;;;;;10473:95;;;;;;;;;;-1:-1:-1;10553:7:0;;10473:95;;8522:32;;;;;;;;;;;;;;;;11352:446;;;;;;;;;;-1:-1:-1;11352:446:0;;;;;:::i;:::-;;:::i;8337:37::-;;;;;;;;;;;;;;;;10382:83;;;;;;;;;;-1:-1:-1;10448:9:0;;10382:83;;10448:9;;;;2902:36:1;;2890:2;2875:18;10382:83:0;2760:184:1;8080:86:0;;;;;;;;;;;;;;;;11806:293;;;;;;;;;;-1:-1:-1;11806:293:0;;;;;:::i;:::-;;:::i;6989:100::-;;;;;;;;;;-1:-1:-1;6989:100:0;;;;-1:-1:-1;;;;;6989:100:0;;;23672:148;;;;;;;;;;-1:-1:-1;23672:148:0;;;;;:::i;:::-;;:::i;23828:110::-;;;;;;;;;;-1:-1:-1;23828:110:0;;;;;:::i;:::-;;:::i;28718:244::-;;;;;;;;;;-1:-1:-1;28718:244:0;;;;;:::i;:::-;;:::i;6032:26::-;;;;;;;;;;-1:-1:-1;6032:26:0;;;;;;;;9048:38;;;;;;;;;;;;;;;9123:40;;;;;;;;;;-1:-1:-1;9123:40:0;;;;;;;;;;;6452:109;;;;;;;;;;-1:-1:-1;6452:109:0;;;;;:::i;:::-;;:::i;28289:163::-;;;;;;;;;;-1:-1:-1;28289:163:0;;;;;:::i;:::-;;:::i;8381:35::-;;;;;;;;;;;;;;;;8561:34;;;;;;;;;;;;;;;;26853:135;;;;;;;;;;-1:-1:-1;26853:135:0;;;;;:::i;:::-;;:::i;28970:181::-;;;;;;;;;;;;;:::i;10576:198::-;;;;;;;;;;-1:-1:-1;10576:198:0;;;;;:::i;:::-;;:::i;4055:148::-;;;;;;;;;;;;;:::i;8823:63::-;;;;;;;;;;;;;;;;8742:53;;;;;;;;;;;;;;;;8173:115;;;;;;;;;;-1:-1:-1;8173:115:0;;;;;:::i;:::-;;:::i;3841:79::-;;;;;;;;;;-1:-1:-1;3879:7:0;3906:6;-1:-1:-1;;;;;3906:6:0;3841:79;;24949:545;;;;;;;;;;-1:-1:-1;24949:545:0;;;;;:::i;:::-;;:::i;10287:87::-;;;;;;;;;;;;;:::i;12603:120::-;;;;;;;;;;-1:-1:-1;12692:23:0;;12603:120;;12107:393;;;;;;;;;;-1:-1:-1;12107:393:0;;;;;:::i;:::-;;:::i;8297:33::-;;;;;;;;;;;;;;;;10782:192;;;;;;;;;;-1:-1:-1;10782:192:0;;;;;:::i;:::-;;:::i;26671:174::-;;;;;;;;;;-1:-1:-1;26671:174:0;;;;;:::i;:::-;;:::i;8642:91::-;;;;;;;;;;;;;;;;23946:197;;;;;;;;;;-1:-1:-1;23946:197:0;;;;;:::i;:::-;;:::i;27135:171::-;;;;;;;;;;-1:-1:-1;27135:171:0;;;;;:::i;:::-;;:::i;6881:101::-;;;;;;;;;;-1:-1:-1;6881:101:0;;;;-1:-1:-1;;;;;6881:101:0;;;8602:33;;;;;;;;;;;;;;;;7096:68;;;;;;;;;;-1:-1:-1;7096:68:0;;;;-1:-1:-1;;;;;7096:68:0;;;7994:36;;;;;;;;;;;;;;;;25502:478;;;;;;;;;;-1:-1:-1;25502:478:0;;;;;:::i;:::-;;:::i;6569:216::-;;;;;;;;;;-1:-1:-1;6569:216:0;;;;;:::i;:::-;;:::i;10982:168::-;;;;;;;;;;-1:-1:-1;10982:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;11115:18:0;;;11088:7;11115:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10982:168;7955:32;;;;;;;;;;;;;;;;8037:34;;;;;;;;;;;;;;;;24151:109;;;;;;;;;;-1:-1:-1;24151:109:0;;;;;:::i;:::-;;:::i;28460:250::-;;;;;;;;;;-1:-1:-1;28460:250:0;;;;;:::i;:::-;;:::i;26476:187::-;;;;;;;;;;-1:-1:-1;26476:187:0;;;;;:::i;:::-;;:::i;4211:281::-;;;;;;;;;;-1:-1:-1;4211:281:0;;;;;:::i;:::-;;:::i;6372:72::-;;;;;;;;;;;;;:::i;26996:131::-;;;;;;;;;;-1:-1:-1;26996:131:0;;;;;:::i;:::-;;:::i;10196:83::-;10233:13;10266:5;10259:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10196:83;:::o;11158:186::-;11258:4;11275:39;700:10;11298:7;11307:6;11275:8;:39::i;:::-;-1:-1:-1;11332:4:0;11158:186;;;;;:::o;25988:480::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;;;;;;;;;26150:13:::1;:26:::0;;;26187:15:::1;:30:::0;;;26228:14:::1;:28:::0;;;26245:11;26286:31:::1;26205:12:::0;26166:10;26286:31:::1;:::i;:::-;:48;;;;:::i;:::-;26267:16;:67:::0;26345:16:::1;26364:45;26397:11:::0;26364:28:::1;:10:::0;26379:12;26364:14:::1;:28::i;:::-;:32:::0;::::1;:45::i;:::-;26345:64;;26440:3;26428:8;:15;;26420:40;;;;-1:-1:-1::0;;;26420:40:0::1;;;;;;;:::i;:::-;26139:329;25988:480:::0;;;:::o;11352:446::-;11484:4;11501:36;11511:6;11519:9;11530:6;11501:9;:36::i;:::-;11548:220;11571:6;700:10;11619:138;11675:6;11619:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11619:19:0;;;;;;:11;:19;;;;;;;;700:10;11619:33;;;;;;;;;;:37;:138::i;:::-;11548:8;:220::i;:::-;-1:-1:-1;11786:4:0;11352:446;;;;;:::o;11806:293::-;700:10;11919:4;12008:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12008:34:0;;;;;;;;;;11919:4;;11936:133;;11986:7;;12008:50;;12047:10;12008:38;:50::i;23672:148::-;23762:4;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23786:26:0;::::1;;::::0;;;:17:::1;:26;::::0;;;;;::::1;;4038:1;23672:148:::0;;;:::o;23828:110::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23897:26:0::1;;::::0;;;:17:::1;:26;::::0;;;;:33;;-1:-1:-1;;23897:33:0::1;23926:4;23897:33;::::0;;23828:110::o;28718:244::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;28797:22:::1;:32:::0;;;28887:7:::1;::::0;:25:::1;::::0;28910:1:::1;::::0;28887:18:::1;::::0;28899:5:::1;28887:11;:18::i;:::-;:22:::0;::::1;:25::i;:::-;28862:22;;:50;28840:114;;;::::0;-1:-1:-1;;;28840:114:0;;8043:2:1;28840:114:0::1;::::0;::::1;8025:21:1::0;8082:2;8062:18;;;8055:30;-1:-1:-1;;;8101:18:1;;;8094:44;8155:18;;28840:114:0::1;7841:338:1::0;28840:114:0::1;28718:244:::0;:::o;6452:109::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6526:20:0::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;6526:27:0::1;6549:4;6526:27;::::0;;6452:109::o;28289:163::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28404:29:0;;;::::1;;::::0;;;:20:::1;:29;::::0;;;;:40;;-1:-1:-1;;28404:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28289:163::o;26853:135::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;26937:15:::1;:43:::0;;-1:-1:-1;;;;;;26937:43:0::1;-1:-1:-1::0;;;;;26937:43:0;;;::::1;::::0;;;::::1;::::0;;26853:135::o;28970:181::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;29047:49:::1;::::0;29029:12:::1;::::0;29047:10:::1;::::0;29070:21:::1;::::0;29029:12;29047:49;29029:12;29047:49;29070:21;29047:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29028:68;;;29115:7;29107:36;;;::::0;-1:-1:-1;;;29107:36:0;;8596:2:1;29107:36:0::1;::::0;::::1;8578:21:1::0;8635:2;8615:18;;;8608:30;-1:-1:-1;;;8654:18:1;;;8647:46;8710:18;;29107:36:0::1;8394:340:1::0;10576:198:0;-1:-1:-1;;;;;10666:20:0;;10642:7;10666:20;;;:11;:20;;;;;;;;10662:49;;;-1:-1:-1;;;;;;10695:16:0;;;;;:7;:16;;;;;;;10576:198::o;10662:49::-;-1:-1:-1;;;;;10749:16:0;;;;;;:7;:16;;;;;;10729:37;;:19;:37::i;4055:148::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;4162:1:::1;4146:6:::0;;4125:40:::1;::::0;-1:-1:-1;;;;;4146:6:0;;::::1;::::0;4125:40:::1;::::0;4162:1;;4125:40:::1;4193:1;4176:19:::0;;-1:-1:-1;;;;;;4176:19:0::1;::::0;;4055:148::o;8173:115::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8173:115:0;:::o;24949:545::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;25106:13:::1;:26:::0;;;25143:15:::1;:30:::0;;;25184:14:::1;:28:::0;;;25223:64:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;:13:::1;::::0;:64:::1;;:::i;:::-;-1:-1:-1::0;25298:16:0::1;25317:45;25350:11:::0;25317:28:::1;:10:::0;25332:12;25317:14:::1;:28::i;:45::-;25298:64;;25421:14;;25403:15;;25387:13;;:31;;;;:::i;:::-;:48;;;;:::i;:::-;25373:11;:62:::0;25466:3:::1;25454:15:::0;::::1;;25446:40;;;;-1:-1:-1::0;;;25446:40:0::1;;;;;;;:::i;10287:87::-:0;10326:13;10359:7;10352:14;;;;;:::i;12107:393::-;12225:4;12242:228;700:10;12292:7;12314:145;12371:15;12314:145;;;;;;;;;;;;;;;;;700:10;12314:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12314:34:0;;;;;;;;;;;;:38;:145::i;10782:192::-;10885:4;10902:42;700:10;10926:9;10937:6;10902:9;:42::i;26671:174::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;26787:23:::1;:50:::0;26671:174::o;23946:197::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;24034:6:::1;24029:107;24050:8;:15;24046:1;:19;24029:107;;;24120:4;24087:17;:30;24105:8;24114:1;24105:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;24087:30:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;24087:30:0;:37;;-1:-1:-1;;24087:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24067:3;::::1;::::0;::::1;:::i;:::-;;;;24029:107;;;;23946:197:::0;:::o;27135:171::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;27212:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;27212:32:0;;::::1;;::::0;;27260:38:::1;::::0;::::1;::::0;::::1;::::0;27236:8;1509:14:1;1502:22;1484:41;;1472:2;1457:18;;1344:187;27260:38:0::1;;;;;;;;27135:171:::0;:::o;25502:478::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;25660:14:::1;:27:::0;;;25698:16:::1;:31:::0;;;25740:15:::1;:29:::0;;;-1:-1:-1;25799:45:0::1;25758:11:::0;25799:28:::1;25677:10:::0;25717:12;25799:14:::1;:28::i;:45::-;25780:64;;25906:15;;25887:16;;25870:14;;:33;;;;:::i;:::-;:51;;;;:::i;:::-;25855:12;:66:::0;25952:3:::1;25940:15:::0;::::1;;25932:40;;;;-1:-1:-1::0;;;25932:40:0::1;;;;;;;:::i;6569:216::-:0;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;6679:6:::1;6674:104;6695:10;:17;6691:1;:21;6674:104;;;6762:4;6734:10;:25;6745:10;6756:1;6745:13;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;6734:25:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;6734:25:0;:32;;-1:-1:-1;;6734:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;6714:3;::::1;::::0;::::1;:::i;:::-;;;;6674:104;;24151:109:::0;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24218:26:0::1;24247:5;24218:26:::0;;;:17:::1;:26;::::0;;;;:34;;-1:-1:-1;;24218:34:0::1;::::0;;24151:109::o;28460:250::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;28594:6:::1;28589:114;28610:8;:15;28606:1;:19;28589:114;;;28683:8;28647:20;:33;28668:8;28677:1;28668:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;28647:33:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;28647:33:0;:44;;-1:-1:-1;;28647:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28627:3;::::1;::::0;::::1;:::i;:::-;;;;28589:114;;;;28460:250:::0;;:::o;26476:187::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;26551:12:::1;:26:::0;;;26612:7:::1;::::0;:25:::1;::::0;26635:1:::1;::::0;26612:18:::1;::::0;26624:5:::1;26612:11;:18::i;:25::-;26596:12;;:41;;26588:67;;;::::0;-1:-1:-1;;;26588:67:0;;9213:2:1;26588:67:0::1;::::0;::::1;9195:21:1::0;9252:2;9232:18;;;9225:30;-1:-1:-1;;;9271:18:1;;;9264:43;9324:18;;26588:67:0::1;9011:337:1::0;4211:281:0;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;4314:22:0;::::1;4292:110;;;::::0;-1:-1:-1;;;4292:110:0;;9555:2:1;4292:110:0::1;::::0;::::1;9537:21:1::0;9594:2;9574:18;;;9567:30;9633:34;9613:18;;;9606:62;-1:-1:-1;;;9684:18:1;;;9677:36;9730:19;;4292:110:0::1;9353:402:1::0;4292:110:0::1;4439:6;::::0;;4418:38:::1;::::0;-1:-1:-1;;;;;4418:38:0;;::::1;::::0;4439:6;::::1;::::0;4418:38:::1;::::0;::::1;4467:6;:17:::0;;-1:-1:-1;;;;;;4467:17:0::1;-1:-1:-1::0;;;;;4467:17:0;;;::::1;::::0;;;::::1;::::0;;4211:281::o;6372:72::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;6423:6:::1;:13:::0;;-1:-1:-1;;6423:13:0::1;6432:4;6423:13;::::0;;6372:72::o;26996:131::-;3968:6;;-1:-1:-1;;;;;3968:6:0;700:10;3968:22;3960:67;;;;-1:-1:-1;;;3960:67:0;;;;;;;:::i;:::-;27078:14:::1;:41:::0;;-1:-1:-1;;;;;;27078:41:0::1;-1:-1:-1::0;;;;;27078:41:0;;;::::1;::::0;;;::::1;::::0;;26996:131::o;13046:335::-;-1:-1:-1;;;;;13139:19:0;;13131:68;;;;-1:-1:-1;;;13131:68:0;;9962:2:1;13131:68:0;;;9944:21:1;10001:2;9981:18;;;9974:30;10040:34;10020:18;;;10013:62;-1:-1:-1;;;10091:18:1;;;10084:34;10135:19;;13131:68:0;9760:400:1;13131:68:0;-1:-1:-1;;;;;13218:21:0;;13210:68;;;;-1:-1:-1;;;13210:68:0;;10367:2:1;13210:68:0;;;10349:21:1;10406:2;10386:18;;;10379:30;10445:34;10425:18;;;10418:62;-1:-1:-1;;;10496:18:1;;;10489:32;10538:19;;13210:68:0;10165:398:1;13210:68:0;-1:-1:-1;;;;;13289:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;13341:32;;160:25:1;;;13341:32:0;;133:18:1;13341:32:0;;;;;;;13046:335;;;:::o;1798:181::-;1856:7;;1888:5;1892:1;1888;:5;:::i;:::-;1876:17;;1917:1;1912;:6;;1904:46;;;;-1:-1:-1;;;1904:46:0;;10770:2:1;1904:46:0;;;10752:21:1;10809:2;10789:18;;;10782:30;10848:29;10828:18;;;10821:57;10895:18;;1904:46:0;10568:351:1;1904:46:0;1970:1;1798:181;-1:-1:-1;;;1798:181:0:o;13389:1339::-;6174:6;;13497:4;;13503:2;;6174:6;;;:26;;-1:-1:-1;;;;;;6184:16:0;;;;;;:10;:16;;;;;;;;6174:26;:44;;;-1:-1:-1;;;;;;6204:14:0;;;;;;:10;:14;;;;;;;;6174:44;6166:65;;;;-1:-1:-1;;;6166:65:0;;11126:2:1;6166:65:0;;;11108:21:1;11165:1;11145:18;;;11138:29;-1:-1:-1;;;11183:18:1;;;11176:38;11231:18;;6166:65:0;10924:331:1;6166:65:0;-1:-1:-1;;;;;13526:18:0;::::1;13518:68;;;::::0;-1:-1:-1;;;13518:68:0;;11462:2:1;13518:68:0::1;::::0;::::1;11444:21:1::0;11501:2;11481:18;;;11474:30;11540:34;11520:18;;;11513:62;-1:-1:-1;;;11591:18:1;;;11584:35;11636:19;;13518:68:0::1;11260:401:1::0;13518:68:0::1;-1:-1:-1::0;;;;;13605:16:0;::::1;13597:64;;;::::0;-1:-1:-1;;;13597:64:0;;11868:2:1;13597:64:0::1;::::0;::::1;11850:21:1::0;11907:2;11887:18;;;11880:30;11946:34;11926:18;;;11919:62;-1:-1:-1;;;11997:18:1;;;11990:33;12040:19;;13597:64:0::1;11666:399:1::0;13597:64:0::1;13689:1;13680:6;:10;13672:64;;;::::0;-1:-1:-1;;;13672:64:0;;12272:2:1;13672:64:0::1;::::0;::::1;12254:21:1::0;12311:2;12291:18;;;12284:30;12350:34;12330:18;;;12323:62;-1:-1:-1;;;12401:18:1;;;12394:39;12450:19;;13672:64:0::1;12070:405:1::0;13672:64:0::1;3879:7:::0;3906:6;-1:-1:-1;;;;;13751:15:0;;::::1;3906:6:::0;;13751:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;3879:7:0;3906:6;-1:-1:-1;;;;;13770:13:0;;::::1;3906:6:::0;;13770:13:::1;;13751:32;13747:189;;;13836:12;;13826:6;:22;;13800:124;;;::::0;-1:-1:-1;;;13800:124:0;;12682:2:1;13800:124:0::1;::::0;::::1;12664:21:1::0;12721:2;12701:18;;;12694:30;12760:34;12740:18;;;12733:62;-1:-1:-1;;;12811:18:1;;;12804:38;12859:19;;13800:124:0::1;12480:404:1::0;13800:124:0::1;13948:28;13979:24;13997:4;13979:9;:24::i;:::-;14082:23;::::0;13948:55;;-1:-1:-1;14045:60:0;::::1;;14118:31;14132:4:::0;14138:2;14142:6;14118:13:::1;:31::i;:::-;14181:16;::::0;::::1;;14180:17;:42:::0;::::1;;;-1:-1:-1::0;14201:21:0::1;::::0;::::1;::::0;::::1;;;14180:42;:67;;;;;14234:13;-1:-1:-1::0;;;;;14226:21:0::1;:4;-1:-1:-1::0;;;;;14226:21:0::1;;;14180:67;14162:284;;;14278:23;14274:161;;;14345:23;;14322:46;;14387:32;14398:20;14387:10;:32::i;:::-;-1:-1:-1::0;;;;;14577:23:0;::::1;14458:12;14577:23:::0;;;:17:::1;:23;::::0;;;;;14473:4:::1;::::0;14577:23:::1;;::::0;:48:::1;;-1:-1:-1::0;;;;;;14604:21:0;::::1;;::::0;;;:17:::1;:21;::::0;;;;;::::1;;14577:48;14573:96;;;-1:-1:-1::0;14652:5:0::1;14573:96;14679:41;14694:4;14700:2;14704:6;14712:7;14679:14;:41::i;:::-;13507:1221;;;13389:1339:::0;;;;;:::o;2131:226::-;2251:7;2287:12;2279:6;;;;2271:29;;;;-1:-1:-1;;;2271:29:0;;;;;;;;:::i;:::-;-1:-1:-1;2311:9:0;2323:5;2327:1;2323;:5;:::i;:::-;2311:17;2131:226;-1:-1:-1;;;;;2131:226:0:o;2623:132::-;2681:7;2708:39;2712:1;2715;2708:39;;;;;;;;;;;;;;;;;:3;:39::i;2365:250::-;2423:7;2447:1;2452;2447:6;2443:47;;-1:-1:-1;2477:1:0;2470:8;;2443:47;2502:9;2514:5;2518:1;2514;:5;:::i;:::-;2502:17;-1:-1:-1;2547:1:0;2538:5;2542:1;2502:17;2538:5;:::i;:::-;:10;2530:56;;;;-1:-1:-1;;;2530:56:0;;13619:2:1;2530:56:0;;;13601:21:1;13658:2;13638:18;;;13631:30;13697:34;13677:18;;;13670:62;-1:-1:-1;;;13748:18:1;;;13741:31;13789:19;;2530:56:0;13417:397:1;12731:307:0;12815:7;12868;;12857;:18;;12835:110;;;;-1:-1:-1;;;12835:110:0;;14021:2:1;12835:110:0;;;14003:21:1;14060:2;14040:18;;;14033:30;14099:34;14079:18;;;14072:62;-1:-1:-1;;;14150:18:1;;;14143:40;14200:19;;12835:110:0;13819:406:1;12835:110:0;12956:19;12978:10;:8;:10::i;:::-;12956:32;-1:-1:-1;13006:24:0;:7;12956:32;13006:11;:24::i;27636:645::-;27759:18;27780:25;27798:6;27780:13;27790:2;27780:9;:13::i;:25::-;-1:-1:-1;;;;;27821:26:0;;;;;;:20;:26;;;;;;27759:46;;-1:-1:-1;27821:26:0;;27820:27;:56;;;;-1:-1:-1;;;;;;27852:24:0;;;;;;:20;:24;;;;;;;;27851:25;27820:56;27816:227;;;27933:22;;27919:10;:36;;27893:138;;;;-1:-1:-1;;;27893:138:0;;;;;;;:::i;:::-;28065:13;-1:-1:-1;;;;;28057:21:0;:4;-1:-1:-1;;;;;28057:21:0;;:50;;;;-1:-1:-1;;;;;;28083:24:0;;;;;;:20;:24;;;;;;;;28082:25;28057:50;28053:221;;;28164:22;;28150:10;:36;;28124:138;;;;-1:-1:-1;;;28124:138:0;;;;;;;:::i;14736:1521::-;9461:16;:23;;-1:-1:-1;;9461:23:0;9480:4;9461:23;;;14894:14:::1;::::0;14859:15:::1;::::0;14841:13:::1;::::0;9461:16;;14841:78:::1;::::0;14894:14;;14841:34:::1;::::0;:17:::1;:34::i;:78::-;14817:102;;14930:22;14955:81;15010:15;;14955:36;14974:16;;14955:14;;:18;;:36;;;;:::i;:81::-;14930:106:::0;-1:-1:-1;15047:25:0::1;15075:33;:13:::0;14930:106;15075:17:::1;:33::i;:::-;15047:61;;15133:17;15154:1;15133:22:::0;15129:61:::1;;15172:7;;;;;15129:61;15202:27;15232:128;15358:1;15232:107;15321:17;15232:70;15287:14;;15271:13;;:30;;;;:::i;:::-;15232:20:::0;;:38:::1;:70::i;:::-;:88:::0;::::1;:107::i;:128::-;15202:158:::0;-1:-1:-1;15371:22:0::1;15396:45;:20:::0;15202:158;15396:24:::1;:45::i;:::-;15371:70;;15452:32;15469:14;15452:16;:32::i;:::-;15497:18;15518:21;15497:42;;15550:23;15576:118;15692:1;15576:97;15655:17;15576:60;15621:14;;15605:13;;:30;;;;:::i;:::-;15576:10:::0;;:28:::1;:60::i;:118::-;15550:144;;15733:1;15711:19;:23;:46;;;;;15756:1;15738:15;:19;15711:46;15707:129;;;15774:50;15787:19;15808:15;15774:12;:50::i;:::-;15848:22;15873:101;15956:17;15873:64;15920:16;;15902:15;;:34;;;;:::i;:::-;15873:10:::0;;:28:::1;:64::i;:101::-;15848:126:::0;-1:-1:-1;15989:18:0;;15985:91:::1;;16024:15;::::0;:40:::1;::::0;-1:-1:-1;;;;;16024:15:0;;::::1;::::0;:40;::::1;;;::::0;16049:14;;16024:15:::1;:40:::0;:15;:40;16049:14;16024:15;:40;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15985:91;16088:17;16108:51;16144:14:::0;16108:31:::1;:10:::0;16123:15;16108:14:::1;:31::i;:::-;:35:::0;::::1;:51::i;:::-;16088:71:::0;-1:-1:-1;16174:13:0;;16170:80:::1;;16204:14;::::0;:34:::1;::::0;-1:-1:-1;;;;;16204:14:0;;::::1;::::0;:34;::::1;;;::::0;16228:9;;16204:14:::1;:34:::0;:14;:34;16228:9;16204:14;:34;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;16170:80;14806:1451;;;;;;;;;9495:1;-1:-1:-1::0;9507:16:0;:24;;-1:-1:-1;;9507:24:0;;;14736:1521::o;17319:971::-;17475:7;17470:306;;17499:14;24327:1;24311:13;:17;;;24339:15;:19;;;24369:14;:18;24268:127;17499:14;17470:306;;;17563:13;-1:-1:-1;;;;;17550:26:0;:9;-1:-1:-1;;;;;17550:26:0;;17546:79;;17597:12;24641:14;;24625:13;:30;24684:16;;24666:15;:34;24728:15;;24711:14;:32;24584:167;17597:12;17655:13;-1:-1:-1;;;;;17645:23:0;:6;-1:-1:-1;;;;;17645:23:0;;;:53;;;;;17685:13;-1:-1:-1;;;;;17672:26:0;:9;-1:-1:-1;;;;;17672:26:0;;;17645:53;17641:124;;;17719:30;24834:13;;24818;:29;24876:15;;24858;:33;24919:14;;24902;:31;24759:182;17719:30;-1:-1:-1;;;;;17792:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;17816:22:0;;;;;;:11;:22;;;;;;;;17815:23;17792:46;17788:467;;;17855:48;17877:6;17885:9;17896:6;17855:21;:48::i;:::-;17788:467;;;-1:-1:-1;;;;;17926:19:0;;;;;;:11;:19;;;;;;;;17925:20;:46;;;;-1:-1:-1;;;;;;17949:22:0;;;;;;:11;:22;;;;;;;;17925:46;17921:334;;;17988:46;18008:6;18016:9;18027:6;17988:19;:46::i;17921:334::-;-1:-1:-1;;;;;18056:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;18079:22:0;;;;;;:11;:22;;;;;;;;18056:45;18052:203;;;18118:48;18140:6;18148:9;18159:6;18118:21;:48::i;18052:203::-;18199:44;18217:6;18225:9;18236:6;18199:17;:44::i;:::-;18267:15;:13;:15::i;2763:312::-;2883:7;2918:12;2911:5;2903:28;;;;-1:-1:-1;;;2903:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2942:9:0;2954:5;2958:1;2954;:5;:::i;22254:164::-;22296:7;22317:15;22334;22353:19;:17;:19::i;:::-;22316:56;;-1:-1:-1;22316:56:0;-1:-1:-1;22390:20:0;22316:56;;22390:11;:20::i;:::-;22383:27;;;;22254:164;:::o;1987:136::-;2045:7;2072:43;2076:1;2079;2072:43;;;;;;;;;;;;;;;;;:3;:43::i;16265:522::-;16355:16;;;16369:1;16355:16;;;;;;;;16331:21;;16355:16;;;;;;;;;;-1:-1:-1;16355:16:0;16331:40;;16400:4;16382;16387:1;16382:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;16382:23:0;;;-1:-1:-1;;;;;16382:23:0;;;;;16426:15;-1:-1:-1;;;;;16426:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16416:4;16421:1;16416:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;16416:32:0;;;-1:-1:-1;;;;;16416:32:0;;;;;16459:62;16476:4;16491:15;16509:11;16459:8;:62::i;:::-;16532:196;;-1:-1:-1;;;16532:196:0;;-1:-1:-1;;;;;16532:15:0;:66;;;;:196;;16613:11;;16639:1;;16655:4;;16682;;16702:15;;16532:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16744:35;16761:11;16774:4;16744:35;;;;;;;:::i;:::-;;;;;;;;16320:467;16265:522;:::o;16795:516::-;16943:62;16960:4;16975:15;16993:11;16943:8;:62::i;:::-;17048:255;;-1:-1:-1;;;17048:255:0;;17120:4;17048:255;;;16626:34:1;16676:18;;;16669:34;;;17166:1:0;16719:18:1;;;16712:34;;;16762:18;;;16755:34;;;16805:19;;;16798:44;17277:15:0;16858:19:1;;;16851:35;17048:15:0;-1:-1:-1;;;;;17048:31:0;;;;17087:9;;16560:19:1;;17048:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16795:516;;:::o;19671:703::-;19822:15;19852:23;19890;19928:18;19960:19;19971:7;19960:10;:19::i;:::-;-1:-1:-1;;;;;20008:15:0;;;;;;:7;:15;;;;;;19807:172;;-1:-1:-1;19807:172:0;;-1:-1:-1;19807:172:0;-1:-1:-1;19807:172:0;-1:-1:-1;20008:28:0;;20028:7;20008:19;:28::i;:::-;-1:-1:-1;;;;;19990:15:0;;;;;;:7;:15;;;;;;;;:46;;;;20065:7;:15;;;;:28;;20085:7;20065:19;:28::i;:::-;-1:-1:-1;;;;;20047:15:0;;;;;;;:7;:15;;;;;;:46;;;;20125:18;;;;;;;:39;;20148:15;20125:22;:39::i;:::-;-1:-1:-1;;;;;20104:18:0;;;;;;:7;:18;;;;;:60;20175:26;20190:10;20175:14;:26::i;:::-;20234:9;-1:-1:-1;;;;;20217:44:0;20226:6;-1:-1:-1;;;;;20217:44:0;;20245:15;20217:44;;;;160:25:1;;148:2;133:18;;14:177;20217:44:0;;;;;;;;20276:14;;20272:95;;20312:43;;160:25:1;;;20337:4:0;;-1:-1:-1;;;;;20312:43:0;;;;;148:2:1;133:18;20312:43:0;;;;;;;20272:95;19796:578;;;;19671:703;;;:::o;18948:715::-;19097:15;19127:23;19165;19203:18;19235:19;19246:7;19235:10;:19::i;:::-;-1:-1:-1;;;;;19283:15:0;;;;;;:7;:15;;;;;;19082:172;;-1:-1:-1;19082:172:0;;-1:-1:-1;19082:172:0;-1:-1:-1;19082:172:0;-1:-1:-1;19283:28:0;;19082:172;19283:19;:28::i;:::-;-1:-1:-1;;;;;19265:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;19343:18;;;;;:7;:18;;;;;:39;;19366:15;19343:22;:39::i;:::-;-1:-1:-1;;;;;19322:18:0;;;;;;:7;:18;;;;;;;;:60;;;;19414:7;:18;;;;:39;;19437:15;19414:22;:39::i;20382:774::-;20533:15;20563:23;20601;20639:18;20671:19;20682:7;20671:10;:19::i;:::-;-1:-1:-1;;;;;20719:15:0;;;;;;:7;:15;;;;;;20518:172;;-1:-1:-1;20518:172:0;;-1:-1:-1;20518:172:0;-1:-1:-1;20518:172:0;-1:-1:-1;20719:28:0;;20739:7;20719:19;:28::i;:::-;-1:-1:-1;;;;;20701:15:0;;;;;;:7;:15;;;;;;;;:46;;;;20776:7;:15;;;;:28;;20796:7;20776:19;:28::i;18298:642::-;18445:15;18475:23;18513;18551:18;18583:19;18594:7;18583:10;:19::i;:::-;-1:-1:-1;;;;;18631:15:0;;;;;;:7;:15;;;;;;18430:172;;-1:-1:-1;18430:172:0;;-1:-1:-1;18430:172:0;-1:-1:-1;18430:172:0;-1:-1:-1;18631:28:0;;18430:172;18631:19;:28::i;24403:173::-;24463:13;24477:1;24463:16;;;;;;;;:::i;:::-;;;;;;;;;24447:13;:32;;;;24508:13;24522:1;24508:16;;;;;;;;:::i;:::-;;;;;;;;;24490:15;:34;;;;24552:13;24566:1;24552:16;;;;;;;;:::i;:::-;;;;;;;;;;;24535:14;:33;24403:173::o;22426:605::-;22524:7;;22560;;22477;;;;;22578:338;22602:9;:16;22598:20;;22578:338;;;22686:7;22662;:21;22670:9;22680:1;22670:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22670:12:0;22662:21;;;;;;;;;;;;;:31;;:83;;;22738:7;22714;:21;22722:9;22732:1;22722:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22722:12:0;22714:21;;;;;;;;;;;;;:31;22662:83;22640:146;;;22769:7;;22778;;22761:25;;;;;;;22426:605;;:::o;22640:146::-;22811:34;22823:7;:21;22831:9;22841:1;22831:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22831:12:0;22823:21;;;;;;;;;;;;;22811:7;;:11;:34::i;:::-;22801:44;;22870:34;22882:7;:21;22890:9;22900:1;22890:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22890:12:0;22882:21;;;;;;;;;;;;;22870:7;;:11;:34::i;:::-;22860:44;-1:-1:-1;22620:3:0;;;;:::i;:::-;;;;22578:338;;;-1:-1:-1;22952:7:0;;22940;;:20;;:11;:20::i;:::-;22930:7;:30;22926:61;;;22970:7;;22979;;22962:25;;;;;;22426:605;;:::o;22926:61::-;23006:7;;23015;;-1:-1:-1;22426:605:0;-1:-1:-1;22426:605:0:o;21164:421::-;21239:7;21248;21257;21266;21287:23;21312:18;21334:20;21346:7;21334:11;:20::i;:::-;21286:68;;;;21366:15;21383:23;21410:94;21436:7;21458:10;21483;:8;:10::i;:::-;21410:11;:94::i;:::-;21365:139;;;;-1:-1:-1;21549:15:0;;-1:-1:-1;21566:10:0;;-1:-1:-1;21164:421:0;;-1:-1:-1;;;;21164:421:0:o;23039:368::-;23102:19;23124:10;:8;:10::i;:::-;23102:32;-1:-1:-1;23145:18:0;23166:27;:10;23102:32;23166:14;:27::i;:::-;23245:4;23229:22;;;;:7;:22;;;;;;23145:48;;-1:-1:-1;23229:38:0;;23145:48;23229:26;:38::i;:::-;23220:4;23204:22;;;;:7;:22;;;;;;;;:63;;;;23282:11;:26;;;;;;23278:122;;;23366:4;23350:22;;;;:7;:22;;;;;;:38;;23377:10;23350:26;:38::i;:::-;23341:4;23325:22;;;;:7;:22;;;;;:63;23091:316;;23039:368;:::o;21593:268::-;21669:7;21678;21698:18;21719:27;21738:7;21719:18;:27::i;:::-;21698:48;-1:-1:-1;21757:23:0;21783;:7;21698:48;21783:11;:23::i;:::-;21757:49;21842:10;;-1:-1:-1;21593:268:0;;-1:-1:-1;;;21593:268:0:o;21869:377::-;22004:7;;;22051:24;:7;22063:11;22051;:24::i;:::-;22033:42;-1:-1:-1;22086:18:0;22107:27;:10;22122:11;22107:14;:27::i;:::-;22086:48;-1:-1:-1;22145:23:0;22171;:7;22086:48;22171:11;:23::i;:::-;22213:7;;;;-1:-1:-1;21869:377:0;;-1:-1:-1;;;;;;21869:377:0:o;23415:249::-;23498:7;23518:12;23533:78;23586:14;;23533:34;23551:15;;23533:13;;:17;;:34;;;;:::i;:78::-;23518:93;-1:-1:-1;23629:27:0;23651:4;23629:17;:7;23518:93;23629:11;:17::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;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;749:131::-;-1:-1:-1;;;;;824:31:1;;814:42;;804:70;;870:1;867;860:12;885:134;953:20;;982:31;953:20;982:31;:::i;1024:315::-;1092:6;1100;1153:2;1141:9;1132:7;1128:23;1124:32;1121:52;;;1169:1;1166;1159:12;1121:52;1208:9;1195:23;1227:31;1252:5;1227:31;:::i;:::-;1277:5;1329:2;1314:18;;;;1301:32;;-1:-1:-1;;;1024:315:1:o;1744:316::-;1821:6;1829;1837;1890:2;1878:9;1869:7;1865:23;1861:32;1858:52;;;1906:1;1903;1896:12;1858:52;-1:-1:-1;;1929:23:1;;;1999:2;1984:18;;1971:32;;-1:-1:-1;2050:2:1;2035:18;;;2022:32;;1744:316;-1:-1:-1;1744:316:1:o;2299:456::-;2376:6;2384;2392;2445:2;2433:9;2424:7;2420:23;2416:32;2413:52;;;2461:1;2458;2451:12;2413:52;2500:9;2487:23;2519:31;2544:5;2519:31;:::i;:::-;2569:5;-1:-1:-1;2626:2:1;2611:18;;2598:32;2639:33;2598:32;2639:33;:::i;:::-;2299:456;;2691:7;;-1:-1:-1;;;2745:2:1;2730:18;;;;2717:32;;2299:456::o;3173:247::-;3232:6;3285:2;3273:9;3264:7;3260:23;3256:32;3253:52;;;3301:1;3298;3291:12;3253:52;3340:9;3327:23;3359:31;3384:5;3359:31;:::i;3425:180::-;3484:6;3537:2;3525:9;3516:7;3512:23;3508:32;3505:52;;;3553:1;3550;3543:12;3505:52;-1:-1:-1;3576:23:1;;3425:180;-1:-1:-1;3425:180:1:o;3610:160::-;3675:20;;3731:13;;3724:21;3714:32;;3704:60;;3760:1;3757;3750:12;3775:315;3840:6;3848;3901:2;3889:9;3880:7;3876:23;3872:32;3869:52;;;3917:1;3914;3907:12;3869:52;3956:9;3943:23;3975:31;4000:5;3975:31;:::i;:::-;4025:5;-1:-1:-1;4049:35:1;4080:2;4065:18;;4049:35;:::i;:::-;4039:45;;3775:315;;;;;:::o;4095:127::-;4156:10;4151:3;4147:20;4144:1;4137:31;4187:4;4184:1;4177:15;4211:4;4208:1;4201:15;4227:908;4281:5;4334:3;4327:4;4319:6;4315:17;4311:27;4301:55;;4352:1;4349;4342:12;4301:55;4388:6;4375:20;4414:4;4437:18;4474:2;4470;4467:10;4464:36;;;4480:18;;:::i;:::-;4526:2;4523:1;4519:10;4558:2;4552:9;4621:2;4617:7;4612:2;4608;4604:11;4600:25;4592:6;4588:38;4676:6;4664:10;4661:22;4656:2;4644:10;4641:18;4638:46;4635:72;;;4687:18;;:::i;:::-;4723:2;4716:22;4773:18;;;4849:15;;;4845:24;;;4807:15;;;;-1:-1:-1;4881:15:1;;;4878:35;;;4909:1;4906;4899:12;4878:35;4945:2;4937:6;4933:15;4922:26;;4957:148;4973:6;4968:3;4965:15;4957:148;;;5039:23;5058:3;5039:23;:::i;:::-;5027:36;;5083:12;;;;4990;;;;4957:148;;;5123:6;4227:908;-1:-1:-1;;;;;;;4227:908:1:o;5140:348::-;5224:6;5277:2;5265:9;5256:7;5252:23;5248:32;5245:52;;;5293:1;5290;5283:12;5245:52;5333:9;5320:23;5366:18;5358:6;5355:30;5352:50;;;5398:1;5395;5388:12;5352:50;5421:61;5474:7;5465:6;5454:9;5450:22;5421:61;:::i;:::-;5411:71;5140:348;-1:-1:-1;;;;5140:348:1:o;5493:180::-;5549:6;5602:2;5590:9;5581:7;5577:23;5573:32;5570:52;;;5618:1;5615;5608:12;5570:52;5641:26;5657:9;5641:26;:::i;5678:388::-;5746:6;5754;5807:2;5795:9;5786:7;5782:23;5778:32;5775:52;;;5823:1;5820;5813:12;5775:52;5862:9;5849:23;5881:31;5906:5;5881:31;:::i;:::-;5931:5;-1:-1:-1;5988:2:1;5973:18;;5960:32;6001:33;5960:32;6001:33;:::i;:::-;6053:7;6043:17;;;5678:388;;;;;:::o;6071:416::-;6161:6;6169;6222:2;6210:9;6201:7;6197:23;6193:32;6190:52;;;6238:1;6235;6228:12;6190:52;6278:9;6265:23;6311:18;6303:6;6300:30;6297:50;;;6343:1;6340;6333:12;6297:50;6366:61;6419:7;6410:6;6399:9;6395:22;6366:61;:::i;:::-;6356:71;;;6446:35;6477:2;6466:9;6462:18;6446:35;:::i;6492:380::-;6571:1;6567:12;;;;6614;;;6635:61;;6689:4;6681:6;6677:17;6667:27;;6635:61;6742:2;6734:6;6731:14;6711:18;6708:38;6705:161;;6788:10;6783:3;6779:20;6776:1;6769:31;6823:4;6820:1;6813:15;6851:4;6848:1;6841:15;6705:161;;6492:380;;;:::o;6877:356::-;7079:2;7061:21;;;7098:18;;;7091:30;7157:34;7152:2;7137:18;;7130:62;7224:2;7209:18;;6877:356::o;7238:127::-;7299:10;7294:3;7290:20;7287:1;7280:31;7330:4;7327:1;7320:15;7354:4;7351:1;7344:15;7370:125;7435:9;;;7456:10;;;7453:36;;;7469:18;;:::i;7500:336::-;7702:2;7684:21;;;7741:2;7721:18;;;7714:30;-1:-1:-1;;;7775:2:1;7760:18;;7753:42;7827:2;7812:18;;7500:336::o;8739:127::-;8800:10;8795:3;8791:20;8788:1;8781:31;8831:4;8828:1;8821:15;8855:4;8852:1;8845:15;8871:135;8910:3;8931:17;;;8928:43;;8951:18;;:::i;:::-;-1:-1:-1;8998:1:1;8987:13;;8871:135::o;12889:128::-;12956:9;;;12977:11;;;12974:37;;;12991:18;;:::i;13022:168::-;13095:9;;;13126;;13143:15;;;13137:22;;13123:37;13113:71;;13164:18;;:::i;13195:217::-;13235:1;13261;13251:132;;13305:10;13300:3;13296:20;13293:1;13286:31;13340:4;13337:1;13330:15;13368:4;13365:1;13358:15;13251:132;-1:-1:-1;13397:9:1;;13195:217::o;14230:404::-;14432:2;14414:21;;;14471:2;14451:18;;;14444:30;14510:34;14505:2;14490:18;;14483:62;-1:-1:-1;;;14576:2:1;14561:18;;14554:38;14624:3;14609:19;;14230:404::o;14639:251::-;14709:6;14762:2;14750:9;14741:7;14737:23;14733:32;14730:52;;;14778:1;14775;14768:12;14730:52;14810:9;14804:16;14829:31;14854:5;14829:31;:::i;14895:461::-;14948:3;14986:5;14980:12;15013:6;15008:3;15001:19;15039:4;15068:2;15063:3;15059:12;15052:19;;15105:2;15098:5;15094:14;15126:1;15136:195;15150:6;15147:1;15144:13;15136:195;;;15215:13;;-1:-1:-1;;;;;15211:39:1;15199:52;;15271:12;;;;15306:15;;;;15247:1;15165:9;15136:195;;;-1:-1:-1;15347:3:1;;14895:461;-1:-1:-1;;;;;14895:461:1:o;15361:582::-;15660:6;15649:9;15642:25;15703:6;15698:2;15687:9;15683:18;15676:34;15746:3;15741:2;15730:9;15726:18;15719:31;15623:4;15767:57;15819:3;15808:9;15804:19;15796:6;15767:57;:::i;:::-;-1:-1:-1;;;;;15860:32:1;;;;15855:2;15840:18;;15833:60;-1:-1:-1;15924:3:1;15909:19;15902:35;15759:65;15361:582;-1:-1:-1;;;15361:582:1:o;15948:332::-;16155:6;16144:9;16137:25;16198:2;16193;16182:9;16178:18;16171:30;16118:4;16218:56;16270:2;16259:9;16255:18;16247:6;16218:56;:::i;16897:306::-;16985:6;16993;17001;17054:2;17042:9;17033:7;17029:23;17025:32;17022:52;;;17070:1;17067;17060:12;17022:52;17099:9;17093:16;17083:26;;17149:2;17138:9;17134:18;17128:25;17118:35;;17193:2;17182:9;17178:18;17172:25;17162:35;;16897:306;;;;;:::o

Swarm Source

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