ETH Price: $3,253.23 (-0.05%)
Gas: 21 Gwei

Token

MISS PLEB (MPLEB)
 

Overview

Max Total Supply

123,123,123,123,123 MPLEB

Holders

32

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
btcbb.eth
Balance
0.734138704 MPLEB

Value
$0.00
0x3f82b96ecb4ae1aca8876df7f9dffa8337944d34
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
MISSPLEB

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*                                                                                      
                                                                                                                
She is here plebs 

MISSPLEB Smart Contract

Telegram Portal: https://t.me/MissPleb
*/

// SPDX-License-Identifier: MIT


pragma solidity ^0.8.4;
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */

interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

pragma solidity ^0.8.4;
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

pragma solidity ^0.8.4;
/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

pragma solidity ^0.8.4;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be 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;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

pragma solidity ^0.8.4;

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

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

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

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

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

pragma solidity ^0.8.4;

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

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

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

pragma solidity ^0.8.4;

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

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

pragma solidity ^0.8.4;

contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () public {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

pragma solidity ^0.8.4;

contract MISSPLEB is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    mapping (address => uint256) public _rOwned;

    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public _isExcludedFromFee;
    mapping(address => bool) public _isBlacklisted;

    address public _PresaleAddress = 0x000000000000000000000000000000000000dEaD;
    bool public liquidityLaunched = false;
    bool public isFirstLaunch = true;
    uint256 public lastSnipeTaxBlock;
    uint8 public snipeBlocks = 2;
    
    uint256 private constant MAX = ~uint256(0);
    uint256 private constant _tTotal = 123123123123123000000000;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    
    uint256 private _redisFeeOnBuy = 0;
    uint256 private _taxFeeOnBuy = 15;
    
    uint256 private _redisFeeOnSell = 0;
    uint256 private _taxFeeOnSell = 15;
    
    uint256 private _redisFee;
    uint256 private _taxFee;
    
    string private constant _name = "MISS PLEB";
    string private constant _symbol = "MPLEB";
    uint8 private constant _decimals = 9;
    
    address payable private _appAddress = payable(0x264Da3082474f2a621C85aA5E8077Bbe1CeF9A5D);
    address payable private _marketingAddress = payable(0x264Da3082474f2a621C85aA5E8077Bbe1CeF9A5D);
    address payable private _buybackAddress = payable(0xe032FC225191aB2729cad293b75Cc2e5Ab3DE6fF);
    address payable private _burnAddress = payable(0xe032FC225191aB2729cad293b75Cc2e5Ab3DE6fF);

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
    
    bool private inSwap = false;
    bool private swapEnabled = true;
    
    modifier lockTheSwap {
        inSwap = true;
        _;
        inSwap = false;
    }
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_appAddress] = true;
        _isExcludedFromFee[_marketingAddress] = true;
        _isExcludedFromFee[_buybackAddress] = true;
        _isExcludedFromFee[_burnAddress] = true;

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

    function setSnipeBlocks(uint8 _blocks) external onlyOwner {
        require(!liquidityLaunched);
        snipeBlocks = _blocks;
    }

    function setPresaleContract(address payable wallet) external onlyOwner{
        _PresaleAddress = wallet;
        excludeFromFees(_PresaleAddress, true);
    }

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

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

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

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

    function balanceOf(address account) public view override returns (uint256) {
        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 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 {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(!_isBlacklisted[from], 'Blacklisted address');

        _redisFee = 0;
        _taxFee = 0;

        // No adding liquidity before launched
        if (!liquidityLaunched) {
            if (to == uniswapV2Pair) {
                liquidityLaunched = true;
                // high tax ends in x blocks
                lastSnipeTaxBlock = block.number + snipeBlocks;
            }
        }

        //antibot block
        if (from != address(_PresaleAddress)) {
            if(liquidityLaunched && block.number <= lastSnipeTaxBlock && !isFirstLaunch){
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
                _tokenTransfer(from,to,amount);
                if (to != address(uniswapV2Pair)) {
                    _isBlacklisted[to]=true;
                }
                return;
            }
        }

        if (liquidityLaunched && isFirstLaunch){
            isFirstLaunch = false;
        }
        
        if (from != owner() && to != owner()) {
            
            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && from != uniswapV2Pair && swapEnabled && contractTokenBalance > 0) {
                swapTokensForEth(contractTokenBalance);
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
            }
            
            if(from == uniswapV2Pair && to != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnBuy;
                _taxFee = _taxFeeOnBuy;
            }
    
            if (to == uniswapV2Pair && from != address(uniswapV2Router)) {
                _redisFee = _redisFeeOnSell;
                _taxFee = _taxFeeOnSell;
            }
            
            if ((_isExcludedFromFee[from] || _isExcludedFromFee[to]) || (from != uniswapV2Pair && to != uniswapV2Pair)) {
                _redisFee = 0;
                _taxFee = 0;
            }
            
        }

        _tokenTransfer(from,to,amount);
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        uint256 devAmount = amount.mul(2).div(7);
        uint256 mktAmount = amount.mul(2).div(7);
        uint256 buybackAmount = amount.mul(2).div(7);
        uint256 burnAmount = amount.sub(devAmount).sub(mktAmount).sub(buybackAmount);
        _appAddress.transfer(devAmount);
        _marketingAddress.transfer(mktAmount);
        _buybackAddress.transfer(buybackAmount);
        _burnAddress.transfer(burnAmount);
    }
    
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        _transferStandard(sender, recipient, amount);
    }

    event tokensRescued(address indexed token, address indexed to, uint amount);
    function rescueForeignTokens(address _tokenAddr, address _to, uint _amount) public onlyOwner {
        emit tokensRescued(_tokenAddr, _to, _amount);	
        IERC20(_tokenAddr).transfer(_to, _amount);
    }
    
    event appAddressUpdated(address indexed previous, address indexed adr);
    function setNewAppAddress(address payable appaddr) public onlyOwner {
        emit appAddressUpdated(_appAddress, appaddr);	
        _appAddress = appaddr;
        _isExcludedFromFee[_appAddress] = true;
    }
    
    event marketingAddressUpdated(address indexed previous, address indexed adr);
    function setNewMarketingAddress(address payable markt) public onlyOwner {
        emit marketingAddressUpdated(_marketingAddress, markt);	
        _marketingAddress = markt;
        _isExcludedFromFee[_marketingAddress] = true;
    }

    event burnAddressUpdated(address indexed previous, address indexed adr);
    function setNewBurnAddress(address payable burnaddr) public onlyOwner {
        emit burnAddressUpdated(_burnAddress, burnaddr);	
        _burnAddress = burnaddr;
        _isExcludedFromFee[_burnAddress] = true;
    }

    event buybackAddressUpdated(address indexed previous, address indexed adr);
    function setNewBuybackAddress(address payable buybackaddr) public onlyOwner {
        emit buybackAddressUpdated(_buybackAddress, buybackaddr);	
        _buybackAddress = buybackaddr;
        _isExcludedFromFee[_buybackAddress] = true;
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        uint256 currentRate =  _getRate();
        uint256 tTransferAmount = tAmount.sub(tAmount.mul(_redisFee).div(100)).sub(tAmount.mul(_taxFee).div(100));
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tAmount.mul(_redisFee).div(100).mul(currentRate);
        uint256 rTeam = tAmount.mul(_taxFee).div(100).mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rTeam);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _rOwned[address(this)] = _rOwned[address(this)].add(rTeam);
        _reflectFee(rFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    /**
     * only thing to change _rTotal
     */
    function _reflectFee(uint256 rFee) private {
        _rTotal = _rTotal.sub(rFee);
    }

    receive() external payable {}

	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;      
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function manualswap() external {
        require(_msgSender() == owner());
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForEth(contractBalance);
    }

    function manualsend() external {
        require(_msgSender() == owner());
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }
    
    function setFee(uint256 redisFeeOnBuy, uint256 redisFeeOnSell, uint256 taxFeeOnBuy, uint256 taxFeeOnSell) public onlyOwner {
	    require(redisFeeOnBuy < 5, "Redis cannot be more than 5.");
	    require(redisFeeOnSell < 5, "Redis cannot be more than 5.");
	    require(taxFeeOnBuy < 25, "Tax cannot be more than 25.");
	    require(taxFeeOnSell < 25, "Tax cannot be more than 25.");
        _redisFeeOnBuy = redisFeeOnBuy;
        _redisFeeOnSell = redisFeeOnSell;
        _taxFeeOnBuy = taxFeeOnBuy;
        _taxFeeOnSell = taxFeeOnSell;
    }
    
    function toggleSwap(bool _swapEnabled) public onlyOwner {
        swapEnabled = _swapEnabled;
    }

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

    event ExcludeFromFees(address indexed account, bool isExcluded);
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFee[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    event BlacklistAddress(address indexed account, bool value);
    function blacklistAddress(address account, bool value) public onlyOwner{
        _isBlacklisted[account] = value;
        emit BlacklistAddress(account, value);
    }

    event BlacklistMultiAddresses(address[] accounts, bool value);
    function blacklistMultiAddresses(address[] calldata accounts, bool value) public onlyOwner{
        for(uint256 i = 0; i < accounts.length; i++) {
            _isBlacklisted[accounts[i]] = value;
        }
        emit BlacklistMultiAddresses(accounts, value);
    }

 function clearStuckBalance(address addr) external onlyOwner{
        (bool sent,) =payable(addr).call{value: (address(this).balance)}("");
        require(sent);
    }

    function withdrawToken(address _tokenContract, uint256 _amount) external onlyOwner {
    IERC20 tokenContract = IERC20(_tokenContract);

    // needs to execute `approve()` on the token contract to allow itself the transfer
    tokenContract.approve(address(this), _amount);

    tokenContract.transferFrom(address(this), owner(), _amount);
}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"value","type":"bool"}],"name":"BlacklistMultiAddresses","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"appAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"burnAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"buybackAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previous","type":"address"},{"indexed":true,"internalType":"address","name":"adr","type":"address"}],"name":"marketingAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"tokensRescued","type":"event"},{"inputs":[],"name":"_PresaleAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_rOwned","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"blacklistMultiAddresses","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isFirstLaunch","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastSnipeTaxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualsend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualswap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueForeignTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"redisFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"redisFeeOnSell","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnBuy","type":"uint256"},{"internalType":"uint256","name":"taxFeeOnSell","type":"uint256"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"appaddr","type":"address"}],"name":"setNewAppAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"burnaddr","type":"address"}],"name":"setNewBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"buybackaddr","type":"address"}],"name":"setNewBuybackAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"markt","type":"address"}],"name":"setNewMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"setPresaleContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_blocks","type":"uint8"}],"name":"setSnipeBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipeBlocks","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"bool","name":"_swapEnabled","type":"bool"}],"name":"toggleSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenContract","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260058054750100000000000000000000000000000000000000dead6001600160b01b03199091161790556007805460ff1916600217905562000053691a128493b2375df93e0060001962000442565b62000061906000196200041e565b60085560006009819055600f600a819055600b91909155600c81905580546001600160a01b031990811673264da3082474f2a621c85aa5e8077bbe1cef9a5d90811790925560108054821690921790915560118054821673e032fc225191ab2729cad293b75cc2e5ab3de6ff908117909155601280549092161790556014805461ffff60a01b1916600160a81b179055348015620000fe57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506008543360009081526001602090815260409182902092909255601380546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155815163c45a015560e01b815291519092839263c45a01559260048083019392829003018186803b158015620001b757600080fd5b505afa158015620001cc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001f29190620003ee565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200023b57600080fd5b505afa15801562000250573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002769190620003ee565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002bf57600080fd5b505af1158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa9190620003ee565b601480546001600160a01b0319166001600160a01b03928316179055600080548216815260036020526040808220805460ff1990811660019081179092553084528284208054821683179055600f54851684528284208054821683179055601054851684528284208054821683179055601154851684528284208054821683179055601254909416835291208054909216179055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef691a128493b2375df93e00604051620003df91815260200190565b60405180910390a35062000463565b60006020828403121562000400578081fd5b81516001600160a01b038116811462000417578182fd5b9392505050565b6000828210156200043d57634e487b7160e01b81526011600452602481fd5b500390565b6000826200045e57634e487b7160e01b81526012600452602481fd5b500690565b6125e180620004736000396000f3fe6080604052600436106102345760003560e01c8063758dbe031161012e578063a9bbd114116100ab578063c492f0461161006f578063c492f046146106e5578063dd62ed3e14610705578063e293d3161461074b578063f2fde38b1461076b578063fca419ae1461078b57600080fd5b8063a9bbd11414610650578063a9f6151814610670578063aa77ed6714610690578063c0246668146106b0578063c3c8cd80146106d057600080fd5b80639e281a98116100f25780639e281a98146105b05780639f3d1360146105d0578063a2a957bb146105f0578063a2fff11414610610578063a9059cbb1461063057600080fd5b8063758dbe03146104f4578063764d72bf14610514578063768dc710146105345780638da5cb5b1461056457806395d89b411461058257600080fd5b806323b872dd116101bc5780636a1961c4116101805780636a1961c4146104745780636d8aa8f81461048a5780636fc3eaec146104aa57806370a08231146104bf578063715018a6146104df57600080fd5b806323b872dd146103d25780632be29fa8146103f2578063313ce5671461041e578063455a43961461043257806349bd5a5e1461045457600080fd5b80631694505e116102035780631694505e14610323578063181281291461034357806318160ddd146103645780631cdd3be3146103815780631eb147d5146103b157600080fd5b8063032bba6a1461024057806306fdde031461027d578063095ea7b3146102b85780630cfc15f9146102e857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b50600554610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028957600080fd5b5060408051808201909152600981526826a4a9a990282622a160b91b60208201525b60405161027491906123c9565b3480156102c457600080fd5b506102d86102d336600461223a565b6107ab565b6040519015158152602001610274565b3480156102f457600080fd5b5061031561030336600461215d565b60016020526000908152604090205481565b604051908152602001610274565b34801561032f57600080fd5b50601354610260906001600160a01b031681565b34801561034f57600080fd5b506005546102d890600160a81b900460ff1681565b34801561037057600080fd5b50691a128493b2375df93e00610315565b34801561038d57600080fd5b506102d861039c36600461215d565b60046020526000908152604090205460ff1681565b3480156103bd57600080fd5b506005546102d890600160a01b900460ff1681565b3480156103de57600080fd5b506102d86103ed3660046121cd565b6107c2565b3480156103fe57600080fd5b5060075461040c9060ff1681565b60405160ff9091168152602001610274565b34801561042a57600080fd5b50600961040c565b34801561043e57600080fd5b5061045261044d36600461220d565b61082b565b005b34801561046057600080fd5b50601454610260906001600160a01b031681565b34801561048057600080fd5b5061031560065481565b34801561049657600080fd5b506104526104a53660046122e6565b6108be565b3480156104b657600080fd5b50610452610906565b3480156104cb57600080fd5b506103156104da36600461215d565b61092a565b3480156104eb57600080fd5b5061045261094c565b34801561050057600080fd5b5061045261050f36600461215d565b6109c0565b34801561052057600080fd5b5061045261052f36600461215d565b610a5e565b34801561054057600080fd5b506102d861054f36600461215d565b60036020526000908152604090205460ff1681565b34801561057057600080fd5b506000546001600160a01b0316610260565b34801561058e57600080fd5b5060408051808201909152600581526426a82622a160d91b60208201526102ab565b3480156105bc57600080fd5b506104526105cb36600461223a565b610aec565b3480156105dc57600080fd5b506104526105eb36600461215d565b610c49565b3480156105fc57600080fd5b5061045261060b36600461231e565b610ce7565b34801561061c57600080fd5b5061045261062b36600461215d565b610e65565b34801561063c57600080fd5b506102d861064b36600461223a565b610f03565b34801561065c57600080fd5b5061045261066b36600461215d565b610f10565b34801561067c57600080fd5b5061045261068b36600461234f565b610f63565b34801561069c57600080fd5b506104526106ab36600461215d565b610fba565b3480156106bc57600080fd5b506104526106cb36600461220d565b611058565b3480156106dc57600080fd5b506104526110da565b3480156106f157600080fd5b50610452610700366004612265565b611107565b34801561071157600080fd5b50610315610720366004612195565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561075757600080fd5b506104526107663660046121cd565b6111f1565b34801561077757600080fd5b5061045261078636600461215d565b61129d565b34801561079757600080fd5b506104526107a6366004612265565b611387565b60006107b8338484611464565b5060015b92915050565b60006107cf848484611588565b610821843361081c85604051806060016040528060288152602001612584602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906119ec565b611464565b5060019392505050565b6000546001600160a01b0316331461085e5760405162461bcd60e51b81526004016108559061241c565b60405180910390fd5b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b6000546001600160a01b031633146108e85760405162461bcd60e51b81526004016108559061241c565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461091d57600080fd5b4761092781611a26565b50565b6001600160a01b0381166000908152600160205260408120546107bc90611b74565b6000546001600160a01b031633146109765760405162461bcd60e51b81526004016108559061241c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109ea5760405162461bcd60e51b81526004016108559061241c565b6010546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b90600090a3601080546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610a885760405162461bcd60e51b81526004016108559061241c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ad5576040519150601f19603f3d011682016040523d82523d6000602084013e610ada565b606091505b5050905080610ae857600080fd5b5050565b6000546001600160a01b03163314610b165760405162461bcd60e51b81526004016108559061241c565b60405163095ea7b360e01b81523060048201526024810182905282906001600160a01b0382169063095ea7b390604401602060405180830381600087803b158015610b6057600080fd5b505af1158015610b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b989190612302565b50806001600160a01b03166323b872dd30610bbb6000546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064015b602060405180830381600087803b158015610c0b57600080fd5b505af1158015610c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c439190612302565b50505050565b6000546001600160a01b03163314610c735760405162461bcd60e51b81526004016108559061241c565b600f546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c3990600090a3600f80546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610d115760405162461bcd60e51b81526004016108559061241c565b60058410610d615760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610855565b60058310610db15760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610855565b60198210610e015760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610855565b60198110610e515760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610855565b600993909355600b91909155600a55600c55565b6000546001600160a01b03163314610e8f5760405162461bcd60e51b81526004016108559061241c565b6011546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc90600090a3601180546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b60006107b8338484611588565b6000546001600160a01b03163314610f3a5760405162461bcd60e51b81526004016108559061241c565b600580546001600160a01b0319166001600160a01b038316908117909155610927906001611058565b6000546001600160a01b03163314610f8d5760405162461bcd60e51b81526004016108559061241c565b600554600160a01b900460ff1615610fa457600080fd5b6007805460ff191660ff92909216919091179055565b6000546001600160a01b03163314610fe45760405162461bcd60e51b81526004016108559061241c565b6012546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f4090600090a3601280546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b031633146110825760405162461bcd60e51b81526004016108559061241c565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108b2565b6000546001600160a01b031633146110f157600080fd5b60006110fc3061092a565b905061092781611bf8565b6000546001600160a01b031633146111315760405162461bcd60e51b81526004016108559061241c565b60005b828110156111b057816003600086868581811061116157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611176919061215d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806111a88161252f565b915050611134565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516111e493929190612370565b60405180910390a1505050565b6000546001600160a01b0316331461121b5760405162461bcd60e51b81526004016108559061241c565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161126091815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401610bf1565b6000546001600160a01b031633146112c75760405162461bcd60e51b81526004016108559061241c565b6001600160a01b03811661132c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610855565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113b15760405162461bcd60e51b81526004016108559061241c565b60005b828110156114305781600460008686858181106113e157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113f6919061215d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114288161252f565b9150506113b4565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf68383836040516111e493929190612370565b6001600160a01b0383166114c65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610855565b6001600160a01b0382166115275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610855565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115ec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610855565b6001600160a01b03821661164e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610855565b600081116116b05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610855565b6001600160a01b03831660009081526004602052604090205460ff161561170f5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610855565b6000600d819055600e55600554600160a01b900460ff16611767576014546001600160a01b0383811691161415611767576005805460ff60a01b1916600160a01b1790556007546117639060ff16436124c1565b6006555b6005546001600160a01b0384811691161461180757600554600160a01b900460ff16801561179757506006544311155b80156117ad5750600554600160a81b900460ff16155b1561180757600954600d55600a54600e556117c9838383611d9d565b6014546001600160a01b03838116911614611802576001600160a01b0382166000908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156118295750600554600160a81b900460ff165b1561183c576005805460ff60a81b191690555b6000546001600160a01b0384811691161480159061186857506000546001600160a01b03838116911614155b156119e15760006118783061092a565b601454909150600160a01b900460ff161580156118a357506014546001600160a01b03858116911614155b80156118b85750601454600160a81b900460ff165b80156118c45750600081115b156118e4576118d281611bf8565b4780156118e2576118e247611a26565b505b6014546001600160a01b03858116911614801561190f57506013546001600160a01b03848116911614155b1561192157600954600d55600a54600e555b6014546001600160a01b03848116911614801561194c57506013546001600160a01b03858116911614155b1561195e57600b54600d55600c54600e555b6001600160a01b03841660009081526003602052604090205460ff168061199d57506001600160a01b03831660009081526003602052604090205460ff165b806119cf57506014546001600160a01b038581169116148015906119cf57506014546001600160a01b03848116911614155b156119df576000600d819055600e555b505b611802838383611d9d565b60008184841115611a105760405162461bcd60e51b815260040161085591906123c9565b506000611a1d8486612518565b95945050505050565b6000611a3e6007611a38846002611da8565b90611e27565b90506000611a526007611a38856002611da8565b90506000611a666007611a38866002611da8565b90506000611a8082611a7a85818989611e69565b90611e69565b600f546040519192506001600160a01b03169085156108fc029086906000818181858888f19350505050158015611abb573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611af6573d6000803e3d6000fd5b506011546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611b31573d6000803e3d6000fd5b506012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611b6c573d6000803e3d6000fd5b505050505050565b6000600854821115611bdb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610855565b6000611be5611eab565b9050611bf18382611e27565b9392505050565b6014805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611c4e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611ca257600080fd5b505afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda9190612179565b81600181518110611cfb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601354611d219130911684611464565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d5a908590600090869030904290600401612451565b600060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b611802838383611ece565b600082611db7575060006107bc565b6000611dc383856124f9565b905082611dd085836124d9565b14611bf15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610855565b6000611bf183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612079565b6000611bf183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119ec565b6000806000611eb86120a7565b9092509050611ec78282611e27565b9250505090565b6000611ed8611eab565b90506000611f1d611ef96064611a38600e5487611da890919063ffffffff16565b611a7a611f166064611a38600d5489611da890919063ffffffff16565b8690611e69565b90506000611f2b8484611da8565b90506000611f5384611f4d6064611a38600d548a611da890919063ffffffff16565b90611da8565b90506000611f7585611f4d6064611a38600e548b611da890919063ffffffff16565b90506000611f8782611a7a8686611e69565b6001600160a01b038a16600090815260016020526040902054909150611fad9085611e69565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611fdc90826120eb565b6001600160a01b03891660009081526001602052604080822092909255308152205461200890836120eb565b306000908152600160205260409020556120218361214a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161206691815260200190565b60405180910390a3505050505050505050565b6000818361209a5760405162461bcd60e51b815260040161085591906123c9565b506000611a1d84866124d9565b6008546000908190691a128493b2375df93e006120c48282611e27565b8210156120e257505060085492691a128493b2375df93e0092509050565b90939092509050565b6000806120f883856124c1565b905083811015611bf15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610855565b6008546121579082611e69565b60085550565b60006020828403121561216e578081fd5b8135611bf181612560565b60006020828403121561218a578081fd5b8151611bf181612560565b600080604083850312156121a7578081fd5b82356121b281612560565b915060208301356121c281612560565b809150509250929050565b6000806000606084860312156121e1578081fd5b83356121ec81612560565b925060208401356121fc81612560565b929592945050506040919091013590565b6000806040838503121561221f578182fd5b823561222a81612560565b915060208301356121c281612575565b6000806040838503121561224c578182fd5b823561225781612560565b946020939093013593505050565b600080600060408486031215612279578283fd5b833567ffffffffffffffff80821115612290578485fd5b818601915086601f8301126122a3578485fd5b8135818111156122b1578586fd5b8760208260051b85010111156122c5578586fd5b602092830195509350508401356122db81612575565b809150509250925092565b6000602082840312156122f7578081fd5b8135611bf181612575565b600060208284031215612313578081fd5b8151611bf181612575565b60008060008060808587031215612333578081fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612360578081fd5b813560ff81168114611bf1578182fd5b6040808252810183905260008460608301825b868110156123b357823561239681612560565b6001600160a01b0316825260209283019290910190600101612383565b5080925050508215156020830152949350505050565b6000602080835283518082850152825b818110156123f5578581018301518582016040015282016123d9565b818111156124065783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156124a05784516001600160a01b03168352938301939183019160010161247b565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156124d4576124d461254a565b500190565b6000826124f457634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156125135761251361254a565b500290565b60008282101561252a5761252a61254a565b500390565b60006000198214156125435761254361254a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461092757600080fd5b801515811461092757600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220692d94457ee59d1e1416c132768610655fb0dbd24830c4368a09196507fa60a364736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063758dbe031161012e578063a9bbd114116100ab578063c492f0461161006f578063c492f046146106e5578063dd62ed3e14610705578063e293d3161461074b578063f2fde38b1461076b578063fca419ae1461078b57600080fd5b8063a9bbd11414610650578063a9f6151814610670578063aa77ed6714610690578063c0246668146106b0578063c3c8cd80146106d057600080fd5b80639e281a98116100f25780639e281a98146105b05780639f3d1360146105d0578063a2a957bb146105f0578063a2fff11414610610578063a9059cbb1461063057600080fd5b8063758dbe03146104f4578063764d72bf14610514578063768dc710146105345780638da5cb5b1461056457806395d89b411461058257600080fd5b806323b872dd116101bc5780636a1961c4116101805780636a1961c4146104745780636d8aa8f81461048a5780636fc3eaec146104aa57806370a08231146104bf578063715018a6146104df57600080fd5b806323b872dd146103d25780632be29fa8146103f2578063313ce5671461041e578063455a43961461043257806349bd5a5e1461045457600080fd5b80631694505e116102035780631694505e14610323578063181281291461034357806318160ddd146103645780631cdd3be3146103815780631eb147d5146103b157600080fd5b8063032bba6a1461024057806306fdde031461027d578063095ea7b3146102b85780630cfc15f9146102e857600080fd5b3661023b57005b600080fd5b34801561024c57600080fd5b50600554610260906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561028957600080fd5b5060408051808201909152600981526826a4a9a990282622a160b91b60208201525b60405161027491906123c9565b3480156102c457600080fd5b506102d86102d336600461223a565b6107ab565b6040519015158152602001610274565b3480156102f457600080fd5b5061031561030336600461215d565b60016020526000908152604090205481565b604051908152602001610274565b34801561032f57600080fd5b50601354610260906001600160a01b031681565b34801561034f57600080fd5b506005546102d890600160a81b900460ff1681565b34801561037057600080fd5b50691a128493b2375df93e00610315565b34801561038d57600080fd5b506102d861039c36600461215d565b60046020526000908152604090205460ff1681565b3480156103bd57600080fd5b506005546102d890600160a01b900460ff1681565b3480156103de57600080fd5b506102d86103ed3660046121cd565b6107c2565b3480156103fe57600080fd5b5060075461040c9060ff1681565b60405160ff9091168152602001610274565b34801561042a57600080fd5b50600961040c565b34801561043e57600080fd5b5061045261044d36600461220d565b61082b565b005b34801561046057600080fd5b50601454610260906001600160a01b031681565b34801561048057600080fd5b5061031560065481565b34801561049657600080fd5b506104526104a53660046122e6565b6108be565b3480156104b657600080fd5b50610452610906565b3480156104cb57600080fd5b506103156104da36600461215d565b61092a565b3480156104eb57600080fd5b5061045261094c565b34801561050057600080fd5b5061045261050f36600461215d565b6109c0565b34801561052057600080fd5b5061045261052f36600461215d565b610a5e565b34801561054057600080fd5b506102d861054f36600461215d565b60036020526000908152604090205460ff1681565b34801561057057600080fd5b506000546001600160a01b0316610260565b34801561058e57600080fd5b5060408051808201909152600581526426a82622a160d91b60208201526102ab565b3480156105bc57600080fd5b506104526105cb36600461223a565b610aec565b3480156105dc57600080fd5b506104526105eb36600461215d565b610c49565b3480156105fc57600080fd5b5061045261060b36600461231e565b610ce7565b34801561061c57600080fd5b5061045261062b36600461215d565b610e65565b34801561063c57600080fd5b506102d861064b36600461223a565b610f03565b34801561065c57600080fd5b5061045261066b36600461215d565b610f10565b34801561067c57600080fd5b5061045261068b36600461234f565b610f63565b34801561069c57600080fd5b506104526106ab36600461215d565b610fba565b3480156106bc57600080fd5b506104526106cb36600461220d565b611058565b3480156106dc57600080fd5b506104526110da565b3480156106f157600080fd5b50610452610700366004612265565b611107565b34801561071157600080fd5b50610315610720366004612195565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b34801561075757600080fd5b506104526107663660046121cd565b6111f1565b34801561077757600080fd5b5061045261078636600461215d565b61129d565b34801561079757600080fd5b506104526107a6366004612265565b611387565b60006107b8338484611464565b5060015b92915050565b60006107cf848484611588565b610821843361081c85604051806060016040528060288152602001612584602891396001600160a01b038a16600090815260026020908152604080832033845290915290205491906119ec565b611464565b5060019392505050565b6000546001600160a01b0316331461085e5760405162461bcd60e51b81526004016108559061241c565b60405180910390fd5b6001600160a01b038216600081815260046020908152604091829020805460ff191685151590811790915591519182527f09fb98d4f02479ce251faed0f992a3c326d006e19ffa4f7269239763a644f72591015b60405180910390a25050565b6000546001600160a01b031633146108e85760405162461bcd60e51b81526004016108559061241c565b60148054911515600160a81b0260ff60a81b19909216919091179055565b6000546001600160a01b0316331461091d57600080fd5b4761092781611a26565b50565b6001600160a01b0381166000908152600160205260408120546107bc90611b74565b6000546001600160a01b031633146109765760405162461bcd60e51b81526004016108559061241c565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146109ea5760405162461bcd60e51b81526004016108559061241c565b6010546040516001600160a01b038084169216907fa64373a629bc0c09eacf8a9cc2c7b070fa0a8b7e2e9b8aaee408a3c02eb1676b90600090a3601080546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610a885760405162461bcd60e51b81526004016108559061241c565b6000816001600160a01b03164760405160006040518083038185875af1925050503d8060008114610ad5576040519150601f19603f3d011682016040523d82523d6000602084013e610ada565b606091505b5050905080610ae857600080fd5b5050565b6000546001600160a01b03163314610b165760405162461bcd60e51b81526004016108559061241c565b60405163095ea7b360e01b81523060048201526024810182905282906001600160a01b0382169063095ea7b390604401602060405180830381600087803b158015610b6057600080fd5b505af1158015610b74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b989190612302565b50806001600160a01b03166323b872dd30610bbb6000546001600160a01b031690565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604481018590526064015b602060405180830381600087803b158015610c0b57600080fd5b505af1158015610c1f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c439190612302565b50505050565b6000546001600160a01b03163314610c735760405162461bcd60e51b81526004016108559061241c565b600f546040516001600160a01b038084169216907f898685b0c7235e80e6620a105663fe2b66911194a7fa848f2a7541afc2dc5c3990600090a3600f80546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b03163314610d115760405162461bcd60e51b81526004016108559061241c565b60058410610d615760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610855565b60058310610db15760405162461bcd60e51b815260206004820152601c60248201527f52656469732063616e6e6f74206265206d6f7265207468616e20352e000000006044820152606401610855565b60198210610e015760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610855565b60198110610e515760405162461bcd60e51b815260206004820152601b60248201527f5461782063616e6e6f74206265206d6f7265207468616e2032352e00000000006044820152606401610855565b600993909355600b91909155600a55600c55565b6000546001600160a01b03163314610e8f5760405162461bcd60e51b81526004016108559061241c565b6011546040516001600160a01b038084169216907fe8e67054d01d5f7e0f5ffeb6db0b1fb4a40329cd5b38ddbc92060382ec2358fc90600090a3601180546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b60006107b8338484611588565b6000546001600160a01b03163314610f3a5760405162461bcd60e51b81526004016108559061241c565b600580546001600160a01b0319166001600160a01b038316908117909155610927906001611058565b6000546001600160a01b03163314610f8d5760405162461bcd60e51b81526004016108559061241c565b600554600160a01b900460ff1615610fa457600080fd5b6007805460ff191660ff92909216919091179055565b6000546001600160a01b03163314610fe45760405162461bcd60e51b81526004016108559061241c565b6012546040516001600160a01b038084169216907f78c7c060c9bc33c6b42b3e972a9f710e466fa2c77b4f7083869b041492f00f4090600090a3601280546001600160a01b039092166001600160a01b0319909216821790556000908152600360205260409020805460ff19166001179055565b6000546001600160a01b031633146110825760405162461bcd60e51b81526004016108559061241c565b6001600160a01b038216600081815260036020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791016108b2565b6000546001600160a01b031633146110f157600080fd5b60006110fc3061092a565b905061092781611bf8565b6000546001600160a01b031633146111315760405162461bcd60e51b81526004016108559061241c565b60005b828110156111b057816003600086868581811061116157634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611176919061215d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806111a88161252f565b915050611134565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b358383836040516111e493929190612370565b60405180910390a1505050565b6000546001600160a01b0316331461121b5760405162461bcd60e51b81526004016108559061241c565b816001600160a01b0316836001600160a01b03167f47c33aa230eb5fd181505aa7befeaddd9b8a6f983989cea73a7868448c3a9ed98360405161126091815260200190565b60405180910390a360405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401610bf1565b6000546001600160a01b031633146112c75760405162461bcd60e51b81526004016108559061241c565b6001600160a01b03811661132c5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610855565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146113b15760405162461bcd60e51b81526004016108559061241c565b60005b828110156114305781600460008686858181106113e157634e487b7160e01b600052603260045260246000fd5b90506020020160208101906113f6919061215d565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806114288161252f565b9150506113b4565b507fd09d39390fc688d281adc0e04befeb10838d7a58109b6eb8c29db9b251ebccf68383836040516111e493929190612370565b6001600160a01b0383166114c65760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610855565b6001600160a01b0382166115275760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610855565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115ec5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610855565b6001600160a01b03821661164e5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610855565b600081116116b05760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610855565b6001600160a01b03831660009081526004602052604090205460ff161561170f5760405162461bcd60e51b8152602060048201526013602482015272426c61636b6c6973746564206164647265737360681b6044820152606401610855565b6000600d819055600e55600554600160a01b900460ff16611767576014546001600160a01b0383811691161415611767576005805460ff60a01b1916600160a01b1790556007546117639060ff16436124c1565b6006555b6005546001600160a01b0384811691161461180757600554600160a01b900460ff16801561179757506006544311155b80156117ad5750600554600160a81b900460ff16155b1561180757600954600d55600a54600e556117c9838383611d9d565b6014546001600160a01b03838116911614611802576001600160a01b0382166000908152600460205260409020805460ff191660011790555b505050565b600554600160a01b900460ff1680156118295750600554600160a81b900460ff165b1561183c576005805460ff60a81b191690555b6000546001600160a01b0384811691161480159061186857506000546001600160a01b03838116911614155b156119e15760006118783061092a565b601454909150600160a01b900460ff161580156118a357506014546001600160a01b03858116911614155b80156118b85750601454600160a81b900460ff165b80156118c45750600081115b156118e4576118d281611bf8565b4780156118e2576118e247611a26565b505b6014546001600160a01b03858116911614801561190f57506013546001600160a01b03848116911614155b1561192157600954600d55600a54600e555b6014546001600160a01b03848116911614801561194c57506013546001600160a01b03858116911614155b1561195e57600b54600d55600c54600e555b6001600160a01b03841660009081526003602052604090205460ff168061199d57506001600160a01b03831660009081526003602052604090205460ff165b806119cf57506014546001600160a01b038581169116148015906119cf57506014546001600160a01b03848116911614155b156119df576000600d819055600e555b505b611802838383611d9d565b60008184841115611a105760405162461bcd60e51b815260040161085591906123c9565b506000611a1d8486612518565b95945050505050565b6000611a3e6007611a38846002611da8565b90611e27565b90506000611a526007611a38856002611da8565b90506000611a666007611a38866002611da8565b90506000611a8082611a7a85818989611e69565b90611e69565b600f546040519192506001600160a01b03169085156108fc029086906000818181858888f19350505050158015611abb573d6000803e3d6000fd5b506010546040516001600160a01b039091169084156108fc029085906000818181858888f19350505050158015611af6573d6000803e3d6000fd5b506011546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015611b31573d6000803e3d6000fd5b506012546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611b6c573d6000803e3d6000fd5b505050505050565b6000600854821115611bdb5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610855565b6000611be5611eab565b9050611bf18382611e27565b9392505050565b6014805460ff60a01b1916600160a01b1790556040805160028082526060820183526000926020830190803683370190505090503081600081518110611c4e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601354604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611ca257600080fd5b505afa158015611cb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cda9190612179565b81600181518110611cfb57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601354611d219130911684611464565b60135460405163791ac94760e01b81526001600160a01b039091169063791ac94790611d5a908590600090869030904290600401612451565b600060405180830381600087803b158015611d7457600080fd5b505af1158015611d88573d6000803e3d6000fd5b50506014805460ff60a01b1916905550505050565b611802838383611ece565b600082611db7575060006107bc565b6000611dc383856124f9565b905082611dd085836124d9565b14611bf15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610855565b6000611bf183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612079565b6000611bf183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506119ec565b6000806000611eb86120a7565b9092509050611ec78282611e27565b9250505090565b6000611ed8611eab565b90506000611f1d611ef96064611a38600e5487611da890919063ffffffff16565b611a7a611f166064611a38600d5489611da890919063ffffffff16565b8690611e69565b90506000611f2b8484611da8565b90506000611f5384611f4d6064611a38600d548a611da890919063ffffffff16565b90611da8565b90506000611f7585611f4d6064611a38600e548b611da890919063ffffffff16565b90506000611f8782611a7a8686611e69565b6001600160a01b038a16600090815260016020526040902054909150611fad9085611e69565b6001600160a01b03808b1660009081526001602052604080822093909355908a1681522054611fdc90826120eb565b6001600160a01b03891660009081526001602052604080822092909255308152205461200890836120eb565b306000908152600160205260409020556120218361214a565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8760405161206691815260200190565b60405180910390a3505050505050505050565b6000818361209a5760405162461bcd60e51b815260040161085591906123c9565b506000611a1d84866124d9565b6008546000908190691a128493b2375df93e006120c48282611e27565b8210156120e257505060085492691a128493b2375df93e0092509050565b90939092509050565b6000806120f883856124c1565b905083811015611bf15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610855565b6008546121579082611e69565b60085550565b60006020828403121561216e578081fd5b8135611bf181612560565b60006020828403121561218a578081fd5b8151611bf181612560565b600080604083850312156121a7578081fd5b82356121b281612560565b915060208301356121c281612560565b809150509250929050565b6000806000606084860312156121e1578081fd5b83356121ec81612560565b925060208401356121fc81612560565b929592945050506040919091013590565b6000806040838503121561221f578182fd5b823561222a81612560565b915060208301356121c281612575565b6000806040838503121561224c578182fd5b823561225781612560565b946020939093013593505050565b600080600060408486031215612279578283fd5b833567ffffffffffffffff80821115612290578485fd5b818601915086601f8301126122a3578485fd5b8135818111156122b1578586fd5b8760208260051b85010111156122c5578586fd5b602092830195509350508401356122db81612575565b809150509250925092565b6000602082840312156122f7578081fd5b8135611bf181612575565b600060208284031215612313578081fd5b8151611bf181612575565b60008060008060808587031215612333578081fd5b5050823594602084013594506040840135936060013592509050565b600060208284031215612360578081fd5b813560ff81168114611bf1578182fd5b6040808252810183905260008460608301825b868110156123b357823561239681612560565b6001600160a01b0316825260209283019290910190600101612383565b5080925050508215156020830152949350505050565b6000602080835283518082850152825b818110156123f5578581018301518582016040015282016123d9565b818111156124065783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156124a05784516001600160a01b03168352938301939183019160010161247b565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156124d4576124d461254a565b500190565b6000826124f457634e487b7160e01b81526012600452602481fd5b500490565b60008160001904831182151516156125135761251361254a565b500290565b60008282101561252a5761252a61254a565b500390565b60006000198214156125435761254361254a565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461092757600080fd5b801515811461092757600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220692d94457ee59d1e1416c132768610655fb0dbd24830c4368a09196507fa60a364736f6c63430008040033

