ETH Price: $3,347.40 (-1.12%)

Token

Shiba (SHIBA)
 

Overview

Max Total Supply

1,000,000,000,000,000 SHIBA

Holders

2,413 (0.00%)

Market

Price

$0.00 @ 0.000000 ETH (-0.30%)

Onchain Market Cap

$163,906.00

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 SHIBA

Value
$0.00
0xbead141003598e8e441289c518a2b7fea3d206a2
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Shiba is a full ecosystem developed on the ethereum network and own shibarium blockchain. The ecosystem includes cross-chain swap, bridge, blockchain, NFT, staking and gas.

Market

Volume (24H):$8.52
Market Capitalization:$0.00
Circulating Supply:0.00 SHIBA
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
SHIBA

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-09-27
*/

/* The Doge Killer Rebirthed

Telegram: https://t.me/Shiba_Portal
Twitter: https://twitter.com/RebirthOfShiba
Website: https://www.shibacoin.tech/
*/

// 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 newOwnr
    );

    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 newOwnr) public virtual onlyOwner {
        require(
            newOwnr != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwnr);
        _owner = newOwnr;
    }
}

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

contract SHIBA is Context, IERC20, LockToken {
    using SafeMath for uint256;
    address payable public marketingWallet =
        payable(0x44343Bae9f6d8dB1d5b0614783EE22a0A36D5F5b);
    address payable public devWallet =
        payable(0x44343Bae9f6d8dB1d5b0614783EE22a0A36D5F5b);
    address public newOwnr = 0xb640b82989Ba33B221685f0305Fa29b2Bfa2F11E;
    address public uniRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => mapping(address => uint256)) private _allowances;
    mapping(address => bool) private _feeWhitelisted;
    mapping(address => bool) private _limitWhitelisted;
    mapping(address => bool) private _isExcluded;
    address[] private _excluded;
    string private _name = "Shiba";
    string private _symbol = "SHIBA";
    uint8 private _decimals = 18;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 1000000000000000 * 10 ** 18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    uint256 public _liquidityFeeBuys = 0;
    uint256 public _marketingFeeBuys = 300;
    uint256 public _devFeeBuys = 0;
    uint256 public _totalFeeBuys =
        _liquidityFeeBuys + _marketingFeeBuys + _devFeeBuys;
    uint256[] buyFeesBackup = [_liquidityFeeBuys, _marketingFeeBuys, _devFeeBuys];
    uint256 public _liquidityFeeSells = 0;
    uint256 public _marketingFeeSells = 300;
    uint256 public _devFeeSells = 0;
    uint256 public _totalFeeSells =
        _liquidityFeeSells + _marketingFeeSells + _devFeeSells;

    uint256 public _liquidityTokens = 0;
    uint256 public _marketingTokens = 0;
    uint256 public _devTokens = 0;
    uint256 public transferTotalFee =
        _liquidityTokens + _marketingTokens + _devTokens;

    uint256 public _txLimit = _tTotal.div(100).mul(1); //x% of total supply
    uint256 public _walletLimit = _tTotal.div(100).mul(2); //x% of total supply
    uint256 private _minBalanceForSwapback = 10000000000000 * 10 ** 18;

    IUniswapV2Router02 public immutable uniRouterContract;
    address public immutable uniPair;

    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[newOwnr] = _rTotal;
        IUniswapV2Router02 _uniRouterContract = IUniswapV2Router02(uniRouter);
        uniPair = IUniswapV2Factory(_uniRouterContract.factory())
            .createPair(address(this), _uniRouterContract.WETH());
        uniRouterContract = _uniRouterContract;
        _feeWhitelisted[newOwnr] = true;
        _feeWhitelisted[address(this)] = true;
        includeToWhiteList(newOwnr);
        _limitWhitelisted[newOwnr] = true;
        emit Transfer(address(0), newOwnr, _tTotal);
        excludeWalletsFromWhales();

        transferOwnership(newOwnr);
    }

    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 _minBalanceForSwapbackAmount() public view returns (uint256) {
        return _minBalanceForSwapback;
    }

    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 <= _txLimit,
                "Transfer amount exceeds the maxTxAmount."
            );
        }

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

        checkForWhale(from, to, amount);

        if (
            !inSwapAndLiquify && swapAndLiquifyEnabled && from != uniPair
        ) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = _minBalanceForSwapback;
                swapTokens(contractTokenBalance);
            }
        }

        bool takeFee = true;

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

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        uint256 ___totalFeeBuys = _liquidityFeeBuys.add(_marketingFeeBuys).add(
            _devFeeBuys
        );
        uint256 ___totalFeeSells = _liquidityFeeSells.add(_marketingFeeSells).add(
            _devFeeSells
        );
        uint256 totalSwapableFees = ___totalFeeBuys.add(___totalFeeSells);

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

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

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

        uint256 ethForMarketing = newBalance
            .mul(_marketingFeeBuys + _marketingFeeSells)
            .div(totalSwapableFees);
        if (ethForMarketing > 0) {
            marketingWallet.transfer(ethForMarketing);
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniRouterContract.WETH();
        _approve(address(this), address(uniRouterContract), tokenAmount);
        uniRouterContract.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(uniRouterContract), tokenAmount);

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

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

            if (sender != uniPair && recipient != uniPair) {
                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 = calculateLiquidityFee(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 calculateLiquidityFee(
        uint256 _amount
    ) private view returns (uint256) {
        uint256 fees = _liquidityFeeBuys.add(_marketingFeeBuys).add(_devFeeBuys);
        return _amount.mul(fees).div(1000);
    }

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

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

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

    function removeAllFee() private {
        _liquidityFeeBuys = 0;
        _marketingFeeBuys = 0;
        _devFeeBuys = 0;
    }

    function restoreAllFee() private {
        _liquidityFeeBuys = buyFeesBackup[0];
        _marketingFeeBuys = buyFeesBackup[1];
        _devFeeBuys = buyFeesBackup[2];
    }

    function setSellFee() private {
        _liquidityFeeBuys = _liquidityFeeSells;
        _marketingFeeBuys = _marketingFeeSells;
        _devFeeBuys = _devFeeSells;
    }

    function setWalletToWalletTransferFee() private {
        _liquidityFeeBuys = _liquidityTokens;
        _marketingFeeBuys = _marketingTokens;
        _devFeeBuys = _devTokens;
    }

    function _setBuyFees(
        uint256 _liquidityFee,
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        _liquidityFeeBuys = _liquidityFee;
        _marketingFeeBuys = _marketingFee;
        _devFeeBuys = _devFee;
        buyFeesBackup = [_liquidityFeeBuys, _marketingFeeBuys, _devFeeBuys];
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        _totalFeeBuys = _liquidityFeeBuys + _marketingFeeBuys + _devFeeBuys;
        require(totalFee <= 700, "Too High Fee");
    }

    function _setSellFees(
        uint256 _liquidityFee,
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        _liquidityFeeSells = _liquidityFee;
        _marketingFeeSells = _marketingFee;
        _devFeeSells = _devFee;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        _totalFeeSells = _liquidityFeeSells + _marketingFeeSells + _devFeeSells;
        require(totalFee <= 700, "Too High Fee");
    }

    function _setTransferFees(
        uint256 _liquidityFee,
        uint256 _marketingFee,
        uint256 _devFee
    ) external onlyOwner {
        _liquidityTokens = _liquidityFee;
        _marketingTokens = _marketingFee;
        _devTokens = _devFee;
        transferTotalFee = _liquidityTokens + _marketingTokens + _devTokens;
        uint256 totalFee = _liquidityFee.add(_marketingFee).add(_devFee);
        require(totalFee <= 100, "Too High Fee");
    }

    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner {
        _txLimit = maxTxAmount;
        require(_txLimit >= _tTotal.div(5), "Too low limit");
    }

    function setMinimumTokensBeforeSwap(
        uint256 __minBalanceForSwapback
    ) external onlyOwner {
        _minBalanceForSwapback = __minBalanceForSwapback;
    }

    function setMarketingWallet(address _marketingWallet) external onlyOwner {
        marketingWallet = payable(_marketingWallet);
    }

    function setDevAWallet(address _devWallet) external onlyOwner {
        devWallet = payable(_devWallet);
    }

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

    function excludeWalletsFromWhales() private {
        _limitWhitelisted[owner()] = true;
        _limitWhitelisted[address(this)] = true;
        _limitWhitelisted[uniPair] = true;
        _limitWhitelisted[devWallet] = true;
        _limitWhitelisted[marketingWallet] = true;
    }

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

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

    function setWalletMaxHoldingLimit(uint256 _amount) public onlyOwner {
        _walletLimit = _amount;
        require(
            _walletLimit > _tTotal.div(100).mul(1),
            "Too less limit"
        ); //min 1%
    }

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

    function triggerSwapback() public {
        uint256 allBalance = balanceOf(address(this));
        swapTokens(allBalance);
    }

    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":"newOwnr","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":"_devFeeBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devFeeSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFeeSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minBalanceForSwapbackAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"_setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"_setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"_setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_totalFeeBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFeeSells","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_txLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletLimit","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":[],"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":[],"name":"devWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newOwnr","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_devWallet","type":"address"}],"name":"setDevAWallet","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":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"__minBalanceForSwapback","type":"uint256"}],"name":"setMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","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":"newOwnr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferTotalFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"triggerSwapback","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniRouter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniRouterContract","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6003805460ff19169055600580546001600160a01b03199081167344343bae9f6d8db1d5b0614783ee22a0a36d5f5b9081178355600680548316909117905560078054821673b640b82989ba33b221685f0305fa29b2bfa2f11e17905560088054909116737a250d5630b4cf539739df2c5dacb4c659f2488d17905561010060405260c090815264536869626160d81b60e052601090620000a1908262000914565b50604080518082019091526005815264534849424160d81b6020820152601190620000cd908262000914565b506012805460ff1916811790556d314dc6448d9338c15b0a000000006013819055620000fc90600019620009f6565b6200010a9060001962000a23565b6014556000601681905561012c601781905560188290556200012d908262000a39565b62000139919062000a39565b601955604051806060016040528060165481526020016017548152602001601854815250601a9060036200016f92919062000808565b506000601b81905561012c601c819055601d82905562000190908262000a39565b6200019c919062000a39565b601e556000601f81905560208190556021819055620001bc818062000a39565b620001c8919062000a39565b602255601354620001ea90600190620001e3906064620004ea565b906200053d565b6023556013546200020590600290620001e3906064620004ea565b6024556c7e37be2022c0914b26800000006025556026805461ff0019166101001790553480156200023557600080fd5b50600080546001600160a01b0319163390811782556040519091829160008051602062003929833981519152908290a3503360009081526004602081815260408084208054600160ff199182168117909255308652828620805490911690911790556014546007546001600160a01b039081168652600984529482902055600854815163c45a015560e01b81529151941693849363c45a01559383820193909291908290030181865afa158015620002f1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000317919062000a4f565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038b919062000a4f565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620003d9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ff919062000a4f565b6001600160a01b0390811660a0528181166080526007805482166000908152600c60205260408082208054600160ff199182168117909255308452919092208054909116909117905554620004559116620005cb565b600780546001600160a01b039081166000908152600d6020526040808220805460ff191660011790559254601354935192169290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004ba9190815260200190565b60405180910390a3620004cc6200063a565b600754620004e3906001600160a01b0316620006d0565b5062000afb565b60006200053483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620007cc60201b60201c565b90505b92915050565b600082600003620005515750600062000537565b60006200055f838562000a7a565b9050826200056e858362000a94565b14620005345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084015b60405180910390fd5b6000546001600160a01b03163314620006165760405162461bcd60e51b81526020600482018190526024820152600080516020620039098339815191526044820152606401620005c2565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6001600d6000620006536000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600d90935281832080548516600190811790915560a051821684528284208054861682179055600654821684528284208054861682179055600554909116835291208054909216179055565b6000546001600160a01b031633146200071b5760405162461bcd60e51b81526020600482018190526024820152600080516020620039098339815191526044820152606401620005c2565b6001600160a01b038116620007825760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401620005c2565b600080546040516001600160a01b03808516939216916000805160206200392983398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008183620007f05760405162461bcd60e51b8152600401620005c2919062000aab565b506000620007ff848662000a94565b95945050505050565b82805482825590600052602060002090810192821562000846579160200282015b828111156200084657825182559160200191906001019062000829565b506200085492915062000858565b5090565b5b8082111562000854576000815560010162000859565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200089a57607f821691505b602082108103620008bb57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200090f57600081815260208120601f850160051c81016020861015620008ea5750805b601f850160051c820191505b818110156200090b57828155600101620008f6565b5050505b505050565b81516001600160401b038111156200093057620009306200086f565b620009488162000941845462000885565b84620008c1565b602080601f831160018114620009805760008415620009675750858301515b600019600386901b1c1916600185901b1785556200090b565b600085815260208120601f198616915b82811015620009b15788860151825594840194600190910190840162000990565b5085821015620009d05787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601260045260246000fd5b60008262000a085762000a08620009e0565b500690565b634e487b7160e01b600052601160045260246000fd5b8181038181111562000537576200053762000a0d565b8082018082111562000537576200053762000a0d565b60006020828403121562000a6257600080fd5b81516001600160a01b03811681146200053457600080fd5b808202811582820484141762000537576200053762000a0d565b60008262000aa65762000aa6620009e0565b500490565b600060208083528351808285015260005b8181101562000ada5785810183015185820160400152820162000abc565b506000604082860101526040601f19601f8301168501019250505092915050565b60805160a051612da262000b6760003960008181610489015281816117ba01528181611c8301528181611d2201528181611d720152611daf01526000818161079f01528181611ff4015281816120ad015281816120e90152818161219c01526121c30152612da26000f3fe6080604052600436106103545760003560e01c8063715018a6116101c6578063a457c2d7116100f7578063c49b9a8011610095578063ec1c14f11161006f578063ec1c14f11461097b578063ec28438a14610991578063f2fde38b146109b1578063fb201b1d146109d157600080fd5b8063c49b9a80146108f5578063dd62ed3e14610915578063ea2f0b371461095b57600080fd5b8063ade44a8f116100d1578063ade44a8f1461088a578063aee50b1e146108aa578063b70ee799146108ca578063b863864c146108df57600080fd5b8063a457c2d714610834578063a9059cbb14610854578063aa13008f1461087457600080fd5b806383ac614d116101645780638da5cb5b1161013e5780638da5cb5b146107c15780638ea5220f146107df57806395d89b41146107ff578063a0e47bf61461081457600080fd5b806383ac614d14610757578063848ad89e1461077757806384ee9d9c1461078d57600080fd5b80637560a8d9116101a05780637560a8d9146106f557806375f0a8741461070b578063794fbd2e1461072b57806383a9f0c71461074157600080fd5b8063715018a6146106aa5780637409c4ea146106bf578063749e8cb6146106d557600080fd5b8063437823ec116102a05780634e3c06b11161023e57806363553e7c1161021857806363553e7c1461063f5780636f4b6f0c146106555780636fee4f7a1461067557806370a082311461068a57600080fd5b80634e3c06b1146105df5780635342acb4146105ff5780635d098b381461061f57600080fd5b8063476643461161027a578063476643461461056b57806348990b7a1461058b5780634a74bb02146105a05780634b880e88146105bf57600080fd5b8063437823ec1461050f57806344d4225f1461053157806347535d7b1461055157600080fd5b806323b872dd1161030d57806332972e46116102e757806332972e461461047757806334302720146104c357806339509351146104d95780634197d5ca146104f957600080fd5b806323b872dd1461041f57806323e6958a1461043f578063313ce5671461045557600080fd5b806306fdde0314610360578063095ea7b31461038b5780630e2351e2146103bb57806313114a9d146103df57806318160ddd146103f45780631e25abbb1461040957600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b506103756109e6565b60405161038291906128e7565b60405180910390f35b34801561039757600080fd5b506103ab6103a636600461294a565b610a78565b6040519015158152602001610382565b3480156103c757600080fd5b506103d160245481565b604051908152602001610382565b3480156103eb57600080fd5b506015546103d1565b34801561040057600080fd5b506013546103d1565b34801561041557600080fd5b506103d160205481565b34801561042b57600080fd5b506103ab61043a366004612976565b610a8f565b34801561044b57600080fd5b506103d1601b5481565b34801561046157600080fd5b5060125460405160ff9091168152602001610382565b34801561048357600080fd5b506104ab7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610382565b3480156104cf57600080fd5b506103d160195481565b3480156104e557600080fd5b506103ab6104f436600461294a565b610af8565b34801561050557600080fd5b506103d160175481565b34801561051b57600080fd5b5061052f61052a3660046129b7565b610b2e565b005b34801561053d57600080fd5b5061052f61054c3660046129d4565b610b85565b34801561055d57600080fd5b506003546103ab9060ff1681565b34801561057757600080fd5b5061052f6105863660046129b7565b610c13565b34801561059757600080fd5b506025546103d1565b3480156105ac57600080fd5b506026546103ab90610100900460ff1681565b3480156105cb57600080fd5b5061052f6105da3660046129b7565b610c5f565b3480156105eb57600080fd5b5061052f6105fa3660046129fd565b610cad565b34801561060b57600080fd5b506103ab61061a3660046129b7565b610d02565b34801561062b57600080fd5b5061052f61063a3660046129b7565b610d50565b34801561064b57600080fd5b506103d160235481565b34801561066157600080fd5b506007546104ab906001600160a01b031681565b34801561068157600080fd5b5061052f610d9c565b34801561069657600080fd5b506103d16106a53660046129b7565b610e51565b3480156106b657600080fd5b5061052f610eb0565b3480156106cb57600080fd5b506103d1601d5481565b3480156106e157600080fd5b5061052f6106f0366004612a32565b610f24565b34801561070157600080fd5b506103d160215481565b34801561071757600080fd5b506005546104ab906001600160a01b031681565b34801561073757600080fd5b506103d160185481565b34801561074d57600080fd5b506103d160165481565b34801561076357600080fd5b5061052f610772366004612a32565b610fbd565b34801561078357600080fd5b506103d1601f5481565b34801561079957600080fd5b506104ab7f000000000000000000000000000000000000000000000000000000000000000081565b3480156107cd57600080fd5b506000546001600160a01b03166104ab565b3480156107eb57600080fd5b506006546104ab906001600160a01b031681565b34801561080b57600080fd5b50610375611073565b34801561082057600080fd5b506008546104ab906001600160a01b031681565b34801561084057600080fd5b506103ab61084f36600461294a565b611082565b34801561086057600080fd5b506103ab61086f36600461294a565b6110d1565b34801561088057600080fd5b506103d1601c5481565b34801561089657600080fd5b5061052f6108a5366004612a32565b6110de565b3480156108b657600080fd5b5061052f6108c53660046129d4565b611162565b3480156108d657600080fd5b5061052f611191565b3480156108eb57600080fd5b506103d160225481565b34801561090157600080fd5b5061052f610910366004612a5e565b6111a7565b34801561092157600080fd5b506103d1610930366004612a79565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561096757600080fd5b5061052f6109763660046129b7565b611225565b34801561098757600080fd5b506103d1601e5481565b34801561099d57600080fd5b5061052f6109ac3660046129d4565b611270565b3480156109bd57600080fd5b5061052f6109cc3660046129b7565b6112ee565b3480156109dd57600080fd5b5061052f6113d8565b6060601080546109f590612ab2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190612ab2565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a85338484611411565b5060015b92915050565b6000610a9c848484611535565b610aee8433610ae985604051806060016040528060288152602001612d20602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611869565b611411565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610a85918590610ae990866118a3565b6000546001600160a01b03163314610b615760405162461bcd60e51b8152600401610b5890612aec565b60405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610baf5760405162461bcd60e51b8152600401610b5890612aec565b6024819055601354610bcf90600190610bc9906064611909565b9061194b565b60245411610c105760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b58565b50565b6000546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610b5890612aec565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b5890612aec565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610b5890612aec565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610d2d5760405162461bcd60e51b8152600401610b5890612aec565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610b5890612aec565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610dc65760405162461bcd60e51b8152600401610b5890612aec565b604051600090339047908381818185875af1925050503d8060008114610e08576040519150601f19603f3d011682016040523d82523d6000602084013e610e0d565b606091505b5050905080610c105760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b58565b6001600160a01b0381166000908152600e602052604081205460ff1615610e8e57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610a89906119cd565b6000546001600160a01b03163314610eda5760405162461bcd60e51b8152600401610b5890612aec565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b5890612aec565b601b839055601c829055601d8190556000610f7382610f6d86866118a3565b906118a3565b9050601d54601c54601b54610f889190612b37565b610f929190612b37565b601e556102bc811115610fb75760405162461bcd60e51b8152600401610b5890612b4a565b50505050565b6000546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610b5890612aec565b601683905560178290556018819055604080516060810182528481526020810184905290810182905261101e90601a906003612887565b50600061102f82610f6d86866118a3565b90506018546017546016546110449190612b37565b61104e9190612b37565b6019556102bc811115610fb75760405162461bcd60e51b8152600401610b5890612b4a565b6060601180546109f590612ab2565b6000610a853384610ae985604051806060016040528060258152602001612d4860259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611869565b6000610a85338484611535565b6000546001600160a01b031633146111085760405162461bcd60e51b8152600401610b5890612aec565b601f83905560208290556021819055806111228385612b37565b61112c9190612b37565b602255600061113f82610f6d86866118a3565b90506064811115610fb75760405162461bcd60e51b8152600401610b5890612b4a565b6000546001600160a01b0316331461118c5760405162461bcd60e51b8152600401610b5890612aec565b602555565b600061119c30610e51565b9050610c1081611a4a565b6000546001600160a01b031633146111d15760405162461bcd60e51b8152600401610b5890612aec565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061121a90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461124f5760405162461bcd60e51b8152600401610b5890612aec565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331461129a5760405162461bcd60e51b8152600401610b5890612aec565b60238190556013546112ad906005611909565b6023541015610c105760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b58565b6000546001600160a01b031633146113185760405162461bcd60e51b8152600401610b5890612aec565b6001600160a01b03811661137d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b58565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114025760405162461bcd60e51b8152600401610b5890612aec565b6003805460ff19166001179055565b6001600160a01b0383166114735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b58565b6001600160a01b0382166114d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b58565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6003548390839060ff168061156257506001600160a01b03821660009081526004602052604090205460ff165b8061158557506001600160a01b03811660009081526004602052604090205460ff165b6115bc5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b58565b6001600160a01b0385166116205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b58565b6001600160a01b0384166116825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b58565b600083116116e45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b58565b6000546001600160a01b0386811691161480159061171057506000546001600160a01b03858116911614155b15611778576023548311156117785760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b58565b600061178330610e51565b602554909150811015611797878787611c06565b60265460ff161580156117b15750602654610100900460ff165b80156117ef57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031614155b1561180857801561180857602554915061180882611a4a565b6001600160a01b0387166000908152600c602052604090205460019060ff168061184a57506001600160a01b0387166000908152600c602052604090205460ff165b15611853575060005b61185f88888884611d02565b5050505050505050565b6000818484111561188d5760405162461bcd60e51b8152600401610b5891906128e7565b50600061189a8486612b70565b95945050505050565b6000806118b08385612b37565b9050838110156119025760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b58565b9392505050565b600061190283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f0a565b60008260000361195d57506000610a89565b60006119698385612b83565b9050826119768583612b9a565b146119025760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b58565b6000601454821115611a345760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b58565b6000611a3e611f38565b90506119028382611909565b6026805460ff19166001179055601854601754601654600092611a72929091610f6d916118a3565b90506000611a93601d54610f6d601c54601b546118a390919063ffffffff16565b90506000611aa183836118a3565b90506000611ace6002611ac884611ac8601b54601654611ac19190612b37565b8a9061194b565b90611909565b90506000611adc8683611f5b565b9050611ae781611f9d565b60004790506000611b116002611ac887611ac8601b54601654611b0a9190612b37565b879061194b565b9050600084118015611b235750600081115b15611b3257611b328482612196565b6000611b5286611ac8601c54601754611b4b9190612b37565b869061194b565b90508015611b96576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611b94573d6000803e3d6000fd5b505b6000611bac82611ba68686611f5b565b90611f5b565b90508015611bf0576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611bee573d6000803e3d6000fd5b505b50506026805460ff191690555050505050505050565b6000611c1582610f6d85610e51565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611c5a57506001600160a01b0383166000908152600d602052604090205460ff16155b15611c8157602454811115611c815760405162461bcd60e51b8152600401610b5890612bbc565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148015611cdb57506001600160a01b0383166000908152600d602052604090205460ff16155b15610fb757602454811115610fb75760405162461bcd60e51b8152600401610b5890612bbc565b80611d2057611d1b600060168190556017819055601855565b611e00565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603611d7057611d70601b54601655601c54601755601d54601855565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614158015611de457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15611e0057611e00601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff168015611e4157506001600160a01b0383166000908152600e602052604090205460ff16155b15611e5657611e5184848461229c565b611f02565b6001600160a01b0384166000908152600e602052604090205460ff16158015611e9757506001600160a01b0383166000908152600e602052604090205460ff165b15611ea757611e518484846123f5565b6001600160a01b0384166000908152600e602052604090205460ff168015611ee757506001600160a01b0383166000908152600e602052604090205460ff165b15611ef757611e51848484612496565b611f02848484612501565b610fb761253d565b60008183611f2b5760405162461bcd60e51b8152600401610b5891906128e7565b50600061189a8486612b9a565b6000806000611f456125ac565b9092509050611f548282611909565b9250505090565b600061190283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611869565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611fd257611fd2612c04565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190612c1a565b8160018151811061208757612087612c04565b60200260200101906001600160a01b031690816001600160a01b0316815250506120d2307f000000000000000000000000000000000000000000000000000000000000000084611411565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612127908590600090869030904290600401612c7b565b600060405180830381600087803b15801561214157600080fd5b505af1158015612155573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161218a929190612cb7565b60405180910390a15050565b6121c1307f000000000000000000000000000000000000000000000000000000000000000084611411565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d7198230856000806122086000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612270573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122959190612cd8565b5050505050565b6000806000806122ab8561272e565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506122d89086611f5b565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546123079085611f5b565b6001600160a01b03808916600090815260096020526040808220939093559088168152205461233690846118a3565b6001600160a01b0387166000908152600960205260409020556123588161276c565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161239d91815260200190565b60405180910390a380156123ec5760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6000806000806124048561272e565b6001600160a01b038b16600090815260096020526040902054939750919550935091506124319085611f5b565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a909152205461246790836118a3565b6001600160a01b0387166000908152600a602090815260408083209390935560099052205461233690846118a3565b6000806000806124a58561272e565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506124d29086611f5b565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546124319085611f5b565b6000806000806125108561272e565b6001600160a01b038b16600090815260096020526040902054939750919550935091506123079085611f5b565b601a60008154811061255157612551612c04565b9060005260206000200154601681905550601a60018154811061257657612576612c04565b9060005260206000200154601781905550601a60028154811061259b5761259b612c04565b600091825260209091200154601855565b6014546013546000918291825b600f548110156126fe578260096000600f84815481106125db576125db612c04565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612646575081600a6000600f848154811061261f5761261f612c04565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561265c57601454601354945094505050509091565b6126a260096000600f848154811061267657612676612c04565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f5b565b92506126ea600a6000600f84815481106126be576126be612c04565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f5b565b9150806126f681612d06565b9150506125b9565b5060135460145461270e91611909565b821015612725576014546013549350935050509091565b90939092509050565b600080600080600080612740876127f5565b915091506000806127598984612754611f38565b61281c565b909a909950939750919550919350505050565b6000612776611f38565b90506000612784838361194b565b306000908152600960205260409020549091506127a190826118a3565b30600090815260096020908152604080832093909355600e9052205460ff16156127f057306000908152600a60205260409020546127df90846118a3565b306000908152600a60205260409020555b505050565b600080600061280384612855565b905060006128118583611f5b565b959194509092505050565b6000808061282a868561194b565b90506000612838868661194b565b905060006128468383611f5b565b92989297509195505050505050565b600080612875601854610f6d6017546016546118a390919063ffffffff16565b90506119026103e8611ac8858461194b565b8280548282559060005260206000209081019282156128c2579160200282015b828111156128c25782518255916020019190600101906128a7565b506128ce9291506128d2565b5090565b5b808211156128ce57600081556001016128d3565b600060208083528351808285015260005b81811015612914578581018301518582016040015282016128f8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1057600080fd5b6000806040838503121561295d57600080fd5b823561296881612935565b946020939093013593505050565b60008060006060848603121561298b57600080fd5b833561299681612935565b925060208401356129a681612935565b929592945050506040919091013590565b6000602082840312156129c957600080fd5b813561190281612935565b6000602082840312156129e657600080fd5b5035919050565b80358015158114610d4b57600080fd5b60008060408385031215612a1057600080fd5b8235612a1b81612935565b9150612a29602084016129ed565b90509250929050565b600080600060608486031215612a4757600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a7057600080fd5b611902826129ed565b60008060408385031215612a8c57600080fd5b8235612a9781612935565b91506020830135612aa781612935565b809150509250929050565b600181811c90821680612ac657607f821691505b602082108103612ae657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8957610a89612b21565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b81810381811115610a8957610a89612b21565b8082028115828204841417610a8957610a89612b21565b600082612bb757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c2c57600080fd5b815161190281612935565b600081518084526020808501945080840160005b83811015612c705781516001600160a01b031687529582019590820190600101612c4b565b509495945050505050565b85815284602082015260a060408201526000612c9a60a0830186612c37565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612cd06040830184612c37565b949350505050565b600080600060608486031215612ced57600080fd5b8351925060208401519150604084015190509250925092565b600060018201612d1857612d18612b21565b506001019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203c982c1b969520e55fbae99318994a31bbcc03b0782145ca66a823cd333aa48c64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0

