ETH Price: $3,350.66 (-0.92%)

Token

POM Blend (PBL)
 

Overview

Max Total Supply

100,000,000 PBL

Holders

101

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
10,000.681932242793706057 PBL

Value
$0.00
0x8966248e5ca83ed77ffedcb82b53ae81549e4dd7
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:
PBLToken

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-31
*/

// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/7f6a1666fac8ecff5dd467d0938069bc221ea9e0/contracts/utils/math/SafeMath.sol
 
 
 
pragma solidity ^0.8.0;
 
// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.
 
/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
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 substraction 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. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * 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;
        }
    }
}
 
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol
 
 
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
 
pragma solidity ^0.8.0;
 
/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
// File: https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/Ownable.sol
 
 
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
 
pragma solidity ^0.8.0;
 
 
/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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);
    }
}
 
// File: poms.sol
 
 
 
pragma solidity ^0.8.7;
 
 
 
/**
 * @dev Interfaces
 */
 
interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}
 
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;
}
 
/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
 
    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
 
    /**
     * @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);
 
    /**
     * @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 Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);
 
    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
}
 
contract PBLToken is Context, IERC20, IERC20Metadata, Ownable {
    receive() external payable {}
 
    event SendNative(bool _wallet);
 
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 _totalSupply;
    string private _name;
    string private _symbol;
    uint8 private _decimals;
 
    // fees & addresses
    mapping (string => uint) txFees;
 
    mapping (address => bool) public feeExempt;
    mapping (address => bool) public txLimitExempt;
 
    address public farmingAddress = msg.sender;
    address public taxAddress = msg.sender;
    address public nativeTokenAddress = msg.sender;
 
    // taxes for differnet levels
 
    struct TokenFee {
        uint forMarketing;
        uint forDev;
        uint forFarming;
    }
 
    struct TxLimit {
        uint buyLimit;
        uint sellLimit;
        uint cooldown;
        bool inactive;
        mapping(address => uint) buys;
        mapping(address => uint) sells;
        mapping(address => uint) lastTx;
    }
 
    TxLimit txLimits;
 
    struct SwapToken {
        uint swapTokensAt;
        uint lastSwap;
        uint swapDelay;
        uint minToSend;
    }
 
    SwapToken public swapTokens;
 
    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;
 
    constructor() {
        _name = "POM Blend";
        _symbol = "PBL";
        _decimals = 18;
        _totalSupply = 100_000_000 * (10 ** decimals());
 
        feeExempt[msg.sender] = true;
        txLimitExempt[msg.sender] = true;
        feeExempt[address(this)] = true;
        txLimitExempt[address(this)] = true;
        feeExempt[farmingAddress] = true;
        txLimitExempt[farmingAddress] = true;
        feeExempt[taxAddress] = true;
        txLimitExempt[taxAddress] = true;
        feeExempt[nativeTokenAddress] = true;
        txLimitExempt[nativeTokenAddress] = true;
 
        /**
            Set default buy/sell tx fees (no tax on transfers)
            - marketing, dev, liqudity, farming
        */
        txFees["marketingBuy"] = 100; // 1%
        txFees["liqBuy"] = 250;
        txFees["farmingBuy"] = 100;
 
        txFees["marketingSell"] = 200;
        txFees["liqSell"] = 500;
        txFees["farmingSell"] = 200;
 
        /**
            Set default tx limits
            - Cooldown, buy limit, sell limit
        */
        txLimits.cooldown = 30 seconds;
        txLimits.buyLimit = _totalSupply.div(100);
        txLimits.sellLimit = _totalSupply.div(100);
 
        swapTokens.swapTokensAt = _totalSupply.div(1394); // 0.1%
        swapTokens.minToSend = 10_000 ether;
        swapTokens.swapDelay = 1 minutes;
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
        _approve(address(this), address(uniswapV2Router), _totalSupply);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router), type(uint).max);
 
        approve(address(uniswapV2Router), _totalSupply);
        feeExempt[address(uniswapV2Router)] = true;
 
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }
 
    /**
        Sets buy/sell transaction fees
    */
    event Fees(
        uint _marketingBuy,
        uint _liqBuy,
        uint _farmingBuy,
        uint _marketingSell,
        uint _liqSell,
        uint _farmingSell
    );
 
    function setFees(
        uint _marketingBuy,
        uint _liqBuy,
        uint _farmingBuy,
        uint _marketingSell,
        uint _liqSell,
        uint _farmingSell
    ) external onlyOwner {
        require(_marketingBuy <= 800, "Marketing fee is too high!");
        require(_liqBuy <= 800, "Dev fee is too high!");
        require(_farmingBuy <= 800, "Farming fee is too high!");
        require(_marketingSell <= 800, "Marketing fee is too high!");
        require(_liqSell <= 800, "Dev fee is too high!");
        require(_farmingSell <= 800, "Farming fee is too high!");
 
        txFees["marketingBuy"] = _marketingBuy;
        txFees["liqBuy"] = _liqBuy;
        txFees["farmingBuy"] = _farmingBuy;
 
        txFees["marketingSell"] = _marketingSell;
        txFees["liqSell"] = _liqSell;
        txFees["farmingSell"] = _farmingSell;
 
        emit Fees(
            _marketingBuy,
            _liqBuy,
            _farmingBuy,
            _marketingSell,
            _liqSell,
            _farmingSell
        );
    }
 
    /**
        Returns buy/sell transaction fees
    */
    function getFees() public view returns(
        uint marketingBuy,
        uint liqBuy,
        uint farmingBuy,
        uint marketingSell,
        uint liqSell,
        uint farmingSell
    ) {
        return (
            txFees["marketingBuy"],
            txFees["liqBuy"],
            txFees["farmingBuy"],
            txFees["marketingSell"],
            txFees["liqSell"],
            txFees["farmingSell"]
        );
    }
 
    /**
        Sets the tax collector contracts
    */
    function setTaxAddress(address _farmingAddress, address _taxAddress, address _nativeTokenAddress) external onlyOwner {
        farmingAddress = _farmingAddress;
        taxAddress = _taxAddress;
        nativeTokenAddress = _nativeTokenAddress;
    }
 
    /**
        Sets the tax free trading for the specific address
    */
    function setFeeExempt(address _address, bool _value) external onlyOwner {
        feeExempt[_address] = _value;
    }
 
    /**
        Sets the limit free trading for the specific address
    */
    function setTxLimitExempt(address _address, bool _value) external onlyOwner {
        txLimitExempt[_address] = _value;
    }
 
    /**
        Sets the sell/buy limits & cooldown period
    */
    function setTxLimits(uint _buyLimit, uint _sellLimit, uint _cooldown, bool _inactive) external onlyOwner {
        require(_buyLimit >= _totalSupply.div(200), "Buy transaction limit is too low!"); // 0.5%
        require(_sellLimit >= _totalSupply.div(400), "Sell transaction limit is too low!"); // 0.25%
        require(_cooldown <= 30 minutes, "Cooldown should be 30 minutes or less!");
 
        txLimits.buyLimit = _buyLimit;
        txLimits.sellLimit = _sellLimit;
        txLimits.cooldown = _cooldown;
        txLimits.inactive = _inactive;
    }
 
    /**
        Sell tokens at
    */
    function setSwapTokens(uint _swapTokensAt, uint _lastSwap, uint _delay) external onlyOwner {
        swapTokens.swapTokensAt = _swapTokensAt;
        swapTokens.lastSwap = _lastSwap;
        swapTokens.swapDelay = _delay;
    }
 
    /**
        Returns the sell/buy limits & cooldown period
    */
    function getTxLimits() public view returns(uint buyLimit, uint sellLimit, uint cooldown, bool inactive) {
        return (txLimits.buyLimit, txLimits.sellLimit, txLimits.cooldown, txLimits.inactive);
    }
 
    /**
        Checks the BUY transaction limits for the specific user with the sent amount
    */
    function checkBuyTxLimit(address _sender, uint256 _amount) internal view {
        require(
            txLimits.inactive == true ||
            txLimitExempt[_sender] == true ||
            txLimits.buys[_sender].add(_amount) < txLimits.buyLimit ||
            (txLimits.buys[_sender].add(_amount) > txLimits.buyLimit &&
            txLimits.lastTx[_sender].add(txLimits.cooldown) < block.timestamp),
            "Buy transaction limit reached!"
        );
    }
 
    /**
        Checks the SELL transaction limits for the specific user with the sent amount
    */
    function checkSellTxLimit(address _sender, uint256 _amount) internal view {
        require(
            txLimits.inactive == true ||
            txLimitExempt[_sender] == true ||
            txLimits.sells[_sender].add(_amount) < txLimits.sellLimit ||
            (txLimits.sells[_sender].add(_amount) > txLimits.sellLimit &&
            txLimits.lastTx[_sender].add(txLimits.cooldown) < block.timestamp),
            "Sell transaction limit reached!"
        );
    }
 
    /**
        Saves the recent buy/sell transactions
        The function used by _transfer() when the cooldown/tx limit is active
    */
    function setRecentTx(bool _isSell, address _sender, uint _amount) internal {
        if(txLimits.lastTx[_sender].add(txLimits.cooldown) < block.timestamp) {
            _isSell ? txLimits.sells[_sender] = _amount : txLimits.buys[_sender] = _amount;
        } else {
            _isSell ? txLimits.sells[_sender] += _amount : txLimits.buys[_sender] += _amount;
        }
 
        txLimits.lastTx[_sender] = block.timestamp;
    }
 
    /**
        Returns the recent buys, sells and the last transaction for the specific wallet
    */
    function getRecentTx(address _address) public view returns(uint buys, uint sells, uint lastTx) {
        return (txLimits.buys[_address], txLimits.sells[_address], txLimits.lastTx[_address]);
    }
 
    /**
        Automatic swap
    */
 
    function swapTokensForNative(uint256 _amount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), _amount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
 
    function manualSwapTokensForNative(uint256 _amount) external onlyOwner {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), _amount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            _amount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
 
    function manualSendNative() external onlyOwner {
        uint256 contractNativeBalance = address(this).balance;
        sendNativeTokens(contractNativeBalance);
    }
 
    function sendNativeTokens(uint256 _amount) private {
 
        (bool success, ) = payable(nativeTokenAddress).call{value: _amount.div(3)}("");
        (bool success2, ) = payable(farmingAddress).call{value: _amount.div(3)}("");
        (bool success3, ) = payable(taxAddress).call{value: _amount.div(3)}("");
 
        emit SendNative(success);
        emit SendNative(success2);
        emit SendNative(success3);
    }
 
    function withdrawAnyToken(address payable _to, IERC20 _token) public onlyOwner {
        _token.transfer(_to, _token.balanceOf(address(this)));
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }
 
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }
 
    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }
 
    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }
 
        return true;
    }
 
    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
 
        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
 
        uint marketingFee;
        uint devFee;
        uint farmingFee;
 
        bool hasFees = true;
 
        // BUY
        if(from == uniswapV2Pair) {
            // Add bots to blacklist before launch on buy
 
            checkBuyTxLimit(to, amount);
 
            setRecentTx(false, to, amount);
 
            marketingFee = txFees["marketingBuy"];
            devFee = txFees["liqBuy"];
            farmingFee = txFees["farmingBuy"];
        }
        // SELL
        else if(to == uniswapV2Pair) {
            checkSellTxLimit(from, amount);
 
            setRecentTx(true, from, amount);
 
            marketingFee = txFees["marketingSell"];
            devFee = txFees["liqSell"];
            farmingFee = txFees["farmingSell"];
        }
 
        unchecked {
            _balances[from] = fromBalance - amount;
        }
 
        if(feeExempt[to] || feeExempt[from]) {
            hasFees = false;
        }
 
        if(hasFees && (to == uniswapV2Pair || from == uniswapV2Pair)) {
            TokenFee memory TokenFees;
            TokenFees.forMarketing = amount.mul(marketingFee).div(10000);
            TokenFees.forDev = amount.mul(devFee).div(10000);
            TokenFees.forFarming = amount.mul(farmingFee).div(10000);
 
            uint totalFees =
                TokenFees.forMarketing
                .add(TokenFees.forDev)
                .add(TokenFees.forFarming);
 
            amount = amount.sub(totalFees);
 
            _balances[address(this)] += totalFees; // dev, lp, marketing fees
            emit Transfer(from, address(this), totalFees);
 
            // If active we do swap
            uint256 contractTokenBalance = _balances[address(this)];
 
            if (
                contractTokenBalance > swapTokens.swapTokensAt &&
                block.timestamp > swapTokens.lastSwap + swapTokens.swapDelay &&
                to == uniswapV2Pair
            ) {
                // Balance can be 10% more
                if(contractTokenBalance > swapTokens.swapTokensAt.mul(1100).div(1000)) {
                    swapTokensForNative(swapTokens.swapTokensAt);
                } else {
                    swapTokensForNative(contractTokenBalance);
                }
 
                swapTokens.lastSwap = block.timestamp;
 
                uint256 contractNativeBalance = address(this).balance;
 
                if(contractNativeBalance > swapTokens.minToSend) {
                    sendNativeTokens(contractNativeBalance);
                }
            }
        }
 
        _balances[to] += amount;
        emit Transfer(from, to, amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }
 
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
 
        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }
 
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_marketingBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_farmingBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liqSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_farmingSell","type":"uint256"}],"name":"Fees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_wallet","type":"bool"}],"name":"SendNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"liqBuy","type":"uint256"},{"internalType":"uint256","name":"farmingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"liqSell","type":"uint256"},{"internalType":"uint256","name":"farmingSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getRecentTx","outputs":[{"internalType":"uint256","name":"buys","type":"uint256"},{"internalType":"uint256","name":"sells","type":"uint256"},{"internalType":"uint256","name":"lastTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTxLimits","outputs":[{"internalType":"uint256","name":"buyLimit","type":"uint256"},{"internalType":"uint256","name":"sellLimit","type":"uint256"},{"internalType":"uint256","name":"cooldown","type":"uint256"},{"internalType":"bool","name":"inactive","type":"bool"}],"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":"manualSendNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manualSwapTokensForNative","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nativeTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingBuy","type":"uint256"},{"internalType":"uint256","name":"_liqBuy","type":"uint256"},{"internalType":"uint256","name":"_farmingBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingSell","type":"uint256"},{"internalType":"uint256","name":"_liqSell","type":"uint256"},{"internalType":"uint256","name":"_farmingSell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapTokensAt","type":"uint256"},{"internalType":"uint256","name":"_lastSwap","type":"uint256"},{"internalType":"uint256","name":"_delay","type":"uint256"}],"name":"setSwapTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_farmingAddress","type":"address"},{"internalType":"address","name":"_taxAddress","type":"address"},{"internalType":"address","name":"_nativeTokenAddress","type":"address"}],"name":"setTaxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLimit","type":"uint256"},{"internalType":"uint256","name":"_sellLimit","type":"uint256"},{"internalType":"uint256","name":"_cooldown","type":"uint256"},{"internalType":"bool","name":"_inactive","type":"bool"}],"name":"setTxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokens","outputs":[{"internalType":"uint256","name":"swapTokensAt","type":"uint256"},{"internalType":"uint256","name":"lastSwap","type":"uint256"},{"internalType":"uint256","name":"swapDelay","type":"uint256"},{"internalType":"uint256","name":"minToSend","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"txLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"contract IERC20","name":"_token","type":"address"}],"name":"withdrawAnyToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600a8054336001600160a01b03199182168117909255600b8054821683179055600c805490911690911790553480156200003d57600080fd5b50620000493362000614565b604080518082019091526009808252681413d348109b195b9960ba1b60209092019182526200007b91600491620007c1565b506040805180820190915260038082526214109360ea1b6020909201918252620000a891600591620007c1565b506006805460ff19166012908117909155620000c690600a62000929565b620000d6906305f5e100620009e8565b6003553360009081526008602081815260408084208054600160ff1991821681179092556009808552838720805483168417905530875285855283872080548316841790558085528387208054831684179055600a80546001600160a01b03908116895287875285892080548516861790559054811688528186528488208054841685179055600b805482168952878752858920805485168617905554811688528186528488208054841685179055600c80548216895296865284882080548416851790558654168752909352938190208054909216909317905590516b6d61726b6574696e6742757960a01b81526064916007910190815260405190819003602001812091909155656c697142757960d01b815260fa9060079060060190815260405190819003602001812091909155696661726d696e6742757960b01b8152606490600790600a01908152604051908190036020018120919091556c1b585c9ad95d1a5b99d4d95b1b609a1b815260c890600790600d0190815260405190819003602001812091909155661b1a5c54d95b1b60ca1b81526101f4906007908101908152604051908190036020018120919091556a19985c9b5a5b99d4d95b1b60aa1b815260c890600790600b019081526040516020918190038201902091909155601e600f55600354620002d89160649062000664811b6200128917901c565b600d55600354620002f790606462000664602090811b6200128917901c565b600e55600354620003179061057262000664602090811b6200128917901c565b60145569021e19e0c9bab2400000601755603c601655601880546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556003546200036890309083906200067b565b806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620003a257600080fd5b505afa158015620003b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003dd919062000867565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200042657600080fd5b505afa1580156200043b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000461919062000867565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620004aa57600080fd5b505af1158015620004bf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e5919062000867565b601980546001600160a01b0319166001600160a01b0392831690811790915560185460405163095ea7b360e01b81529216600483015260001960248301529063095ea7b390604401602060405180830381600087803b1580156200054857600080fd5b505af11580156200055d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000583919062000899565b506018546003546200059f916001600160a01b031690620007a7565b506018546001600160a01b03166000908152600860209081526040808320805460ff1916600190811790915560035433808652918452828520819055915191825292917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35062000a5d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620006728284620008bd565b90505b92915050565b6001600160a01b038316620006e35760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620007465760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620006da565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600033620007b78185856200067b565b5060019392505050565b828054620007cf9062000a0a565b90600052602060002090601f016020900481019282620007f357600085556200083e565b82601f106200080e57805160ff19168380011785556200083e565b828001600101855582156200083e579182015b828111156200083e57825182559160200191906001019062000821565b506200084c92915062000850565b5090565b5b808211156200084c576000815560010162000851565b6000602082840312156200087a57600080fd5b81516001600160a01b03811681146200089257600080fd5b9392505050565b600060208284031215620008ac57600080fd5b815180151581146200089257600080fd5b600082620008db57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200092157816000190482111562000905576200090562000a47565b808516156200091357918102915b93841c9390800290620008e5565b509250929050565b60006200067260ff841683600082620009455750600162000675565b81620009545750600062000675565b81600181146200096d5760028114620009785762000998565b600191505062000675565b60ff8411156200098c576200098c62000a47565b50506001821b62000675565b5060208310610133831016604e8410600b8410161715620009bd575081810a62000675565b620009c98383620008e0565b8060001904821115620009e057620009e062000a47565b029392505050565b600081600019048311821515161562000a055762000a0562000a47565b500290565b600181811c9082168062000a1f57607f821691505b6020821081141562000a4157634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6124b48062000a6d6000396000f3fe6080604052600436106102075760003560e01c80636519aa24116101185780638da5cb5b116100a0578063a9059cbb1161006f578063a9059cbb146106a1578063b7bda68f146106c1578063db8d55f1146106e1578063dd62ed3e14610723578063f2fde38b1461074357600080fd5b80638da5cb5b1461062e5780638ebfc7961461064c57806395d89b411461066c578063a457c2d71461068157600080fd5b8063715018a6116100e7578063715018a61461057657806373d002241461058b57806386f6c3c1146105ce5780638a2ade58146105ee5780638d7a8ba71461060e57600080fd5b80636519aa24146104e05780636745297e146105005780636d61c49d1461052057806370a082311461054057600080fd5b8063313ce5671161019b57806342966c681161016a57806342966c681461044b57806349bd5a5e1461046b57806349d3c1351461048b5780634d0047ee146104a0578063526731e6146104c057600080fd5b8063313ce567146103a9578063361f4fb4146103cb57806339509351146103fb578063398daa851461041b57600080fd5b80631694505e116101d75780631694505e1461031057806318160ddd1461034857806323b872dd146103675780632d4862481461038757600080fd5b806220a4031461021357806303f3d3101461028057806306fdde03146102be578063095ea7b3146102e057600080fd5b3661020e57005b600080fd5b34801561021f57600080fd5b5061026061022e366004612066565b6001600160a01b0316600090815260116020908152604080832054601283528184205460139093529220549192909190565b604080519384526020840192909252908201526060015b60405180910390f35b34801561028c57600080fd5b50600d54600e54600f5460105460ff166040805194855260208501939093529183015215156060820152608001610277565b3480156102ca57600080fd5b506102d3610763565b60405161027791906122be565b3480156102ec57600080fd5b506103006102fb366004612193565b6107f5565b6040519015158152602001610277565b34801561031c57600080fd5b50601854610330906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561035457600080fd5b506003545b604051908152602001610277565b34801561037357600080fd5b50610300610382366004612124565b61080d565b34801561039357600080fd5b506103a76103a23660046120d9565b610831565b005b3480156103b557600080fd5b5060065460405160ff9091168152602001610277565b3480156103d757600080fd5b506103006103e6366004612066565b60096020526000908152604090205460ff1681565b34801561040757600080fd5b50610300610416366004612193565b610878565b34801561042757600080fd5b50610300610436366004612066565b60086020526000908152604090205460ff1681565b34801561045757600080fd5b506103a76104663660046121dc565b61089a565b34801561047757600080fd5b50601954610330906001600160a01b031681565b34801561049757600080fd5b506103a76108a7565b3480156104ac57600080fd5b50600c54610330906001600160a01b031681565b3480156104cc57600080fd5b506103a76104db3660046120a0565b6108b9565b3480156104ec57600080fd5b506103a76104fb3660046121dc565b6109c5565b34801561050c57600080fd5b506103a761051b36600461223a565b610b36565b34801561052c57600080fd5b506103a761053b36600461220e565b610c96565b34801561054c57600080fd5b5061035961055b366004612066565b6001600160a01b031660009081526001602052604090205490565b34801561058257600080fd5b506103a7610cac565b34801561059757600080fd5b506014546015546016546017546105ae9392919084565b604080519485526020850193909352918301526060820152608001610277565b3480156105da57600080fd5b506103a76105e936600461227b565b610cc0565b3480156105fa57600080fd5b50600a54610330906001600160a01b031681565b34801561061a57600080fd5b506103a7610629366004612165565b610fde565b34801561063a57600080fd5b506000546001600160a01b0316610330565b34801561065857600080fd5b506103a7610667366004612165565b611011565b34801561067857600080fd5b506102d3611044565b34801561068d57600080fd5b5061030061069c366004612193565b611053565b3480156106ad57600080fd5b506103006106bc366004612193565b6110ce565b3480156106cd57600080fd5b50600b54610330906001600160a01b031681565b3480156106ed57600080fd5b506106f66110dc565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610277565b34801561072f57600080fd5b5061035961073e3660046120a0565b6111e8565b34801561074f57600080fd5b506103a761075e366004612066565b611213565b606060048054610772906123f4565b80601f016020809104026020016040519081016040528092919081815260200182805461079e906123f4565b80156107eb5780601f106107c0576101008083540402835291602001916107eb565b820191906000526020600020905b8154815290600101906020018083116107ce57829003601f168201915b5050505050905090565b60003361080381858561129c565b5060019392505050565b60003361081b8582856113c1565b61082685858561143b565b506001949350505050565b61083961198a565b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055565b60003361080381858561088b83836111e8565b6108959190612384565b61129c565b6108a433826119e4565b50565b6108af61198a565b476108a481611b10565b6108c161198a565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90849083906370a082319060240160206040518083038186803b15801561090a57600080fd5b505afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906121f5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c091906121bf565b505050565b6109cd61198a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610a0257610a02612445565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015610a5657600080fd5b505afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190612083565b81600181518110610aa157610aa1612445565b6001600160a01b039283166020918202929092010152601854610ac7913091168461129c565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790610b00908590600090869030904290600401612313565b600060405180830381600087803b158015610b1a57600080fd5b505af1158015610b2e573d6000803e3d6000fd5b505050505050565b610b3e61198a565b600354610b4c9060c8611289565b841015610baa5760405162461bcd60e51b815260206004820152602160248201527f427579207472616e73616374696f6e206c696d697420697320746f6f206c6f776044820152602160f81b60648201526084015b60405180910390fd5b600354610bb990610190611289565b831015610c135760405162461bcd60e51b815260206004820152602260248201527f53656c6c207472616e73616374696f6e206c696d697420697320746f6f206c6f604482015261772160f01b6064820152608401610ba1565b610708821115610c745760405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e2073686f756c64206265203330206d696e75746573206f72604482015265206c6573732160d01b6064820152608401610ba1565b600d93909355600e91909155600f556010805460ff1916911515919091179055565b610c9e61198a565b601492909255601555601655565b610cb461198a565b610cbe6000611cda565b565b610cc861198a565b610320861115610d1a5760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610ba1565b610320851115610d635760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610ba1565b610320841115610db05760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610ba1565b610320831115610e025760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610ba1565b610320821115610e4b5760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610ba1565b610320811115610e985760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610ba1565b856007604051610eba906b6d61726b6574696e6742757960a01b8152600c0190565b90815260408051918290036020908101832093909355656c697142757960d01b82526007600683018190528151928390036026018320899055696661726d696e6742757960b01b8352600a8301819052815192839003602a0183208890556c1b585c9ad95d1a5b99d4d95b1b609a1b8352600d8301819052815192839003602d018320879055661b1a5c54d95b1b60ca1b835282810181905281519283900360270183208690556a19985c9b5a5b99d4d95b1b60aa1b8352600b830152805191829003602b018220849055888252918101879052808201869052606081018590526080810184905260a0810183905290517f9d11d0c09898a8e5bed054b945fc074be173cbca95feb490df408807b1948c569160c0908290030190a1505050505050565b610fe661198a565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61101961198a565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b606060058054610772906123f4565b6000338161106182866111e8565b9050838110156110c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ba1565b610826828686840361129c565b60003361080381858561143b565b6000806000806000806007604051611106906b6d61726b6574696e6742757960a01b8152600c0190565b90815260405190819003602001812054656c697142757960d01b82529060079060060190815260405190819003602001812054696661726d696e6742757960b01b825290600790600a01908152604051908190036020018120546c1b585c9ad95d1a5b99d4d95b1b609a1b825290600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b8252906007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b825290600790600b01908152602001604051809103902054955095509550955095509550909192939495565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61121b61198a565b6001600160a01b0381166112805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba1565b6108a481611cda565b6000611295828461239c565b9392505050565b6001600160a01b0383166112fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba1565b6001600160a01b03821661135f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba1565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006113cd84846111e8565b9050600019811461143557818110156114285760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ba1565b611435848484840361129c565b50505050565b6001600160a01b03831661149f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba1565b6001600160a01b0382166115015760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba1565b6001600160a01b038316600090815260016020526040902054818110156115795760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ba1565b601954600090819081906001906001600160a01b038981169116141561162c576115a38787611d2a565b6115af60008888611e39565b6040516b6d61726b6574696e6742757960a01b8152600790600c0190815260405190819003602001812054656c697142757960d01b8252945060079060060190815260405190819003602001812054696661726d696e6742757960b01b82529350600790600a0190815260200160405180910390205491506116d3565b6019546001600160a01b03888116911614156116d35761164c8887611f37565b61165860018988611e39565b6040516c1b585c9ad95d1a5b99d4d95b1b609a1b8152600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b825294506007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b82529350600790600b0190815260200160405180910390205491505b6001600160a01b0380891660009081526001602090815260408083208a8a039055928a16825260089052205460ff168061172557506001600160a01b03881660009081526008602052604090205460ff165b1561172e575060005b80801561175f57506019546001600160a01b038881169116148061175f57506019546001600160a01b038981169116145b156119045761178860405180606001604052806000815260200160008152602001600081525090565b61179e6127106117988988612042565b90611289565b81526117b06127106117988987612042565b60208201526117c56127106117988986612042565b60408201819052602082015182516000926117eb9290916117e59161204e565b9061204e565b90506117f7888261205a565b3060009081526001602052604081208054929a50839290919061181b908490612384565b909155505060405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3306000908152600160205260409020546014548111801561188f575060165460155461188c9190612384565b42115b80156118a857506019546001600160a01b038b81169116145b15611900576014546118c4906103e8906117989061044c612042565b8111156118dc576014546118d7906109cd565b6118e5565b6118e5816109cd565b4260155560175447908111156118fe576118fe81611b10565b505b5050505b6001600160a01b0387166000908152600160205260408120805488929061192c908490612384565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161197891815260200190565b60405180910390a35050505050505050565b6000546001600160a01b03163314610cbe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba1565b6001600160a01b038216611a445760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ba1565b6001600160a01b03821660009081526001602052604090205481811015611ab85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ba1565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016113b4565b600c546000906001600160a01b0316611b2a836003611289565b604051600081818185875af1925050503d8060008114611b66576040519150601f19603f3d011682016040523d82523d6000602084013e611b6b565b606091505b5050600a549091506000906001600160a01b0316611b8a846003611289565b604051600081818185875af1925050503d8060008114611bc6576040519150601f19603f3d011682016040523d82523d6000602084013e611bcb565b606091505b5050600b549091506000906001600160a01b0316611bea856003611289565b604051600081818185875af1925050503d8060008114611c26576040519150601f19603f3d011682016040523d82523d6000602084013e611c2b565b606091505b505090507fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc183604051611c62911515815260200190565b60405180910390a160405182151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a160405181151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a150505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60105460ff16151560011480611d5d57506001600160a01b03821660009081526009602052604090205460ff1615156001145b80611d8b5750600d546001600160a01b038316600090815260116020526040902054611d89908361204e565b105b80611de95750600d546001600160a01b038316600090815260116020526040902054611db7908361204e565b118015611de95750600f546001600160a01b0383166000908152601360205260409020544291611de7919061204e565b105b611e355760405162461bcd60e51b815260206004820152601e60248201527f427579207472616e73616374696f6e206c696d697420726561636865642100006044820152606401610ba1565b5050565b600f546001600160a01b0383166000908152601360205260409020544291611e61919061204e565b1015611eb05782611e8d576001600160a01b038216600090815260116020526040902081905580611eaa565b6001600160a01b0382166000908152601260205260409020819055805b50611f19565b82611ee8576001600160a01b03821660009081526011602052604081208054839290611edd908490612384565b925050819055611f17565b6001600160a01b03821660009081526012602052604081208054839290611f10908490612384565b9250508190555b505b506001600160a01b0316600090815260136020526040902042905550565b60105460ff16151560011480611f6a57506001600160a01b03821660009081526009602052604090205460ff1615156001145b80611f985750600e546001600160a01b038316600090815260126020526040902054611f96908361204e565b105b80611ff65750600e546001600160a01b038316600090815260126020526040902054611fc4908361204e565b118015611ff65750600f546001600160a01b0383166000908152601360205260409020544291611ff4919061204e565b105b611e355760405162461bcd60e51b815260206004820152601f60248201527f53656c6c207472616e73616374696f6e206c696d6974207265616368656421006044820152606401610ba1565b600061129582846123be565b60006112958284612384565b600061129582846123dd565b60006020828403121561207857600080fd5b81356112958161245b565b60006020828403121561209557600080fd5b81516112958161245b565b600080604083850312156120b357600080fd5b82356120be8161245b565b915060208301356120ce8161245b565b809150509250929050565b6000806000606084860312156120ee57600080fd5b83356120f98161245b565b925060208401356121098161245b565b915060408401356121198161245b565b809150509250925092565b60008060006060848603121561213957600080fd5b83356121448161245b565b925060208401356121548161245b565b929592945050506040919091013590565b6000806040838503121561217857600080fd5b82356121838161245b565b915060208301356120ce81612470565b600080604083850312156121a657600080fd5b82356121b18161245b565b946020939093013593505050565b6000602082840312156121d157600080fd5b815161129581612470565b6000602082840312156121ee57600080fd5b5035919050565b60006020828403121561220757600080fd5b5051919050565b60008060006060848603121561222357600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561225057600080fd5b843593506020850135925060408501359150606085013561227081612470565b939692955090935050565b60008060008060008060c0878903121561229457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b818110156122eb578581018301518582016040015282016122cf565b818111156122fd576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123635784516001600160a01b03168352938301939183019160010161233e565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156123975761239761242f565b500190565b6000826123b957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156123d8576123d861242f565b500290565b6000828210156123ef576123ef61242f565b500390565b600181811c9082168061240857607f821691505b6020821081141561242957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146108a457600080fd5b80151581146108a457600080fdfea26469706673582212209ac7ecfa3ccab8a45bbb3b948b759bef235a221130be1a767dcc1fea0d30fc2364736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102075760003560e01c80636519aa24116101185780638da5cb5b116100a0578063a9059cbb1161006f578063a9059cbb146106a1578063b7bda68f146106c1578063db8d55f1146106e1578063dd62ed3e14610723578063f2fde38b1461074357600080fd5b80638da5cb5b1461062e5780638ebfc7961461064c57806395d89b411461066c578063a457c2d71461068157600080fd5b8063715018a6116100e7578063715018a61461057657806373d002241461058b57806386f6c3c1146105ce5780638a2ade58146105ee5780638d7a8ba71461060e57600080fd5b80636519aa24146104e05780636745297e146105005780636d61c49d1461052057806370a082311461054057600080fd5b8063313ce5671161019b57806342966c681161016a57806342966c681461044b57806349bd5a5e1461046b57806349d3c1351461048b5780634d0047ee146104a0578063526731e6146104c057600080fd5b8063313ce567146103a9578063361f4fb4146103cb57806339509351146103fb578063398daa851461041b57600080fd5b80631694505e116101d75780631694505e1461031057806318160ddd1461034857806323b872dd146103675780632d4862481461038757600080fd5b806220a4031461021357806303f3d3101461028057806306fdde03146102be578063095ea7b3146102e057600080fd5b3661020e57005b600080fd5b34801561021f57600080fd5b5061026061022e366004612066565b6001600160a01b0316600090815260116020908152604080832054601283528184205460139093529220549192909190565b604080519384526020840192909252908201526060015b60405180910390f35b34801561028c57600080fd5b50600d54600e54600f5460105460ff166040805194855260208501939093529183015215156060820152608001610277565b3480156102ca57600080fd5b506102d3610763565b60405161027791906122be565b3480156102ec57600080fd5b506103006102fb366004612193565b6107f5565b6040519015158152602001610277565b34801561031c57600080fd5b50601854610330906001600160a01b031681565b6040516001600160a01b039091168152602001610277565b34801561035457600080fd5b506003545b604051908152602001610277565b34801561037357600080fd5b50610300610382366004612124565b61080d565b34801561039357600080fd5b506103a76103a23660046120d9565b610831565b005b3480156103b557600080fd5b5060065460405160ff9091168152602001610277565b3480156103d757600080fd5b506103006103e6366004612066565b60096020526000908152604090205460ff1681565b34801561040757600080fd5b50610300610416366004612193565b610878565b34801561042757600080fd5b50610300610436366004612066565b60086020526000908152604090205460ff1681565b34801561045757600080fd5b506103a76104663660046121dc565b61089a565b34801561047757600080fd5b50601954610330906001600160a01b031681565b34801561049757600080fd5b506103a76108a7565b3480156104ac57600080fd5b50600c54610330906001600160a01b031681565b3480156104cc57600080fd5b506103a76104db3660046120a0565b6108b9565b3480156104ec57600080fd5b506103a76104fb3660046121dc565b6109c5565b34801561050c57600080fd5b506103a761051b36600461223a565b610b36565b34801561052c57600080fd5b506103a761053b36600461220e565b610c96565b34801561054c57600080fd5b5061035961055b366004612066565b6001600160a01b031660009081526001602052604090205490565b34801561058257600080fd5b506103a7610cac565b34801561059757600080fd5b506014546015546016546017546105ae9392919084565b604080519485526020850193909352918301526060820152608001610277565b3480156105da57600080fd5b506103a76105e936600461227b565b610cc0565b3480156105fa57600080fd5b50600a54610330906001600160a01b031681565b34801561061a57600080fd5b506103a7610629366004612165565b610fde565b34801561063a57600080fd5b506000546001600160a01b0316610330565b34801561065857600080fd5b506103a7610667366004612165565b611011565b34801561067857600080fd5b506102d3611044565b34801561068d57600080fd5b5061030061069c366004612193565b611053565b3480156106ad57600080fd5b506103006106bc366004612193565b6110ce565b3480156106cd57600080fd5b50600b54610330906001600160a01b031681565b3480156106ed57600080fd5b506106f66110dc565b604080519687526020870195909552938501929092526060840152608083015260a082015260c001610277565b34801561072f57600080fd5b5061035961073e3660046120a0565b6111e8565b34801561074f57600080fd5b506103a761075e366004612066565b611213565b606060048054610772906123f4565b80601f016020809104026020016040519081016040528092919081815260200182805461079e906123f4565b80156107eb5780601f106107c0576101008083540402835291602001916107eb565b820191906000526020600020905b8154815290600101906020018083116107ce57829003601f168201915b5050505050905090565b60003361080381858561129c565b5060019392505050565b60003361081b8582856113c1565b61082685858561143b565b506001949350505050565b61083961198a565b600a80546001600160a01b039485166001600160a01b031991821617909155600b805493851693821693909317909255600c8054919093169116179055565b60003361080381858561088b83836111e8565b6108959190612384565b61129c565b6108a433826119e4565b50565b6108af61198a565b476108a481611b10565b6108c161198a565b6040516370a0823160e01b81523060048201526001600160a01b0382169063a9059cbb90849083906370a082319060240160206040518083038186803b15801561090a57600080fd5b505afa15801561091e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094291906121f5565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526024820152604401602060405180830381600087803b15801561098857600080fd5b505af115801561099c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c091906121bf565b505050565b6109cd61198a565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110610a0257610a02612445565b6001600160a01b03928316602091820292909201810191909152601854604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015610a5657600080fd5b505afa158015610a6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a8e9190612083565b81600181518110610aa157610aa1612445565b6001600160a01b039283166020918202929092010152601854610ac7913091168461129c565b60185460405163791ac94760e01b81526001600160a01b039091169063791ac94790610b00908590600090869030904290600401612313565b600060405180830381600087803b158015610b1a57600080fd5b505af1158015610b2e573d6000803e3d6000fd5b505050505050565b610b3e61198a565b600354610b4c9060c8611289565b841015610baa5760405162461bcd60e51b815260206004820152602160248201527f427579207472616e73616374696f6e206c696d697420697320746f6f206c6f776044820152602160f81b60648201526084015b60405180910390fd5b600354610bb990610190611289565b831015610c135760405162461bcd60e51b815260206004820152602260248201527f53656c6c207472616e73616374696f6e206c696d697420697320746f6f206c6f604482015261772160f01b6064820152608401610ba1565b610708821115610c745760405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e2073686f756c64206265203330206d696e75746573206f72604482015265206c6573732160d01b6064820152608401610ba1565b600d93909355600e91909155600f556010805460ff1916911515919091179055565b610c9e61198a565b601492909255601555601655565b610cb461198a565b610cbe6000611cda565b565b610cc861198a565b610320861115610d1a5760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610ba1565b610320851115610d635760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610ba1565b610320841115610db05760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610ba1565b610320831115610e025760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f2068696768210000000000006044820152606401610ba1565b610320821115610e4b5760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b6044820152606401610ba1565b610320811115610e985760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b6044820152606401610ba1565b856007604051610eba906b6d61726b6574696e6742757960a01b8152600c0190565b90815260408051918290036020908101832093909355656c697142757960d01b82526007600683018190528151928390036026018320899055696661726d696e6742757960b01b8352600a8301819052815192839003602a0183208890556c1b585c9ad95d1a5b99d4d95b1b609a1b8352600d8301819052815192839003602d018320879055661b1a5c54d95b1b60ca1b835282810181905281519283900360270183208690556a19985c9b5a5b99d4d95b1b60aa1b8352600b830152805191829003602b018220849055888252918101879052808201869052606081018590526080810184905260a0810183905290517f9d11d0c09898a8e5bed054b945fc074be173cbca95feb490df408807b1948c569160c0908290030190a1505050505050565b610fe661198a565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b61101961198a565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b606060058054610772906123f4565b6000338161106182866111e8565b9050838110156110c15760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ba1565b610826828686840361129c565b60003361080381858561143b565b6000806000806000806007604051611106906b6d61726b6574696e6742757960a01b8152600c0190565b90815260405190819003602001812054656c697142757960d01b82529060079060060190815260405190819003602001812054696661726d696e6742757960b01b825290600790600a01908152604051908190036020018120546c1b585c9ad95d1a5b99d4d95b1b609a1b825290600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b8252906007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b825290600790600b01908152602001604051809103902054955095509550955095509550909192939495565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b61121b61198a565b6001600160a01b0381166112805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ba1565b6108a481611cda565b6000611295828461239c565b9392505050565b6001600160a01b0383166112fe5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ba1565b6001600160a01b03821661135f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ba1565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006113cd84846111e8565b9050600019811461143557818110156114285760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610ba1565b611435848484840361129c565b50505050565b6001600160a01b03831661149f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610ba1565b6001600160a01b0382166115015760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610ba1565b6001600160a01b038316600090815260016020526040902054818110156115795760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ba1565b601954600090819081906001906001600160a01b038981169116141561162c576115a38787611d2a565b6115af60008888611e39565b6040516b6d61726b6574696e6742757960a01b8152600790600c0190815260405190819003602001812054656c697142757960d01b8252945060079060060190815260405190819003602001812054696661726d696e6742757960b01b82529350600790600a0190815260200160405180910390205491506116d3565b6019546001600160a01b03888116911614156116d35761164c8887611f37565b61165860018988611e39565b6040516c1b585c9ad95d1a5b99d4d95b1b609a1b8152600790600d0190815260405190819003602001812054661b1a5c54d95b1b60ca1b825294506007908101908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b82529350600790600b0190815260200160405180910390205491505b6001600160a01b0380891660009081526001602090815260408083208a8a039055928a16825260089052205460ff168061172557506001600160a01b03881660009081526008602052604090205460ff165b1561172e575060005b80801561175f57506019546001600160a01b038881169116148061175f57506019546001600160a01b038981169116145b156119045761178860405180606001604052806000815260200160008152602001600081525090565b61179e6127106117988988612042565b90611289565b81526117b06127106117988987612042565b60208201526117c56127106117988986612042565b60408201819052602082015182516000926117eb9290916117e59161204e565b9061204e565b90506117f7888261205a565b3060009081526001602052604081208054929a50839290919061181b908490612384565b909155505060405181815230906001600160a01b038c16907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3306000908152600160205260409020546014548111801561188f575060165460155461188c9190612384565b42115b80156118a857506019546001600160a01b038b81169116145b15611900576014546118c4906103e8906117989061044c612042565b8111156118dc576014546118d7906109cd565b6118e5565b6118e5816109cd565b4260155560175447908111156118fe576118fe81611b10565b505b5050505b6001600160a01b0387166000908152600160205260408120805488929061192c908490612384565b92505081905550866001600160a01b0316886001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8860405161197891815260200190565b60405180910390a35050505050505050565b6000546001600160a01b03163314610cbe5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ba1565b6001600160a01b038216611a445760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610ba1565b6001600160a01b03821660009081526001602052604090205481811015611ab85760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610ba1565b6001600160a01b03831660008181526001602090815260408083208686039055600380548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91016113b4565b600c546000906001600160a01b0316611b2a836003611289565b604051600081818185875af1925050503d8060008114611b66576040519150601f19603f3d011682016040523d82523d6000602084013e611b6b565b606091505b5050600a549091506000906001600160a01b0316611b8a846003611289565b604051600081818185875af1925050503d8060008114611bc6576040519150601f19603f3d011682016040523d82523d6000602084013e611bcb565b606091505b5050600b549091506000906001600160a01b0316611bea856003611289565b604051600081818185875af1925050503d8060008114611c26576040519150601f19603f3d011682016040523d82523d6000602084013e611c2b565b606091505b505090507fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc183604051611c62911515815260200190565b60405180910390a160405182151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a160405181151581527fc7de915a10d9bde706d4e9578480e7c0356650ad28f9242079c04daaf8a93bc19060200160405180910390a150505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60105460ff16151560011480611d5d57506001600160a01b03821660009081526009602052604090205460ff1615156001145b80611d8b5750600d546001600160a01b038316600090815260116020526040902054611d89908361204e565b105b80611de95750600d546001600160a01b038316600090815260116020526040902054611db7908361204e565b118015611de95750600f546001600160a01b0383166000908152601360205260409020544291611de7919061204e565b105b611e355760405162461bcd60e51b815260206004820152601e60248201527f427579207472616e73616374696f6e206c696d697420726561636865642100006044820152606401610ba1565b5050565b600f546001600160a01b0383166000908152601360205260409020544291611e61919061204e565b1015611eb05782611e8d576001600160a01b038216600090815260116020526040902081905580611eaa565b6001600160a01b0382166000908152601260205260409020819055805b50611f19565b82611ee8576001600160a01b03821660009081526011602052604081208054839290611edd908490612384565b925050819055611f17565b6001600160a01b03821660009081526012602052604081208054839290611f10908490612384565b9250508190555b505b506001600160a01b0316600090815260136020526040902042905550565b60105460ff16151560011480611f6a57506001600160a01b03821660009081526009602052604090205460ff1615156001145b80611f985750600e546001600160a01b038316600090815260126020526040902054611f96908361204e565b105b80611ff65750600e546001600160a01b038316600090815260126020526040902054611fc4908361204e565b118015611ff65750600f546001600160a01b0383166000908152601360205260409020544291611ff4919061204e565b105b611e355760405162461bcd60e51b815260206004820152601f60248201527f53656c6c207472616e73616374696f6e206c696d6974207265616368656421006044820152606401610ba1565b600061129582846123be565b60006112958284612384565b600061129582846123dd565b60006020828403121561207857600080fd5b81356112958161245b565b60006020828403121561209557600080fd5b81516112958161245b565b600080604083850312156120b357600080fd5b82356120be8161245b565b915060208301356120ce8161245b565b809150509250929050565b6000806000606084860312156120ee57600080fd5b83356120f98161245b565b925060208401356121098161245b565b915060408401356121198161245b565b809150509250925092565b60008060006060848603121561213957600080fd5b83356121448161245b565b925060208401356121548161245b565b929592945050506040919091013590565b6000806040838503121561217857600080fd5b82356121838161245b565b915060208301356120ce81612470565b600080604083850312156121a657600080fd5b82356121b18161245b565b946020939093013593505050565b6000602082840312156121d157600080fd5b815161129581612470565b6000602082840312156121ee57600080fd5b5035919050565b60006020828403121561220757600080fd5b5051919050565b60008060006060848603121561222357600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561225057600080fd5b843593506020850135925060408501359150606085013561227081612470565b939692955090935050565b60008060008060008060c0878903121561229457600080fd5b505084359660208601359650604086013595606081013595506080810135945060a0013592509050565b600060208083528351808285015260005b818110156122eb578581018301518582016040015282016122cf565b818111156122fd576000604083870101525b50601f01601f1916929092016040019392505050565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156123635784516001600160a01b03168352938301939183019160010161233e565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156123975761239761242f565b500190565b6000826123b957634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156123d8576123d861242f565b500290565b6000828210156123ef576123ef61242f565b500390565b600181811c9082168061240857607f821691505b6020821081141561242957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146108a457600080fd5b80151581146108a457600080fdfea26469706673582212209ac7ecfa3ccab8a45bbb3b948b759bef235a221130be1a767dcc1fea0d30fc2364736f6c63430008070033

Deployed Bytecode Sourcemap

17948:21718:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27107:199;;;;;;;;;;-1:-1:-1;27107:199:0;;;;;:::i;:::-;-1:-1:-1;;;;;27221:23:0;27166:9;27221:23;;;:13;:23;;;;;;;;;27246:14;:24;;;;;;27272:15;:25;;;;;;27221:23;;27246:24;;27272:25;27107:199;;;;;17001:25:1;;;17057:2;17042:18;;17035:34;;;;17085:18;;;17078:34;16989:2;16974:18;27107:199:0;;;;;;;;25020:207;;;;;;;;;;-1:-1:-1;25143:8:0;:17;25162:18;;25182:17;;25201;;;;25020:207;;;17348:25:1;;;17404:2;17389:18;;17382:34;;;;17432:18;;;17425:34;17502:14;17495:22;17490:2;17475:18;;17468:50;17335:3;17320:19;25020:207:0;17123:401:1;29157:100:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30779:201::-;;;;;;;;;;-1:-1:-1;30779:201:0;;;;;:::i;:::-;;:::i;:::-;;;7419:14:1;;7412:22;7394:41;;7382:2;7367:18;30779:201:0;7254:187:1;19298:41:0;;;;;;;;;;-1:-1:-1;19298:41:0;;;;-1:-1:-1;;;;;19298:41:0;;;;;;-1:-1:-1;;;;;6923:32:1;;;6905:51;;6893:2;6878:18;19298:41:0;6759:203:1;29599:108:0;;;;;;;;;;-1:-1:-1;29687:12:0;;29599:108;;;15778:25:1;;;15766:2;15751:18;29599:108:0;15632:177:1;31561:295:0;;;;;;;;;;-1:-1:-1;31561:295:0;;;;;:::i;:::-;;:::i;23342:254::-;;;;;;;;;;-1:-1:-1;23342:254:0;;;;;:::i;:::-;;:::i;:::-;;29490:100;;;;;;;;;;-1:-1:-1;29573:9:0;;29490:100;;29573:9;;;;18607:36:1;;18595:2;18580:18;29490:100:0;18465:184:1;18494:46:0;;;;;;;;;;-1:-1:-1;18494:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32266:238;;;;;;;;;;-1:-1:-1;32266:238:0;;;;;:::i;:::-;;:::i;18445:42::-;;;;;;;;;;-1:-1:-1;18445:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39572:91;;;;;;;;;;-1:-1:-1;39572:91:0;;;;;:::i;:::-;;:::i;19346:28::-;;;;;;;;;;-1:-1:-1;19346:28:0;;;;-1:-1:-1;;;;;19346:28:0;;;28319:169;;;;;;;;;;;;;:::i;18644:46::-;;;;;;;;;;-1:-1:-1;18644:46:0;;;;-1:-1:-1;;;;;18644:46:0;;;28935:151;;;;;;;;;;-1:-1:-1;28935:151:0;;;;;:::i;:::-;;:::i;27831:479::-;;;;;;;;;;-1:-1:-1;27831:479:0;;;;;:::i;:::-;;:::i;24094:564::-;;;;;;;;;;-1:-1:-1;24094:564:0;;;;;:::i;:::-;;:::i;24708:231::-;;;;;;;;;;-1:-1:-1;24708:231:0;;;;;:::i;:::-;;:::i;29716:127::-;;;;;;;;;;-1:-1:-1;29716:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;29817:18:0;29790:7;29817:18;;;:9;:18;;;;;;;29716:127;10086:103;;;;;;;;;;;;;:::i;19261:27::-;;;;;;;;;;-1:-1:-1;19261:27:0;;;;;;;;;;;;;;;;;;;17760:25:1;;;17816:2;17801:18;;17794:34;;;;17844:18;;;17837:34;17902:2;17887:18;;17880:34;17747:3;17732:19;19261:27:0;17529:391:1;21692:1066:0;;;;;;;;;;-1:-1:-1;21692:1066:0;;;;;:::i;:::-;;:::i;18550:42::-;;;;;;;;;;-1:-1:-1;18550:42:0;;;;-1:-1:-1;;;;;18550:42:0;;;23889:127;;;;;;;;;;-1:-1:-1;23889:127:0;;;;;:::i;:::-;;:::i;9436:87::-;;;;;;;;;;-1:-1:-1;9482:7:0;9509:6;-1:-1:-1;;;;;9509:6:0;9436:87;;23682:119;;;;;;;;;;-1:-1:-1;23682:119:0;;;;;:::i;:::-;;:::i;29377:104::-;;;;;;;;;;;;;:::i;33008:437::-;;;;;;;;;;-1:-1:-1;33008:437:0;;;;;:::i;:::-;;:::i;30050:193::-;;;;;;;;;;-1:-1:-1;30050:193:0;;;;;:::i;:::-;;:::i;18599:38::-;;;;;;;;;;-1:-1:-1;18599:38:0;;;;-1:-1:-1;;;;;18599:38:0;;;22827:447;;;;;;;;;;;;;:::i;:::-;;;;18212:25:1;;;18268:2;18253:18;;18246:34;;;;18296:18;;;18289:34;;;;18354:2;18339:18;;18332:34;18397:3;18382:19;;18375:35;18441:3;18426:19;;18419:35;18199:3;18184:19;22827:447:0;17925:535:1;30307:151:0;;;;;;;;;;-1:-1:-1;30307:151:0;;;;;:::i;:::-;;:::i;10345:201::-;;;;;;;;;;-1:-1:-1;10345:201:0;;;;;:::i;:::-;;:::i;29157:100::-;29211:13;29244:5;29237:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29157:100;:::o;30779:201::-;30862:4;8003:10;30918:32;8003:10;30934:7;30943:6;30918:8;:32::i;:::-;-1:-1:-1;30968:4:0;;30779:201;-1:-1:-1;;;30779:201:0:o;31561:295::-;31692:4;8003:10;31750:38;31766:4;8003:10;31781:6;31750:15;:38::i;:::-;31799:27;31809:4;31815:2;31819:6;31799:9;:27::i;:::-;-1:-1:-1;31844:4:0;;31561:295;-1:-1:-1;;;;31561:295:0:o;23342:254::-;9321:13;:11;:13::i;:::-;23470:14:::1;:32:::0;;-1:-1:-1;;;;;23470:32:0;;::::1;-1:-1:-1::0;;;;;;23470:32:0;;::::1;;::::0;;;23513:10:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;23548:18:::1;:40:::0;;;;;::::1;::::0;::::1;;::::0;;23342:254::o;32266:238::-;32354:4;8003:10;32410:64;8003:10;32426:7;32463:10;32435:25;8003:10;32426:7;32435:9;:25::i;:::-;:38;;;;:::i;:::-;32410:8;:64::i;39572:91::-;39628:27;8003:10;39648:6;39628:5;:27::i;:::-;39572:91;:::o;28319:169::-;9321:13;:11;:13::i;:::-;28409:21:::1;28441:39;28409:21:::0;28441:16:::1;:39::i;28935:151::-:0;9321:13;:11;:13::i;:::-;29046:31:::1;::::0;-1:-1:-1;;;29046:31:0;;29071:4:::1;29046:31;::::0;::::1;6905:51:1::0;-1:-1:-1;;;;;29025:15:0;::::1;::::0;::::1;::::0;29041:3;;29025:15;;29046:16:::1;::::0;6878:18:1;;29046:31:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29025:53;::::0;-1:-1:-1;;;;;;29025:53:0::1;::::0;;;;;;-1:-1:-1;;;;;7167:32:1;;;29025:53:0::1;::::0;::::1;7149:51:1::0;7216:18;;;7209:34;7122:18;;29025:53:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28935:151:::0;;:::o;27831:479::-;9321:13;:11;:13::i;:::-;27937:16:::1;::::0;;27951:1:::1;27937:16:::0;;;;;::::1;::::0;;27913:21:::1;::::0;27937:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;27937:16:0::1;27913:40;;27982:4;27964;27969:1;27964:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27964:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;28008:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;28008:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;27964:7;;28008:22;;;;;:15;:22;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27998:4;28003:1;27998:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27998:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;28073:15:::1;::::0;28041:58:::1;::::0;28058:4:::1;::::0;28073:15:::1;28091:7:::0;28041:8:::1;:58::i;:::-;28110:15;::::0;:192:::1;::::0;-1:-1:-1;;;28110:192:0;;-1:-1:-1;;;;;28110:15:0;;::::1;::::0;:66:::1;::::0;:192:::1;::::0;28191:7;;28110:15:::1;::::0;28229:4;;28256::::1;::::0;28276:15:::1;::::0;28110:192:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27902:408;27831:479:::0;:::o;24094:564::-;9321:13;:11;:13::i;:::-;24231:12:::1;::::0;:21:::1;::::0;24248:3:::1;24231:16;:21::i;:::-;24218:9;:34;;24210:80;;;::::0;-1:-1:-1;;;24210:80:0;;12289:2:1;24210:80:0::1;::::0;::::1;12271:21:1::0;12328:2;12308:18;;;12301:30;12367:34;12347:18;;;12340:62;-1:-1:-1;;;12418:18:1;;;12411:31;12459:19;;24210:80:0::1;;;;;;;;;24331:12;::::0;:21:::1;::::0;24348:3:::1;24331:16;:21::i;:::-;24317:10;:35;;24309:82;;;::::0;-1:-1:-1;;;24309:82:0;;13098:2:1;24309:82:0::1;::::0;::::1;13080:21:1::0;13137:2;13117:18;;;13110:30;13176:34;13156:18;;;13149:62;-1:-1:-1;;;13227:18:1;;;13220:32;13269:19;;24309:82:0::1;12896:398:1::0;24309:82:0::1;24432:10;24419:9;:23;;24411:74;;;::::0;-1:-1:-1;;;24411:74:0;;12691:2:1;24411:74:0::1;::::0;::::1;12673:21:1::0;12730:2;12710:18;;;12703:30;12769:34;12749:18;;;12742:62;-1:-1:-1;;;12820:18:1;;;12813:36;12866:19;;24411:74:0::1;12489:402:1::0;24411:74:0::1;24499:8;:29:::0;;;;24539:18;:31;;;;24581:17;:29;24621:17;:29;;-1:-1:-1;;24621:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24094:564::o;24708:231::-;9321:13;:11;:13::i;:::-;24810:10:::1;:39:::0;;;;24860:19;:31;24902:20;:29;24708:231::o;10086:103::-;9321:13;:11;:13::i;:::-;10151:30:::1;10178:1;10151:18;:30::i;:::-;10086:103::o:0;21692:1066::-;9321:13;:11;:13::i;:::-;21932:3:::1;21915:13;:20;;21907:59;;;::::0;-1:-1:-1;;;21907:59:0;;11585:2:1;21907:59:0::1;::::0;::::1;11567:21:1::0;11624:2;11604:18;;;11597:30;11663:28;11643:18;;;11636:56;11709:18;;21907:59:0::1;11383:350:1::0;21907:59:0::1;21996:3;21985:7;:14;;21977:47;;;::::0;-1:-1:-1;;;21977:47:0;;11940:2:1;21977:47:0::1;::::0;::::1;11922:21:1::0;11979:2;11959:18;;;11952:30;-1:-1:-1;;;11998:18:1;;;11991:50;12058:18;;21977:47:0::1;11738:344:1::0;21977:47:0::1;22058:3;22043:11;:18;;22035:55;;;::::0;-1:-1:-1;;;22035:55:0;;13862:2:1;22035:55:0::1;::::0;::::1;13844:21:1::0;13901:2;13881:18;;;13874:30;-1:-1:-1;;;13920:18:1;;;13913:54;13984:18;;22035:55:0::1;13660:348:1::0;22035:55:0::1;22127:3;22109:14;:21;;22101:60;;;::::0;-1:-1:-1;;;22101:60:0;;11585:2:1;22101:60:0::1;::::0;::::1;11567:21:1::0;11624:2;11604:18;;;11597:30;11663:28;11643:18;;;11636:56;11709:18;;22101:60:0::1;11383:350:1::0;22101:60:0::1;22192:3;22180:8;:15;;22172:48;;;::::0;-1:-1:-1;;;22172:48:0;;11940:2:1;22172:48:0::1;::::0;::::1;11922:21:1::0;11979:2;11959:18;;;11952:30;-1:-1:-1;;;11998:18:1;;;11991:50;12058:18;;22172:48:0::1;11738:344:1::0;22172:48:0::1;22255:3;22239:12;:19;;22231:56;;;::::0;-1:-1:-1;;;22231:56:0;;13862:2:1;22231:56:0::1;::::0;::::1;13844:21:1::0;13901:2;13881:18;;;13874:30;-1:-1:-1;;;13920:18:1;;;13913:54;13984:18;;22231:56:0::1;13660:348:1::0;22231:56:0::1;22326:13;22301:6;:22;;;;-1:-1:-1::0;;;5955:27:1;;6007:2;5998:12;;5753:263;22301:22:0::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;:38;;;;-1:-1:-1;;;6433:21:1;;22350:6:0::1;6479:1:1::0;6470:11;;22350:16:0;;;;;;;;;;;;;:26;;;-1:-1:-1;;;5689:25:1;;5739:2;5730:12;;22387:20:0;;;;;;;;;;;;;:34;;;-1:-1:-1;;;5420:28:1;;5473:2;5464:12;;22435:23:0;;;;;;;;;;;;;:40;;;-1:-1:-1;;;5158:22:1;;5196:11;;;22486:17:0;;;;;;;;;;;;;:28;;;-1:-1:-1;;;6694:26:1;;6745:2;6736:12;;22525:21:0;;;;;;;;;;;:36;;;18212:25:1;;;18253:18;;;18246:34;;;18296:18;;;18289:34;;;18354:2;18339:18;;18332:34;;;18397:3;18382:19;;18375:35;;;18441:3;18426:19;;18419:35;;;22580:170:0;;::::1;::::0;18199:3:1;22580:170:0;;;;;;::::1;21692:1066:::0;;;;;;:::o;23889:127::-;9321:13;:11;:13::i;:::-;-1:-1:-1;;;;;23976:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;23976:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23889:127::o;23682:119::-;9321:13;:11;:13::i;:::-;-1:-1:-1;;;;;23765:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28;;-1:-1:-1;;23765:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;23682:119::o;29377:104::-;29433:13;29466:7;29459:14;;;;;:::i;33008:437::-;33101:4;8003:10;33101:4;33184:25;8003:10;33201:7;33184:9;:25::i;:::-;33157:52;;33248:15;33228:16;:35;;33220:85;;;;-1:-1:-1;;;33220:85:0;;15428:2:1;33220:85:0;;;15410:21:1;15467:2;15447:18;;;15440:30;15506:34;15486:18;;;15479:62;-1:-1:-1;;;15557:18:1;;;15550:35;15602:19;;33220:85:0;15226:401:1;33220:85:0;33341:60;33350:5;33357:7;33385:15;33366:16;:34;33341:8;:60::i;30050:193::-;30129:4;8003:10;30185:28;8003:10;30202:2;30206:6;30185:9;:28::i;22827:447::-;22876:17;22904:11;22926:15;22952:18;22981:12;23004:16;23061:6;:22;;;;-1:-1:-1;;;5955:27:1;;6007:2;5998:12;;5753:263;23061:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;6433:21:1;;23061:22:0;23098:6;;6479:1:1;6470:11;23098:16:0;;;;;;;;;;;;;;-1:-1:-1;;;5689:25:1;;23098:16:0;23129:6;;5739:2:1;5730:12;23129:20:0;;;;;;;;;;;;;;-1:-1:-1;;;5420:28:1;;23129:20:0;23164:6;;5473:2:1;5464:12;23164:23:0;;;;;;;;;;;;;;-1:-1:-1;;;5158:22:1;;23164:23:0;23202:6;;5196:11:1;;23202:17:0;;;;;;;;;;;;;;-1:-1:-1;;;6694:26:1;;23202:17:0;23234:6;;6745:2:1;6736:12;23234:21:0;;;;;;;;;;;;;23039:227;;;;;;;;;;;;22827:447;;;;;;:::o;30307:151::-;-1:-1:-1;;;;;30423:18:0;;;30396:7;30423:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;30307:151::o;10345:201::-;9321:13;:11;:13::i;:::-;-1:-1:-1;;;;;10434:22:0;::::1;10426:73;;;::::0;-1:-1:-1;;;10426:73:0;;9650:2:1;10426:73:0::1;::::0;::::1;9632:21:1::0;9689:2;9669:18;;;9662:30;9728:34;9708:18;;;9701:62;-1:-1:-1;;;9779:18:1;;;9772:36;9825:19;;10426:73:0::1;9448:402:1::0;10426:73:0::1;10510:28;10529:8;10510:18;:28::i;4029:98::-:0;4087:7;4114:5;4118:1;4114;:5;:::i;:::-;4107:12;4029:98;-1:-1:-1;;;4029:98:0:o;37441:381::-;-1:-1:-1;;;;;37577:19:0;;37569:68;;;;-1:-1:-1;;;37569:68:0;;15023:2:1;37569:68:0;;;15005:21:1;15062:2;15042:18;;;15035:30;15101:34;15081:18;;;15074:62;-1:-1:-1;;;15152:18:1;;;15145:34;15196:19;;37569:68:0;14821:400:1;37569:68:0;-1:-1:-1;;;;;37656:21:0;;37648:68;;;;-1:-1:-1;;;37648:68:0;;10057:2:1;37648:68:0;;;10039:21:1;10096:2;10076:18;;;10069:30;10135:34;10115:18;;;10108:62;-1:-1:-1;;;10186:18:1;;;10179:32;10228:19;;37648:68:0;9855:398:1;37648:68:0;-1:-1:-1;;;;;37730:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;37782:32;;15778:25:1;;;37782:32:0;;15751:18:1;37782:32:0;;;;;;;;37441:381;;;:::o;38114:453::-;38249:24;38276:25;38286:5;38293:7;38276:9;:25::i;:::-;38249:52;;-1:-1:-1;;38316:16:0;:37;38312:248;;38398:6;38378:16;:26;;38370:68;;;;-1:-1:-1;;;38370:68:0;;10460:2:1;38370:68:0;;;10442:21:1;10499:2;10479:18;;;10472:30;10538:31;10518:18;;;10511:59;10587:18;;38370:68:0;10258:353:1;38370:68:0;38482:51;38491:5;38498:7;38526:6;38507:16;:25;38482:8;:51::i;:::-;38238:329;38114:453;;;:::o;33925:3077::-;-1:-1:-1;;;;;34056:18:0;;34048:68;;;;-1:-1:-1;;;34048:68:0;;14617:2:1;34048:68:0;;;14599:21:1;14656:2;14636:18;;;14629:30;14695:34;14675:18;;;14668:62;-1:-1:-1;;;14746:18:1;;;14739:35;14791:19;;34048:68:0;14415:401:1;34048:68:0;-1:-1:-1;;;;;34135:16:0;;34127:64;;;;-1:-1:-1;;;34127:64:0;;8484:2:1;34127:64:0;;;8466:21:1;8523:2;8503:18;;;8496:30;8562:34;8542:18;;;8535:62;-1:-1:-1;;;8613:18:1;;;8606:33;8656:19;;34127:64:0;8282:399:1;34127:64:0;-1:-1:-1;;;;;34227:15:0;;34205:19;34227:15;;;:9;:15;;;;;;34261:21;;;;34253:72;;;;-1:-1:-1;;;34253:72:0;;10818:2:1;34253:72:0;;;10800:21:1;10857:2;10837:18;;;10830:30;10896:34;10876:18;;;10869:62;-1:-1:-1;;;10947:18:1;;;10940:36;10993:19;;34253:72:0;10616:402:1;34253:72:0;34478:13;;34339:17;;;;;;34433:4;;-1:-1:-1;;;;;34470:21:0;;;34478:13;;34470:21;34467:641;;;34570:27;34586:2;34590:6;34570:15;:27::i;:::-;34615:30;34627:5;34634:2;34638:6;34615:11;:30::i;:::-;34678:22;;-1:-1:-1;;;5955:27:1;;34678:6:0;;6007:2:1;5998:12;34678:22:0;;;;;;;;;;;;;;-1:-1:-1;;;6433:21:1;;34678:22:0;-1:-1:-1;34724:6:0;;6479:1:1;6470:11;34724:16:0;;;;;;;;;;;;;;-1:-1:-1;;;5689:25:1;;34724:16:0;-1:-1:-1;34768:6:0;;5739:2:1;5730:12;34768:20:0;;;;;;;;;;;;;34755:33;;34467:641;;;34841:13;;-1:-1:-1;;;;;34835:19:0;;;34841:13;;34835:19;34832:276;;;34871:30;34888:4;34894:6;34871:16;:30::i;:::-;34919:31;34931:4;34937;34943:6;34919:11;:31::i;:::-;34983:23;;-1:-1:-1;;;5420:28:1;;34983:6:0;;5473:2:1;5464:12;34983:23:0;;;;;;;;;;;;;;-1:-1:-1;;;5158:22:1;;34983:23:0;-1:-1:-1;35030:6:0;;5196:11:1;;35030:17:0;;;;;;;;;;;;;;-1:-1:-1;;;6694:26:1;;35030:17:0;-1:-1:-1;35075:6:0;;6745:2:1;6736:12;35075:21:0;;;;;;;;;;;;;35062:34;;34832:276;-1:-1:-1;;;;;35146:15:0;;;;;;;:9;:15;;;;;;;;35164:20;;;35146:38;;35212:13;;;;;:9;:13;;;;;;;:32;;-1:-1:-1;;;;;;35229:15:0;;;;;;:9;:15;;;;;;;;35212:32;35209:79;;;-1:-1:-1;35271:5:0;35209:79;35304:7;:57;;;;-1:-1:-1;35322:13:0;;-1:-1:-1;;;;;35316:19:0;;;35322:13;;35316:19;;:44;;-1:-1:-1;35347:13:0;;-1:-1:-1;;;;;35339:21:0;;;35347:13;;35339:21;35316:44;35301:1615;;;35378:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;35378:25:0;35443:35;35472:5;35443:24;:6;35454:12;35443:10;:24::i;:::-;:28;;:35::i;:::-;35418:60;;35512:29;35535:5;35512:18;:6;35523;35512:10;:18::i;:29::-;35493:16;;;:48;35579:33;35606:5;35579:22;:6;35590:10;35579;:22::i;:33::-;35556:20;;;:56;;;35709:16;;;;35664:22;;35630:14;;35664:106;;35556:56;;35664:62;;:44;:62::i;:::-;:84;;:106::i;:::-;35630:140;-1:-1:-1;35797:21:0;:6;35630:140;35797:10;:21::i;:::-;35854:4;35836:24;;;;:9;:24;;;;;:37;;35788:30;;-1:-1:-1;35864:9:0;;35836:24;;;:37;;35864:9;;35836:37;:::i;:::-;;;;-1:-1:-1;;35920:40:0;;15778:25:1;;;35943:4:0;;-1:-1:-1;;;;;35920:40:0;;;;;15766:2:1;15751:18;35920:40:0;;;;;;;36064:4;36015:28;36046:24;;;:9;:24;;;;;;36133:10;:23;36110:46;;:127;;;;-1:-1:-1;36217:20:0;;36195:19;;:42;;36217:20;36195:42;:::i;:::-;36177:15;:60;36110:127;:167;;;;-1:-1:-1;36264:13:0;;-1:-1:-1;;;;;36258:19:0;;;36264:13;;36258:19;36110:167;36088:817;;;36382:10;:23;:43;;36420:4;;36382:33;;36410:4;36382:27;:33::i;:43::-;36359:20;:66;36356:248;;;36470:10;:23;36450:44;;:19;:44::i;:::-;36356:248;;;36543:41;36563:20;36543:19;:41::i;:::-;36647:15;36625:19;:37;36786:20;;36716:21;;36762:44;;36759:131;;;36831:39;36848:21;36831:16;:39::i;:::-;36293:612;36088:817;35363:1553;;;35301:1615;-1:-1:-1;;;;;36929:13:0;;;;;;:9;:13;;;;;:23;;36946:6;;36929:13;:23;;36946:6;;36929:23;:::i;:::-;;;;;;;;36983:2;-1:-1:-1;;;;;36968:26:0;36977:4;-1:-1:-1;;;;;36968:26:0;;36987:6;36968:26;;;;15778:25:1;;15766:2;15751:18;;15632:177;36968:26:0;;;;;;;;34037:2965;;;;;33925:3077;;;:::o;9602:132::-;9482:7;9509:6;-1:-1:-1;;;;;9509:6:0;8003:10;9666:23;9658:68;;;;-1:-1:-1;;;9658:68:0;;13501:2:1;9658:68:0;;;13483:21:1;;;13520:18;;;13513:30;13579:34;13559:18;;;13552:62;13631:18;;9658:68:0;13299:356:1;38901:554:0;-1:-1:-1;;;;;38985:21:0;;38977:67;;;;-1:-1:-1;;;38977:67:0;;14215:2:1;38977:67:0;;;14197:21:1;14254:2;14234:18;;;14227:30;14293:34;14273:18;;;14266:62;-1:-1:-1;;;14344:18:1;;;14337:31;14385:19;;38977:67:0;14013:397:1;38977:67:0;-1:-1:-1;;;;;39083:18:0;;39058:22;39083:18;;;:9;:18;;;;;;39120:24;;;;39112:71;;;;-1:-1:-1;;;39112:71:0;;8888:2:1;39112:71:0;;;8870:21:1;8927:2;8907:18;;;8900:30;8966:34;8946:18;;;8939:62;-1:-1:-1;;;9017:18:1;;;9010:32;9059:19;;39112:71:0;8686:398:1;39112:71:0;-1:-1:-1;;;;;39219:18:0;;;;;;:9;:18;;;;;;;;39240:23;;;39219:44;;39358:12;:22;;;;;;;39410:37;15778:25:1;;;39219:18:0;;;39410:37;;15751:18:1;39410:37:0;15632:177:1;28497:429:0;28589:18;;28563:12;;-1:-1:-1;;;;;28589:18:0;28621:14;:7;28633:1;28621:11;:14::i;:::-;28581:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28679:14:0;;28562:78;;-1:-1:-1;28652:13:0;;-1:-1:-1;;;;;28679:14:0;28707;:7;28719:1;28707:11;:14::i;:::-;28671:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;28765:10:0;;28651:75;;-1:-1:-1;28738:13:0;;-1:-1:-1;;;;;28765:10:0;28789:14;:7;28801:1;28789:11;:14::i;:::-;28757:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28737:71;;;28827:19;28838:7;28827:19;;;;7419:14:1;7412:22;7394:41;;7382:2;7367:18;;7254:187;28827:19:0;;;;;;;;28862:20;;7419:14:1;;7412:22;7394:41;;28862:20:0;;7382:2:1;7367:18;28862:20:0;;;;;;;28898;;7419:14:1;;7412:22;7394:41;;28898:20:0;;7382:2:1;7367:18;28898:20:0;;;;;;;28548:378;;;28497:429;:::o;10707:191::-;10781:16;10800:6;;-1:-1:-1;;;;;10817:17:0;;;-1:-1:-1;;;;;;10817:17:0;;;;;;10850:40;;10800:6;;;;;;;10850:40;;10781:16;10850:40;10770:128;10707:191;:::o;25339:472::-;25445:17;;;;:25;;:17;:25;;:72;;-1:-1:-1;;;;;;25487:22:0;;;;;;:13;:22;;;;;;;;:30;;:22;:30;25445:72;:144;;;-1:-1:-1;25572:8:0;:17;-1:-1:-1;;;;;25534:22:0;;25572:17;25534:22;;;:13;:22;;;;;;:35;;25561:7;25534:26;:35::i;:::-;:55;25445:144;:300;;;-1:-1:-1;25645:8:0;:17;-1:-1:-1;;;;;25607:22:0;;25645:17;25607:22;;;:13;:22;;;;;;:35;;25634:7;25607:26;:35::i;:::-;:55;:137;;;;-1:-1:-1;25708:17:0;;-1:-1:-1;;;;;25679:24:0;;;;;;:15;:24;;;;;;25729:15;;25679:47;;:24;:28;:47::i;:::-;:65;25607:137;25423:380;;;;-1:-1:-1;;;25423:380:0;;9291:2:1;25423:380:0;;;9273:21:1;9330:2;9310:18;;;9303:30;9369:32;9349:18;;;9342:60;9419:18;;25423:380:0;9089:354:1;25423:380:0;25339:472;;:::o;26555:437::-;26673:17;;-1:-1:-1;;;;;26644:24:0;;;;;;:15;:24;;;;;;26694:15;;26644:47;;:24;:28;:47::i;:::-;:65;26641:288;;;26726:7;:78;;-1:-1:-1;;;;;26772:22:0;;;;;;:13;:22;;;;;:32;;;26797:7;26726:78;;;-1:-1:-1;;;;;26736:23:0;;;;;;:14;:23;;;;;:33;;;26762:7;26726:78;;26641:288;;;26837:7;:80;;-1:-1:-1;;;;;26884:22:0;;;;;;:13;:22;;;;;:33;;26910:7;;26884:22;:33;;26910:7;;26884:33;:::i;:::-;;;;;;;26837:80;;;-1:-1:-1;;;;;26847:23:0;;;;;;:14;:23;;;;;:34;;26874:7;;26847:23;:34;;26874:7;;26847:34;:::i;:::-;;;;;;;26837:80;;26641:288;-1:-1:-1;;;;;;26942:24:0;;;;;:15;:24;;;;;26969:15;26942:42;;-1:-1:-1;26555:437:0:o;25924:478::-;26031:17;;;;:25;;:17;:25;;:72;;-1:-1:-1;;;;;;26073:22:0;;;;;;:13;:22;;;;;;;;:30;;:22;:30;26031:72;:146;;;-1:-1:-1;26159:18:0;;-1:-1:-1;;;;;26120:23:0;;;;;;:14;:23;;;;;;:36;;26148:7;26120:27;:36::i;:::-;:57;26031:146;:304;;;-1:-1:-1;26234:18:0;;-1:-1:-1;;;;;26195:23:0;;;;;;:14;:23;;;;;;:36;;26223:7;26195:27;:36::i;:::-;:57;:139;;;;-1:-1:-1;26298:17:0;;-1:-1:-1;;;;;26269:24:0;;;;;;:15;:24;;;;;;26319:15;;26269:47;;:24;:28;:47::i;:::-;:65;26195:139;26009:385;;;;-1:-1:-1;;;26009:385:0;;11225:2:1;26009:385:0;;;11207:21:1;11264:2;11244:18;;;11237:30;11303:33;11283:18;;;11276:61;11354:18;;26009:385:0;11023:355:1;3629:98:0;3687:7;3714:5;3718:1;3714;:5;:::i;2889:98::-;2947:7;2974:5;2978:1;2974;:5;:::i;3271:98::-;3329:7;3356:5;3360:1;3356;:5;:::i;14:247:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:52;;;405:1;402;395:12;357:52;437:9;431:16;456:31;481:5;456:31;:::i;522:410::-;612:6;620;673:2;661:9;652:7;648:23;644:32;641:52;;;689:1;686;679:12;641:52;728:9;715:23;747:31;772:5;747:31;:::i;:::-;797:5;-1:-1:-1;854:2:1;839:18;;826:32;867:33;826:32;867:33;:::i;:::-;919:7;909:17;;;522:410;;;;;:::o;1330:529::-;1407:6;1415;1423;1476:2;1464:9;1455:7;1451:23;1447:32;1444:52;;;1492:1;1489;1482:12;1444:52;1531:9;1518:23;1550:31;1575:5;1550:31;:::i;:::-;1600:5;-1:-1:-1;1657:2:1;1642:18;;1629:32;1670:33;1629:32;1670:33;:::i;:::-;1722:7;-1:-1:-1;1781:2:1;1766:18;;1753:32;1794:33;1753:32;1794:33;:::i;:::-;1846:7;1836:17;;;1330:529;;;;;:::o;1864:456::-;1941:6;1949;1957;2010:2;1998:9;1989:7;1985:23;1981:32;1978:52;;;2026:1;2023;2016:12;1978:52;2065:9;2052:23;2084:31;2109:5;2084:31;:::i;:::-;2134:5;-1:-1:-1;2191:2:1;2176:18;;2163:32;2204:33;2163:32;2204:33;:::i;:::-;1864:456;;2256:7;;-1:-1:-1;;;2310:2:1;2295:18;;;;2282:32;;1864:456::o;2325:382::-;2390:6;2398;2451:2;2439:9;2430:7;2426:23;2422:32;2419:52;;;2467:1;2464;2457:12;2419:52;2506:9;2493:23;2525:31;2550:5;2525:31;:::i;:::-;2575:5;-1:-1:-1;2632:2:1;2617:18;;2604:32;2645:30;2604:32;2645:30;:::i;2712:315::-;2780:6;2788;2841:2;2829:9;2820:7;2816:23;2812:32;2809:52;;;2857:1;2854;2847:12;2809:52;2896:9;2883:23;2915:31;2940:5;2915:31;:::i;:::-;2965:5;3017:2;3002:18;;;;2989:32;;-1:-1:-1;;;2712:315:1:o;3032:245::-;3099:6;3152:2;3140:9;3131:7;3127:23;3123:32;3120:52;;;3168:1;3165;3158:12;3120:52;3200:9;3194:16;3219:28;3241:5;3219:28;:::i;3282:180::-;3341:6;3394:2;3382:9;3373:7;3369:23;3365:32;3362:52;;;3410:1;3407;3400:12;3362:52;-1:-1:-1;3433:23:1;;3282:180;-1:-1:-1;3282:180:1:o;3467:184::-;3537:6;3590:2;3578:9;3569:7;3565:23;3561:32;3558:52;;;3606:1;3603;3596:12;3558:52;-1:-1:-1;3629:16:1;;3467:184;-1:-1:-1;3467:184:1:o;3656:316::-;3733:6;3741;3749;3802:2;3790:9;3781:7;3777:23;3773:32;3770:52;;;3818:1;3815;3808:12;3770:52;-1:-1:-1;;3841:23:1;;;3911:2;3896:18;;3883:32;;-1:-1:-1;3962:2:1;3947:18;;;3934:32;;3656:316;-1:-1:-1;3656:316:1:o;3977:446::-;4060:6;4068;4076;4084;4137:3;4125:9;4116:7;4112:23;4108:33;4105:53;;;4154:1;4151;4144:12;4105:53;4190:9;4177:23;4167:33;;4247:2;4236:9;4232:18;4219:32;4209:42;;4298:2;4287:9;4283:18;4270:32;4260:42;;4352:2;4341:9;4337:18;4324:32;4365:28;4387:5;4365:28;:::i;:::-;3977:446;;;;-1:-1:-1;3977:446:1;;-1:-1:-1;;3977:446:1:o;4428:523::-;4532:6;4540;4548;4556;4564;4572;4625:3;4613:9;4604:7;4600:23;4596:33;4593:53;;;4642:1;4639;4632:12;4593:53;-1:-1:-1;;4665:23:1;;;4735:2;4720:18;;4707:32;;-1:-1:-1;4786:2:1;4771:18;;4758:32;;4837:2;4822:18;;4809:32;;-1:-1:-1;4888:3:1;4873:19;;4860:33;;-1:-1:-1;4940:3:1;4925:19;4912:33;;-1:-1:-1;4428:523:1;-1:-1:-1;4428:523:1:o;7680:597::-;7792:4;7821:2;7850;7839:9;7832:21;7882:6;7876:13;7925:6;7920:2;7909:9;7905:18;7898:34;7950:1;7960:140;7974:6;7971:1;7968:13;7960:140;;;8069:14;;;8065:23;;8059:30;8035:17;;;8054:2;8031:26;8024:66;7989:10;;7960:140;;;8118:6;8115:1;8112:13;8109:91;;;8188:1;8183:2;8174:6;8163:9;8159:22;8155:31;8148:42;8109:91;-1:-1:-1;8261:2:1;8240:15;-1:-1:-1;;8236:29:1;8221:45;;;;8268:2;8217:54;;7680:597;-1:-1:-1;;;7680:597:1:o;15814:980::-;16076:4;16124:3;16113:9;16109:19;16155:6;16144:9;16137:25;16181:2;16219:6;16214:2;16203:9;16199:18;16192:34;16262:3;16257:2;16246:9;16242:18;16235:31;16286:6;16321;16315:13;16352:6;16344;16337:22;16390:3;16379:9;16375:19;16368:26;;16429:2;16421:6;16417:15;16403:29;;16450:1;16460:195;16474:6;16471:1;16468:13;16460:195;;;16539:13;;-1:-1:-1;;;;;16535:39:1;16523:52;;16630:15;;;;16595:12;;;;16571:1;16489:9;16460:195;;;-1:-1:-1;;;;;;;16711:32:1;;;;16706:2;16691:18;;16684:60;-1:-1:-1;;;16775:3:1;16760:19;16753:35;16672:3;15814:980;-1:-1:-1;;;15814:980:1:o;18654:128::-;18694:3;18725:1;18721:6;18718:1;18715:13;18712:39;;;18731:18;;:::i;:::-;-1:-1:-1;18767:9:1;;18654:128::o;18787:217::-;18827:1;18853;18843:132;;18897:10;18892:3;18888:20;18885:1;18878:31;18932:4;18929:1;18922:15;18960:4;18957:1;18950:15;18843:132;-1:-1:-1;18989:9:1;;18787:217::o;19009:168::-;19049:7;19115:1;19111;19107:6;19103:14;19100:1;19097:21;19092:1;19085:9;19078:17;19074:45;19071:71;;;19122:18;;:::i;:::-;-1:-1:-1;19162:9:1;;19009:168::o;19182:125::-;19222:4;19250:1;19247;19244:8;19241:34;;;19255:18;;:::i;:::-;-1:-1:-1;19292:9:1;;19182:125::o;19312:380::-;19391:1;19387:12;;;;19434;;;19455:61;;19509:4;19501:6;19497:17;19487:27;;19455:61;19562:2;19554:6;19551:14;19531:18;19528:38;19525:161;;;19608:10;19603:3;19599:20;19596:1;19589:31;19643:4;19640:1;19633:15;19671:4;19668:1;19661:15;19525:161;;19312:380;;;:::o;19697:127::-;19758:10;19753:3;19749:20;19746:1;19739:31;19789:4;19786:1;19779:15;19813:4;19810:1;19803:15;19829:127;19890:10;19885:3;19881:20;19878:1;19871:31;19921:4;19918:1;19911:15;19945:4;19942:1;19935:15;20093:131;-1:-1:-1;;;;;20168:31:1;;20158:42;;20148:70;;20214:1;20211;20204:12;20229:118;20315:5;20308:13;20301:21;20294:5;20291:32;20281:60;;20337:1;20334;20327:12

Swarm Source

ipfs://9ac7ecfa3ccab8a45bbb3b948b759bef235a221130be1a767dcc1fea0d30fc23
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.