Deployed Bytecode Sourcemap

16687:14312:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17020:75;;;;;;;;;;-1:-1:-1;17020:75:0;;;;-1:-1:-1;;;;;17020:75:0;;;;;;-1:-1:-1;;;;;4802:32:1;;;4784:51;;4772:2;4757:18;17020:75:0;;;;;;;;19597:83;;;;;;;;;;-1:-1:-1;19667:5:0;;;;;;;;;;;;-1:-1:-1;;;19667:5:0;;;;19597:83;;;;;;;:::i;20449:161::-;;;;;;;;;;-1:-1:-1;20449:161:0;;;;;:::i;:::-;;:::i;:::-;;;6472:14:1;;6465:22;6447:41;;6435:2;6420:18;20449:161:0;6402:92:1;16779:43:0;;;;;;;;;;-1:-1:-1;16779:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;12513:25:1;;;12501:2;12486:18;16779:43:0;12468:76:1;18230:41:0;;;;;;;;;;-1:-1:-1;18230:41:0;;;;-1:-1:-1;;;;;18230:41:0;;;17146:32;;;;;;;;;;-1:-1:-1;17146:32:0;;;;-1:-1:-1;;;17146:32:0;;;;;;19874:95;;;;;;;;;;-1:-1:-1;17349:24:0;19874:95;;16965:46;;;;;;;;;;-1:-1:-1;16965:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;17102:37;;;;;;;;;;-1:-1:-1;17102:37:0;;;;-1:-1:-1;;;17102:37:0;;;;;;20618:313;;;;;;;;;;-1:-1:-1;20618:313:0;;;;;:::i;:::-;;:::i;17224:28::-;;;;;;;;;;-1:-1:-1;17224:28:0;;;;;;;;;;;13709:4:1;13697:17;;;13679:36;;13667:2;13652:18;17224:28:0;13634:87:1;19783:83:0;;;;;;;;;;-1:-1:-1;17819:1:0;19783:83;;29948:169;;;;;;;;;;-1:-1:-1;29948:169:0;;;;;:::i;:::-;;:::i;:::-;;18278:28;;;;;;;;;;-1:-1:-1;18278:28:0;;;;-1:-1:-1;;;;;18278:28:0;;;17185:32;;;;;;;;;;;;;;;;29124:101;;;;;;;;;;-1:-1:-1;29124:101:0;;;;;:::i;:::-;;:::i;28361:186::-;;;;;;;;;;;;;:::i;19977:138::-;;;;;;;;;;-1:-1:-1;19977:138:0;;;;;:::i;:::-;;:::i;16106:148::-;;;;;;;;;;;;;:::i;25840:237::-;;;;;;;;;;-1:-1:-1;25840:237:0;;;;;:::i;:::-;;:::i;30469:170::-;;;;;;;;;;-1:-1:-1;30469:170:0;;;;;:::i;:::-;;:::i;16907:51::-;;;;;;;;;;-1:-1:-1;16907:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15464:79;;;;;;;;;;-1:-1:-1;15502:7:0;15529:6;-1:-1:-1;;;;;15529:6:0;15464:79;;19688:87;;;;;;;;;;-1:-1:-1;19760:7:0;;;;;;;;;;;;-1:-1:-1;;;19760:7:0;;;;19688:87;;30647:349;;;;;;;;;;-1:-1:-1;30647:349:0;;;;;:::i;:::-;;:::i;25532:213::-;;;;;;;;;;-1:-1:-1;25532:213:0;;;;;:::i;:::-;;:::i;28559:553::-;;;;;;;;;;-1:-1:-1;28559:553:0;;;;;:::i;:::-;;:::i;26473:245::-;;;;;;;;;;-1:-1:-1;26473:245:0;;;;;:::i;:::-;;:::i;20123:167::-;;;;;;;;;;-1:-1:-1;20123:167:0;;;;;:::i;:::-;;:::i;19427:162::-;;;;;;;;;;-1:-1:-1;19427:162:0;;;;;:::i;:::-;;:::i;19283:136::-;;;;;;;;;;-1:-1:-1;19283:136:0;;;;;:::i;:::-;;:::i;26163:221::-;;;;;;;;;;-1:-1:-1;26163:221:0;;;;;:::i;:::-;;:::i;29693:181::-;;;;;;;;;;-1:-1:-1;29693:181:0;;;;;:::i;:::-;;:::i;28166:187::-;;;;;;;;;;;;;:::i;29314:301::-;;;;;;;;;;-1:-1:-1;29314:301:0;;;;;:::i;:::-;;:::i;20298:143::-;;;;;;;;;;-1:-1:-1;20298:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;20406:18:0;;;20379:7;20406:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;20298:143;25234:209;;;;;;;;;;-1:-1:-1;25234:209:0;;;;;:::i;:::-;;:::i;16409:244::-;;;;;;;;;;-1:-1:-1;16409:244:0;;;;;:::i;:::-;;:::i;30193:271::-;;;;;;;;;;-1:-1:-1;30193:271:0;;;;;:::i;:::-;;:::i;20449:161::-;20524:4;20541:39;3755:10;20564:7;20573:6;20541:8;:39::i;:::-;-1:-1:-1;20598:4:0;20449:161;;;;;:::o;20618:313::-;20716:4;20733:36;20743:6;20751:9;20762:6;20733:9;:36::i;:::-;20780:121;20789:6;3755:10;20811:89;20849:6;20811:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20811:19:0;;;;;;:11;:19;;;;;;;;3755:10;20811:33;;;;;;;;;;:37;:89::i;:::-;20780:8;:121::i;:::-;-1:-1:-1;20919:4:0;20618:313;;;;;:::o;29948:169::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;30030:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:31;;-1:-1:-1;;30030:31:0::1;::::0;::::1;;::::0;;::::1;::::0;;;30077:32;;6447:41:1;;;30077:32:0::1;::::0;6420:18:1;30077:32:0::1;;;;;;;;29948:169:::0;;:::o;29124:101::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;29191:11:::1;:26:::0;;;::::1;;-1:-1:-1::0;;;29191:26:0::1;-1:-1:-1::0;;;;29191:26:0;;::::1;::::0;;;::::1;::::0;;29124:101::o;28361:186::-;15502:7;15529:6;-1:-1:-1;;;;;15529:6:0;3755:10;28411:23;28403:32;;;;;;28475:21;28507:32;28475:21;28507:12;:32::i;:::-;28361:186;:::o;19977:138::-;-1:-1:-1;;;;;20090:16:0;;20043:7;20090:16;;;:7;:16;;;;;;20070:37;;:19;:37::i;16106:148::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;16213:1:::1;16197:6:::0;;16176:40:::1;::::0;-1:-1:-1;;;;;16197:6:0;;::::1;::::0;16176:40:::1;::::0;16213:1;;16176:40:::1;16244:1;16227:19:::0;;-1:-1:-1;;;;;;16227:19:0::1;::::0;;16106:148::o;25840:237::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;25952:17:::1;::::0;25928:49:::1;::::0;-1:-1:-1;;;;;25928:49:0;;::::1;::::0;25952:17:::1;::::0;25928:49:::1;::::0;25952:17:::1;::::0;25928:49:::1;25989:17;:25:::0;;-1:-1:-1;;;;;25989:25:0;;::::1;-1:-1:-1::0;;;;;;25989:25:0;;::::1;::::0;::::1;::::0;;:17:::1;26025:37:::0;;;:18:::1;:37;::::0;;;;:44;;-1:-1:-1;;26025:44:0::1;25989:25:::0;26025:44:::1;::::0;;25840:237::o;30469:170::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;30540:9:::1;30561:4;-1:-1:-1::0;;;;;30553:18:0::1;30580:21;30553:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30539:68;;;30626:4;30618:13;;;::::0;::::1;;15746:1;30469:170:::0;:::o;30647:349::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;30879:45:::1;::::0;-1:-1:-1;;;30879:45:0;;30909:4:::1;30879:45;::::0;::::1;5400:51:1::0;5467:18;;;5460:34;;;30767:14:0;;-1:-1:-1;;;;;30879:21:0;::::1;::::0;::::1;::::0;5373:18:1;;30879:45:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30933:13;-1:-1:-1::0;;;;;30933:26:0::1;;30968:4;30975:7;15502::::0;15529:6;-1:-1:-1;;;;;15529:6:0;;15464:79;30975:7:::1;30933:59;::::0;-1:-1:-1;;;;;;30933:59:0::1;::::0;;;;;;-1:-1:-1;;;;;5104:15:1;;;30933:59:0::1;::::0;::::1;5086:34:1::0;5156:15;;5136:18;;;5129:43;5188:18;;;5181:34;;;5021:18;;30933:59:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15746:1;30647:349:::0;;:::o;25532:213::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;25634:11:::1;::::0;25616:39:::1;::::0;-1:-1:-1;;;;;25616:39:0;;::::1;::::0;25634:11:::1;::::0;25616:39:::1;::::0;25634:11:::1;::::0;25616:39:::1;25667:11;:21:::0;;-1:-1:-1;;;;;25667:21:0;;::::1;-1:-1:-1::0;;;;;;25667:21:0;;::::1;::::0;::::1;::::0;;:11:::1;25699:31:::0;;;:18:::1;:31;::::0;;;;:38;;-1:-1:-1;;25699:38:0::1;25667:21:::0;25699:38:::1;::::0;;25532:213::o;28559:553::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;28714:1:::1;28698:13;:17;28690:58;;;::::0;-1:-1:-1;;;28690:58:0;;11401:2:1;28690:58:0::1;::::0;::::1;11383:21:1::0;11440:2;11420:18;;;11413:30;11479;11459:18;;;11452:58;11527:18;;28690:58:0::1;11373:178:1::0;28690:58:0::1;28781:1;28764:14;:18;28756:59;;;::::0;-1:-1:-1;;;28756:59:0;;11401:2:1;28756:59:0::1;::::0;::::1;11383:21:1::0;11440:2;11420:18;;;11413:30;11479;11459:18;;;11452:58;11527:18;;28756:59:0::1;11373:178:1::0;28756:59:0::1;28845:2;28831:11;:16;28823:56;;;::::0;-1:-1:-1;;;28823:56:0;;10274:2:1;28823:56:0::1;::::0;::::1;10256:21:1::0;10313:2;10293:18;;;10286:30;10352:29;10332:18;;;10325:57;10399:18;;28823:56:0::1;10246:177:1::0;28823:56:0::1;28910:2;28895:12;:17;28887:57;;;::::0;-1:-1:-1;;;28887:57:0;;10274:2:1;28887:57:0::1;::::0;::::1;10256:21:1::0;10313:2;10293:18;;;10286:30;10352:29;10332:18;;;10325:57;10399:18;;28887:57:0::1;10246:177:1::0;28887:57:0::1;28955:14;:30:::0;;;;28996:15:::1;:32:::0;;;;29039:12:::1;:26:::0;29076:13:::1;:28:::0;28559:553::o;26473:245::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;26587:15:::1;::::0;26565:51:::1;::::0;-1:-1:-1;;;;;26565:51:0;;::::1;::::0;26587:15:::1;::::0;26565:51:::1;::::0;26587:15:::1;::::0;26565:51:::1;26628:15;:29:::0;;-1:-1:-1;;;;;26628:29:0;;::::1;-1:-1:-1::0;;;;;;26628:29:0;;::::1;::::0;::::1;::::0;;:15:::1;26668:35:::0;;;:18:::1;:35;::::0;;;;:42;;-1:-1:-1;;26668:42:0::1;26628:29:::0;26668:42:::1;::::0;;26473:245::o;20123:167::-;20201:4;20218:42;3755:10;20242:9;20253:6;20218:9;:42::i;19427:162::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;19508:15:::1;:24:::0;;-1:-1:-1;;;;;;19508:24:0::1;-1:-1:-1::0;;;;;19508:24:0;::::1;::::0;;::::1;::::0;;;19543:38:::1;::::0;-1:-1:-1;19543:15:0::1;:38::i;19283:136::-:0;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;19361:17:::1;::::0;-1:-1:-1;;;19361:17:0;::::1;;;19360:18;19352:27;;;::::0;::::1;;19390:11;:21:::0;;-1:-1:-1;;19390:21:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;19283:136::o;26163:221::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;26268:12:::1;::::0;26249:42:::1;::::0;-1:-1:-1;;;;;26249:42:0;;::::1;::::0;26268:12:::1;::::0;26249:42:::1;::::0;26268:12:::1;::::0;26249:42:::1;26303:12;:23:::0;;-1:-1:-1;;;;;26303:23:0;;::::1;-1:-1:-1::0;;;;;;26303:23:0;;::::1;::::0;::::1;::::0;;:12:::1;26337:32:::0;;;:18:::1;:32;::::0;;;;:39;;-1:-1:-1;;26337:39:0::1;26303:23:::0;26337:39:::1;::::0;;26163:221::o;29693:181::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29778:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;;;;:38;;-1:-1:-1;;29778:38:0::1;::::0;::::1;;::::0;;::::1;::::0;;;29832:34;;6447:41:1;;;29832:34:0::1;::::0;6420:18:1;29832:34:0::1;6402:92:1::0;28166:187:0;15502:7;15529:6;-1:-1:-1;;;;;15529:6:0;3755:10;28216:23;28208:32;;;;;;28251:23;28277:24;28295:4;28277:9;:24::i;:::-;28251:50;;28312:33;28329:15;28312:16;:33::i;29314:301::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;29431:9:::1;29427:114;29446:19:::0;;::::1;29427:114;;;29521:8;29487:18;:31;29506:8;;29515:1;29506:11;;;;;-1:-1:-1::0;;;29506:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29487:31:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;29487:31:0;:42;;-1:-1:-1;;29487:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29467:3;::::1;::::0;::::1;:::i;:::-;;;;29427:114;;;;29556:51;29588:8;;29598;29556:51;;;;;;;;:::i;:::-;;;;;;;;29314:301:::0;;;:::o;25234:209::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;25369:3:::1;-1:-1:-1::0;;;;;25343:39:0::1;25357:10;-1:-1:-1::0;;;;;25343:39:0::1;;25374:7;25343:39;;;;12513:25:1::0;;12501:2;12486:18;;12468:76;25343:39:0::1;;;;;;;;25394:41;::::0;-1:-1:-1;;;25394:41:0;;-1:-1:-1;;;;;5418:32:1;;;25394:41:0::1;::::0;::::1;5400:51:1::0;5467:18;;;5460:34;;;25394:27:0;::::1;::::0;::::1;::::0;5373:18:1;;25394:41:0::1;5355:145:1::0;16409:244:0;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16498:22:0;::::1;16490:73;;;::::0;-1:-1:-1;;;16490:73:0;;8358:2:1;16490:73:0::1;::::0;::::1;8340:21:1::0;8397:2;8377:18;;;8370:30;8436:34;8416:18;;;8409:62;-1:-1:-1;;;8487:18:1;;;8480:36;8533:19;;16490:73:0::1;8330:228:1::0;16490:73:0::1;16600:6;::::0;;16579:38:::1;::::0;-1:-1:-1;;;;;16579:38:0;;::::1;::::0;16600:6;::::1;::::0;16579:38:::1;::::0;::::1;16628:6;:17:::0;;-1:-1:-1;;;;;;16628:17:0::1;-1:-1:-1::0;;;;;16628:17:0;;;::::1;::::0;;;::::1;::::0;;16409:244::o;30193:271::-;15676:6;;-1:-1:-1;;;;;15676:6:0;3755:10;15676:22;15668:67;;;;-1:-1:-1;;;15668:67:0;;;;;;;:::i;:::-;30298:9:::1;30294:107;30313:19:::0;;::::1;30294:107;;;30384:5;30354:14;:27;30369:8;;30378:1;30369:11;;;;;-1:-1:-1::0;;;30369:11:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30354:27:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;30354:27:0;:35;;-1:-1:-1;;30354:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30334:3;::::1;::::0;::::1;:::i;:::-;;;;30294:107;;;;30416:40;30440:8;;30450:5;30416:40;;;;;;;;:::i;21201:335::-:0;-1:-1:-1;;;;;21294:19:0;;21286:68;;;;-1:-1:-1;;;21286:68:0;;12164:2:1;21286:68:0;;;12146:21:1;12203:2;12183:18;;;12176:30;12242:34;12222:18;;;12215:62;-1:-1:-1;;;12293:18:1;;;12286:34;12337:19;;21286:68:0;12136:226:1;21286:68:0;-1:-1:-1;;;;;21373:21:0;;21365:68;;;;-1:-1:-1;;;21365:68:0;;8765:2:1;21365:68:0;;;8747:21:1;8804:2;8784:18;;;8777:30;8843:34;8823:18;;;8816:62;-1:-1:-1;;;8894:18:1;;;8887:32;8936:19;;21365:68:0;8737:224:1;21365:68:0;-1:-1:-1;;;;;21444:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;21496:32;;12513:25:1;;;21496:32:0;;12486:18:1;21496:32:0;;;;;;;21201:335;;;:::o;21544:2453::-;-1:-1:-1;;;;;21632:18:0;;21624:68;;;;-1:-1:-1;;;21624:68:0;;11758:2:1;21624:68:0;;;11740:21:1;11797:2;11777:18;;;11770:30;11836:34;11816:18;;;11809:62;-1:-1:-1;;;11887:18:1;;;11880:35;11932:19;;21624:68:0;11730:227:1;21624:68:0;-1:-1:-1;;;;;21711:16:0;;21703:64;;;;-1:-1:-1;;;21703:64:0;;7543:2:1;21703:64:0;;;7525:21:1;7582:2;7562:18;;;7555:30;7621:34;7601:18;;;7594:62;-1:-1:-1;;;7672:18:1;;;7665:33;7715:19;;21703:64:0;7515:225:1;21703:64:0;21795:1;21786:6;:10;21778:64;;;;-1:-1:-1;;;21778:64:0;;10991:2:1;21778:64:0;;;10973:21:1;11030:2;11010:18;;;11003:30;11069:34;11049:18;;;11042:62;-1:-1:-1;;;11120:18:1;;;11113:39;11169:19;;21778:64:0;10963:231:1;21778:64:0;-1:-1:-1;;;;;21862:20:0;;;;;;:14;:20;;;;;;;;21861:21;21853:53;;;;-1:-1:-1;;;21853:53:0;;9524:2:1;21853:53:0;;;9506:21:1;9563:2;9543:18;;;9536:30;-1:-1:-1;;;9582:18:1;;;9575:49;9641:18;;21853:53:0;9496:169:1;21853:53:0;21931:1;21919:9;:13;;;21943:7;:11;22020:17;;-1:-1:-1;;;22020:17:0;;;;22015:245;;22064:13;;-1:-1:-1;;;;;22058:19:0;;;22064:13;;22058:19;22054:195;;;22098:17;:24;;-1:-1:-1;;;;22098:24:0;-1:-1:-1;;;22098:24:0;;;22222:11;;22207:26;;22098:24;22222:11;22207:12;:26;:::i;:::-;22187:17;:46;22054:195;22317:15;;-1:-1:-1;;;;;22301:32:0;;;22317:15;;22301:32;22297:434;;22353:17;;-1:-1:-1;;;22353:17:0;;;;:54;;;;;22390:17;;22374:12;:33;;22353:54;:72;;;;-1:-1:-1;22412:13:0;;-1:-1:-1;;;22412:13:0;;;;22411:14;22353:72;22350:370;;;22457:14;;22445:9;:26;22500:12;;22490:7;:22;22531:30;22546:4;22551:2;22554:6;22531:14;:30::i;:::-;22598:13;;-1:-1:-1;;;;;22584:28:0;;;22598:13;;22584:28;22580:100;;-1:-1:-1;;;;;22637:18:0;;;;;;:14;:18;;;;;:23;;-1:-1:-1;;22637:23:0;22656:4;22637:23;;;22580:100;21544:2453;;;:::o;22350:370::-;22747:17;;-1:-1:-1;;;22747:17:0;;;;:34;;;;-1:-1:-1;22768:13:0;;-1:-1:-1;;;22768:13:0;;;;22747:34;22743:87;;;22797:13;:21;;-1:-1:-1;;;;22797:21:0;;;22743:87;15502:7;15529:6;-1:-1:-1;;;;;22854:15:0;;;15529:6;;22854:15;;;;:32;;-1:-1:-1;15502:7:0;15529:6;-1:-1:-1;;;;;22873:13:0;;;15529:6;;22873:13;;22854:32;22850:1097;;;22917:28;22948:24;22966:4;22948:9;:24::i;:::-;22992:6;;22917:55;;-1:-1:-1;;;;22992:6:0;;;;22991:7;:32;;;;-1:-1:-1;23010:13:0;;-1:-1:-1;;;;;23002:21:0;;;23010:13;;23002:21;;22991:32;:47;;;;-1:-1:-1;23027:11:0;;-1:-1:-1;;;23027:11:0;;;;22991:47;:75;;;;;23065:1;23042:20;:24;22991:75;22987:346;;;23087:38;23104:20;23087:16;:38::i;:::-;23173:21;23216:22;;23213:105;;23263:35;23276:21;23263:12;:35::i;:::-;22987:346;;23372:13;;-1:-1:-1;;;;;23364:21:0;;;23372:13;;23364:21;:55;;;;-1:-1:-1;23403:15:0;;-1:-1:-1;;;;;23389:30:0;;;23403:15;;23389:30;;23364:55;23361:162;;;23452:14;;23440:9;:26;23495:12;;23485:7;:22;23361:162;23553:13;;-1:-1:-1;;;;;23547:19:0;;;23553:13;;23547:19;:55;;;;-1:-1:-1;23586:15:0;;-1:-1:-1;;;;;23570:32:0;;;23586:15;;23570:32;;23547:55;23543:165;;;23635:15;;23623:9;:27;23679:13;;23669:7;:23;23543:165;-1:-1:-1;;;;;23741:24:0;;;;;;:18;:24;;;;;;;;;:50;;-1:-1:-1;;;;;;23769:22:0;;;;;;:18;:22;;;;;;;;23741:50;23740:102;;;-1:-1:-1;23805:13:0;;-1:-1:-1;;;;;23797:21:0;;;23805:13;;23797:21;;;;:44;;-1:-1:-1;23828:13:0;;-1:-1:-1;;;;;23822:19:0;;;23828:13;;23822:19;;23797:44;23736:186;;;23875:1;23863:9;:13;;;23895:7;:11;23736:186;22850:1097;;23959:30;23974:4;23979:2;23982:6;23959:14;:30::i;5787:192::-;5873:7;5909:12;5901:6;;;;5893:29;;;;-1:-1:-1;;;5893:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5933:9:0;5945:5;5949:1;5945;:5;:::i;:::-;5933:17;5787:192;-1:-1:-1;;;;;5787:192:0:o;24504:482::-;24561:17;24581:20;24599:1;24581:13;:6;24592:1;24581:10;:13::i;:::-;:17;;:20::i;:::-;24561:40;-1:-1:-1;24612:17:0;24632:20;24650:1;24632:13;:6;24643:1;24632:10;:13::i;:20::-;24612:40;-1:-1:-1;24663:21:0;24687:20;24705:1;24687:13;:6;24698:1;24687:10;:13::i;:20::-;24663:44;-1:-1:-1;24718:18:0;24739:55;24663:44;24739:36;24765:9;24739:36;:6;24750:9;24739:10;:21::i;:::-;:25;;:36::i;:55::-;24805:11;;:31;;24718:76;;-1:-1:-1;;;;;;24805:11:0;;:31;;;;;24826:9;;24805:11;:31;:11;:31;24826:9;24805:11;:31;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24847:17:0;;:37;;-1:-1:-1;;;;;24847:17:0;;;;:37;;;;;24874:9;;24847:17;:37;:17;:37;24874:9;24847:17;:37;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24895:15:0;;:39;;-1:-1:-1;;;;;24895:15:0;;;;:39;;;;;24920:13;;24895:15;:39;:15;:39;24920:13;24895:15;:39;;;;;;;;;;;;;;;;;;;;-1:-1:-1;24945:12:0;;:33;;-1:-1:-1;;;;;24945:12:0;;;;:33;;;;;24967:10;;24945:12;:33;:12;:33;24967:10;24945:12;:33;;;;;;;;;;;;;;;;;;;;;24504:482;;;;;:::o;20939:254::-;21006:7;21045;;21034;:18;;21026:73;;;;-1:-1:-1;;;21026:73:0;;7947:2:1;21026:73:0;;;7929:21:1;7986:2;7966:18;;;7959:30;8025:34;8005:18;;;7998:62;-1:-1:-1;;;8076:18:1;;;8069:40;8126:19;;21026:73:0;7919:232:1;21026:73:0;21110:19;21133:10;:8;:10::i;:::-;21110:33;-1:-1:-1;21161:24:0;:7;21110:33;21161:11;:24::i;:::-;21154:31;20939:254;-1:-1:-1;;;20939:254:0:o;24005:483::-;18429:6;:13;;-1:-1:-1;;;;18429:13:0;-1:-1:-1;;;18429:13:0;;;24107:16:::1;::::0;;24121:1:::1;24107:16:::0;;;;;::::1;::::0;;-1:-1:-1;;24107:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;24107:16:0::1;24083:40;;24152:4;24134;24139:1;24134:7;;;;;;-1:-1:-1::0;;;24134:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;24134:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;24178:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;24178:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;24134:7;;24178:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24168:4;24173:1;24168:7;;;;;;-1:-1:-1::0;;;24168:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;24168:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;24243:15:::1;::::0;24211:62:::1;::::0;24228:4:::1;::::0;24243:15:::1;24261:11:::0;24211:8:::1;:62::i;:::-;24284:15;::::0;:196:::1;::::0;-1:-1:-1;;;24284:196:0;;-1:-1:-1;;;;;24284:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;24365:11;;24284:15:::1;::::0;24407:4;;24434::::1;::::0;24454:15:::1;::::0;24284:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;18465:6:0;:14;;-1:-1:-1;;;;18465:14:0;;;-1:-1:-1;;;;24005:483:0:o;24998:146::-;25092:44;25110:6;25118:9;25129:6;25092:17;:44::i;6238:471::-;6296:7;6541:6;6537:47;;-1:-1:-1;6571:1:0;6564:8;;6537:47;6596:9;6608:5;6612:1;6608;:5;:::i;:::-;6596:17;-1:-1:-1;6641:1:0;6632:5;6636:1;6596:17;6632:5;:::i;:::-;:10;6624:56;;;;-1:-1:-1;;;6624:56:0;;9872:2:1;6624:56:0;;;9854:21:1;9911:2;9891:18;;;9884:30;9950:34;9930:18;;;9923:62;-1:-1:-1;;;10001:18:1;;;9994:31;10042:19;;6624:56:0;9844:223:1;7185:132:0;7243:7;7270:39;7274:1;7277;7270:39;;;;;;;;;;;;;;;;;:3;:39::i;5348:136::-;5406:7;5433:43;5437:1;5440;5433:43;;;;;;;;;;;;;;;;;:3;:43::i;27725:163::-;27766:7;27787:15;27804;27823:19;:17;:19::i;:::-;27786:56;;-1:-1:-1;27786:56:0;-1:-1:-1;27860:20:0;27786:56;;27860:11;:20::i;:::-;27853:27;;;;27725:163;:::o;26726:805::-;26824:19;26847:10;:8;:10::i;:::-;26824:33;;26868:23;26894:79;26943:29;26968:3;26943:20;26955:7;;26943;:11;;:20;;;;:::i;:29::-;26894:44;26906:31;26933:3;26906:22;26918:9;;26906:7;:11;;:22;;;;:::i;:31::-;26894:7;;:11;:44::i;:79::-;26868:105;-1:-1:-1;26984:15:0;27002:24;:7;27014:11;27002;:24::i;:::-;26984:42;;27037:12;27052:48;27088:11;27052:31;27079:3;27052:22;27064:9;;27052:7;:11;;:22;;;;:::i;:31::-;:35;;:48::i;:::-;27037:63;;27111:13;27127:46;27161:11;27127:29;27152:3;27127:20;27139:7;;27127;:11;;:20;;;;:::i;:46::-;27111:62;-1:-1:-1;27184:23:0;27210:28;27111:62;27210:17;:7;27222:4;27210:11;:17::i;:28::-;-1:-1:-1;;;;;27267:15:0;;;;;;:7;:15;;;;;;27184:54;;-1:-1:-1;27267:28:0;;27287:7;27267:19;:28::i;:::-;-1:-1:-1;;;;;27249:15:0;;;;;;;:7;:15;;;;;;:46;;;;27327:18;;;;;;;:39;;27350:15;27327:22;:39::i;:::-;-1:-1:-1;;;;;27306:18:0;;;;;;:7;:18;;;;;;:60;;;;27418:4;27402:22;;;;:33;;27429:5;27402:26;:33::i;:::-;27393:4;27377:22;;;;:7;:22;;;;;:58;27446:17;27458:4;27446:11;:17::i;:::-;27496:9;-1:-1:-1;;;;;27479:44:0;27488:6;-1:-1:-1;;;;;27479:44:0;;27507:15;27479:44;;;;12513:25:1;;12501:2;12486:18;;12468:76;27479:44:0;;;;;;;;26726:805;;;;;;;;;:::o;7813:278::-;7899:7;7934:12;7927:5;7919:28;;;;-1:-1:-1;;;7919:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7958:9:0;7970:5;7974:1;7970;:5;:::i;27896:262::-;27993:7;;27946;;;;17349:24;28067:20;27993:7;17349:24;28067:11;:20::i;:::-;28057:7;:30;28053:61;;;-1:-1:-1;;28097:7:0;;;17349:24;;-1:-1:-1;27896:262:0;-1:-1:-1;27896:262:0:o;28053:61::-;28133:7;;28142;;-1:-1:-1;27896:262:0;-1:-1:-1;27896:262:0:o;4884:181::-;4942:7;;4974:5;4978:1;4974;:5;:::i;:::-;4962:17;;5003:1;4998;:6;;4990:46;;;;-1:-1:-1;;;4990:46:0;;9168:2:1;4990:46:0;;;9150:21:1;9207:2;9187:18;;;9180:30;9246:29;9226:18;;;9219:57;9293:18;;4990:46:0;9140:177:1;27594:89:0;27658:7;;:17;;27670:4;27658:11;:17::i;:::-;27648:7;:27;-1:-1:-1;27594:89:0:o;14:257:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:31;235:5;210:31;:::i;276:261::-;346:6;399:2;387:9;378:7;374:23;370:32;367:2;;;420:6;412;405:22;367:2;457:9;451:16;476:31;501:5;476:31;:::i;812:398::-;880:6;888;941:2;929:9;920:7;916:23;912:32;909:2;;;962:6;954;947:22;909:2;1006:9;993:23;1025:31;1050:5;1025:31;:::i;:::-;1075:5;-1:-1:-1;1132:2:1;1117:18;;1104:32;1145:33;1104:32;1145:33;:::i;:::-;1197:7;1187:17;;;899:311;;;;;:::o;1215:466::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:2;;;1382:6;1374;1367:22;1329:2;1426:9;1413:23;1445:31;1470:5;1445:31;:::i;:::-;1495:5;-1:-1:-1;1552:2:1;1537:18;;1524:32;1565:33;1524:32;1565:33;:::i;:::-;1319:362;;1617:7;;-1:-1:-1;;;1671:2:1;1656:18;;;;1643:32;;1319:362::o;1686:392::-;1751:6;1759;1812:2;1800:9;1791:7;1787:23;1783:32;1780:2;;;1833:6;1825;1818:22;1780:2;1877:9;1864:23;1896:31;1921:5;1896:31;:::i;:::-;1946:5;-1:-1:-1;2003:2:1;1988:18;;1975:32;2016:30;1975:32;2016:30;:::i;2083:325::-;2151:6;2159;2212:2;2200:9;2191:7;2187:23;2183:32;2180:2;;;2233:6;2225;2218:22;2180:2;2277:9;2264:23;2296:31;2321:5;2296:31;:::i;:::-;2346:5;2398:2;2383:18;;;;2370:32;;-1:-1:-1;;;2170:238:1:o;2413:800::-;2505:6;2513;2521;2574:2;2562:9;2553:7;2549:23;2545:32;2542:2;;;2595:6;2587;2580:22;2542:2;2640:9;2627:23;2669:18;2710:2;2702:6;2699:14;2696:2;;;2731:6;2723;2716:22;2696:2;2774:6;2763:9;2759:22;2749:32;;2819:7;2812:4;2808:2;2804:13;2800:27;2790:2;;2846:6;2838;2831:22;2790:2;2891;2878:16;2917:2;2909:6;2906:14;2903:2;;;2938:6;2930;2923:22;2903:2;2998:7;2991:4;2981:6;2978:1;2974:14;2970:2;2966:23;2962:34;2959:47;2956:2;;;3024:6;3016;3009:22;2956:2;3060:4;3052:13;;;;-1:-1:-1;3084:6:1;-1:-1:-1;;3125:20:1;;3112:34;3155:28;3112:34;3155:28;:::i;:::-;3202:5;3192:15;;;2532:681;;;;;:::o;3218:251::-;3274:6;3327:2;3315:9;3306:7;3302:23;3298:32;3295:2;;;3348:6;3340;3333:22;3295:2;3392:9;3379:23;3411:28;3433:5;3411:28;:::i;3474:255::-;3541:6;3594:2;3582:9;3573:7;3569:23;3565:32;3562:2;;;3615:6;3607;3600:22;3562:2;3652:9;3646:16;3671:28;3693:5;3671:28;:::i;3734:395::-;3820:6;3828;3836;3844;3897:3;3885:9;3876:7;3872:23;3868:33;3865:2;;;3919:6;3911;3904:22;3865:2;-1:-1:-1;;3947:23:1;;;4017:2;4002:18;;3989:32;;-1:-1:-1;4068:2:1;4053:18;;4040:32;;4119:2;4104:18;4091:32;;-1:-1:-1;3855:274:1;-1:-1:-1;3855:274:1:o;4134:289::-;4191:6;4244:2;4232:9;4223:7;4219:23;4215:32;4212:2;;;4265:6;4257;4250:22;4212:2;4309:9;4296:23;4359:4;4352:5;4348:16;4341:5;4338:27;4328:2;;4384:6;4376;4369:22;5505:797;5727:2;5739:21;;;5712:18;;5795:22;;;5679:4;5874:6;5848:2;5833:18;;5679:4;5911:304;5925:6;5922:1;5919:13;5911:304;;;6000:6;5987:20;6020:31;6045:5;6020:31;:::i;:::-;-1:-1:-1;;;;;6076:31:1;6064:44;;6131:4;6190:15;;;;6155:12;;;;6104:1;5940:9;5911:304;;;5915:3;6232;6224:11;;;;6287:6;6280:14;6273:22;6266:4;6255:9;6251:20;6244:52;5688:614;;;;;;:::o;6733:603::-;6845:4;6874:2;6903;6892:9;6885:21;6935:6;6929:13;6978:6;6973:2;6962:9;6958:18;6951:34;7003:4;7016:140;7030:6;7027:1;7024:13;7016:140;;;7125:14;;;7121:23;;7115:30;7091:17;;;7110:2;7087:26;7080:66;7045:10;;7016:140;;;7174:6;7171:1;7168:13;7165:2;;;7244:4;7239:2;7230:6;7219:9;7215:22;7211:31;7204:45;7165:2;-1:-1:-1;7320:2:1;7299:15;-1:-1:-1;;7295:29:1;7280:45;;;;7327:2;7276:54;;6854:482;-1:-1:-1;;;6854:482:1:o;10428:356::-;10630:2;10612:21;;;10649:18;;;10642:30;10708:34;10703:2;10688:18;;10681:62;10775:2;10760:18;;10602:182::o;12549:983::-;12811:4;12859:3;12848:9;12844:19;12890:6;12879:9;12872:25;12916:2;12954:6;12949:2;12938:9;12934:18;12927:34;12997:3;12992:2;12981:9;12977:18;12970:31;13021:6;13056;13050:13;13087:6;13079;13072:22;13125:3;13114:9;13110:19;13103:26;;13164:2;13156:6;13152:15;13138:29;;13185:4;13198:195;13212:6;13209:1;13206:13;13198:195;;;13277:13;;-1:-1:-1;;;;;13273:39:1;13261:52;;13368:15;;;;13333:12;;;;13309:1;13227:9;13198:195;;;-1:-1:-1;;;;;;;13449:32:1;;;;13444:2;13429:18;;13422:60;-1:-1:-1;;;13513:3:1;13498:19;13491:35;13410:3;12820:712;-1:-1:-1;;;12820:712:1:o;13726:128::-;13766:3;13797:1;13793:6;13790:1;13787:13;13784:2;;;13803:18;;:::i;:::-;-1:-1:-1;13839:9:1;;13774:80::o;13859:217::-;13899:1;13925;13915:2;;-1:-1:-1;;;13950:31:1;;14004:4;14001:1;13994:15;14032:4;13957:1;14022:15;13915:2;-1:-1:-1;14061:9:1;;13905:171::o;14081:168::-;14121:7;14187:1;14183;14179:6;14175:14;14172:1;14169:21;14164:1;14157:9;14150:17;14146:45;14143:2;;;14194:18;;:::i;:::-;-1:-1:-1;14234:9:1;;14133:116::o;14254:125::-;14294:4;14322:1;14319;14316:8;14313:2;;;14327:18;;:::i;:::-;-1:-1:-1;14364:9:1;;14303:76::o;14384:135::-;14423:3;-1:-1:-1;;14444:17:1;;14441:2;;;14464:18;;:::i;:::-;-1:-1:-1;14511:1:1;14500:13;;14431:88::o;14524:127::-;14585:10;14580:3;14576:20;14573:1;14566:31;14616:4;14613:1;14606:15;14640:4;14637:1;14630:15;14656:131;-1:-1:-1;;;;;14731:31:1;;14721:42;;14711:2;;14777:1;14774;14767:12;14792:118;14878:5;14871:13;14864:21;14857:5;14854:32;14844:2;;14900:1;14897;14890:12

Swarm Source

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