Deployed Bytecode

0x6080604052600436106103545760003560e01c8063715018a6116101c6578063a457c2d7116100f7578063c49b9a8011610095578063ec1c14f11161006f578063ec1c14f11461097b578063ec28438a14610991578063f2fde38b146109b1578063fb201b1d146109d157600080fd5b8063c49b9a80146108f5578063dd62ed3e14610915578063ea2f0b371461095b57600080fd5b8063ade44a8f116100d1578063ade44a8f1461088a578063aee50b1e146108aa578063b70ee799146108ca578063b863864c146108df57600080fd5b8063a457c2d714610834578063a9059cbb14610854578063aa13008f1461087457600080fd5b806383ac614d116101645780638da5cb5b1161013e5780638da5cb5b146107c15780638ea5220f146107df57806395d89b41146107ff578063a0e47bf61461081457600080fd5b806383ac614d14610757578063848ad89e1461077757806384ee9d9c1461078d57600080fd5b80637560a8d9116101a05780637560a8d9146106f557806375f0a8741461070b578063794fbd2e1461072b57806383a9f0c71461074157600080fd5b8063715018a6146106aa5780637409c4ea146106bf578063749e8cb6146106d557600080fd5b8063437823ec116102a05780634e3c06b11161023e57806363553e7c1161021857806363553e7c1461063f5780636f4b6f0c146106555780636fee4f7a1461067557806370a082311461068a57600080fd5b80634e3c06b1146105df5780635342acb4146105ff5780635d098b381461061f57600080fd5b8063476643461161027a578063476643461461056b57806348990b7a1461058b5780634a74bb02146105a05780634b880e88146105bf57600080fd5b8063437823ec1461050f57806344d4225f1461053157806347535d7b1461055157600080fd5b806323b872dd1161030d57806332972e46116102e757806332972e461461047757806334302720146104c357806339509351146104d95780634197d5ca146104f957600080fd5b806323b872dd1461041f57806323e6958a1461043f578063313ce5671461045557600080fd5b806306fdde0314610360578063095ea7b31461038b5780630e2351e2146103bb57806313114a9d146103df57806318160ddd146103f45780631e25abbb1461040957600080fd5b3661035b57005b600080fd5b34801561036c57600080fd5b506103756109e6565b60405161038291906128e7565b60405180910390f35b34801561039757600080fd5b506103ab6103a636600461294a565b610a78565b6040519015158152602001610382565b3480156103c757600080fd5b506103d160245481565b604051908152602001610382565b3480156103eb57600080fd5b506015546103d1565b34801561040057600080fd5b506013546103d1565b34801561041557600080fd5b506103d160205481565b34801561042b57600080fd5b506103ab61043a366004612976565b610a8f565b34801561044b57600080fd5b506103d1601b5481565b34801561046157600080fd5b5060125460405160ff9091168152602001610382565b34801561048357600080fd5b506104ab7f000000000000000000000000bef860db27fc2f9668d13d624563d859c65a2b2581565b6040516001600160a01b039091168152602001610382565b3480156104cf57600080fd5b506103d160195481565b3480156104e557600080fd5b506103ab6104f436600461294a565b610af8565b34801561050557600080fd5b506103d160175481565b34801561051b57600080fd5b5061052f61052a3660046129b7565b610b2e565b005b34801561053d57600080fd5b5061052f61054c3660046129d4565b610b85565b34801561055d57600080fd5b506003546103ab9060ff1681565b34801561057757600080fd5b5061052f6105863660046129b7565b610c13565b34801561059757600080fd5b506025546103d1565b3480156105ac57600080fd5b506026546103ab90610100900460ff1681565b3480156105cb57600080fd5b5061052f6105da3660046129b7565b610c5f565b3480156105eb57600080fd5b5061052f6105fa3660046129fd565b610cad565b34801561060b57600080fd5b506103ab61061a3660046129b7565b610d02565b34801561062b57600080fd5b5061052f61063a3660046129b7565b610d50565b34801561064b57600080fd5b506103d160235481565b34801561066157600080fd5b506007546104ab906001600160a01b031681565b34801561068157600080fd5b5061052f610d9c565b34801561069657600080fd5b506103d16106a53660046129b7565b610e51565b3480156106b657600080fd5b5061052f610eb0565b3480156106cb57600080fd5b506103d1601d5481565b3480156106e157600080fd5b5061052f6106f0366004612a32565b610f24565b34801561070157600080fd5b506103d160215481565b34801561071757600080fd5b506005546104ab906001600160a01b031681565b34801561073757600080fd5b506103d160185481565b34801561074d57600080fd5b506103d160165481565b34801561076357600080fd5b5061052f610772366004612a32565b610fbd565b34801561078357600080fd5b506103d1601f5481565b34801561079957600080fd5b506104ab7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b3480156107cd57600080fd5b506000546001600160a01b03166104ab565b3480156107eb57600080fd5b506006546104ab906001600160a01b031681565b34801561080b57600080fd5b50610375611073565b34801561082057600080fd5b506008546104ab906001600160a01b031681565b34801561084057600080fd5b506103ab61084f36600461294a565b611082565b34801561086057600080fd5b506103ab61086f36600461294a565b6110d1565b34801561088057600080fd5b506103d1601c5481565b34801561089657600080fd5b5061052f6108a5366004612a32565b6110de565b3480156108b657600080fd5b5061052f6108c53660046129d4565b611162565b3480156108d657600080fd5b5061052f611191565b3480156108eb57600080fd5b506103d160225481565b34801561090157600080fd5b5061052f610910366004612a5e565b6111a7565b34801561092157600080fd5b506103d1610930366004612a79565b6001600160a01b039182166000908152600b6020908152604080832093909416825291909152205490565b34801561096757600080fd5b5061052f6109763660046129b7565b611225565b34801561098757600080fd5b506103d1601e5481565b34801561099d57600080fd5b5061052f6109ac3660046129d4565b611270565b3480156109bd57600080fd5b5061052f6109cc3660046129b7565b6112ee565b3480156109dd57600080fd5b5061052f6113d8565b6060601080546109f590612ab2565b80601f0160208091040260200160405190810160405280929190818152602001828054610a2190612ab2565b8015610a6e5780601f10610a4357610100808354040283529160200191610a6e565b820191906000526020600020905b815481529060010190602001808311610a5157829003601f168201915b5050505050905090565b6000610a85338484611411565b5060015b92915050565b6000610a9c848484611535565b610aee8433610ae985604051806060016040528060288152602001612d20602891396001600160a01b038a166000908152600b602090815260408083203384529091529020549190611869565b611411565b5060019392505050565b336000818152600b602090815260408083206001600160a01b03871684529091528120549091610a85918590610ae990866118a3565b6000546001600160a01b03163314610b615760405162461bcd60e51b8152600401610b5890612aec565b60405180910390fd5b6001600160a01b03166000908152600c60205260409020805460ff19166001179055565b6000546001600160a01b03163314610baf5760405162461bcd60e51b8152600401610b5890612aec565b6024819055601354610bcf90600190610bc9906064611909565b9061194b565b60245411610c105760405162461bcd60e51b815260206004820152600e60248201526d151bdbc81b195cdcc81b1a5b5a5d60921b6044820152606401610b58565b50565b6000546001600160a01b03163314610c3d5760405162461bcd60e51b8152600401610b5890612aec565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610c895760405162461bcd60e51b8152600401610b5890612aec565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610cd75760405162461bcd60e51b8152600401610b5890612aec565b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b600080546001600160a01b03163314610d2d5760405162461bcd60e51b8152600401610b5890612aec565b506001600160a01b0381166000908152600c602052604090205460ff165b919050565b6000546001600160a01b03163314610d7a5760405162461bcd60e51b8152600401610b5890612aec565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610dc65760405162461bcd60e51b8152600401610b5890612aec565b604051600090339047908381818185875af1925050503d8060008114610e08576040519150601f19603f3d011682016040523d82523d6000602084013e610e0d565b606091505b5050905080610c105760405162461bcd60e51b815260206004820152601060248201526f2a3930b739b332b9103330b4b632b21760811b6044820152606401610b58565b6001600160a01b0381166000908152600e602052604081205460ff1615610e8e57506001600160a01b03166000908152600a602052604090205490565b6001600160a01b038216600090815260096020526040902054610a89906119cd565b6000546001600160a01b03163314610eda5760405162461bcd60e51b8152600401610b5890612aec565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610f4e5760405162461bcd60e51b8152600401610b5890612aec565b601b839055601c829055601d8190556000610f7382610f6d86866118a3565b906118a3565b9050601d54601c54601b54610f889190612b37565b610f929190612b37565b601e556102bc811115610fb75760405162461bcd60e51b8152600401610b5890612b4a565b50505050565b6000546001600160a01b03163314610fe75760405162461bcd60e51b8152600401610b5890612aec565b601683905560178290556018819055604080516060810182528481526020810184905290810182905261101e90601a906003612887565b50600061102f82610f6d86866118a3565b90506018546017546016546110449190612b37565b61104e9190612b37565b6019556102bc811115610fb75760405162461bcd60e51b8152600401610b5890612b4a565b6060601180546109f590612ab2565b6000610a853384610ae985604051806060016040528060258152602001612d4860259139336000908152600b602090815260408083206001600160a01b038d1684529091529020549190611869565b6000610a85338484611535565b6000546001600160a01b031633146111085760405162461bcd60e51b8152600401610b5890612aec565b601f83905560208290556021819055806111228385612b37565b61112c9190612b37565b602255600061113f82610f6d86866118a3565b90506064811115610fb75760405162461bcd60e51b8152600401610b5890612b4a565b6000546001600160a01b0316331461118c5760405162461bcd60e51b8152600401610b5890612aec565b602555565b600061119c30610e51565b9050610c1081611a4a565b6000546001600160a01b031633146111d15760405162461bcd60e51b8152600401610b5890612aec565b602680548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061121a90831515815260200190565b60405180910390a150565b6000546001600160a01b0316331461124f5760405162461bcd60e51b8152600401610b5890612aec565b6001600160a01b03166000908152600c60205260409020805460ff19169055565b6000546001600160a01b0316331461129a5760405162461bcd60e51b8152600401610b5890612aec565b60238190556013546112ad906005611909565b6023541015610c105760405162461bcd60e51b815260206004820152600d60248201526c151bdbc81b1bddc81b1a5b5a5d609a1b6044820152606401610b58565b6000546001600160a01b031633146113185760405162461bcd60e51b8152600401610b5890612aec565b6001600160a01b03811661137d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b58565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146114025760405162461bcd60e51b8152600401610b5890612aec565b6003805460ff19166001179055565b6001600160a01b0383166114735760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b58565b6001600160a01b0382166114d45760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b58565b6001600160a01b038381166000818152600b602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6003548390839060ff168061156257506001600160a01b03821660009081526004602052604090205460ff165b8061158557506001600160a01b03811660009081526004602052604090205460ff165b6115bc5760405162461bcd60e51b81526020600482015260086024820152672737ba1027b832b760c11b6044820152606401610b58565b6001600160a01b0385166116205760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b58565b6001600160a01b0384166116825760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b58565b600083116116e45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610b58565b6000546001600160a01b0386811691161480159061171057506000546001600160a01b03858116911614155b15611778576023548311156117785760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610b58565b600061178330610e51565b602554909150811015611797878787611c06565b60265460ff161580156117b15750602654610100900460ff165b80156117ef57507f000000000000000000000000bef860db27fc2f9668d13d624563d859c65a2b256001600160a01b0316876001600160a01b031614155b1561180857801561180857602554915061180882611a4a565b6001600160a01b0387166000908152600c602052604090205460019060ff168061184a57506001600160a01b0387166000908152600c602052604090205460ff165b15611853575060005b61185f88888884611d02565b5050505050505050565b6000818484111561188d5760405162461bcd60e51b8152600401610b5891906128e7565b50600061189a8486612b70565b95945050505050565b6000806118b08385612b37565b9050838110156119025760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b58565b9392505050565b600061190283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611f0a565b60008260000361195d57506000610a89565b60006119698385612b83565b9050826119768583612b9a565b146119025760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b58565b6000601454821115611a345760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610b58565b6000611a3e611f38565b90506119028382611909565b6026805460ff19166001179055601854601754601654600092611a72929091610f6d916118a3565b90506000611a93601d54610f6d601c54601b546118a390919063ffffffff16565b90506000611aa183836118a3565b90506000611ace6002611ac884611ac8601b54601654611ac19190612b37565b8a9061194b565b90611909565b90506000611adc8683611f5b565b9050611ae781611f9d565b60004790506000611b116002611ac887611ac8601b54601654611b0a9190612b37565b879061194b565b9050600084118015611b235750600081115b15611b3257611b328482612196565b6000611b5286611ac8601c54601754611b4b9190612b37565b869061194b565b90508015611b96576005546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611b94573d6000803e3d6000fd5b505b6000611bac82611ba68686611f5b565b90611f5b565b90508015611bf0576006546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611bee573d6000803e3d6000fd5b505b50506026805460ff191690555050505050505050565b6000611c1582610f6d85610e51565b6001600160a01b0385166000908152600d602052604090205490915060ff16158015611c5a57506001600160a01b0383166000908152600d602052604090205460ff16155b15611c8157602454811115611c815760405162461bcd60e51b8152600401610b5890612bbc565b7f000000000000000000000000bef860db27fc2f9668d13d624563d859c65a2b256001600160a01b0316846001600160a01b0316148015611cdb57506001600160a01b0383166000908152600d602052604090205460ff16155b15610fb757602454811115610fb75760405162461bcd60e51b8152600401610b5890612bbc565b80611d2057611d1b600060168190556017819055601855565b611e00565b7f000000000000000000000000bef860db27fc2f9668d13d624563d859c65a2b256001600160a01b0316836001600160a01b031603611d7057611d70601b54601655601c54601755601d54601855565b7f000000000000000000000000bef860db27fc2f9668d13d624563d859c65a2b256001600160a01b0316846001600160a01b031614158015611de457507f000000000000000000000000bef860db27fc2f9668d13d624563d859c65a2b256001600160a01b0316836001600160a01b031614155b15611e0057611e00601f54601655602054601755602154601855565b6001600160a01b0384166000908152600e602052604090205460ff168015611e4157506001600160a01b0383166000908152600e602052604090205460ff16155b15611e5657611e5184848461229c565b611f02565b6001600160a01b0384166000908152600e602052604090205460ff16158015611e9757506001600160a01b0383166000908152600e602052604090205460ff165b15611ea757611e518484846123f5565b6001600160a01b0384166000908152600e602052604090205460ff168015611ee757506001600160a01b0383166000908152600e602052604090205460ff165b15611ef757611e51848484612496565b611f02848484612501565b610fb761253d565b60008183611f2b5760405162461bcd60e51b8152600401610b5891906128e7565b50600061189a8486612b9a565b6000806000611f456125ac565b9092509050611f548282611909565b9250505090565b600061190283836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611869565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611fd257611fd2612c04565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612050573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120749190612c1a565b8160018151811061208757612087612c04565b60200260200101906001600160a01b031690816001600160a01b0316815250506120d2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611411565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612127908590600090869030904290600401612c7b565b600060405180830381600087803b15801561214157600080fd5b505af1158015612155573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161218a929190612cb7565b60405180910390a15050565b6121c1307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611411565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663f305d7198230856000806122086000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015612270573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906122959190612cd8565b5050505050565b6000806000806122ab8561272e565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506122d89086611f5b565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546123079085611f5b565b6001600160a01b03808916600090815260096020526040808220939093559088168152205461233690846118a3565b6001600160a01b0387166000908152600960205260409020556123588161276c565b856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161239d91815260200190565b60405180910390a380156123ec5760405181815230906001600160a01b038916907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35b50505050505050565b6000806000806124048561272e565b6001600160a01b038b16600090815260096020526040902054939750919550935091506124319085611f5b565b6001600160a01b038089166000908152600960209081526040808320949094559189168152600a909152205461246790836118a3565b6001600160a01b0387166000908152600a602090815260408083209390935560099052205461233690846118a3565b6000806000806124a58561272e565b6001600160a01b038b166000908152600a6020526040902054939750919550935091506124d29086611f5b565b6001600160a01b0388166000908152600a60209081526040808320939093556009905220546124319085611f5b565b6000806000806125108561272e565b6001600160a01b038b16600090815260096020526040902054939750919550935091506123079085611f5b565b601a60008154811061255157612551612c04565b9060005260206000200154601681905550601a60018154811061257657612576612c04565b9060005260206000200154601781905550601a60028154811061259b5761259b612c04565b600091825260209091200154601855565b6014546013546000918291825b600f548110156126fe578260096000600f84815481106125db576125db612c04565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180612646575081600a6000600f848154811061261f5761261f612c04565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561265c57601454601354945094505050509091565b6126a260096000600f848154811061267657612676612c04565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611f5b565b92506126ea600a6000600f84815481106126be576126be612c04565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611f5b565b9150806126f681612d06565b9150506125b9565b5060135460145461270e91611909565b821015612725576014546013549350935050509091565b90939092509050565b600080600080600080612740876127f5565b915091506000806127598984612754611f38565b61281c565b909a909950939750919550919350505050565b6000612776611f38565b90506000612784838361194b565b306000908152600960205260409020549091506127a190826118a3565b30600090815260096020908152604080832093909355600e9052205460ff16156127f057306000908152600a60205260409020546127df90846118a3565b306000908152600a60205260409020555b505050565b600080600061280384612855565b905060006128118583611f5b565b959194509092505050565b6000808061282a868561194b565b90506000612838868661194b565b905060006128468383611f5b565b92989297509195505050505050565b600080612875601854610f6d6017546016546118a390919063ffffffff16565b90506119026103e8611ac8858461194b565b8280548282559060005260206000209081019282156128c2579160200282015b828111156128c25782518255916020019190600101906128a7565b506128ce9291506128d2565b5090565b5b808211156128ce57600081556001016128d3565b600060208083528351808285015260005b81811015612914578581018301518582016040015282016128f8565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c1057600080fd5b6000806040838503121561295d57600080fd5b823561296881612935565b946020939093013593505050565b60008060006060848603121561298b57600080fd5b833561299681612935565b925060208401356129a681612935565b929592945050506040919091013590565b6000602082840312156129c957600080fd5b813561190281612935565b6000602082840312156129e657600080fd5b5035919050565b80358015158114610d4b57600080fd5b60008060408385031215612a1057600080fd5b8235612a1b81612935565b9150612a29602084016129ed565b90509250929050565b600080600060608486031215612a4757600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a7057600080fd5b611902826129ed565b60008060408385031215612a8c57600080fd5b8235612a9781612935565b91506020830135612aa781612935565b809150509250929050565b600181811c90821680612ac657607f821691505b602082108103612ae657634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610a8957610a89612b21565b6020808252600c908201526b546f6f20486967682046656560a01b604082015260600190565b81810381811115610a8957610a89612b21565b8082028115828204841417610a8957610a89612b21565b600082612bb757634e487b7160e01b600052601260045260246000fd5b500490565b60208082526028908201527f457863656564696e67206d617820746f6b656e73206c696d697420696e20746860408201526719481dd85b1b195d60c21b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060208284031215612c2c57600080fd5b815161190281612935565b600081518084526020808501945080840160005b83811015612c705781516001600160a01b031687529582019590820190600101612c4b565b509495945050505050565b85815284602082015260a060408201526000612c9a60a0830186612c37565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612cd06040830184612c37565b949350505050565b600080600060608486031215612ced57600080fd5b8351925060208401519150604084015190509250925092565b600060018201612d1857612d18612b21565b506001019056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203c982c1b969520e55fbae99318994a31bbcc03b0782145ca66a823cd333aa48c64736f6c63430008130033

