ETH Price: $3,523.30 (+5.03%)

Token

Unilock (ULock)
 

Overview

Max Total Supply

10,101,101,101,101 ULock

Holders

180

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.529731504779909017 ULock

Value
$0.00
0x2003f1e2168aa943c1a112446679538ce8a65fc3
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:
Unilock

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-27
*/

/***
 
Locker safer than Team.finance locker.

TG: https://t.me/Unilocketh
 
****/
// SPDX-License-Identifier: MIT
 
pragma solidity ^0.8.17;    

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

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

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

abstract 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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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

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

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;
}
 
interface IUSDCReceiver {
    function initialize(address) external;
    function withdraw() external;
    function withdrawUnsupportedAsset(address, uint256) external;
}
 
contract USDCReceiver is IUSDCReceiver, Ownable {
    address public usdc;
    address public token;
 
    constructor() Ownable() {
        token = msg.sender;
    }
 
    function initialize(address _usdc) public onlyOwner {
        require(usdc == address(0x0), "Already initialized");
        usdc = _usdc;
    }
 
    function withdraw() public {
        require(msg.sender == token, "Caller is not token");
        IERC20(usdc).transfer(token, IERC20(usdc).balanceOf(address(this)));
    }
 
    function withdrawUnsupportedAsset(address _token, uint256 _amount) public onlyOwner {
        if(_token == address(0x0))
            payable(owner()).transfer(_amount);
        else
            IERC20(_token).transfer(owner(), _amount);
    }
}
 