Deployed Bytecode Sourcemap

6212:21788:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9515:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10477:186;;;;;;;;;;-1:-1:-1;10477:186:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;10477:186:0;1023:187:1;8173:53:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;8173:53:0;1215:177:1;11827:87:0;;;;;;;;;;-1:-1:-1;11896:10:0;;11827:87;;9792:95;;;;;;;;;;-1:-1:-1;9872:7:0;;9792:95;;7918:35;;;;;;;;;;;;;;;;10671:446;;;;;;;;;;-1:-1:-1;10671:446:0;;;;;:::i;:::-;;:::i;7644:37::-;;;;;;;;;;;;;;;;9701:83;;;;;;;;;;-1:-1:-1;9767:9:0;;9701:83;;9767:9;;;;2000:36:1;;1988:2;1973:18;9701:83:0;1858:184:1;8389:32:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2211:32:1;;;2193:51;;2181:2;2166:18;8389:32:0;2047:203:1;7462:91:0;;;;;;;;;;;;;;;;11125:293;;;;;;;;;;-1:-1:-1;11125:293:0;;;;;:::i;:::-;;:::i;7380:38::-;;;;;;;;;;;;;;;;23076:108;;;;;;;;;;-1:-1:-1;23076:108:0;;;;;:::i;:::-;;:::i;:::-;;27401:231;;;;;;;;;;-1:-1:-1;27401:231:0;;;;;:::i;:::-;;:::i;5676:26::-;;;;;;;;;;-1:-1:-1;5676:26:0;;;;;;;;26020:112;;;;;;;;;;-1:-1:-1;26020:112:0;;;;;:::i;:::-;;:::i;11922:118::-;;;;;;;;;;-1:-1:-1;12010:22:0;;11922:118;;8458:40;;;;;;;;;;-1:-1:-1;8458:40:0;;;;;;;;;;;6096:109;;;;;;;;;;-1:-1:-1;6096:109:0;;;;;:::i;:::-;;:::i;27233:160::-;;;;;;;;;;-1:-1:-1;27233:160:0;;;;;:::i;:::-;;:::i;22921:147::-;;;;;;;;;;-1:-1:-1;22921:147:0;;;;;:::i;:::-;;:::i;25877:135::-;;;;;;;;;;-1:-1:-1;25877:135:0;;;;;:::i;:::-;;:::i;8096:49::-;;;;;;;;;;;;;;;;6507:67;;;;;;;;;;-1:-1:-1;6507:67:0;;;;-1:-1:-1;;;;;6507:67:0;;;27640:181;;;;;;;;;;;;;:::i;9895:198::-;;;;;;;;;;-1:-1:-1;9895:198:0;;;;;:::i;:::-;;:::i;3703:148::-;;;;;;;;;;;;;:::i;7734:31::-;;;;;;;;;;;;;;;;24558:477;;;;;;;;;;-1:-1:-1;24558:477:0;;;;;:::i;:::-;;:::i;7960:29::-;;;;;;;;;;;;;;;;6297:101;;;;;;;;;;-1:-1:-1;6297:101:0;;;;-1:-1:-1;;;;;6297:101:0;;;7425:30;;;;;;;;;;;;;;;;7337:36;;;;;;;;;;;;;;;;24003:547;;;;;;;;;;-1:-1:-1;24003:547:0;;;;;:::i;:::-;;:::i;7876:35::-;;;;;;;;;;;;;;;;8329:53;;;;;;;;;;;;;;;3489:79;;;;;;;;;;-1:-1:-1;3527:7:0;3554:6;-1:-1:-1;;;;;3554:6:0;3489:79;;6405:95;;;;;;;;;;-1:-1:-1;6405:95:0;;;;-1:-1:-1;;;;;6405:95:0;;;9606:87;;;;;;;;;;;;;:::i;6581:69::-;;;;;;;;;;-1:-1:-1;6581:69:0;;;;-1:-1:-1;;;;;6581:69:0;;;11426:393;;;;;;;;;;-1:-1:-1;11426:393:0;;;;;:::i;:::-;;:::i;10101:192::-;;;;;;;;;;-1:-1:-1;10101:192:0;;;;;:::i;:::-;;:::i;7688:39::-;;;;;;;;;;;;;;;;25043:471;;;;;;;;;;-1:-1:-1;25043:471:0;;;;;:::i;:::-;;:::i;25698:171::-;;;;;;;;;;-1:-1:-1;25698:171:0;;;;;:::i;:::-;;:::i;27829:131::-;;;;;;;;;;;;;:::i;7996:91::-;;;;;;;;;;;;;;;;26140:171;;;;;;;;;;-1:-1:-1;26140:171:0;;;;;:::i;:::-;;:::i;10301:168::-;;;;;;;;;;-1:-1:-1;10301:168:0;;;;;:::i;:::-;-1:-1:-1;;;;;10434:18:0;;;10407:7;10434:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10301:168;23192:107;;;;;;;;;;-1:-1:-1;23192:107:0;;;;;:::i;:::-;;:::i;7772:95::-;;;;;;;;;;;;;;;;25522:168;;;;;;;;;;-1:-1:-1;25522:168:0;;;;;:::i;:::-;;:::i;3859:277::-;;;;;;;;;;-1:-1:-1;3859:277:0;;;;;:::i;:::-;;:::i;6016:72::-;;;;;;;;;;;;;:::i;9515:83::-;9552:13;9585:5;9578:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9515:83;:::o;10477:186::-;10577:4;10594:39;349:10;10617:7;10626:6;10594:8;:39::i;:::-;-1:-1:-1;10651:4:0;10477:186;;;;;:::o;10671:446::-;10803:4;10820:36;10830:6;10838:9;10849:6;10820:9;:36::i;:::-;10867:220;10890:6;349:10;10938:138;10994:6;10938:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10938:19:0;;;;;;:11;:19;;;;;;;;349:10;10938:33;;;;;;;;;;:37;:138::i;:::-;10867:8;:220::i;:::-;-1:-1:-1;11105:4:0;10671:446;;;;;:::o;11125:293::-;349:10;11238:4;11327:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11327:34:0;;;;;;;;;;11238:4;;11255:133;;11305:7;;11327:50;;11366:10;11327:38;:50::i;23076:108::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;23145:24:0::1;;::::0;;;:15:::1;:24;::::0;;;;:31;;-1:-1:-1;;23145:31:0::1;23172:4;23145:31;::::0;;23076:108::o;27401:231::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;27480:12:::1;:22:::0;;;27550:7:::1;::::0;:23:::1;::::0;27571:1:::1;::::0;27550:16:::1;::::0;27562:3:::1;27550:11;:16::i;:::-;:20:::0;::::1;:23::i;:::-;27535:12;;:38;27513:102;;;::::0;-1:-1:-1;;;27513:102:0;;5482:2:1;27513:102:0::1;::::0;::::1;5464:21:1::0;5521:2;5501:18;;;5494:30;-1:-1:-1;;;5540:18:1;;;5533:44;5594:18;;27513:102:0::1;5280:338:1::0;27513:102:0::1;27401:231:::0;:::o;26020:112::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;26093:9:::1;:31:::0;;-1:-1:-1;;;;;;26093:31:0::1;-1:-1:-1::0;;;;;26093:31:0;;;::::1;::::0;;;::::1;::::0;;26020:112::o;6096:109::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6170:20:0::1;;::::0;;;:10:::1;:20;::::0;;;;:27;;-1:-1:-1;;6170:27:0::1;6193:4;6170:27;::::0;;6096:109::o;27233:160::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27348:26:0;;;::::1;;::::0;;;:17:::1;:26;::::0;;;;:37;;-1:-1:-1;;27348:37:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27233:160::o;22921:147::-;23012:4;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;;23036:24:0;::::1;;::::0;;;:15:::1;:24;::::0;;;;;::::1;;3686:1;22921:147:::0;;;:::o;25877:135::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;25961:15:::1;:43:::0;;-1:-1:-1;;;;;;25961:43:0::1;-1:-1:-1::0;;;;;25961:43:0;;;::::1;::::0;;;::::1;::::0;;25877:135::o;27640:181::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;27717:49:::1;::::0;27699:12:::1;::::0;27717:10:::1;::::0;27740:21:::1;::::0;27699:12;27717:49;27699:12;27717:49;27740:21;27717:10;:49:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27698:68;;;27785:7;27777:36;;;::::0;-1:-1:-1;;;27777:36:0;;6035:2:1;27777:36:0::1;::::0;::::1;6017:21:1::0;6074:2;6054:18;;;6047:30;-1:-1:-1;;;6093:18:1;;;6086:46;6149:18;;27777:36:0::1;5833:340:1::0;9895:198:0;-1:-1:-1;;;;;9985:20:0;;9961:7;9985:20;;;:11;:20;;;;;;;;9981:49;;;-1:-1:-1;;;;;;10014:16:0;;;;;:7;:16;;;;;;;9895:198::o;9981:49::-;-1:-1:-1;;;;;10068:16:0;;;;;;:7;:16;;;;;;10048:37;;:19;:37::i;3703:148::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;3810:1:::1;3794:6:::0;;3773:40:::1;::::0;-1:-1:-1;;;;;3794:6:0;;::::1;::::0;3773:40:::1;::::0;3810:1;;3773:40:::1;3841:1;3824:19:::0;;-1:-1:-1;;;;;;3824:19:0::1;::::0;;3703:148::o;24558:477::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;24707:18:::1;:34:::0;;;24752:18:::1;:34:::0;;;24797:12:::1;:22:::0;;;-1:-1:-1;24849:45:0::1;24812:7:::0;24849:32:::1;24728:13:::0;24773;24849:17:::1;:32::i;:::-;:36:::0;::::1;:45::i;:::-;24830:64;;24964:12;;24943:18;;24922;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;24905:14;:71:::0;25007:3:::1;24995:15:::0;::::1;;24987:40;;;;-1:-1:-1::0;;;24987:40:0::1;;;;;;;:::i;:::-;24696:339;24558:477:::0;;;:::o;24003:547::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;24151:17:::1;:33:::0;;;24195:17:::1;:33:::0;;;24239:11:::1;:21:::0;;;24271:67:::1;::::0;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;::::1;::::0;:13:::1;::::0;:67:::1;;:::i;:::-;-1:-1:-1::0;24349:16:0::1;24368:45;24405:7:::0;24368:32:::1;:13:::0;24386;24368:17:::1;:32::i;:45::-;24349:64;;24480:11;;24460:17;;24440;;:37;;;;:::i;:::-;:51;;;;:::i;:::-;24424:13;:67:::0;24522:3:::1;24510:15:::0;::::1;;24502:40;;;;-1:-1:-1::0;;;24502:40:0::1;;;;;;;:::i;9606:87::-:0;9645:13;9678:7;9671:14;;;;;:::i;11426:393::-;11544:4;11561:228;349:10;11611:7;11633:145;11690:15;11633:145;;;;;;;;;;;;;;;;;349:10;11633:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11633:34:0;;;;;;;;;;;;:38;:145::i;10101:192::-;10204:4;10221:42;349:10;10245:9;10256:6;10221:9;:42::i;25043:471::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;25196:16:::1;:32:::0;;;25239:16:::1;:32:::0;;;25282:10:::1;:20:::0;;;25295:7;25332:35:::1;25258:13:::0;25215;25332:35:::1;:::i;:::-;:48;;;;:::i;:::-;25313:16;:67:::0;25391:16:::1;25410:45;25447:7:::0;25410:32:::1;:13:::0;25428;25410:17:::1;:32::i;:45::-;25391:64;;25486:3;25474:8;:15;;25466:40;;;;-1:-1:-1::0;;;25466:40:0::1;;;;;;;:::i;25698:171::-:0;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;25813:22:::1;:48:::0;25698:171::o;27829:131::-;27874:18;27895:24;27913:4;27895:9;:24::i;:::-;27874:45;;27930:22;27941:10;27930;:22::i;26140:171::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;26217:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;26217:32:0;;::::1;;::::0;;26265:38:::1;::::0;::::1;::::0;::::1;::::0;26241:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;26265:38:0::1;;;;;;;;26140:171:::0;:::o;23192:107::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23259:24:0::1;23286:5;23259:24:::0;;;:15:::1;:24;::::0;;;;:32;;-1:-1:-1;;23259:32:0::1;::::0;;23192:107::o;25522:168::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;25597:8:::1;:22:::0;;;25650:7:::1;::::0;:14:::1;::::0;25662:1:::1;25650:11;:14::i;:::-;25638:8;;:26;;25630:52;;;::::0;-1:-1:-1;;;25630:52:0;;6983:2:1;25630:52:0::1;::::0;::::1;6965:21:1::0;7022:2;7002:18;;;6995:30;-1:-1:-1;;;7041:18:1;;;7034:43;7094:18;;25630:52:0::1;6781:337:1::0;3859:277:0;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3961:21:0;::::1;3939:109;;;::::0;-1:-1:-1;;;3939:109:0;;7325:2:1;3939:109:0::1;::::0;::::1;7307:21:1::0;7364:2;7344:18;;;7337:30;7403:34;7383:18;;;7376:62;-1:-1:-1;;;7454:18:1;;;7447:36;7500:19;;3939:109:0::1;7123:402:1::0;3939:109:0::1;4085:6;::::0;;4064:37:::1;::::0;-1:-1:-1;;;;;4064:37:0;;::::1;::::0;4085:6;::::1;::::0;4064:37:::1;::::0;::::1;4112:6;:16:::0;;-1:-1:-1;;;;;;4112:16:0::1;-1:-1:-1::0;;;;;4112:16:0;;;::::1;::::0;;;::::1;::::0;;3859:277::o;6016:72::-;3616:6;;-1:-1:-1;;;;;3616:6:0;349:10;3616:22;3608:67;;;;-1:-1:-1;;;3608:67:0;;;;;;;:::i;:::-;6067:6:::1;:13:::0;;-1:-1:-1;;6067:13:0::1;6076:4;6067:13;::::0;;6016:72::o;12363:335::-;-1:-1:-1;;;;;12456:19:0;;12448:68;;;;-1:-1:-1;;;12448:68:0;;7732:2:1;12448:68:0;;;7714:21:1;7771:2;7751:18;;;7744:30;7810:34;7790:18;;;7783:62;-1:-1:-1;;;7861:18:1;;;7854:34;7905:19;;12448:68:0;7530:400:1;12448:68:0;-1:-1:-1;;;;;12535:21:0;;12527:68;;;;-1:-1:-1;;;12527:68:0;;8137:2:1;12527:68:0;;;8119:21:1;8176:2;8156:18;;;8149:30;8215:34;8195:18;;;8188:62;-1:-1:-1;;;8266:18:1;;;8259:32;8308:19;;12527:68:0;7935:398:1;12527:68:0;-1:-1:-1;;;;;12606:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;12658:32;;1361:25:1;;;12658:32:0;;1334:18:1;12658:32:0;;;;;;;12363:335;;;:::o;12706:1321::-;5818:6;;12814:4;;12820:2;;5818:6;;;:26;;-1:-1:-1;;;;;;5828:16:0;;;;;;:10;:16;;;;;;;;5818:26;:44;;;-1:-1:-1;;;;;;5848:14:0;;;;;;:10;:14;;;;;;;;5818:44;5810:65;;;;-1:-1:-1;;;5810:65:0;;8540:2:1;5810:65:0;;;8522:21:1;8579:1;8559:18;;;8552:29;-1:-1:-1;;;8597:18:1;;;8590:38;8645:18;;5810:65:0;8338:331:1;5810:65:0;-1:-1:-1;;;;;12843:18:0;::::1;12835:68;;;::::0;-1:-1:-1;;;12835:68:0;;8876:2:1;12835:68:0::1;::::0;::::1;8858:21:1::0;8915:2;8895:18;;;8888:30;8954:34;8934:18;;;8927:62;-1:-1:-1;;;9005:18:1;;;8998:35;9050:19;;12835:68:0::1;8674:401:1::0;12835:68:0::1;-1:-1:-1::0;;;;;12922:16:0;::::1;12914:64;;;::::0;-1:-1:-1;;;12914:64:0;;9282:2:1;12914:64:0::1;::::0;::::1;9264:21:1::0;9321:2;9301:18;;;9294:30;9360:34;9340:18;;;9333:62;-1:-1:-1;;;9411:18:1;;;9404:33;9454:19;;12914:64:0::1;9080:399:1::0;12914:64:0::1;13006:1;12997:6;:10;12989:64;;;::::0;-1:-1:-1;;;12989:64:0;;9686:2:1;12989:64:0::1;::::0;::::1;9668:21:1::0;9725:2;9705:18;;;9698:30;9764:34;9744:18;;;9737:62;-1:-1:-1;;;9815:18:1;;;9808:39;9864:19;;12989:64:0::1;9484:405:1::0;12989:64:0::1;3527:7:::0;3554:6;-1:-1:-1;;;;;13068:15:0;;::::1;3554:6:::0;;13068:15:::1;::::0;::::1;::::0;:32:::1;;-1:-1:-1::0;3527:7:0;3554:6;-1:-1:-1;;;;;13087:13:0;;::::1;3554:6:::0;;13087:13:::1;;13068:32;13064:185;;;13153:8;;13143:6;:18;;13117:120;;;::::0;-1:-1:-1;;;13117:120:0;;10096:2:1;13117:120:0::1;::::0;::::1;10078:21:1::0;10135:2;10115:18;;;10108:30;10174:34;10154:18;;;10147:62;-1:-1:-1;;;10225:18:1;;;10218:38;10273:19;;13117:120:0::1;9894:404:1::0;13117:120:0::1;13261:28;13292:24;13310:4;13292:9;:24::i;:::-;13395:22;::::0;13261:55;;-1:-1:-1;13358:59:0;::::1;;13430:31;13444:4:::0;13450:2;13454:6;13430:13:::1;:31::i;:::-;13493:16;::::0;::::1;;13492:17;:42:::0;::::1;;;-1:-1:-1::0;13513:21:0::1;::::0;::::1;::::0;::::1;;;13492:42;:61;;;;;13546:7;-1:-1:-1::0;;;;;13538:15:0::1;:4;-1:-1:-1::0;;;;;13538:15:0::1;;;13492:61;13474:277;;;13584:23;13580:160;;;13651:22;;13628:45;;13692:32;13703:20;13692:10;:32::i;:::-;-1:-1:-1::0;;;;;13880:21:0;::::1;13763:12;13880:21:::0;;;:15:::1;:21;::::0;;;;;13778:4:::1;::::0;13880:21:::1;;::::0;:44:::1;;-1:-1:-1::0;;;;;;13905:19:0;::::1;;::::0;;;:15:::1;:19;::::0;;;;;::::1;;13880:44;13876:92;;;-1:-1:-1::0;13951:5:0::1;13876:92;13978:41;13993:4;13999:2;14003:6;14011:7;13978:14;:41::i;:::-;12824:1203;;;12706:1321:::0;;;;;:::o;1780:226::-;1900:7;1936:12;1928:6;;;;1920:29;;;;-1:-1:-1;;;1920:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1960:9:0;1972:5;1976:1;1972;:5;:::i;:::-;1960:17;1780:226;-1:-1:-1;;;;;1780:226:0:o;1447:181::-;1505:7;;1537:5;1541:1;1537;:5;:::i;:::-;1525:17;;1566:1;1561;:6;;1553:46;;;;-1:-1:-1;;;1553:46:0;;10638:2:1;1553:46:0;;;10620:21:1;10677:2;10657:18;;;10650:30;10716:29;10696:18;;;10689:57;10763:18;;1553:46:0;10436:351:1;1553:46:0;1619:1;1447:181;-1:-1:-1;;;1447:181:0:o;2272:132::-;2330:7;2357:39;2361:1;2364;2357:39;;;;;;;;;;;;;;;;;:3;:39::i;2014:250::-;2072:7;2096:1;2101;2096:6;2092:47;;-1:-1:-1;2126:1:0;2119:8;;2092:47;2151:9;2163:5;2167:1;2163;:5;:::i;:::-;2151:17;-1:-1:-1;2196:1:0;2187:5;2191:1;2151:17;2187:5;:::i;:::-;:10;2179:56;;;;-1:-1:-1;;;2179:56:0;;11389:2:1;2179:56:0;;;11371:21:1;11428:2;11408:18;;;11401:30;11467:34;11447:18;;;11440:62;-1:-1:-1;;;11518:18:1;;;11511:31;11559:19;;2179:56:0;11187:397:1;12048:307:0;12132:7;12185;;12174;:18;;12152:110;;;;-1:-1:-1;;;12152:110:0;;11791:2:1;12152:110:0;;;11773:21:1;11830:2;11810:18;;;11803:30;11869:34;11849:18;;;11842:62;-1:-1:-1;;;11920:18:1;;;11913:40;11970:19;;12152:110:0;11589:406:1;12152:110:0;12273:19;12295:10;:8;:10::i;:::-;12273:32;-1:-1:-1;12323:24:0;:7;12273:32;12323:11;:24::i;14035:1497::-;8796:16;:23;;-1:-1:-1;;8796:23:0;8815:4;8796:23;;;14201:11:::1;::::0;14164:17:::1;::::0;14142::::1;::::0;8796:16;;14142:81:::1;::::0;14201:11;;14142:40:::1;::::0;:21:::1;:40::i;:81::-;14116:107;;14234:24;14261:84;14322:12;;14261:42;14284:18;;14261;;:22;;:42;;;;:::i;:84::-;14234:111:::0;-1:-1:-1;14356:25:0::1;14384:37;:15:::0;14234:111;14384:19:::1;:37::i;:::-;14356:65;;14434:27;14464:136;14598:1;14464:115;14561:17;14464:78;14523:18;;14503:17;;:38;;;;:::i;:::-;14464:20:::0;;:38:::1;:78::i;:::-;:96:::0;::::1;:115::i;:136::-;14434:166:::0;-1:-1:-1;14611:22:0::1;14636:45;:20:::0;14434:166;14636:24:::1;:45::i;:::-;14611:70;;14692:32;14709:14;14692:16;:32::i;:::-;14737:18;14758:21;14737:42;;14790:23;14816:126;14940:1;14816:105;14903:17;14816:68;14865:18;;14845:17;;:38;;;;:::i;:::-;14816:10:::0;;:28:::1;:68::i;:126::-;14790:152;;14981:1;14959:19;:23;:46;;;;;15004:1;14986:15;:19;14959:46;14955:129;;;15022:50;15035:19;15056:15;15022:12;:50::i;:::-;15096:23;15122:105;15209:17;15122:68;15171:18;;15151:17;;:38;;;;:::i;:::-;15122:10:::0;;:28:::1;:68::i;:105::-;15096:131:::0;-1:-1:-1;15242:19:0;;15238:93:::1;;15278:15;::::0;:41:::1;::::0;-1:-1:-1;;;;;15278:15:0;;::::1;::::0;:41;::::1;;;::::0;15303:15;;15278::::1;:41:::0;:15;:41;15303:15;15278;:41;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15238:93;15343:17;15363:76;15413:15:::0;15363:31:::1;:10:::0;15378:15;15363:14:::1;:31::i;:::-;:35:::0;::::1;:76::i;:::-;15343:96:::0;-1:-1:-1;15454:13:0;;15450:75:::1;;15484:9;::::0;:29:::1;::::0;-1:-1:-1;;;;;15484:9:0;;::::1;::::0;:29;::::1;;;::::0;15503:9;;15484::::1;:29:::0;:9;:29;15503:9;15484;:29;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;15450:75;-1:-1:-1::0;;8842:16:0;:24;;-1:-1:-1;;8842:24:0;;;-1:-1:-1;;;;;;;;14035:1497:0:o;26615:610::-;26738:18;26759:25;26777:6;26759:13;26769:2;26759:9;:13::i;:25::-;-1:-1:-1;;;;;26800:23:0;;;;;;:17;:23;;;;;;26738:46;;-1:-1:-1;26800:23:0;;26799:24;:50;;;;-1:-1:-1;;;;;;26828:21:0;;;;;;:17;:21;;;;;;;;26827:22;26799:50;26795:211;;;26906:12;;26892:10;:26;;26866:128;;;;-1:-1:-1;;;26866:128:0;;;;;;;:::i;:::-;27028:7;-1:-1:-1;;;;;27020:15:0;:4;-1:-1:-1;;;;;27020:15:0;;:41;;;;-1:-1:-1;;;;;;27040:21:0;;;;;;:17;:21;;;;;;;;27039:22;27020:41;27016:202;;;27118:12;;27104:10;:26;;27078:128;;;;-1:-1:-1;;;27078:128:0;;;;;;;:::i;16601:953::-;16757:7;16752:288;;16781:14;23370:1;23350:17;:21;;;23382:17;:21;;;23414:11;:15;23307:130;16781:14;16752:288;;;16845:7;-1:-1:-1;;;;;16832:20:0;:9;-1:-1:-1;;;;;16832:20:0;;16828:73;;16873:12;23690:18;;23670:17;:38;23739:18;;23719:17;:38;23782:12;;23768:11;:26;23629:173;16873:12;16931:7;-1:-1:-1;;;;;16921:17:0;:6;-1:-1:-1;;;;;16921:17:0;;;:41;;;;;16955:7;-1:-1:-1;;;;;16942:20:0;:9;-1:-1:-1;;;;;16942:20:0;;;16921:41;16917:112;;;16983:30;23889:16;;23869:17;:36;23936:16;;23916:17;:36;23977:10;;23963:11;:24;23810:185;16983:30;-1:-1:-1;;;;;17056:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;17080:22:0;;;;;;:11;:22;;;;;;;;17079:23;17056:46;17052:467;;;17119:48;17141:6;17149:9;17160:6;17119:21;:48::i;:::-;17052:467;;;-1:-1:-1;;;;;17190:19:0;;;;;;:11;:19;;;;;;;;17189:20;:46;;;;-1:-1:-1;;;;;;17213:22:0;;;;;;:11;:22;;;;;;;;17189:46;17185:334;;;17252:46;17272:6;17280:9;17291:6;17252:19;:46::i;17185:334::-;-1:-1:-1;;;;;17320:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;17343:22:0;;;;;;:11;:22;;;;;;;;17320:45;17316:203;;;17382:48;17404:6;17412:9;17423:6;17382:21;:48::i;17316:203::-;17463:44;17481:6;17489:9;17500:6;17463:17;:44::i;:::-;17531:15;:13;:15::i;2412:312::-;2532:7;2567:12;2560:5;2552:28;;;;-1:-1:-1;;;2552:28:0;;;;;;;;:::i;:::-;-1:-1:-1;2591:9:0;2603:5;2607:1;2603;:5;:::i;21521:164::-;21563:7;21584:15;21601;21620:19;:17;:19::i;:::-;21583:56;;-1:-1:-1;21583:56:0;-1:-1:-1;21657:20:0;21583:56;;21657:11;:20::i;:::-;21650:27;;;;21521:164;:::o;1636:136::-;1694:7;1721:43;1725:1;1728;1721:43;;;;;;;;;;;;;;;;;:3;:43::i;15540:528::-;15630:16;;;15644:1;15630:16;;;;;;;;15606:21;;15630:16;;;;;;;;;;-1:-1:-1;15630:16:0;15606:40;;15675:4;15657;15662:1;15657:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;15657:23:0;;;-1:-1:-1;;;;;15657:23:0;;;;;15701:17;-1:-1:-1;;;;;15701:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15691:4;15696:1;15691:7;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;15691:34:0;;;-1:-1:-1;;;;;15691:34:0;;;;;15736:64;15753:4;15768:17;15788:11;15736:8;:64::i;:::-;15811:198;;-1:-1:-1;;;15811:198:0;;-1:-1:-1;;;;;15811:17:0;:68;;;;:198;;15894:11;;15920:1;;15936:4;;15963;;15983:15;;15811:198;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16025:35;16042:11;16055:4;16025:35;;;;;;;:::i;:::-;;;;;;;;15595:473;15540:528;:::o;16076:517::-;16224:64;16241:4;16256:17;16276:11;16224:8;:64::i;:::-;16331:17;-1:-1:-1;;;;;16331:33:0;;16372:9;16405:4;16425:11;16451:1;16494;16537:7;3527;3554:6;-1:-1:-1;;;;;3554:6:0;;3489:79;16537:7;16331:254;;;;;;-1:-1:-1;;;;;;16331:254:0;;;-1:-1:-1;;;;;14678:15:1;;;16331:254:0;;;14660:34:1;14710:18;;;14703:34;;;;14753:18;;;14746:34;;;;14796:18;;;14789:34;14860:15;;;14839:19;;;14832:44;16559:15:0;14892:19:1;;;14885:35;14594:19;;16331:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;16076:517;;:::o;18935:703::-;19086:15;19116:23;19154;19192:18;19224:19;19235:7;19224:10;:19::i;:::-;-1:-1:-1;;;;;19272:15:0;;;;;;:7;:15;;;;;;19071:172;;-1:-1:-1;19071:172:0;;-1:-1:-1;19071:172:0;-1:-1:-1;19071:172:0;-1:-1:-1;19272:28:0;;19292:7;19272:19;:28::i;:::-;-1:-1:-1;;;;;19254:15:0;;;;;;:7;:15;;;;;;;;:46;;;;19329:7;:15;;;;:28;;19349:7;19329:19;:28::i;:::-;-1:-1:-1;;;;;19311:15:0;;;;;;;:7;:15;;;;;;:46;;;;19389:18;;;;;;;:39;;19412:15;19389:22;:39::i;:::-;-1:-1:-1;;;;;19368:18:0;;;;;;:7;:18;;;;;:60;19439:26;19454:10;19439:14;:26::i;:::-;19498:9;-1:-1:-1;;;;;19481:44:0;19490:6;-1:-1:-1;;;;;19481:44:0;;19509:15;19481:44;;;;1361:25:1;;1349:2;1334:18;;1215:177;19481:44:0;;;;;;;;19540:14;;19536:95;;19576:43;;1361:25:1;;;19601:4:0;;-1:-1:-1;;;;;19576:43:0;;;;;1349:2:1;1334:18;19576:43:0;;;;;;;19536:95;19060:578;;;;18935:703;;;:::o;18212:715::-;18361:15;18391:23;18429;18467:18;18499:19;18510:7;18499:10;:19::i;:::-;-1:-1:-1;;;;;18547:15:0;;;;;;:7;:15;;;;;;18346:172;;-1:-1:-1;18346:172:0;;-1:-1:-1;18346:172:0;-1:-1:-1;18346:172:0;-1:-1:-1;18547:28:0;;18346:172;18547:19;:28::i;:::-;-1:-1:-1;;;;;18529:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;18607:18;;;;;:7;:18;;;;;:39;;18630:15;18607:22;:39::i;:::-;-1:-1:-1;;;;;18586:18:0;;;;;;:7;:18;;;;;;;;:60;;;;18678:7;:18;;;;:39;;18701:15;18678:22;:39::i;19646:774::-;19797:15;19827:23;19865;19903:18;19935:19;19946:7;19935:10;:19::i;:::-;-1:-1:-1;;;;;19983:15:0;;;;;;:7;:15;;;;;;19782:172;;-1:-1:-1;19782:172:0;;-1:-1:-1;19782:172:0;-1:-1:-1;19782:172:0;-1:-1:-1;19983:28:0;;20003:7;19983:19;:28::i;:::-;-1:-1:-1;;;;;19965:15:0;;;;;;:7;:15;;;;;;;;:46;;;;20040:7;:15;;;;:28;;20060:7;20040:19;:28::i;17562:642::-;17709:15;17739:23;17777;17815:18;17847:19;17858:7;17847:10;:19::i;:::-;-1:-1:-1;;;;;17895:15:0;;;;;;:7;:15;;;;;;17694:172;;-1:-1:-1;17694:172:0;;-1:-1:-1;17694:172:0;-1:-1:-1;17694:172:0;-1:-1:-1;17895:28:0;;17694:172;17895:19;:28::i;23445:176::-;23509:13;23523:1;23509:16;;;;;;;;:::i;:::-;;;;;;;;;23489:17;:36;;;;23556:13;23570:1;23556:16;;;;;;;;:::i;:::-;;;;;;;;;23536:17;:36;;;;23597:13;23611:1;23597:16;;;;;;;;:::i;:::-;;;;;;;;;;;23583:11;:30;23445:176::o;21693:605::-;21791:7;;21827;;21744;;;;;21845:338;21869:9;:16;21865:20;;21845:338;;;21953:7;21929;:21;21937:9;21947:1;21937:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21937:12:0;21929:21;;;;;;;;;;;;;:31;;:83;;;22005:7;21981;:21;21989:9;21999:1;21989:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21989:12:0;21981:21;;;;;;;;;;;;;:31;21929:83;21907:146;;;22036:7;;22045;;22028:25;;;;;;;21693:605;;:::o;21907:146::-;22078:34;22090:7;:21;22098:9;22108:1;22098:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22098:12:0;22090:21;;;;;;;;;;;;;22078:7;;:11;:34::i;:::-;22068:44;;22137:34;22149:7;:21;22157:9;22167:1;22157:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;22157:12:0;22149:21;;;;;;;;;;;;;22137:7;;:11;:34::i;:::-;22127:44;-1:-1:-1;21887:3:0;;;;:::i;:::-;;;;21845:338;;;-1:-1:-1;22219:7:0;;22207;;:20;;:11;:20::i;:::-;22197:7;:30;22193:61;;;22237:7;;22246;;22229:25;;;;;;21693:605;;:::o;22193:61::-;22273:7;;22282;;-1:-1:-1;21693:605:0;-1:-1:-1;21693:605:0:o;20428:421::-;20503:7;20512;20521;20530;20551:23;20576:18;20598:20;20610:7;20598:11;:20::i;:::-;20550:68;;;;20630:15;20647:23;20674:94;20700:7;20722:10;20747;:8;:10::i;:::-;20674:11;:94::i;:::-;20629:139;;;;-1:-1:-1;20813:15:0;;-1:-1:-1;20830:10:0;;-1:-1:-1;20428:421:0;;-1:-1:-1;;;;20428:421:0:o;22306:368::-;22369:19;22391:10;:8;:10::i;:::-;22369:32;-1:-1:-1;22412:18:0;22433:27;:10;22369:32;22433:14;:27::i;:::-;22512:4;22496:22;;;;:7;:22;;;;;;22412:48;;-1:-1:-1;22496:38:0;;22412:48;22496:26;:38::i;:::-;22487:4;22471:22;;;;:7;:22;;;;;;;;:63;;;;22549:11;:26;;;;;;22545:122;;;22633:4;22617:22;;;;:7;:22;;;;;;:38;;22644:10;22617:26;:38::i;:::-;22608:4;22592:22;;;;:7;:22;;;;;:63;22545:122;22358:316;;22306:368;:::o;20857:271::-;20933:7;20942;20962:18;20983:30;21005:7;20983:21;:30::i;:::-;20962:51;-1:-1:-1;21024:23:0;21050;:7;20962:51;21050:11;:23::i;:::-;21024:49;21109:10;;-1:-1:-1;20857:271:0;;-1:-1:-1;;;20857:271:0:o;21136:377::-;21271:7;;;21318:24;:7;21330:11;21318;:24::i;:::-;21300:42;-1:-1:-1;21353:18:0;21374:27;:10;21389:11;21374:14;:27::i;:::-;21353:48;-1:-1:-1;21412:23:0;21438;:7;21353:48;21438:11;:23::i;:::-;21480:7;;;;-1:-1:-1;21136:377:0;;-1:-1:-1;;;;;;21136:377:0:o;22682:231::-;22768:7;22788:12;22803:57;22848:11;;22803:40;22825:17;;22803;;:21;;:40;;;;:::i;:57::-;22788:72;-1:-1:-1;22878:27:0;22900:4;22878:17;:7;22788:72;22878:11;:17::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:548:1;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2255:247::-;2314:6;2367:2;2355:9;2346:7;2342:23;2338:32;2335:52;;;2383:1;2380;2373:12;2335:52;2422:9;2409:23;2441:31;2466:5;2441:31;:::i;2507:180::-;2566:6;2619:2;2607:9;2598:7;2594:23;2590:32;2587:52;;;2635:1;2632;2625:12;2587:52;-1:-1:-1;2658:23:1;;2507:180;-1:-1:-1;2507:180:1:o;2692:160::-;2757:20;;2813:13;;2806:21;2796:32;;2786:60;;2842:1;2839;2832:12;2857:315;2922:6;2930;2983:2;2971:9;2962:7;2958:23;2954:32;2951:52;;;2999:1;2996;2989:12;2951:52;3038:9;3025:23;3057:31;3082:5;3057:31;:::i;:::-;3107:5;-1:-1:-1;3131:35:1;3162:2;3147:18;;3131:35;:::i;:::-;3121:45;;2857:315;;;;;:::o;3177:316::-;3254:6;3262;3270;3323:2;3311:9;3302:7;3298:23;3294:32;3291:52;;;3339:1;3336;3329:12;3291:52;-1:-1:-1;;3362:23:1;;;3432:2;3417:18;;3404:32;;-1:-1:-1;3483:2:1;3468:18;;;3455:32;;3177:316;-1:-1:-1;3177:316:1:o;3956:180::-;4012:6;4065:2;4053:9;4044:7;4040:23;4036:32;4033:52;;;4081:1;4078;4071:12;4033:52;4104:26;4120:9;4104:26;:::i;4141:388::-;4209:6;4217;4270:2;4258:9;4249:7;4245:23;4241:32;4238:52;;;4286:1;4283;4276:12;4238:52;4325:9;4312:23;4344:31;4369:5;4344:31;:::i;:::-;4394:5;-1:-1:-1;4451:2:1;4436:18;;4423:32;4464:33;4423:32;4464:33;:::i;:::-;4516:7;4506:17;;;4141:388;;;;;:::o;4534:380::-;4613:1;4609:12;;;;4656;;;4677:61;;4731:4;4723:6;4719:17;4709:27;;4677:61;4784:2;4776:6;4773:14;4753:18;4750:38;4747:161;;4830:10;4825:3;4821:20;4818:1;4811:31;4865:4;4862:1;4855:15;4893:4;4890:1;4883:15;4747:161;;4534:380;;;:::o;4919:356::-;5121:2;5103:21;;;5140:18;;;5133:30;5199:34;5194:2;5179:18;;5172:62;5266:2;5251:18;;4919:356::o;6178:127::-;6239:10;6234:3;6230:20;6227:1;6220:31;6270:4;6267:1;6260:15;6294:4;6291:1;6284:15;6310:125;6375:9;;;6396:10;;;6393:36;;;6409:18;;:::i;6440:336::-;6642:2;6624:21;;;6681:2;6661:18;;;6654:30;-1:-1:-1;;;6715:2:1;6700:18;;6693:42;6767:2;6752:18;;6440:336::o;10303:128::-;10370:9;;;10391:11;;;10388:37;;;10405:18;;:::i;10792:168::-;10865:9;;;10896;;10913:15;;;10907:22;;10893:37;10883:71;;10934:18;;:::i;10965:217::-;11005:1;11031;11021:132;;11075:10;11070:3;11066:20;11063:1;11056:31;11110:4;11107:1;11100:15;11138:4;11135:1;11128:15;11021:132;-1:-1:-1;11167:9:1;;10965:217::o;12000:404::-;12202:2;12184:21;;;12241:2;12221:18;;;12214:30;12280:34;12275:2;12260:18;;12253:62;-1:-1:-1;;;12346:2:1;12331:18;;12324:38;12394:3;12379:19;;12000:404::o;12541:127::-;12602:10;12597:3;12593:20;12590:1;12583:31;12633:4;12630:1;12623:15;12657:4;12654:1;12647:15;12673:251;12743:6;12796:2;12784:9;12775:7;12771:23;12767:32;12764:52;;;12812:1;12809;12802:12;12764:52;12844:9;12838:16;12863:31;12888:5;12863:31;:::i;12929:461::-;12982:3;13020:5;13014:12;13047:6;13042:3;13035:19;13073:4;13102:2;13097:3;13093:12;13086:19;;13139:2;13132:5;13128:14;13160:1;13170:195;13184:6;13181:1;13178:13;13170:195;;;13249:13;;-1:-1:-1;;;;;13245:39:1;13233:52;;13305:12;;;;13340:15;;;;13281:1;13199:9;13170:195;;;-1:-1:-1;13381:3:1;;12929:461;-1:-1:-1;;;;;12929:461:1:o;13395:582::-;13694:6;13683:9;13676:25;13737:6;13732:2;13721:9;13717:18;13710:34;13780:3;13775:2;13764:9;13760:18;13753:31;13657:4;13801:57;13853:3;13842:9;13838:19;13830:6;13801:57;:::i;:::-;-1:-1:-1;;;;;13894:32:1;;;;13889:2;13874:18;;13867:60;-1:-1:-1;13958:3:1;13943:19;13936:35;13793:65;13395:582;-1:-1:-1;;;13395:582:1:o;13982:332::-;14189:6;14178:9;14171:25;14232:2;14227;14216:9;14212:18;14205:30;14152:4;14252:56;14304:2;14293:9;14289:18;14281:6;14252:56;:::i;:::-;14244:64;13982:332;-1:-1:-1;;;;13982:332:1:o;14931:306::-;15019:6;15027;15035;15088:2;15076:9;15067:7;15063:23;15059:32;15056:52;;;15104:1;15101;15094:12;15056:52;15133:9;15127:16;15117:26;;15183:2;15172:9;15168:18;15162:25;15152:35;;15227:2;15216:9;15212:18;15206:25;15196:35;;14931:306;;;;;:::o;15242:135::-;15281:3;15302:17;;;15299:43;;15322:18;;:::i;:::-;-1:-1:-1;15369:1:1;15358:13;;15242:135::o

Swarm Source

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