contract Unilock is Context, IERC20, Ownable {         
    using SafeMath for uint256;         
 
    IUniswapV2Router02 private _uniswapV2Router;
 
    USDCReceiver private _receiver;         
 
    mapping (address => uint) private _antiMEV;         
 
    mapping (address => uint256) private _balances;         
 
    mapping (address => mapping (address => uint256)) private _allowances;         
 
    mapping (address => bool) private _isExcludedFromFees;         
    mapping (address => bool) private _isExcludedMaxTransactionAmount;         
 
    bool public tradingOpen;         
    bool private _swapping;         
    bool public swapEnabled;         
    bool public antiMEVEnabled;         
 
    string private constant _name = "Unilock";         
    string private constant _symbol = "ULock";         
 
    uint8 private constant _decimals = 18;         
 
    uint256 private constant _totalSupply = 10_101_101_101_101 * (10**_decimals);         
 
    uint256 public buyThreshold = _totalSupply.mul(15).div(1000);         
    uint256 public sellThreshold = _totalSupply.mul(15).div(1000);         
    uint256 public walletThreshold = _totalSupply.mul(15).div(1000);         
 
    uint256 public fee = 50; // 5%         
    uint256 private _previousFee = fee;         
 
    uint256 private _tokensForFee;         
    uint256 private _swapTokensAtAmount = _totalSupply.mul(7).div(10000);                  
 
    address payable private feeCollector;         
    address private _uniswapV2Pair;         
    address private DEAD = 0x000000000000000000000000000000000000dEaD;         
    address private ZERO = 0x0000000000000000000000000000000000000000;         
    address private USDC = 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48;
 
    constructor () {         
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);         
        _approve(address(this), address(_uniswapV2Router), _totalSupply);         
        IERC20(USDC).approve(address(_uniswapV2Router), IERC20(USDC).balanceOf(address(this)));         
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), USDC);         
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);         
 
        _receiver = new USDCReceiver();
        _receiver.initialize(USDC);
        _receiver.transferOwnership(msg.sender);
 
        feeCollector = payable(_msgSender());         
        _balances[_msgSender()] = _totalSupply;         
 
        _isExcludedFromFees[owner()] = true;         
        _isExcludedFromFees[address(this)] = true;         
        _isExcludedFromFees[address(_receiver)] = true;         
        _isExcludedFromFees[DEAD] = true;         
 
        _isExcludedMaxTransactionAmount[owner()] = true;         
        _isExcludedMaxTransactionAmount[address(this)] = true;         
        _isExcludedMaxTransactionAmount[address(_receiver)] = true;         
        _isExcludedMaxTransactionAmount[DEAD] = true;         
 
        emit Transfer(ZERO, _msgSender(), _totalSupply);         
    }         
 
    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 _totalSupply;         
    }         
 
    function balanceOf(address account) public view override returns (uint256) {         
        return _balances[account];         
    }         
 
    function transfer(address to, uint256 amount) public override returns (bool) {         
        _transfer(_msgSender(), to, 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) {         
        address owner = _msgSender();         
        _approve(owner, spender, amount);         
        return true;         
    }         
 
    function transferFrom(address from, address to, uint256 amount) public override returns (bool) {         
        address spender = _msgSender();         
        _spendAllowance(from, spender, amount);         
        _transfer(from, to, amount);         
        return true;         
    }         
 
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {         
        address owner = _msgSender();         
        _approve(owner, spender, allowance(owner, spender) + addedValue);         
        return true;         
    }         
 
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {         
        address owner = _msgSender();         
        uint256 currentAllowance = allowance(owner, spender);         
        require(currentAllowance >= subtractedValue, "Safu: decreased allowance below zero");         
        unchecked {         
            _approve(owner, spender, currentAllowance - subtractedValue);         
        }         
 
        return true;         
    }         
 
    function _transfer(address from, address to, uint256 amount) internal {         
        require(from != ZERO, "Safu: transfer from the zero address");         
        require(to != ZERO, "Safu: transfer to the zero address");         
        require(amount > 0, "Safu: Transfer amount must be greater than zero");         
 
        bool takeFee = true;         
        bool shouldSwap = false;         
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_swapping) {         
            if(!tradingOpen) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Safu: Trading is not allowed yet.");         
 
            if (antiMEVEnabled) {         
                if (to != address(_uniswapV2Router) && to != address(_uniswapV2Pair)) {         
                    require(_antiMEV[tx.origin] < block.number - 1 && _antiMEV[to] < block.number - 1, "Safu: Transfer delay enabled. Try again later.");         
                    _antiMEV[tx.origin] = block.number;         
                    _antiMEV[to] = block.number;         
                }         
            }         
 
            if (from == _uniswapV2Pair && to != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {         
                require(amount <= buyThreshold, "Safu: Transfer amount exceeds the buyThreshold.");         
                require(balanceOf(to) + amount <= walletThreshold, "Safu: Exceeds maximum wallet token amount.");         
            }         
 
            if (to == _uniswapV2Pair && from != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[from]) {         
                require(amount <= sellThreshold, "Safu: Transfer amount exceeds the sellThreshold.");         
 
                shouldSwap = true;         
            }         
        }         
 
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) takeFee = false;         
 
        uint256 contractBalance = balanceOf(address(this));         
        bool canSwap = (contractBalance > _swapTokensAtAmount) && shouldSwap;         
 
        if (canSwap && swapEnabled && !_swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {         
            _swapping = true;         
            _swapBack(contractBalance);         
            _swapping = false;         
        }         
 
        _tokenTransfer(from, to, amount, takeFee);         
    }         
 
    function _approve(address owner, address spender, uint256 amount) internal {         
        require(owner != ZERO, "Safu: approve from the zero address");         
        require(spender != ZERO, "Safu: approve to the zero address");         
 
        _allowances[owner][spender] = amount;         
        emit Approval(owner, spender, amount);         
    }         
 
    function _spendAllowance(address owner, address spender, uint256 amount) internal {         
        uint256 currentAllowance = allowance(owner, spender);         
        if (currentAllowance != type(uint256).max) {         
            require(currentAllowance >= amount, "Safu: insufficient allowance");         
            unchecked {         
                _approve(owner, spender, currentAllowance - amount);         
            }         
        }         
    }         
 
    function _swapBack(uint256 contractBalance) internal {         
        if (contractBalance == 0 || _tokensForFee == 0) return;         
 
        if (contractBalance > _swapTokensAtAmount * 5) contractBalance = _swapTokensAtAmount * 5;         
 
        _swapTokensForTokens(contractBalance);          
 
        _receiver.withdraw();
 
        _tokensForFee = 0;         
 
        IERC20(USDC).transfer(feeCollector, IERC20(USDC).balanceOf(address(this)));
    }         
 
    function _swapTokensForTokens(uint256 tokenAmount) internal {         
        address[] memory path = new address[](2);         
        path[0] = address(this);         
        path[1] = USDC;         
        _approve(address(this), address(_uniswapV2Router), tokenAmount);         
        _uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(_receiver),
            block.timestamp
        );         
    }         
 
    function _removeFee() internal {         
        if (fee == 0) return;         
        _previousFee = fee;         
        fee = 0;         
    }         
 
    function _restoreFee() internal {         
        fee = _previousFee;         
    }         
 
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) internal {         
        if (!takeFee) _removeFee();         
        else amount = _takeFees(sender, amount);         
 
        _transferStandard(sender, recipient, amount);         
 
        if (!takeFee) _restoreFee();         
    }         
 
    function _transferStandard(address sender, address recipient, uint256 tAmount) internal {         
        _balances[sender] = _balances[sender].sub(tAmount);         
        _balances[recipient] = _balances[recipient].add(tAmount);         
        emit Transfer(sender, recipient, tAmount);         
    }         
 
    function _takeFees(address sender, uint256 amount) internal returns (uint256) {         
        if (fee > 0) {         
            uint256 fees = amount.mul(fee).div(1000);         
            _tokensForFee += fees * fee / fee;         
 
            if (fees > 0) _transferStandard(sender, address(this), fees);         
 
            amount -= fees;         
        }         
 
        return amount;         
    }         
 
    function usdcReceiverAddress() external view returns (address) {
        return address(_receiver);
    }
 
    function openTrading() public onlyOwner {         
        require(!tradingOpen,"Safu: Trading is already open");         
        IERC20(USDC).approve(address(_uniswapV2Router), IERC20(USDC).balanceOf(address(this)));         
        _uniswapV2Router.addLiquidity(address(this), USDC, balanceOf(address(this)), IERC20(USDC).balanceOf(address(this)), 0, 0, owner(), block.timestamp);         
        swapEnabled = true;               
        antiMEVEnabled = true;               
        tradingOpen = true;         
    }         
 
    function setBuyThreshold(uint256 _buyTreshold) public onlyOwner {         
        require(_buyTreshold >= (totalSupply().mul(1).div(1000)), "Safu: Max buy amount cannot be lower than 0.1% total supply.");         
        buyThreshold = _buyTreshold;         
    }         
 
    function setSellThreshold(uint256 _sellThreshold) public onlyOwner {         
        require(_sellThreshold >= (totalSupply().mul(1).div(1000)), "Safu: Max sell amount cannot be lower than 0.1% total supply.");         
        sellThreshold = _sellThreshold;         
    }         
 
    function setWalletThreshold(uint256 _walletThreshold) public onlyOwner {         
        require(_walletThreshold >= (totalSupply().mul(1).div(100)), "Safu: Max wallet amount cannot be lower than 1% total supply.");         
        walletThreshold = _walletThreshold;         
    }         
 
    function setSwapTokensAtAmount(uint256 _swapAmountThreshold) public onlyOwner {         
        require(_swapAmountThreshold >= (totalSupply().mul(1).div(100000)), "Safu: Swap amount cannot be lower than 0.001% total supply.");         
        require(_swapAmountThreshold <= (totalSupply().mul(5).div(1000)), "Safu: Swap amount cannot be higher than 0.5% total supply.");         
        _swapTokensAtAmount = _swapAmountThreshold;         
    }         
 
    function setSwapEnabled(bool onoff) public onlyOwner {         
        swapEnabled = onoff;         
    }         
 
    function setAntiMEVEnabled(bool onoff) public onlyOwner {         
        antiMEVEnabled = onoff;         
    }         
 
    function setFeeCollector(address feeCollectorAddy) public onlyOwner {         
        require(feeCollectorAddy != ZERO, "Safu: feeCollector address cannot be 0");         
        feeCollector = payable(feeCollectorAddy);         
        _isExcludedFromFees[feeCollectorAddy] = true;         
        _isExcludedMaxTransactionAmount[feeCollectorAddy] = true;         
    }         
 
    function excludeFromFees(address[] memory accounts, bool isEx) public onlyOwner {         
        for (uint i = 0; i < accounts.length; i++) _isExcludedFromFees[accounts[i]] = isEx;         
    }         
 
    function excludeFromMaxTransaction(address[] memory accounts, bool isEx) public onlyOwner {         
        for (uint i = 0; i < accounts.length; i++) _isExcludedMaxTransactionAmount[accounts[i]] = isEx;         
    }         
 
    function rescueETH() public onlyOwner {         
        bool success;         
        (success,) = address(msg.sender).call{value: address(this).balance}("");         
    }         
 
    function rescueTokens(address tokenAddy) public onlyOwner {         
        require(tokenAddy != address(this), "Cannot withdraw this token");         
        require(IERC20(tokenAddy).balanceOf(address(this)) > 0, "No tokens");         
        uint amount = IERC20(tokenAddy).balanceOf(address(this));         
        IERC20(tokenAddy).transfer(msg.sender, amount);         
    }         
 
    function removeThresholds() public onlyOwner {         
        buyThreshold = _totalSupply;         
        sellThreshold = _totalSupply;         
        walletThreshold = _totalSupply;         
    }         
 
    receive() external payable {
    }         
    fallback() external payable {
    }         
 
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":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"},{"stateMutability":"payable","type":"fallback"},{"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":[],"name":"antiMEVEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"fee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddy","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setAntiMEVEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyTreshold","type":"uint256"}],"name":"setBuyThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feeCollectorAddy","type":"address"}],"name":"setFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sellThreshold","type":"uint256"}],"name":"setSellThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmountThreshold","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletThreshold","type":"uint256"}],"name":"setWalletThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"usdcReceiverAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"walletThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052620000596103e862000045600f6200001f6012600a62000925565b620000319065092fd88b002d62000936565b6200065060201b6200124a1790919060201c565b6200066760201b6200125d1790919060201c565b600955620000776103e862000045600f6200001f6012600a62000925565b600a55620000976103e862000045600f6012600a6200001f919062000925565b600b556032600c819055600d55620000bf6127106200004560076200001f6012600a62000925565b600f55601280546001600160a01b031990811661dead1790915560138054821690556014805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790553480156200010d57600080fd5b50620001193362000679565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556200016f903090620001576012600a62000925565b620001699065092fd88b002d62000936565b620006c9565b6014546001546040516370a0823160e01b81523060048201526001600160a01b039283169263095ea7b392169083906370a0823190602401602060405180830381865afa158015620001c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001eb919062000950565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af115801562000237573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200025d91906200096a565b50600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002d8919062000995565b6014546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af11580156200032a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000350919062000995565b601180546001600160a01b0319166001600160a01b0392831690811790915560015460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b3906044016020604051808303816000875af1158015620003b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003de91906200096a565b50604051620003ed9062000804565b604051809103906000f0801580156200040a573d6000803e3d6000fd5b50600280546001600160a01b0319166001600160a01b0392831690811790915560145460405163189acdbd60e31b8152921660048301529063c4d66de890602401600060405180830381600087803b1580156200046657600080fd5b505af11580156200047b573d6000803e3d6000fd5b505060025460405163f2fde38b60e01b81523360048201526001600160a01b03909116925063f2fde38b9150602401600060405180830381600087803b158015620004c557600080fd5b505af1158015620004da573d6000803e3d6000fd5b50505050620004ee6200067560201b60201c565b601080546001600160a01b0319166001600160a01b03929092169190911790556200051c6012600a62000925565b6200052e9065092fd88b002d62000936565b3360008181526004602090815260408083209490945581546001600160a01b039081168352600682528483208054600160ff199182168117909255308086528786208054831684179055600280548516875288872080548416851790556012805486168852898820805485168617905587548616885260079096528887208054841685179055908652878620805483168417905554831685528685208054821683179055925490911683529390912080549091169092179091556013546001600160a01b0391821691167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620006276012600a62000925565b620006399065092fd88b002d62000936565b60405190815260200160405180910390a3620009e3565b60006200065e828462000936565b90505b92915050565b60006200065e8284620009c0565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6013546001600160a01b0390811690841603620007395760405162461bcd60e51b815260206004820152602360248201527f536166753a20617070726f76652066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084015b60405180910390fd5b6013546001600160a01b0390811690831603620007a35760405162461bcd60e51b815260206004820152602160248201527f536166753a20617070726f766520746f20746865207a65726f206164647265736044820152607360f81b606482015260840162000730565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6106678062002e8383390190565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620008695781600019048211156200084d576200084d62000812565b808516156200085b57918102915b93841c93908002906200082d565b509250929050565b600082620008825750600162000661565b81620008915750600062000661565b8160018114620008aa5760028114620008b557620008d5565b600191505062000661565b60ff841115620008c957620008c962000812565b50506001821b62000661565b5060208310610133831016604e8410600b8410161715620008fa575081810a62000661565b62000906838362000828565b80600019048211156200091d576200091d62000812565b029392505050565b60006200065e60ff84168362000871565b808202811582820484141762000661576200066162000812565b6000602082840312156200096357600080fd5b5051919050565b6000602082840312156200097d57600080fd5b815180151581146200098e57600080fd5b9392505050565b600060208284031215620009a857600080fd5b81516001600160a01b03811681146200098e57600080fd5b600082620009de57634e487b7160e01b600052601260045260246000fd5b500490565b61249080620009f36000396000f3fe6080604052600436106101ef5760003560e01c80638edaa9421161010c578063afa4f3b21161009a578063ddca3f431161006c578063ddca3f43146105da578063e01af92c146105f0578063f13cff4114610610578063f2fde38b14610626578063ffb54a991461064657005b8063afa4f3b214610567578063b744223a14610587578063c9567bf9146105a5578063dd62ed3e146105ba57005b8063a42dce80116100de578063a42dce80146104d2578063a457c2d7146104f2578063a9059cbb14610512578063aacabe6414610532578063ad29ffde1461054757005b80638edaa942146104445780639016cd971461046457806395d89b41146104845780639c01bc33146104b257005b80632d4310c0116101895780636ddd17131161015b5780636ddd1713146103875780636f4fd18e146103a757806370a08231146103c7578063715018a6146103fd5780638da5cb5b1461041257005b80632d4310c014610315578063313ce5671461032b5780633950935114610347578063512b466a1461036757005b806318160ddd116101c257806318160ddd146102a757806320800a00146102ca57806323b872dd146102df57806323f68d87146102ff57005b8062ae3bf8146101f8578063041138901461021857806306fdde031461024e578063095ea7b31461028757005b366101f657005b005b34801561020457600080fd5b506101f6610213366004611fb0565b610660565b34801561022457600080fd5b50600854610239906301000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561025a57600080fd5b50604080518082019091526007815266556e696c6f636b60c81b60208201525b6040516102459190611fcb565b34801561029357600080fd5b506102396102a2366004612019565b61084d565b3480156102b357600080fd5b506102bc610867565b604051908152602001610245565b3480156102d657600080fd5b506101f661088a565b3480156102eb57600080fd5b506102396102fa366004612043565b6108df565b34801561030b57600080fd5b506102bc600b5481565b34801561032157600080fd5b506102bc600a5481565b34801561033757600080fd5b5060405160128152602001610245565b34801561035357600080fd5b50610239610362366004612019565b610903565b34801561037357600080fd5b506101f661038236600461207f565b610925565b34801561039357600080fd5b506008546102399062010000900460ff1681565b3480156103b357600080fd5b506101f66103c23660046120c7565b6109c6565b3480156103d357600080fd5b506102bc6103e2366004611fb0565b6001600160a01b031660009081526004602052604090205490565b34801561040957600080fd5b506101f6610a35565b34801561041e57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610245565b34801561045057600080fd5b506101f661045f36600461207f565b610a49565b34801561047057600080fd5b506101f661047f36600461219e565b610add565b34801561049057600080fd5b50604080518082019091526005815264554c6f636b60d81b602082015261027a565b3480156104be57600080fd5b506101f66104cd36600461207f565b610b03565b3480156104de57600080fd5b506101f66104ed366004611fb0565b610b98565b3480156104fe57600080fd5b5061023961050d366004612019565b610c60565b34801561051e57600080fd5b5061023961052d366004612019565b610cd9565b34801561053e57600080fd5b506101f6610cef565b34801561055357600080fd5b506101f66105623660046120c7565b610d53565b34801561057357600080fd5b506101f661058236600461207f565b610dc2565b34801561059357600080fd5b506002546001600160a01b031661042c565b3480156105b157600080fd5b506101f6610ee0565b3480156105c657600080fd5b506102bc6105d53660046121bb565b611182565b3480156105e657600080fd5b506102bc600c5481565b3480156105fc57600080fd5b506101f661060b36600461219e565b6111ad565b34801561061c57600080fd5b506102bc60095481565b34801561063257600080fd5b506101f6610641366004611fb0565b6111d1565b34801561065257600080fd5b506008546102399060ff1681565b610668611269565b306001600160a01b038216036106c55760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e00000000000060448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561070c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073091906121ee565b116107695760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b60448201526064016106bc565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d491906121ee565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108489190612207565b505050565b60003361085b8185856112c3565b60019150505b92915050565b60006108756012600a61231e565b6108859065092fd88b002d61232d565b905090565b610892611269565b604051600090339047908381818185875af1925050503d80600081146108d4576040519150601f19603f3d011682016040523d82523d6000602084013e6108d9565b606091505b50505050565b6000336108ed8582856113f7565b6108f885858561146b565b506001949350505050565b60003361085b8185856109168383611182565b6109209190612344565b6112c3565b61092d611269565b61094c6103e86109466001610940610867565b9061124a565b9061125d565b8110156109c15760405162461bcd60e51b815260206004820152603c60248201527f536166753a204d61782062757920616d6f756e742063616e6e6f74206265206c60448201527f6f776572207468616e20302e312520746f74616c20737570706c792e0000000060648201526084016106bc565b600955565b6109ce611269565b60005b82518110156108485781600760008584815181106109f1576109f1612357565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a2d8161236d565b9150506109d1565b610a3d611269565b610a476000611b1a565b565b610a51611269565b610a6360646109466001610940610867565b811015610ad85760405162461bcd60e51b815260206004820152603d60248201527f536166753a204d61782077616c6c657420616d6f756e742063616e6e6f74206260448201527f65206c6f776572207468616e20312520746f74616c20737570706c792e00000060648201526084016106bc565b600b55565b610ae5611269565b6008805491151563010000000263ff00000019909216919091179055565b610b0b611269565b610b1e6103e86109466001610940610867565b811015610b935760405162461bcd60e51b815260206004820152603d60248201527f536166753a204d61782073656c6c20616d6f756e742063616e6e6f742062652060448201527f6c6f776572207468616e20302e312520746f74616c20737570706c792e00000060648201526084016106bc565b600a55565b610ba0611269565b6013546001600160a01b0390811690821603610c0d5760405162461bcd60e51b815260206004820152602660248201527f536166753a20666565436f6c6c6563746f7220616464726573732063616e6e6f60448201526507420626520360d41b60648201526084016106bc565b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600660209081526040808320805460ff1990811660019081179092556007909352922080549091169091179055565b60003381610c6e8286611182565b905083811015610ccc5760405162461bcd60e51b8152602060048201526024808201527f536166753a2064656372656173656420616c6c6f77616e63652062656c6f77206044820152637a65726f60e01b60648201526084016106bc565b6108f882868684036112c3565b6000610ce633848461146b565b50600192915050565b610cf7611269565b610d036012600a61231e565b610d139065092fd88b002d61232d565b600955610d226012600a61231e565b610d329065092fd88b002d61232d565b600a908155610d439060129061231e565b610ad89065092fd88b002d61232d565b610d5b611269565b60005b8251811015610848578160066000858481518110610d7e57610d7e612357565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dba8161236d565b915050610d5e565b610dca611269565b610dde620186a06109466001610940610867565b811015610e535760405162461bcd60e51b815260206004820152603b60248201527f536166753a205377617020616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e3030312520746f74616c20737570706c792e000000000060648201526084016106bc565b610e666103e86109466005610940610867565b811115610edb5760405162461bcd60e51b815260206004820152603a60248201527f536166753a205377617020616d6f756e742063616e6e6f74206265206869676860448201527f6572207468616e20302e352520746f74616c20737570706c792e00000000000060648201526084016106bc565b600f55565b610ee8611269565b60085460ff1615610f3b5760405162461bcd60e51b815260206004820152601d60248201527f536166753a2054726164696e6720697320616c7265616479206f70656e00000060448201526064016106bc565b6014546001546040516370a0823160e01b81523060048201526001600160a01b039283169263095ea7b392169083906370a0823190602401602060405180830381865afa158015610f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb491906121ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612207565b50600154601454306000818152600460205260409020546001600160a01b039384169363e8e337009316906014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba91906121ee565b6000806110cf6000546001600160a01b031690565b60405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015260a483015290911660c48201524260e4820152610104016060604051808303816000875af1158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612386565b50506008805463ffff00ff1916630101000117905550565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6111b5611269565b60088054911515620100000262ff000019909216919091179055565b6111d9611269565b6001600160a01b03811661123e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106bc565b61124781611b1a565b50565b6000611256828461232d565b9392505050565b600061125682846123b4565b6000546001600160a01b03163314610a475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106bc565b6013546001600160a01b039081169084160361132d5760405162461bcd60e51b815260206004820152602360248201527f536166753a20617070726f76652066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016106bc565b6013546001600160a01b03908116908316036113955760405162461bcd60e51b815260206004820152602160248201527f536166753a20617070726f766520746f20746865207a65726f206164647265736044820152607360f81b60648201526084016106bc565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006114038484611182565b905060001981146108d9578181101561145e5760405162461bcd60e51b815260206004820152601c60248201527f536166753a20696e73756666696369656e7420616c6c6f77616e63650000000060448201526064016106bc565b6108d984848484036112c3565b6013546001600160a01b03908116908416036114d55760405162461bcd60e51b8152602060048201526024808201527f536166753a207472616e736665722066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106bc565b6013546001600160a01b039081169083160361153e5760405162461bcd60e51b815260206004820152602260248201527f536166753a207472616e7366657220746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106bc565b600081116115a65760405162461bcd60e51b815260206004820152602f60248201527f536166753a205472616e7366657220616d6f756e74206d75737420626520677260448201526e6561746572207468616e207a65726f60881b60648201526084016106bc565b600160006115bc6000546001600160a01b031690565b6001600160a01b0316856001600160a01b0316141580156115eb57506000546001600160a01b03858116911614155b801561160557506013546001600160a01b03858116911614155b801561161f57506012546001600160a01b03858116911614155b80156116335750600854610100900460ff16155b156119fc5760085460ff166116d7576001600160a01b03851660009081526006602052604090205460ff168061168157506001600160a01b03841660009081526006602052604090205460ff165b6116d75760405162461bcd60e51b815260206004820152602160248201527f536166753a2054726164696e67206973206e6f7420616c6c6f776564207965746044820152601760f91b60648201526084016106bc565b6008546301000000900460ff16156117eb576001546001600160a01b0385811691161480159061171557506011546001600160a01b03858116911614155b156117eb576117256001436123d6565b3260009081526003602052604090205410801561176357506117486001436123d6565b6001600160a01b038516600090815260036020526040902054105b6117c65760405162461bcd60e51b815260206004820152602e60248201527f536166753a205472616e736665722064656c617920656e61626c65642e20547260448201526d3c9030b3b0b4b7103630ba32b91760911b60648201526084016106bc565b3260009081526003602052604080822043908190556001600160a01b03871683529120555b6011546001600160a01b03868116911614801561181657506001546001600160a01b03858116911614155b801561183b57506001600160a01b03841660009081526007602052604090205460ff16155b15611938576009548311156118aa5760405162461bcd60e51b815260206004820152602f60248201527f536166753a205472616e7366657220616d6f756e74206578636565647320746860448201526e3290313abcaa343932b9b437b6321760891b60648201526084016106bc565b600b54836118cd866001600160a01b031660009081526004602052604090205490565b6118d79190612344565b11156119385760405162461bcd60e51b815260206004820152602a60248201527f536166753a2045786365656473206d6178696d756d2077616c6c657420746f6b60448201526932b71030b6b7bab73a1760b11b60648201526084016106bc565b6011546001600160a01b03858116911614801561196357506001546001600160a01b03868116911614155b801561198857506001600160a01b03851660009081526007602052604090205460ff16155b156119fc57600a548311156119f85760405162461bcd60e51b815260206004820152603060248201527f536166753a205472616e7366657220616d6f756e74206578636565647320746860448201526f329039b2b6362a343932b9b437b6321760811b60648201526084016106bc565b5060015b6001600160a01b03851660009081526006602052604090205460ff1680611a3b57506001600160a01b03841660009081526006602052604090205460ff165b15611a4557600091505b3060009081526004602052604081205490506000600f5482118015611a675750825b9050808015611a7e575060085462010000900460ff165b8015611a925750600854610100900460ff16155b8015611ab757506001600160a01b03871660009081526006602052604090205460ff16155b8015611adc57506001600160a01b03861660009081526006602052604090205460ff16155b15611b05576008805461ff001916610100179055611af982611b6a565b6008805461ff00191690555b611b1187878787611d07565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b801580611b775750600e54155b15611b7f5750565b600f54611b8d90600561232d565b811115611ba557600f54611ba290600561232d565b90505b611bae81611d41565b600260009054906101000a90046001600160a01b03166001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b50506000600e5550506014546010546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9491906121ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d039190612207565b5050565b80611d1957611d14611e40565b611d26565b611d238483611e59565b91505b611d31848484611ed6565b806108d9576108d9600d54600c55565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d7657611d76612357565b6001600160a01b039283166020918202929092010152601454825191169082906001908110611da757611da7612357565b6001600160a01b039283166020918202929092010152600154611dcd91309116846112c3565b600154600254604051635c11d79560e01b81526001600160a01b0392831692635c11d79592611e0a928792600092889291169042906004016123e9565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b505050505050565b600c54600003611e4c57565b600c8054600d5560009055565b600c5460009015611ed0576000611e816103e8610946600c548661124a90919063ffffffff16565b600c54909150611e91818361232d565b611e9b91906123b4565b600e6000828254611eac9190612344565b90915550508015611ec257611ec2843083611ed6565b611ecc81846123d6565b9250505b50919050565b6001600160a01b038316600090815260046020526040902054611ef99082611f7c565b6001600160a01b038085166000908152600460205260408082209390935590841681522054611f289082611f88565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113ea9085815260200190565b600061125682846123d6565b60006112568284612344565b80356001600160a01b0381168114611fab57600080fd5b919050565b600060208284031215611fc257600080fd5b61125682611f94565b600060208083528351808285015260005b81811015611ff857858101830151858201604001528201611fdc565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561202c57600080fd5b61203583611f94565b946020939093013593505050565b60008060006060848603121561205857600080fd5b61206184611f94565b925061206f60208501611f94565b9150604084013590509250925092565b60006020828403121561209157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b801515811461124757600080fd5b8035611fab816120ae565b600080604083850312156120da57600080fd5b823567ffffffffffffffff808211156120f257600080fd5b818501915085601f83011261210657600080fd5b813560208282111561211a5761211a612098565b8160051b604051601f19603f8301168101818110868211171561213f5761213f612098565b60405292835281830193508481018201928984111561215d57600080fd5b948201945b838610156121825761217386611f94565b85529482019493820193612162565b965061219190508782016120bc565b9450505050509250929050565b6000602082840312156121b057600080fd5b8135611256816120ae565b600080604083850312156121ce57600080fd5b6121d783611f94565b91506121e560208401611f94565b90509250929050565b60006020828403121561220057600080fd5b5051919050565b60006020828403121561221957600080fd5b8151611256816120ae565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561227557816000190482111561225b5761225b612224565b8085161561226857918102915b93841c939080029061223f565b509250929050565b60008261228c57506001610861565b8161229957506000610861565b81600181146122af57600281146122b9576122d5565b6001915050610861565b60ff8411156122ca576122ca612224565b50506001821b610861565b5060208310610133831016604e8410600b84101617156122f8575081810a610861565b612302838361223a565b806000190482111561231657612316612224565b029392505050565b600061125660ff84168361227d565b808202811582820484141761086157610861612224565b8082018082111561086157610861612224565b634e487b7160e01b600052603260045260246000fd5b60006001820161237f5761237f612224565b5060010190565b60008060006060848603121561239b57600080fd5b8351925060208401519150604084015190509250925092565b6000826123d157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561086157610861612224565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124395784516001600160a01b031683529383019391830191600101612414565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208aa0fff3df81d1ba4f74cacb50eef096a8a8a91d2a1f9c18573ffb9c1622849164736f6c63430008110033608060405234801561001057600080fd5b5061001a33610031565b600280546001600160a01b03191633179055610081565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6105d7806100906000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c80638da5cb5b1161005b5780638da5cb5b146100e1578063c4d66de8146100f2578063f2fde38b14610105578063fc0c546a1461011857600080fd5b80633ccfd60b1461008d5780633e413bee1461009757806370c8b173146100c6578063715018a6146100d9575b600080fd5b61009561012b565b005b6001546100aa906001600160a01b031681565b6040516001600160a01b03909116815260200160405180910390f35b6100956100d436600461051a565b61026b565b610095610351565b6000546001600160a01b03166100aa565b610095610100366004610544565b610365565b610095610113366004610544565b6103de565b6002546100aa906001600160a01b031681565b6002546001600160a01b031633146101805760405162461bcd60e51b815260206004820152601360248201527221b0b63632b91034b9903737ba103a37b5b2b760691b60448201526064015b60405180910390fd5b6001546002546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa1580156101d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f99190610566565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610244573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610268919061057f565b50565b610273610454565b6001600160a01b0382166102bf57600080546040516001600160a01b039091169183156108fc02918491818181858888f193505050501580156102ba573d6000803e3d6000fd5b505050565b816001600160a01b031663a9059cbb6102e06000546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602481018490526044016020604051808303816000875af115801561032d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ba919061057f565b610359610454565b61036360006104ae565b565b61036d610454565b6001546001600160a01b0316156103bc5760405162461bcd60e51b8152602060048201526013602482015272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606401610177565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6103e6610454565b6001600160a01b03811661044b5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610177565b610268816104ae565b6000546001600160a01b031633146103635760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610177565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80356001600160a01b038116811461051557600080fd5b919050565b6000806040838503121561052d57600080fd5b610536836104fe565b946020939093013593505050565b60006020828403121561055657600080fd5b61055f826104fe565b9392505050565b60006020828403121561057857600080fd5b5051919050565b60006020828403121561059157600080fd5b8151801515811461055f57600080fdfea26469706673582212206ea583b69a77911199fa45d5b86652da5b9b0e36870a5926c1dfabb4f8fcbf4564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101ef5760003560e01c80638edaa9421161010c578063afa4f3b21161009a578063ddca3f431161006c578063ddca3f43146105da578063e01af92c146105f0578063f13cff4114610610578063f2fde38b14610626578063ffb54a991461064657005b8063afa4f3b214610567578063b744223a14610587578063c9567bf9146105a5578063dd62ed3e146105ba57005b8063a42dce80116100de578063a42dce80146104d2578063a457c2d7146104f2578063a9059cbb14610512578063aacabe6414610532578063ad29ffde1461054757005b80638edaa942146104445780639016cd971461046457806395d89b41146104845780639c01bc33146104b257005b80632d4310c0116101895780636ddd17131161015b5780636ddd1713146103875780636f4fd18e146103a757806370a08231146103c7578063715018a6146103fd5780638da5cb5b1461041257005b80632d4310c014610315578063313ce5671461032b5780633950935114610347578063512b466a1461036757005b806318160ddd116101c257806318160ddd146102a757806320800a00146102ca57806323b872dd146102df57806323f68d87146102ff57005b8062ae3bf8146101f8578063041138901461021857806306fdde031461024e578063095ea7b31461028757005b366101f657005b005b34801561020457600080fd5b506101f6610213366004611fb0565b610660565b34801561022457600080fd5b50600854610239906301000000900460ff1681565b60405190151581526020015b60405180910390f35b34801561025a57600080fd5b50604080518082019091526007815266556e696c6f636b60c81b60208201525b6040516102459190611fcb565b34801561029357600080fd5b506102396102a2366004612019565b61084d565b3480156102b357600080fd5b506102bc610867565b604051908152602001610245565b3480156102d657600080fd5b506101f661088a565b3480156102eb57600080fd5b506102396102fa366004612043565b6108df565b34801561030b57600080fd5b506102bc600b5481565b34801561032157600080fd5b506102bc600a5481565b34801561033757600080fd5b5060405160128152602001610245565b34801561035357600080fd5b50610239610362366004612019565b610903565b34801561037357600080fd5b506101f661038236600461207f565b610925565b34801561039357600080fd5b506008546102399062010000900460ff1681565b3480156103b357600080fd5b506101f66103c23660046120c7565b6109c6565b3480156103d357600080fd5b506102bc6103e2366004611fb0565b6001600160a01b031660009081526004602052604090205490565b34801561040957600080fd5b506101f6610a35565b34801561041e57600080fd5b506000546001600160a01b03165b6040516001600160a01b039091168152602001610245565b34801561045057600080fd5b506101f661045f36600461207f565b610a49565b34801561047057600080fd5b506101f661047f36600461219e565b610add565b34801561049057600080fd5b50604080518082019091526005815264554c6f636b60d81b602082015261027a565b3480156104be57600080fd5b506101f66104cd36600461207f565b610b03565b3480156104de57600080fd5b506101f66104ed366004611fb0565b610b98565b3480156104fe57600080fd5b5061023961050d366004612019565b610c60565b34801561051e57600080fd5b5061023961052d366004612019565b610cd9565b34801561053e57600080fd5b506101f6610cef565b34801561055357600080fd5b506101f66105623660046120c7565b610d53565b34801561057357600080fd5b506101f661058236600461207f565b610dc2565b34801561059357600080fd5b506002546001600160a01b031661042c565b3480156105b157600080fd5b506101f6610ee0565b3480156105c657600080fd5b506102bc6105d53660046121bb565b611182565b3480156105e657600080fd5b506102bc600c5481565b3480156105fc57600080fd5b506101f661060b36600461219e565b6111ad565b34801561061c57600080fd5b506102bc60095481565b34801561063257600080fd5b506101f6610641366004611fb0565b6111d1565b34801561065257600080fd5b506008546102399060ff1681565b610668611269565b306001600160a01b038216036106c55760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e00000000000060448201526064015b60405180910390fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561070c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073091906121ee565b116107695760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b60448201526064016106bc565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156107b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d491906121ee565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108489190612207565b505050565b60003361085b8185856112c3565b60019150505b92915050565b60006108756012600a61231e565b6108859065092fd88b002d61232d565b905090565b610892611269565b604051600090339047908381818185875af1925050503d80600081146108d4576040519150601f19603f3d011682016040523d82523d6000602084013e6108d9565b606091505b50505050565b6000336108ed8582856113f7565b6108f885858561146b565b506001949350505050565b60003361085b8185856109168383611182565b6109209190612344565b6112c3565b61092d611269565b61094c6103e86109466001610940610867565b9061124a565b9061125d565b8110156109c15760405162461bcd60e51b815260206004820152603c60248201527f536166753a204d61782062757920616d6f756e742063616e6e6f74206265206c60448201527f6f776572207468616e20302e312520746f74616c20737570706c792e0000000060648201526084016106bc565b600955565b6109ce611269565b60005b82518110156108485781600760008584815181106109f1576109f1612357565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610a2d8161236d565b9150506109d1565b610a3d611269565b610a476000611b1a565b565b610a51611269565b610a6360646109466001610940610867565b811015610ad85760405162461bcd60e51b815260206004820152603d60248201527f536166753a204d61782077616c6c657420616d6f756e742063616e6e6f74206260448201527f65206c6f776572207468616e20312520746f74616c20737570706c792e00000060648201526084016106bc565b600b55565b610ae5611269565b6008805491151563010000000263ff00000019909216919091179055565b610b0b611269565b610b1e6103e86109466001610940610867565b811015610b935760405162461bcd60e51b815260206004820152603d60248201527f536166753a204d61782073656c6c20616d6f756e742063616e6e6f742062652060448201527f6c6f776572207468616e20302e312520746f74616c20737570706c792e00000060648201526084016106bc565b600a55565b610ba0611269565b6013546001600160a01b0390811690821603610c0d5760405162461bcd60e51b815260206004820152602660248201527f536166753a20666565436f6c6c6563746f7220616464726573732063616e6e6f60448201526507420626520360d41b60648201526084016106bc565b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600660209081526040808320805460ff1990811660019081179092556007909352922080549091169091179055565b60003381610c6e8286611182565b905083811015610ccc5760405162461bcd60e51b8152602060048201526024808201527f536166753a2064656372656173656420616c6c6f77616e63652062656c6f77206044820152637a65726f60e01b60648201526084016106bc565b6108f882868684036112c3565b6000610ce633848461146b565b50600192915050565b610cf7611269565b610d036012600a61231e565b610d139065092fd88b002d61232d565b600955610d226012600a61231e565b610d329065092fd88b002d61232d565b600a908155610d439060129061231e565b610ad89065092fd88b002d61232d565b610d5b611269565b60005b8251811015610848578160066000858481518110610d7e57610d7e612357565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dba8161236d565b915050610d5e565b610dca611269565b610dde620186a06109466001610940610867565b811015610e535760405162461bcd60e51b815260206004820152603b60248201527f536166753a205377617020616d6f756e742063616e6e6f74206265206c6f776560448201527f72207468616e20302e3030312520746f74616c20737570706c792e000000000060648201526084016106bc565b610e666103e86109466005610940610867565b811115610edb5760405162461bcd60e51b815260206004820152603a60248201527f536166753a205377617020616d6f756e742063616e6e6f74206265206869676860448201527f6572207468616e20302e352520746f74616c20737570706c792e00000000000060648201526084016106bc565b600f55565b610ee8611269565b60085460ff1615610f3b5760405162461bcd60e51b815260206004820152601d60248201527f536166753a2054726164696e6720697320616c7265616479206f70656e00000060448201526064016106bc565b6014546001546040516370a0823160e01b81523060048201526001600160a01b039283169263095ea7b392169083906370a0823190602401602060405180830381865afa158015610f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb491906121ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610fff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110239190612207565b50600154601454306000818152600460205260409020546001600160a01b039384169363e8e337009316906014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611096573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ba91906121ee565b6000806110cf6000546001600160a01b031690565b60405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015260a483015290911660c48201524260e4820152610104016060604051808303816000875af1158015611146573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116a9190612386565b50506008805463ffff00ff1916630101000117905550565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6111b5611269565b60088054911515620100000262ff000019909216919091179055565b6111d9611269565b6001600160a01b03811661123e5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106bc565b61124781611b1a565b50565b6000611256828461232d565b9392505050565b600061125682846123b4565b6000546001600160a01b03163314610a475760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016106bc565b6013546001600160a01b039081169084160361132d5760405162461bcd60e51b815260206004820152602360248201527f536166753a20617070726f76652066726f6d20746865207a65726f206164647260448201526265737360e81b60648201526084016106bc565b6013546001600160a01b03908116908316036113955760405162461bcd60e51b815260206004820152602160248201527f536166753a20617070726f766520746f20746865207a65726f206164647265736044820152607360f81b60648201526084016106bc565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006114038484611182565b905060001981146108d9578181101561145e5760405162461bcd60e51b815260206004820152601c60248201527f536166753a20696e73756666696369656e7420616c6c6f77616e63650000000060448201526064016106bc565b6108d984848484036112c3565b6013546001600160a01b03908116908416036114d55760405162461bcd60e51b8152602060048201526024808201527f536166753a207472616e736665722066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106bc565b6013546001600160a01b039081169083160361153e5760405162461bcd60e51b815260206004820152602260248201527f536166753a207472616e7366657220746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106bc565b600081116115a65760405162461bcd60e51b815260206004820152602f60248201527f536166753a205472616e7366657220616d6f756e74206d75737420626520677260448201526e6561746572207468616e207a65726f60881b60648201526084016106bc565b600160006115bc6000546001600160a01b031690565b6001600160a01b0316856001600160a01b0316141580156115eb57506000546001600160a01b03858116911614155b801561160557506013546001600160a01b03858116911614155b801561161f57506012546001600160a01b03858116911614155b80156116335750600854610100900460ff16155b156119fc5760085460ff166116d7576001600160a01b03851660009081526006602052604090205460ff168061168157506001600160a01b03841660009081526006602052604090205460ff165b6116d75760405162461bcd60e51b815260206004820152602160248201527f536166753a2054726164696e67206973206e6f7420616c6c6f776564207965746044820152601760f91b60648201526084016106bc565b6008546301000000900460ff16156117eb576001546001600160a01b0385811691161480159061171557506011546001600160a01b03858116911614155b156117eb576117256001436123d6565b3260009081526003602052604090205410801561176357506117486001436123d6565b6001600160a01b038516600090815260036020526040902054105b6117c65760405162461bcd60e51b815260206004820152602e60248201527f536166753a205472616e736665722064656c617920656e61626c65642e20547260448201526d3c9030b3b0b4b7103630ba32b91760911b60648201526084016106bc565b3260009081526003602052604080822043908190556001600160a01b03871683529120555b6011546001600160a01b03868116911614801561181657506001546001600160a01b03858116911614155b801561183b57506001600160a01b03841660009081526007602052604090205460ff16155b15611938576009548311156118aa5760405162461bcd60e51b815260206004820152602f60248201527f536166753a205472616e7366657220616d6f756e74206578636565647320746860448201526e3290313abcaa343932b9b437b6321760891b60648201526084016106bc565b600b54836118cd866001600160a01b031660009081526004602052604090205490565b6118d79190612344565b11156119385760405162461bcd60e51b815260206004820152602a60248201527f536166753a2045786365656473206d6178696d756d2077616c6c657420746f6b60448201526932b71030b6b7bab73a1760b11b60648201526084016106bc565b6011546001600160a01b03858116911614801561196357506001546001600160a01b03868116911614155b801561198857506001600160a01b03851660009081526007602052604090205460ff16155b156119fc57600a548311156119f85760405162461bcd60e51b815260206004820152603060248201527f536166753a205472616e7366657220616d6f756e74206578636565647320746860448201526f329039b2b6362a343932b9b437b6321760811b60648201526084016106bc565b5060015b6001600160a01b03851660009081526006602052604090205460ff1680611a3b57506001600160a01b03841660009081526006602052604090205460ff165b15611a4557600091505b3060009081526004602052604081205490506000600f5482118015611a675750825b9050808015611a7e575060085462010000900460ff165b8015611a925750600854610100900460ff16155b8015611ab757506001600160a01b03871660009081526006602052604090205460ff16155b8015611adc57506001600160a01b03861660009081526006602052604090205460ff16155b15611b05576008805461ff001916610100179055611af982611b6a565b6008805461ff00191690555b611b1187878787611d07565b50505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b801580611b775750600e54155b15611b7f5750565b600f54611b8d90600561232d565b811115611ba557600f54611ba290600561232d565b90505b611bae81611d41565b600260009054906101000a90046001600160a01b03166001600160a01b0316633ccfd60b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611bfe57600080fd5b505af1158015611c12573d6000803e3d6000fd5b50506000600e5550506014546010546040516370a0823160e01b81523060048201526001600160a01b039283169263a9059cbb92169083906370a0823190602401602060405180830381865afa158015611c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9491906121ee565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d039190612207565b5050565b80611d1957611d14611e40565b611d26565b611d238483611e59565b91505b611d31848484611ed6565b806108d9576108d9600d54600c55565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611d7657611d76612357565b6001600160a01b039283166020918202929092010152601454825191169082906001908110611da757611da7612357565b6001600160a01b039283166020918202929092010152600154611dcd91309116846112c3565b600154600254604051635c11d79560e01b81526001600160a01b0392831692635c11d79592611e0a928792600092889291169042906004016123e9565b600060405180830381600087803b158015611e2457600080fd5b505af1158015611e38573d6000803e3d6000fd5b505050505050565b600c54600003611e4c57565b600c8054600d5560009055565b600c5460009015611ed0576000611e816103e8610946600c548661124a90919063ffffffff16565b600c54909150611e91818361232d565b611e9b91906123b4565b600e6000828254611eac9190612344565b90915550508015611ec257611ec2843083611ed6565b611ecc81846123d6565b9250505b50919050565b6001600160a01b038316600090815260046020526040902054611ef99082611f7c565b6001600160a01b038085166000908152600460205260408082209390935590841681522054611f289082611f88565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113ea9085815260200190565b600061125682846123d6565b60006112568284612344565b80356001600160a01b0381168114611fab57600080fd5b919050565b600060208284031215611fc257600080fd5b61125682611f94565b600060208083528351808285015260005b81811015611ff857858101830151858201604001528201611fdc565b506000604082860101526040601f19601f8301168501019250505092915050565b6000806040838503121561202c57600080fd5b61203583611f94565b946020939093013593505050565b60008060006060848603121561205857600080fd5b61206184611f94565b925061206f60208501611f94565b9150604084013590509250925092565b60006020828403121561209157600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b801515811461124757600080fd5b8035611fab816120ae565b600080604083850312156120da57600080fd5b823567ffffffffffffffff808211156120f257600080fd5b818501915085601f83011261210657600080fd5b813560208282111561211a5761211a612098565b8160051b604051601f19603f8301168101818110868211171561213f5761213f612098565b60405292835281830193508481018201928984111561215d57600080fd5b948201945b838610156121825761217386611f94565b85529482019493820193612162565b965061219190508782016120bc565b9450505050509250929050565b6000602082840312156121b057600080fd5b8135611256816120ae565b600080604083850312156121ce57600080fd5b6121d783611f94565b91506121e560208401611f94565b90509250929050565b60006020828403121561220057600080fd5b5051919050565b60006020828403121561221957600080fd5b8151611256816120ae565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111561227557816000190482111561225b5761225b612224565b8085161561226857918102915b93841c939080029061223f565b509250929050565b60008261228c57506001610861565b8161229957506000610861565b81600181146122af57600281146122b9576122d5565b6001915050610861565b60ff8411156122ca576122ca612224565b50506001821b610861565b5060208310610133831016604e8410600b84101617156122f8575081810a610861565b612302838361223a565b806000190482111561231657612316612224565b029392505050565b600061125660ff84168361227d565b808202811582820484141761086157610861612224565b8082018082111561086157610861612224565b634e487b7160e01b600052603260045260246000fd5b60006001820161237f5761237f612224565b5060010190565b60008060006060848603121561239b57600080fd5b8351925060208401519150604084015190509250925092565b6000826123d157634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111561086157610861612224565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156124395784516001600160a01b031683529383019391830191600101612414565b50506001600160a01b0396909616606085015250505060800152939250505056fea26469706673582212208aa0fff3df81d1ba4f74cacb50eef096a8a8a91d2a1f9c18573ffb9c1622849164736f6c63430008110033

Deployed Bytecode Sourcemap

18064:15498:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32828:390;;;;;;;;;;-1:-1:-1;32828:390:0;;;;;:::i;:::-;;:::i;18755:26::-;;;;;;;;;;-1:-1:-1;18755:26:0;;;;;;;;;;;;;;548:14:1;;541:22;523:41;;511:2;496:18;18755:26:0;;;;;;;;21265:101;;;;;;;;;;-1:-1:-1;21344:5:0;;;;;;;;;;;;-1:-1:-1;;;21344:5:0;;;;21265:101;;;;;;;:::i;22294:229::-;;;;;;;;;;-1:-1:-1;22294:229:0;;;;;:::i;:::-;;:::i;21626:118::-;;;;;;;;;;;;;:::i;:::-;;;1533:25:1;;;1521:2;1506:18;21626:118:0;1387:177:1;32632:178:0;;;;;;;;;;;;;:::i;22541:298::-;;;;;;;;;;-1:-1:-1;22541:298:0;;;;;:::i;:::-;;:::i;19221:63::-;;;;;;;;;;;;;;;;19144:61;;;;;;;;;;;;;;;;21507:101;;;;;;;;;;-1:-1:-1;21507:101:0;;18952:2;2044:36:1;;2032:2;2017:18;21507:101:0;1902:184:1;22857:274:0;;;;;;;;;;-1:-1:-1;22857:274:0;;;;;:::i;:::-;;:::i;30158:269::-;;;;;;;;;;-1:-1:-1;30158:269:0;;;;;:::i;:::-;;:::i;18716:23::-;;;;;;;;;;-1:-1:-1;18716:23:0;;;;;;;;;;;32393:221;;;;;;;;;;-1:-1:-1;32393:221:0;;;;;:::i;:::-;;:::i;21762:137::-;;;;;;;;;;-1:-1:-1;21762:137:0;;;;;:::i;:::-;-1:-1:-1;;;;;21864:18:0;21828:7;21864:18;;;:9;:18;;;;;;;21762:137;10779:103;;;;;;;;;;;;;:::i;10131:87::-;;;;;;;;;;-1:-1:-1;10177:7:0;10204:6;-1:-1:-1;;;;;10204:6:0;10131:87;;;-1:-1:-1;;;;;4024:32:1;;;4006:51;;3994:2;3979:18;10131:87:0;3860:203:1;30741:287:0;;;;;;;;;;-1:-1:-1;30741:287:0;;;;;:::i;:::-;;:::i;31645:115::-;;;;;;;;;;-1:-1:-1;31645:115:0;;;;;:::i;:::-;;:::i;21384:105::-;;;;;;;;;;-1:-1:-1;21465:7:0;;;;;;;;;;;;-1:-1:-1;;;21465:7:0;;;;21384:105;;30445:278;;;;;;;;;;-1:-1:-1;30445:278:0;;;;;:::i;:::-;;:::i;31778:380::-;;;;;;;;;;-1:-1:-1;31778:380:0;;;;;:::i;:::-;;:::i;23149:508::-;;;;;;;;;;-1:-1:-1;23149:508:0;;;;;:::i;:::-;;:::i;21917:180::-;;;;;;;;;;-1:-1:-1;21917:180:0;;;;;:::i;:::-;;:::i;33236:207::-;;;;;;;;;;;;;:::i;32176:199::-;;;;;;;;;;-1:-1:-1;32176:199:0;;;;;:::i;:::-;;:::i;31046:454::-;;;;;;;;;;-1:-1:-1;31046:454:0;;;;;:::i;:::-;;:::i;29492:107::-;;;;;;;;;;-1:-1:-1;29581:9:0;;-1:-1:-1;;;;;29581:9:0;29492:107;;29608:532;;;;;;;;;;;;;:::i;22115:161::-;;;;;;;;;;-1:-1:-1;22115:161:0;;;;;:::i;:::-;;:::i;19303:23::-;;;;;;;;;;;;;;;;31518:109;;;;;;;;;;-1:-1:-1;31518:109:0;;;;;:::i;:::-;;:::i;19068:60::-;;;;;;;;;;;;;;;;11037:201;;;;;;;;;;-1:-1:-1;11037:201:0;;;;;:::i;:::-;;:::i;18639:23::-;;;;;;;;;;-1:-1:-1;18639:23:0;;;;;;;;32828:390;10017:13;:11;:13::i;:::-;32935:4:::1;-1:-1:-1::0;;;;;32914:26:0;::::1;::::0;32906:65:::1;;;::::0;-1:-1:-1;;;32906:65:0;;4781:2:1;32906:65:0::1;::::0;::::1;4763:21:1::0;4820:2;4800:18;;;4793:30;4859:28;4839:18;;;4832:56;4905:18;;32906:65:0::1;;;;;;;;;32999:42;::::0;-1:-1:-1;;;32999:42:0;;33035:4:::1;32999:42;::::0;::::1;4006:51:1::0;33044:1:0::1;::::0;-1:-1:-1;;;;;32999:27:0;::::1;::::0;::::1;::::0;3979:18:1;;32999:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;32991:68;;;::::0;-1:-1:-1;;;32991:68:0;;5325:2:1;32991:68:0::1;::::0;::::1;5307:21:1::0;5364:1;5344:18;;;5337:29;-1:-1:-1;;;5382:18:1;;;5375:39;5431:18;;32991:68:0::1;5123:332:1::0;32991:68:0::1;33093:42;::::0;-1:-1:-1;;;33093:42:0;;33129:4:::1;33093:42;::::0;::::1;4006:51:1::0;33079:11:0::1;::::0;-1:-1:-1;;;;;33093:27:0;::::1;::::0;::::1;::::0;3979:18:1;;33093:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33155:46;::::0;-1:-1:-1;;;33155:46:0;;33182:10:::1;33155:46;::::0;::::1;5634:51:1::0;5701:18;;;5694:34;;;33079:56:0;;-1:-1:-1;;;;;;33155:26:0;::::1;::::0;::::1;::::0;5607:18:1;;33155:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32886:332;32828:390:::0;:::o;22294:229::-;22369:4;9427:10;22443:32;9427:10;22459:7;22468:6;22443:8;:32::i;:::-;22502:4;22495:11;;;22294:229;;;;;:::o;21626:118::-;21679:7;19035:13;18952:2;19035;:13;:::i;:::-;19013:36;;:18;:36;:::i;:::-;21708:19;;21626:118;:::o;32632:178::-;10017:13;:11;:13::i;:::-;32735:58:::1;::::0;32690:12:::1;::::0;32743:10:::1;::::0;32767:21:::1;::::0;32690:12;32735:58;32690:12;32735:58;32767:21;32743:10;32735:58:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;32632:178:0:o;22541:298::-;22630:4;9427:10;22706:38;22722:4;9427:10;22737:6;22706:15;:38::i;:::-;22764:27;22774:4;22780:2;22784:6;22764:9;:27::i;:::-;-1:-1:-1;22818:4:0;;22541:298;-1:-1:-1;;;;22541:298:0:o;22857:274::-;22945:4;9427:10;23019:64;9427:10;23035:7;23072:10;23044:25;9427:10;23035:7;23044:9;:25::i;:::-;:38;;;;:::i;:::-;23019:8;:64::i;30158:269::-;10017:13;:11;:13::i;:::-;30267:30:::1;30292:4;30267:20;30285:1;30267:13;:11;:13::i;:::-;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;30250:12;:48;;30242:121;;;::::0;-1:-1:-1;;;30242:121:0;;8219:2:1;30242:121:0::1;::::0;::::1;8201:21:1::0;8258:2;8238:18;;;8231:30;8297:34;8277:18;;;8270:62;8368:30;8348:18;;;8341:58;8416:19;;30242:121:0::1;8017:424:1::0;30242:121:0::1;30383:12;:27:::0;30158:269::o;32393:221::-;10017:13;:11;:13::i;:::-;32508:6:::1;32503:94;32524:8;:15;32520:1;:19;32503:94;;;32593:4;32546:31;:44;32578:8;32587:1;32578:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32546:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32546:44:0;:51;;-1:-1:-1;;32546:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32541:3;::::1;::::0;::::1;:::i;:::-;;;;32503:94;;10779:103:::0;10017:13;:11;:13::i;:::-;10844:30:::1;10871:1;10844:18;:30::i;:::-;10779:103::o:0;30741:287::-;10017:13;:11;:13::i;:::-;30861:29:::1;30886:3;30861:20;30879:1;30861:13;:11;:13::i;:29::-;30840:16;:51;;30832:125;;;::::0;-1:-1:-1;;;30832:125:0;;8920:2:1;30832:125:0::1;::::0;::::1;8902:21:1::0;8959:2;8939:18;;;8932:30;8998:34;8978:18;;;8971:62;9069:31;9049:18;;;9042:59;9118:19;;30832:125:0::1;8718:425:1::0;30832:125:0::1;30977:15;:34:::0;30741:287::o;31645:115::-;10017:13;:11;:13::i;:::-;31721:14:::1;:22:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31721:22:0;;::::1;::::0;;;::::1;::::0;;31645:115::o;30445:278::-;10017:13;:11;:13::i;:::-;30559:30:::1;30584:4;30559:20;30577:1;30559:13;:11;:13::i;:30::-;30540:14;:50;;30532:124;;;::::0;-1:-1:-1;;;30532:124:0;;9350:2:1;30532:124:0::1;::::0;::::1;9332:21:1::0;9389:2;9369:18;;;9362:30;9428:34;9408:18;;;9401:62;9499:31;9479:18;;;9472:59;9548:19;;30532:124:0::1;9148:425:1::0;30532:124:0::1;30676:13;:30:::0;30445:278::o;31778:380::-;10017:13;:11;:13::i;:::-;31894:4:::1;::::0;-1:-1:-1;;;;;31894:4:0;;::::1;31874:24:::0;;::::1;::::0;31866:75:::1;;;::::0;-1:-1:-1;;;31866:75:0;;9780:2:1;31866:75:0::1;::::0;::::1;9762:21:1::0;9819:2;9799:18;;;9792:30;9858:34;9838:18;;;9831:62;-1:-1:-1;;;9909:18:1;;;9902:36;9955:19;;31866:75:0::1;9578:402:1::0;31866:75:0::1;31961:12;:40:::0;;-1:-1:-1;;;;;31961:40:0;;::::1;-1:-1:-1::0;;;;;;31961:40:0;;::::1;::::0;::::1;::::0;;:12:::1;32021:37:::0;;;:19:::1;:37;::::0;;;;;;;:44;;-1:-1:-1;;32021:44:0;;::::1;31961:40:::0;32021:44;;::::1;::::0;;;32085:31:::1;:49:::0;;;;;:56;;;;::::1;::::0;;::::1;::::0;;31778:380::o;23149:508::-;23242:4;9427:10;23242:4;23343:25;9427:10;23360:7;23343:9;:25::i;:::-;23316:52;;23416:15;23396:16;:35;;23388:84;;;;-1:-1:-1;;;23388:84:0;;10187:2:1;23388:84:0;;;10169:21:1;10226:2;10206:18;;;10199:30;10265:34;10245:18;;;10238:62;-1:-1:-1;;;10316:18:1;;;10309:34;10360:19;;23388:84:0;9985:400:1;23388:84:0;23526:60;23535:5;23542:7;23570:15;23551:16;:34;23526:8;:60::i;21917:180::-;21988:4;22014:35;9427:10;22038:2;22042:6;22014:9;:35::i;:::-;-1:-1:-1;22076:4:0;21917:180;;;;:::o;33236:207::-;10017:13;:11;:13::i;:::-;19035::::1;18952:2;19035;:13;:::i;:::-;19013:36;::::0;:18:::1;:36;:::i;:::-;33301:12;:27:::0;19035:13:::1;18952:2;19035;:13;:::i;:::-;19013:36;::::0;:18:::1;:36;:::i;:::-;33348:13;:28:::0;;;19035:13:::1;::::0;18952:2:::1;::::0;19035:13:::1;:::i;:::-;19013:36;::::0;:18:::1;:36;:::i;32176:199::-:0;10017:13;:11;:13::i;:::-;32281:6:::1;32276:82;32297:8;:15;32293:1;:19;32276:82;;;32354:4;32319:19;:32;32339:8;32348:1;32339:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32319:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32319:32:0;:39;;-1:-1:-1;;32319:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32314:3;::::1;::::0;::::1;:::i;:::-;;;;32276:82;;31046:454:::0;10017:13;:11;:13::i;:::-;31177:32:::1;31202:6;31177:20;31195:1;31177:13;:11;:13::i;:32::-;31152:20;:58;;31144:130;;;::::0;-1:-1:-1;;;31144:130:0;;10592:2:1;31144:130:0::1;::::0;::::1;10574:21:1::0;10631:2;10611:18;;;10604:30;10670:34;10650:18;;;10643:62;10741:29;10721:18;;;10714:57;10788:19;;31144:130:0::1;10390:423:1::0;31144:130:0::1;31327:30;31352:4;31327:20;31345:1;31327:13;:11;:13::i;:30::-;31302:20;:56;;31294:127;;;::::0;-1:-1:-1;;;31294:127:0;;11020:2:1;31294:127:0::1;::::0;::::1;11002:21:1::0;11059:2;11039:18;;;11032:30;11098:34;11078:18;;;11071:62;11169:28;11149:18;;;11142:56;11215:19;;31294:127:0::1;10818:422:1::0;31294:127:0::1;31441:19;:42:::0;31046:454::o;29608:532::-;10017:13;:11;:13::i;:::-;29677:11:::1;::::0;::::1;;29676:12;29668:53;;;::::0;-1:-1:-1;;;29668:53:0;;11447:2:1;29668:53:0::1;::::0;::::1;11429:21:1::0;11486:2;11466:18;;;11459:30;11525:31;11505:18;;;11498:59;11574:18;;29668:53:0::1;11245:353:1::0;29668:53:0::1;29748:4;::::0;;29770:16;29789:37:::1;::::0;-1:-1:-1;;;29789:37:0;;29820:4:::1;29789:37;::::0;::::1;4006:51:1::0;-1:-1:-1;;;;;29748:4:0;;::::1;::::0;29741:20:::1;::::0;29770:16:::1;::::0;29748:4;;29789:22:::1;::::0;3979:18:1;;29789:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29741:86;::::0;-1:-1:-1;;;;;;29741:86:0::1;::::0;;;;;;-1:-1:-1;;;;;5652:32:1;;;29741:86:0::1;::::0;::::1;5634:51:1::0;5701:18;;;5694:34;5607:18;;29741:86:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;29847:16:0::1;::::0;29892:4:::1;::::0;29885::::1;21828:7:::0;21864:18;;;:9;:18;;;;;;-1:-1:-1;;;;;29847:16:0;;::::1;::::0;:29:::1;::::0;29892:4:::1;::::0;29931::::1;::::0;29924:37:::1;::::0;-1:-1:-1;;;29924:37:0;;29955:4:::1;29924:37;::::0;::::1;4006:51:1::0;-1:-1:-1;;;;;29931:4:0;;::::1;::::0;29924:22:::1;::::0;3979:18:1;;29924:37:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29963:1;29966::::0;29969:7:::1;10177::::0;10204:6;-1:-1:-1;;;;;10204:6:0;;10131:87;29969:7:::1;29847:147;::::0;::::1;::::0;;;-1:-1:-1;;;;;;29847:147:0;;;-1:-1:-1;;;;;12018:15:1;;;29847:147:0::1;::::0;::::1;12000:34:1::0;12070:15;;;12050:18;;;12043:43;12102:18;;;12095:34;;;;12145:18;;;12138:34;;;;12188:19;;;12181:35;12232:19;;;12225:35;12297:15;;;12276:19;;;12269:44;29978:15:0::1;12329:19:1::0;;;12322:35;11934:19;;29847:147:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;30014:11:0::1;:18:::0;;-1:-1:-1;;30105:18:0;;;;;-1:-1:-1;29608:532:0:o;22115:161::-;-1:-1:-1;;;;;22232:18:0;;;22196:7;22232:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22115:161::o;31518:109::-;10017:13;:11;:13::i;:::-;31591:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;31591:19:0;;::::1;::::0;;;::::1;::::0;;31518:109::o;11037:201::-;10017:13;:11;:13::i;:::-;-1:-1:-1;;;;;11126:22:0;::::1;11118:73;;;::::0;-1:-1:-1;;;11118:73:0;;12881:2:1;11118:73:0::1;::::0;::::1;12863:21:1::0;12920:2;12900:18;;;12893:30;12959:34;12939:18;;;12932:62;-1:-1:-1;;;13010:18:1;;;13003:36;13056:19;;11118:73:0::1;12679:402:1::0;11118:73:0::1;11202:28;11221:8;11202:18;:28::i;:::-;11037:201:::0;:::o;3246:98::-;3304:7;3331:5;3335:1;3331;:5;:::i;:::-;3324:12;3246:98;-1:-1:-1;;;3246:98:0:o;3645:::-;3703:7;3730:5;3734:1;3730;:5;:::i;10296:132::-;10177:7;10204:6;-1:-1:-1;;;;;10204:6:0;9427:10;10360:23;10352:68;;;;-1:-1:-1;;;10352:68:0;;13510:2:1;10352:68:0;;;13492:21:1;;;13529:18;;;13522:30;13588:34;13568:18;;;13561:62;13640:18;;10352:68:0;13308:356:1;26156:370:0;26268:4;;-1:-1:-1;;;;;26268:4:0;;;26259:13;;;;26251:61;;;;-1:-1:-1;;;26251:61:0;;13871:2:1;26251:61:0;;;13853:21:1;13910:2;13890:18;;;13883:30;13949:34;13929:18;;;13922:62;-1:-1:-1;;;14000:18:1;;;13993:33;14043:19;;26251:61:0;13669:399:1;26251:61:0;26351:4;;-1:-1:-1;;;;;26351:4:0;;;26340:15;;;;26332:61;;;;-1:-1:-1;;;26332:61:0;;14275:2:1;26332:61:0;;;14257:21:1;14314:2;14294:18;;;14287:30;14353:34;14333:18;;;14326:62;-1:-1:-1;;;14404:18:1;;;14397:31;14445:19;;26332:61:0;14073:397:1;26332:61:0;-1:-1:-1;;;;;26416:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26477:32;;1533:25:1;;;26477:32:0;;1506:18:1;26477:32:0;;;;;;;;26156:370;;;:::o;26544:482::-;26646:24;26673:25;26683:5;26690:7;26673:9;:25::i;:::-;26646:52;;-1:-1:-1;;26722:16:0;:37;26718:292;;26813:6;26793:16;:26;;26785:67;;;;-1:-1:-1;;;26785:67:0;;14677:2:1;26785:67:0;;;14659:21:1;14716:2;14696:18;;;14689:30;14755;14735:18;;;14728:58;14803:18;;26785:67:0;14475:352:1;26785:67:0;26914:51;26923:5;26930:7;26958:6;26939:16;:25;26914:8;:51::i;23675:2463::-;23781:4;;-1:-1:-1;;;;;23781:4:0;;;23773:12;;;;23765:61;;;;-1:-1:-1;;;23765:61:0;;15034:2:1;23765:61:0;;;15016:21:1;15073:2;15053:18;;;15046:30;15112:34;15092:18;;;15085:62;-1:-1:-1;;;15163:18:1;;;15156:34;15207:19;;23765:61:0;14832:400:1;23765:61:0;23860:4;;-1:-1:-1;;;;;23860:4:0;;;23854:10;;;;23846:57;;;;-1:-1:-1;;;23846:57:0;;15439:2:1;23846:57:0;;;15421:21:1;15478:2;15458:18;;;15451:30;15517:34;15497:18;;;15490:62;-1:-1:-1;;;15568:18:1;;;15561:32;15610:19;;23846:57:0;15237:398:1;23846:57:0;23940:1;23931:6;:10;23923:70;;;;-1:-1:-1;;;23923:70:0;;15842:2:1;23923:70:0;;;15824:21:1;15881:2;15861:18;;;15854:30;15920:34;15900:18;;;15893:62;-1:-1:-1;;;15971:18:1;;;15964:45;16026:19;;23923:70:0;15640:411:1;23923:70:0;24031:4;24016:12;24110:7;10177;10204:6;-1:-1:-1;;;;;10204:6:0;;10131:87;24110:7;-1:-1:-1;;;;;24102:15:0;:4;-1:-1:-1;;;;;24102:15:0;;;:32;;;;-1:-1:-1;10177:7:0;10204:6;-1:-1:-1;;;;;24121:13:0;;;10204:6;;24121:13;;24102:32;:46;;;;-1:-1:-1;24144:4:0;;-1:-1:-1;;;;;24138:10:0;;;24144:4;;24138:10;;24102:46;:60;;;;-1:-1:-1;24158:4:0;;-1:-1:-1;;;;;24152:10:0;;;24158:4;;24152:10;;24102:60;:74;;;;-1:-1:-1;24167:9:0;;;;;;;24166:10;24102:74;24098:1430;;;24206:11;;;;24202:115;;-1:-1:-1;;;;;24227:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24256:23:0;;;;;;:19;:23;;;;;;;;24227:52;24219:98;;;;-1:-1:-1;;;24219:98:0;;16258:2:1;24219:98:0;;;16240:21:1;16297:2;16277:18;;;16270:30;16336:34;16316:18;;;16309:62;-1:-1:-1;;;16387:18:1;;;16380:31;16428:19;;24219:98:0;16056:397:1;24219:98:0;24348:14;;;;;;;24344:460;;;24410:16;;-1:-1:-1;;;;;24396:31:0;;;24410:16;;24396:31;;;;:64;;-1:-1:-1;24445:14:0;;-1:-1:-1;;;;;24431:29:0;;;24445:14;;24431:29;;24396:64;24392:388;;;24524:16;24539:1;24524:12;:16;:::i;:::-;24511:9;24502:19;;;;:8;:19;;;;;;:38;:73;;;;-1:-1:-1;24559:16:0;24574:1;24559:12;:16;:::i;:::-;-1:-1:-1;;;;;24544:12:0;;;;;;:8;:12;;;;;;:31;24502:73;24494:132;;;;-1:-1:-1;;;24494:132:0;;16793:2:1;24494:132:0;;;16775:21:1;16832:2;16812:18;;;16805:30;16871:34;16851:18;;;16844:62;-1:-1:-1;;;16922:18:1;;;16915:44;16976:19;;24494:132:0;16591:410:1;24494:132:0;24667:9;24658:19;;;;:8;:19;;;;;;24680:12;24658:34;;;;-1:-1:-1;;;;;24724:12:0;;;;;;:27;24392:388;24842:14;;-1:-1:-1;;;;;24834:22:0;;;24842:14;;24834:22;:57;;;;-1:-1:-1;24874:16:0;;-1:-1:-1;;;;;24860:31:0;;;24874:16;;24860:31;;24834:57;:97;;;;-1:-1:-1;;;;;;24896:35:0;;;;;;:31;:35;;;;;;;;24895:36;24834:97;24830:362;;;24979:12;;24969:6;:22;;24961:82;;;;-1:-1:-1;;;24961:82:0;;17208:2:1;24961:82:0;;;17190:21:1;17247:2;17227:18;;;17220:30;17286:34;17266:18;;;17259:62;-1:-1:-1;;;17337:18:1;;;17330:45;17392:19;;24961:82:0;17006:411:1;24961:82:0;25105:15;;25095:6;25079:13;25089:2;-1:-1:-1;;;;;21864:18:0;21828:7;21864:18;;;:9;:18;;;;;;;21762:137;25079:13;:22;;;;:::i;:::-;:41;;25071:96;;;;-1:-1:-1;;;25071:96:0;;17624:2:1;25071:96:0;;;17606:21:1;17663:2;17643:18;;;17636:30;17702:34;17682:18;;;17675:62;-1:-1:-1;;;17753:18:1;;;17746:40;17803:19;;25071:96:0;17422:406:1;25071:96:0;25228:14;;-1:-1:-1;;;;;25222:20:0;;;25228:14;;25222:20;:57;;;;-1:-1:-1;25262:16:0;;-1:-1:-1;;;;;25246:33:0;;;25262:16;;25246:33;;25222:57;:99;;;;-1:-1:-1;;;;;;25284:37:0;;;;;;:31;:37;;;;;;;;25283:38;25222:99;25218:290;;;25369:13;;25359:6;:23;;25351:84;;;;-1:-1:-1;;;25351:84:0;;18035:2:1;25351:84:0;;;18017:21:1;18074:2;18054:18;;;18047:30;18113:34;18093:18;;;18086:62;-1:-1:-1;;;18164:18:1;;;18157:46;18220:19;;25351:84:0;17833:412:1;25351:84:0;-1:-1:-1;25479:4:0;25218:290;-1:-1:-1;;;;;25553:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25582:23:0;;;;;;:19;:23;;;;;;;;25553:52;25550:72;;;25617:5;25607:15;;25550:72;25689:4;25645:23;21864:18;;;:9;:18;;;;;;25645:50;;25715:12;25749:19;;25731:15;:37;25730:53;;;;;25773:10;25730:53;25715:68;;25810:7;:22;;;;-1:-1:-1;25821:11:0;;;;;;;25810:22;:36;;;;-1:-1:-1;25837:9:0;;;;;;;25836:10;25810:36;:66;;;;-1:-1:-1;;;;;;25851:25:0;;;;;;:19;:25;;;;;;;;25850:26;25810:66;:94;;;;-1:-1:-1;;;;;;25881:23:0;;;;;;:19;:23;;;;;;;;25880:24;25810:94;25806:252;;;25930:9;:16;;-1:-1:-1;;25930:16:0;;;;;25970:26;25980:15;25970:9;:26::i;:::-;26020:9;:17;;-1:-1:-1;;26020:17:0;;;25806:252;26080:41;26095:4;26101:2;26105:6;26113:7;26080:14;:41::i;:::-;23745:2393;;;;23675:2463;;;:::o;11398:191::-;11472:16;11491:6;;-1:-1:-1;;;;;11508:17:0;;;-1:-1:-1;;;;;;11508:17:0;;;;;;11541:40;;11491:6;;;;;;;11541:40;;11472:16;11541:40;11461:128;11398:191;:::o;27044:478::-;27121:20;;;:42;;-1:-1:-1;27145:13:0;;:18;27121:42;27117:55;;;27044:478;:::o;27117:55::-;27216:19;;:23;;27238:1;27216:23;:::i;:::-;27198:15;:41;27194:88;;;27259:19;;:23;;27281:1;27259:23;:::i;:::-;27241:41;;27194:88;27305:37;27326:15;27305:20;:37::i;:::-;27366:9;;;;;;;;;-1:-1:-1;;;;;27366:9:0;-1:-1:-1;;;;;27366:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27416:1:0;27400:13;:17;-1:-1:-1;;27447:4:0;;27462:12;;27476:37;;-1:-1:-1;;;27476:37:0;;27507:4;27476:37;;;4006:51:1;-1:-1:-1;;;;;27447:4:0;;;;27440:21;;27462:12;;27447:4;;27476:22;;3979:18:1;;27476:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27440:74;;-1:-1:-1;;;;;;27440:74:0;;;;;;;-1:-1:-1;;;;;5652:32:1;;;27440:74:0;;;5634:51:1;5701:18;;;5694:34;5607:18;;27440:74:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27044:478;:::o;28356:337::-;28479:7;28474:85;;28488:12;:10;:12::i;:::-;28474:85;;;28534:25;28544:6;28552;28534:9;:25::i;:::-;28525:34;;28474:85;28582:44;28600:6;28608:9;28619:6;28582:17;:44::i;:::-;28654:7;28649:27;;28663:13;28309:12;;28303:3;:18;28251:87;27540:522;27644:16;;;27658:1;27644:16;;;;;;;;27620:21;;27644:16;;;;;;;;;;-1:-1:-1;27644:16:0;27620:40;;27698:4;27680;27685:1;27680:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27680:23:0;;;:7;;;;;;;;;:23;27733:4;;27723:7;;27733:4;;;27723;;27733;;27723:7;;;;;;:::i;:::-;-1:-1:-1;;;;;27723:14:0;;;:7;;;;;;;;;:14;27789:16;;27757:63;;27774:4;;27789:16;27808:11;27757:8;:63::i;:::-;27840:16;;27994:9;;27840:205;;-1:-1:-1;;;27840:205:0;;-1:-1:-1;;;;;27840:16:0;;;;:70;;:205;;27925:11;;27840:16;;27967:4;;27994:9;;;28019:15;;27840:205;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27600:462;27540:522;:::o;28080:153::-;28135:3;;28142:1;28135:8;28131:21;;28080:153::o;28131:21::-;28186:3;;;28171:12;:18;-1:-1:-1;28209:7:0;;28080:153::o;29041:433::-;29143:3;;29110:7;;29143;29139:283;;29176:12;29191:25;29211:4;29191:15;29202:3;;29191:6;:10;;:15;;;;:::i;:25::-;29270:3;;29176:40;;-1:-1:-1;29257:10:0;29270:3;29176:40;29257:10;:::i;:::-;:16;;;;:::i;:::-;29240:13;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;29304:8:0;;29300:60;;29314:46;29332:6;29348:4;29355;29314:17;:46::i;:::-;29387:14;29397:4;29387:14;;:::i;:::-;;;29152:270;29139:283;-1:-1:-1;29451:6:0;29041:433;-1:-1:-1;29041:433:0:o;28711:312::-;-1:-1:-1;;;;;28839:17:0;;;;;;:9;:17;;;;;;:30;;28861:7;28839:21;:30::i;:::-;-1:-1:-1;;;;;28819:17:0;;;;;;;:9;:17;;;;;;:50;;;;28912:20;;;;;;;:33;;28937:7;28912:24;:33::i;:::-;-1:-1:-1;;;;;28889:20:0;;;;;;;:9;:20;;;;;;;:56;;;;28970:36;;;;;;;;;;28998:7;1533:25:1;;1521:2;1506:18;;1387:177;2889:98:0;2947:7;2974:5;2978:1;2974;:5;:::i;2508:98::-;2566:7;2593:5;2597:1;2593;:5;:::i;14:173:1:-;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:186::-;251:6;304:2;292:9;283:7;279:23;275:32;272:52;;;320:1;317;310:12;272:52;343:29;362:9;343:29;:::i;575:548::-;687:4;716:2;745;734:9;727:21;777:6;771:13;820:6;815:2;804:9;800:18;793:34;845:1;855:140;869:6;866:1;863:13;855:140;;;964:14;;;960:23;;954:30;930:17;;;949:2;926:26;919:66;884:10;;855:140;;;859:3;1044:1;1039:2;1030:6;1019:9;1015:22;1011:31;1004:42;1114:2;1107;1103:7;1098:2;1090:6;1086:15;1082:29;1071:9;1067:45;1063:54;1055:62;;;;575:548;;;;:::o;1128:254::-;1196:6;1204;1257:2;1245:9;1236:7;1232:23;1228:32;1225:52;;;1273:1;1270;1263:12;1225:52;1296:29;1315:9;1296:29;:::i;:::-;1286:39;1372:2;1357:18;;;;1344:32;;-1:-1:-1;;;1128:254:1:o;1569:328::-;1646:6;1654;1662;1715:2;1703:9;1694:7;1690:23;1686:32;1683:52;;;1731:1;1728;1721:12;1683:52;1754:29;1773:9;1754:29;:::i;:::-;1744:39;;1802:38;1836:2;1825:9;1821:18;1802:38;:::i;:::-;1792:48;;1887:2;1876:9;1872:18;1859:32;1849:42;;1569:328;;;;;:::o;2091:180::-;2150:6;2203:2;2191:9;2182:7;2178:23;2174:32;2171:52;;;2219:1;2216;2209:12;2171:52;-1:-1:-1;2242:23:1;;2091:180;-1:-1:-1;2091:180:1:o;2276:127::-;2337:10;2332:3;2328:20;2325:1;2318:31;2368:4;2365:1;2358:15;2392:4;2389:1;2382:15;2408:118;2494:5;2487:13;2480:21;2473:5;2470:32;2460:60;;2516:1;2513;2506:12;2531:128;2596:20;;2625:28;2596:20;2625:28;:::i;2664:1191::-;2754:6;2762;2815:2;2803:9;2794:7;2790:23;2786:32;2783:52;;;2831:1;2828;2821:12;2783:52;2871:9;2858:23;2900:18;2941:2;2933:6;2930:14;2927:34;;;2957:1;2954;2947:12;2927:34;2995:6;2984:9;2980:22;2970:32;;3040:7;3033:4;3029:2;3025:13;3021:27;3011:55;;3062:1;3059;3052:12;3011:55;3098:2;3085:16;3120:4;3143:2;3139;3136:10;3133:36;;;3149:18;;:::i;:::-;3195:2;3192:1;3188:10;3227:2;3221:9;3290:2;3286:7;3281:2;3277;3273:11;3269:25;3261:6;3257:38;3345:6;3333:10;3330:22;3325:2;3313:10;3310:18;3307:46;3304:72;;;3356:18;;:::i;:::-;3392:2;3385:22;3442:18;;;3476:15;;;;-1:-1:-1;3518:11:1;;;3514:20;;;3546:19;;;3543:39;;;3578:1;3575;3568:12;3543:39;3602:11;;;;3622:148;3638:6;3633:3;3630:15;3622:148;;;3704:23;3723:3;3704:23;:::i;:::-;3692:36;;3655:12;;;;3748;;;;3622:148;;;3789:6;-1:-1:-1;3814:35:1;;-1:-1:-1;3830:18:1;;;3814:35;:::i;:::-;3804:45;;;;;;2664:1191;;;;;:::o;4068:241::-;4124:6;4177:2;4165:9;4156:7;4152:23;4148:32;4145:52;;;4193:1;4190;4183:12;4145:52;4232:9;4219:23;4251:28;4273:5;4251:28;:::i;4314:260::-;4382:6;4390;4443:2;4431:9;4422:7;4418:23;4414:32;4411:52;;;4459:1;4456;4449:12;4411:52;4482:29;4501:9;4482:29;:::i;:::-;4472:39;;4530:38;4564:2;4553:9;4549:18;4530:38;:::i;:::-;4520:48;;4314:260;;;;;:::o;4934:184::-;5004:6;5057:2;5045:9;5036:7;5032:23;5028:32;5025:52;;;5073:1;5070;5063:12;5025:52;-1:-1:-1;5096:16:1;;4934:184;-1:-1:-1;4934:184:1:o;5739:245::-;5806:6;5859:2;5847:9;5838:7;5834:23;5830:32;5827:52;;;5875:1;5872;5865:12;5827:52;5907:9;5901:16;5926:28;5948:5;5926:28;:::i;5989:127::-;6050:10;6045:3;6041:20;6038:1;6031:31;6081:4;6078:1;6071:15;6105:4;6102:1;6095:15;6121:422;6210:1;6253:5;6210:1;6267:270;6288:7;6278:8;6275:21;6267:270;;;6347:4;6343:1;6339:6;6335:17;6329:4;6326:27;6323:53;;;6356:18;;:::i;:::-;6406:7;6396:8;6392:22;6389:55;;;6426:16;;;;6389:55;6505:22;;;;6465:15;;;;6267:270;;;6271:3;6121:422;;;;;:::o;6548:806::-;6597:5;6627:8;6617:80;;-1:-1:-1;6668:1:1;6682:5;;6617:80;6716:4;6706:76;;-1:-1:-1;6753:1:1;6767:5;;6706:76;6798:4;6816:1;6811:59;;;;6884:1;6879:130;;;;6791:218;;6811:59;6841:1;6832:10;;6855:5;;;6879:130;6916:3;6906:8;6903:17;6900:43;;;6923:18;;:::i;:::-;-1:-1:-1;;6979:1:1;6965:16;;6994:5;;6791:218;;7093:2;7083:8;7080:16;7074:3;7068:4;7065:13;7061:36;7055:2;7045:8;7042:16;7037:2;7031:4;7028:12;7024:35;7021:77;7018:159;;;-1:-1:-1;7130:19:1;;;7162:5;;7018:159;7209:34;7234:8;7228:4;7209:34;:::i;:::-;7279:6;7275:1;7271:6;7267:19;7258:7;7255:32;7252:58;;;7290:18;;:::i;:::-;7328:20;;6548:806;-1:-1:-1;;;6548:806:1:o;7359:140::-;7417:5;7446:47;7487:4;7477:8;7473:19;7467:4;7446:47;:::i;7504:168::-;7577:9;;;7608;;7625:15;;;7619:22;;7605:37;7595:71;;7646:18;;:::i;7887:125::-;7952:9;;;7973:10;;;7970:36;;;7986:18;;:::i;8446:127::-;8507:10;8502:3;8498:20;8495:1;8488:31;8538:4;8535:1;8528:15;8562:4;8559:1;8552:15;8578:135;8617:3;8638:17;;;8635:43;;8658:18;;:::i;:::-;-1:-1:-1;8705:1:1;8694:13;;8578:135::o;12368:306::-;12456:6;12464;12472;12525:2;12513:9;12504:7;12500:23;12496:32;12493:52;;;12541:1;12538;12531:12;12493:52;12570:9;12564:16;12554:26;;12620:2;12609:9;12605:18;12599:25;12589:35;;12664:2;12653:9;12649:18;12643:25;12633:35;;12368:306;;;;;:::o;13086:217::-;13126:1;13152;13142:132;;13196:10;13191:3;13187:20;13184:1;13177:31;13231:4;13228:1;13221:15;13259:4;13256:1;13249:15;13142:132;-1:-1:-1;13288:9:1;;13086:217::o;16458:128::-;16525:9;;;16546:11;;;16543:37;;;16560:18;;:::i;18537:980::-;18799:4;18847:3;18836:9;18832:19;18878:6;18867:9;18860:25;18904:2;18942:6;18937:2;18926:9;18922:18;18915:34;18985:3;18980:2;18969:9;18965:18;18958:31;19009:6;19044;19038:13;19075:6;19067;19060:22;19113:3;19102:9;19098:19;19091:26;;19152:2;19144:6;19140:15;19126:29;;19173:1;19183:195;19197:6;19194:1;19191:13;19183:195;;;19262:13;;-1:-1:-1;;;;;19258:39:1;19246:52;;19353:15;;;;19318:12;;;;19294:1;19212:9;19183:195;;;-1:-1:-1;;;;;;;19434:32:1;;;;19429:2;19414:18;;19407:60;-1:-1:-1;;;19498:3:1;19483:19;19476:35;19395:3;18537:980;-1:-1:-1;;;18537:980:1:o

Swarm Source

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