ETH Price: $3,005.01 (-0.26%)
Gas: 6 Gwei

Token

DeOrbit Network (DEORBIT)
 

Overview

Max Total Supply

10,000,000 DEORBIT

Holders

382

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
21,133.04850639715354516 DEORBIT

Value
$0.00
0x555ac1052585291444fed9b050e96490425ab488
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:
DeOrbit

Compiler Version
v0.8.25+commit.b61c2a91

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-04-09
*/

// SPDX-License-Identifier: MIT

/*

Website: https://deorbit.network
Telegram: https://t.me/DeOrbit_Network
Twitter: https://x.com/DeOrbit_Network
Medium : https://medium.com/@deorbit_network
Linktree: https://linktr.ee/DeOrbitNetwork

*/

pragma solidity ^0.8.20;

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

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

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;
    uint8 private _decimals;

    constructor(
        string memory name_,
        string memory symbol_,
        uint8 decimals_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

    function name() public view virtual override returns (string memory) {
        return _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];
    }

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(
            senderBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

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

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

contract DeOrbit is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant ROUTER_ADDRESS =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;
    uint256 public buyFees;
    uint256 public sellFees;
    uint256 private _maxSwapableTokens;

    uint256 public _preventSwapBefore = 20;
    uint256 public _removeLimitsAt = 30;
    uint256 public _totalBuys = 0;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;
    mapping(address => bool) public automatedMarketMakerPairs;

    address private teamWallet;
    address private marketingWallet;
    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public areLimitsActive = true;
    bool public isTradingEnabled = false;
    bool public isSwapEnabled = false;

    mapping(address => uint256) private _holderLastTransferBlock;
    bool public isTransferDelayActive = true;
    uint256 public launchBlockNo;

    constructor() ERC20("DeOrbit Network", "DEORBIT", 18) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(ROUTER_ADDRESS);

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 10_000_000 * (10**18);

        maxTransaction = (totalSupply * 100) / 10_000; 
        maxWallet = (totalSupply * 100) / 10_000; 
        swapTokensAtAmount = (totalSupply * 50) / 10_000; 
        _maxSwapableTokens = (totalSupply * 100) / 10_000; 

        buyFees = 4_000;
        sellFees = 4_000;

        teamWallet = 0xb5E78132e7119D006b0160db98908595c0B37cfA;
        marketingWallet = 0xf7145C1Ad7ca7588f56F52B9fFfF0191F0077295;

        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }


    receive() external payable {}

    function launch() external onlyOwner {
        require(!isTradingEnabled, "Token launched");
        isTradingEnabled = true;
        launchBlockNo = block.number;
        isSwapEnabled = true;
    }

    function limitsOff() external onlyOwner returns (bool) {
        areLimitsActive = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        isTransferDelayActive = false;
        return true;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        emit WalletUpdated(newWallet, marketingWallet, "Marketing");
        marketingWallet = newWallet;
    }

    function updateTeamWallet(address newWallet) external onlyOwner {
        emit WalletUpdated(newWallet, teamWallet, "Team");
        teamWallet = newWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (areLimitsActive) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!isTradingEnabled) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (isTransferDelayActive) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferBlock[tx.origin] < block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferBlock[tx.origin] = block.number;
                    }
                }

                // BUY
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                // SELL
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            isSwapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to] &&
            _totalBuys > _preventSwapBefore
        ) {
            swapping = true;
            swapBack(min(contractTokenBalance, _maxSwapableTokens));
            swapping = false;
        }

        bool takeFee = !swapping;

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;

        if (takeFee) {
            // SELL
            if (automatedMarketMakerPairs[to] && sellFees > 0) {
                fees = amount.mul(sellFees).div(10_000);
            }
            // BUY
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(10_000);
                _totalBuys++;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

    function min(uint256 a, uint256 b) private pure returns (uint256) {
        return (a > b) ? b : a;
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack(uint256 amount) private {
        bool success;

        if (amount == 0) {
            return;
        }

        uint256 amountToSwapForETH = amount;
        swapTokensForEth(amountToSwapForETH);
        uint256 ethBalance = address(this).balance;
        // Calculate allocations
        uint256 mkt_amount = ethBalance / 2;
        uint256 development_amount = ethBalance - mkt_amount;

        (success, ) = address(marketingWallet).call{value: mkt_amount}("");
        (success, ) = address(teamWallet).call{value: development_amount}("");
    }

    function changeSwapTokensAtAmount(uint256 newValue)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newValue >= (totalSupply() * 1) / 100_000,
            "Swap amount < 0.001% total supply."
        );
        require(
            newValue <= (totalSupply() * 100) / 10_000,
            "Swap amount > 1% total supply."
        );
        swapTokensAtAmount = newValue;
        return true;
    }

    function changeMaxTransaction(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 10) / 10_000),
            "maxTransaction < 0.1%"
        );
        maxTransaction = newValue * (10**decimals());
    }

    function changeMaxWallet(uint256 newValue) external onlyOwner {
        require(
            newValue >= ((totalSupply() * 50) / 10_000),
            "maxWallet < 0.5%"
        );
        maxWallet = newValue * (10**decimals());
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool _isEnable) external onlyOwner {
        isSwapEnabled = _isEnable;
    }

    function updateBuyFee(uint256 _newFee) external onlyOwner {
        require(buyFees <= 5_000);
        buyFees = _newFee;
    }

    function updateSellFee(uint256 _newFee) external onlyOwner {
        require(sellFees <= 5_000);
        sellFees = _newFee;
    }

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event WalletUpdated(
        address indexed newWallet,
        address indexed oldWallet,
        string walletType
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"},{"indexed":false,"internalType":"string","name":"walletType","type":"string"}],"name":"WalletUpdated","type":"event"},{"inputs":[],"name":"ROUTER_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_preventSwapBefore","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_removeLimitsAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalBuys","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"areLimitsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"changeSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTransferDelayActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlockNo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsOff","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"uint256","name":"_newFee","type":"uint256"}],"name":"updateBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newFee","type":"uint256"}],"name":"updateSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isEnable","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526014600a55601e600b555f600c556015805462ffffff191660019081179091556017805460ff1916909117905534801561003c575f80fd5b506040518060400160405280600f81526020016e44654f72626974204e6574776f726b60881b81525060405180604001604052806007815260200166111153d490925560ca1b8152506012826003908161009691906106e8565b5060046100a383826106e8565b506005805460ff191660ff92909216919091179055505f90506100c33390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250905f907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350737a250d5630b4cf539739df2c5dacb4c659f2488d6101388160016103f6565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015610180573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101a491906107a7565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021391906107a7565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561025d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061028191906107a7565b6001600160a01b031660a081905261029a9060016103f6565b60a0516102a8906001610472565b6a084595161401484a0000006127106102c28260646107e8565b6102cc9190610805565b6012556127106102dd8260646107e8565b6102e79190610805565b6014556127106102f88260326107e8565b6103029190610805565b6013556127106103138260646107e8565b61031d9190610805565b600955610fa06007819055600855601080546001600160a01b031990811673b5e78132e7119d006b0160db98908595c0b37cfa179091556011805490911673f7145c1ad7ca7588f56f52b9ffff0191f007729517905561039461038d60055461010090046001600160a01b031690565b60016104c5565b61039f3060016104c5565b6103ac61dead60016104c5565b6103cd6103c660055461010090046001600160a01b031690565b60016103f6565b6103d83060016103f6565b6103e561dead60016103f6565b6103ef3382610570565b5050610837565b6005546001600160a01b036101009091041633146104485760405162461bcd60e51b815260206004820181905260248201525f80516020612ee483398151915260448201526064015b60405180910390fd5b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b6001600160a01b0382165f818152600f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b036101009091041633146105125760405162461bcd60e51b815260206004820181905260248201525f80516020612ee4833981519152604482015260640161043f565b6001600160a01b0382165f818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166105c65760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161043f565b8060025f8282546105d79190610824565b90915550506001600160a01b0382165f9081526020819052604081208054839290610603908490610824565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b5f52604160045260245ffd5b600181811c9082168061067957607f821691505b60208210810361069757634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561064c57805f5260205f20601f840160051c810160208510156106c25750805b601f840160051c820191505b818110156106e1575f81556001016106ce565b5050505050565b81516001600160401b0381111561070157610701610651565b6107158161070f8454610665565b8461069d565b602080601f831160018114610748575f84156107315750858301515b5f19600386901b1c1916600185901b17855561079f565b5f85815260208120601f198616915b8281101561077657888601518255948401946001909101908401610757565b508582101561079357878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f602082840312156107b7575f80fd5b81516001600160a01b03811681146107cd575f80fd5b9392505050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176107ff576107ff6107d4565b92915050565b5f8261081f57634e487b7160e01b5f52601260045260245ffd5b500490565b808201808211156107ff576107ff6107d4565b60805160a0516126626108825f395f81816104b801528181610f5d01526116f701525f818161037f015281816116b901528181612013015281816120ca015261210601526126625ff3fe608060405260043610610283575f3560e01c80637571336a11610155578063c0246668116100be578063e1bc339411610078578063e1bc3394146107d6578063e2f4560514610804578063e4748b9e14610819578063e884f2601461082e578063f2fde38b14610842578063f8b45b0514610861575f80fd5b8063c024666814610715578063c3f70b5214610734578063c81d924614610749578063cd73ab021461075e578063dd62ed3e1461077d578063e0f3ccf5146107c1575f80fd5b80639a7a23d61161010f5780639a7a23d614610644578063a457c2d714610663578063a9059cbb14610682578063aacebbe3146106a1578063b62496f5146106c0578063b94a6dfe146106ee575f80fd5b80637571336a1461059d5780637cb332bb146105bc5780638da5cb5b146105db578063914eb66a146105fd578063924de9b71461061157806395d89b4114610630575f80fd5b806323b872dd116101f75780634fbee193116101b15780634fbee193146104da57806351a783cd1461051157806363ee4d1c1461052a578063680182261461053f57806370a082311461055457806373a9429214610588575f80fd5b806323b872dd1461040a578063313ce56714610429578063351a964d1461044a5780633950935114610469578063467abe0a1461048857806349bd5a5e146104a7575f80fd5b80630b006d60116102485780630b006d60146103365780630b44190e146103555780631694505e1461036e57806318160ddd146103b95780631d933a4a146103d7578063232050f9146103f6575f80fd5b806301339c211461028e578063064a59d0146102a457806306fdde03146102d7578063095ea7b3146102f857806309d6bf0a14610317575f80fd5b3661028a57005b5f80fd5b348015610299575f80fd5b506102a2610876565b005b3480156102af575f80fd5b506015546102c290610100900460ff1681565b60405190151581526020015b60405180910390f35b3480156102e2575f80fd5b506102eb61090f565b6040516102ce91906121a9565b348015610303575f80fd5b506102c26103123660046121f5565b61099f565b348015610322575f80fd5b506102c261033136600461221f565b6109b5565b348015610341575f80fd5b506102a261035036600461221f565b610ae1565b348015610360575f80fd5b506015546102c29060ff1681565b348015610379575f80fd5b506103a17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102ce565b3480156103c4575f80fd5b506002545b6040519081526020016102ce565b3480156103e2575f80fd5b506102a26103f136600461221f565b610b95565b348015610401575f80fd5b506102c2610bda565b348015610415575f80fd5b506102c2610424366004612236565b610c1c565b348015610434575f80fd5b5060055460405160ff90911681526020016102ce565b348015610455575f80fd5b506015546102c29062010000900460ff1681565b348015610474575f80fd5b506102c26104833660046121f5565b610cc4565b348015610493575f80fd5b506102a26104a236600461221f565b610cff565b3480156104b2575f80fd5b506103a17f000000000000000000000000000000000000000000000000000000000000000081565b3480156104e5575f80fd5b506102c26104f4366004612274565b6001600160a01b03165f908152600d602052604090205460ff1690565b34801561051c575f80fd5b506017546102c29060ff1681565b348015610535575f80fd5b506103c960185481565b34801561054a575f80fd5b506103c9600b5481565b34801561055f575f80fd5b506103c961056e366004612274565b6001600160a01b03165f9081526020819052604090205490565b348015610593575f80fd5b506103c9600c5481565b3480156105a8575f80fd5b506102a26105b736600461229e565b610d44565b3480156105c7575f80fd5b506102a26105d6366004612274565b610d9e565b3480156105e6575f80fd5b5060055461010090046001600160a01b03166103a1565b348015610608575f80fd5b506102a2610e51565b34801561061c575f80fd5b506102a261062b3660046122d1565b610ed0565b34801561063b575f80fd5b506102eb610f1c565b34801561064f575f80fd5b506102a261065e36600461229e565b610f2b565b34801561066e575f80fd5b506102c261067d3660046121f5565b611010565b34801561068d575f80fd5b506102c261069c3660046121f5565b6110a8565b3480156106ac575f80fd5b506102a26106bb366004612274565b6110b4565b3480156106cb575f80fd5b506102c26106da366004612274565b600f6020525f908152604090205460ff1681565b3480156106f9575f80fd5b506103a1737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610720575f80fd5b506102a261072f36600461229e565b61116c565b34801561073f575f80fd5b506103c960125481565b348015610754575f80fd5b506103c9600a5481565b348015610769575f80fd5b506102a261077836600461221f565b6111fa565b348015610788575f80fd5b506103c96107973660046122ea565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107cc575f80fd5b506103c960085481565b3480156107e1575f80fd5b506102c26107f0366004612274565b600e6020525f908152604090205460ff1681565b34801561080f575f80fd5b506103c960135481565b348015610824575f80fd5b506103c960075481565b348015610839575f80fd5b506102c26112b3565b34801561084d575f80fd5b506102a261085c366004612274565b6112f5565b34801561086c575f80fd5b506103c960145481565b6005546001600160a01b036101009091041633146108af5760405162461bcd60e51b81526004016108a690612321565b60405180910390fd5b601554610100900460ff16156108f85760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b60448201526064016108a6565b601580544360185562ffff00191662010100179055565b60606003805461091e90612356565b80601f016020809104026020016040519081016040528092919081815260200182805461094a90612356565b80156109955780601f1061096c57610100808354040283529160200191610995565b820191905f5260205f20905b81548152906001019060200180831161097857829003601f168201915b5050505050905090565b5f6109ab3384846113f0565b5060015b92915050565b6005545f906001600160a01b036101009091041633146109e75760405162461bcd60e51b81526004016108a690612321565b620186a06109f460025490565b6109ff9060016123a2565b610a0991906123b9565b821015610a635760405162461bcd60e51b815260206004820152602260248201527f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c6044820152613c9760f11b60648201526084016108a6565b612710610a6f60025490565b610a7a9060646123a2565b610a8491906123b9565b821115610ad35760405162461bcd60e51b815260206004820152601e60248201527f5377617020616d6f756e74203e20312520746f74616c20737570706c792e000060448201526064016108a6565b50601381905560015b919050565b6005546001600160a01b03610100909104163314610b115760405162461bcd60e51b81526004016108a690612321565b612710610b1d60025490565b610b289060326123a2565b610b3291906123b9565b811015610b745760405162461bcd60e51b815260206004820152601060248201526f6d617857616c6c6574203c20302e352560801b60448201526064016108a6565b60055460ff16610b8590600a6124b8565b610b8f90826123a2565b60145550565b6005546001600160a01b03610100909104163314610bc55760405162461bcd60e51b81526004016108a690612321565b6113886008541115610bd5575f80fd5b600855565b6005545f906001600160a01b03610100909104163314610c0c5760405162461bcd60e51b81526004016108a690612321565b506015805460ff19169055600190565b5f610c28848484611513565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610cac5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108a6565b610cb985338584036113f0565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109ab918590610cfa9086906124c6565b6113f0565b6005546001600160a01b03610100909104163314610d2f5760405162461bcd60e51b81526004016108a690612321565b6113886007541115610d3f575f80fd5b600755565b6005546001600160a01b03610100909104163314610d745760405162461bcd60e51b81526004016108a690612321565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610dce5760405162461bcd60e51b81526004016108a690612321565b6010546040516001600160a01b03918216918316907f4ada2d22a90111066633ac6f5699c229e70195492fdbd4410ea4f8069600fd7290610e27906020808252600490820152635465616d60e01b604082015260600190565b60405180910390a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314610e815760405162461bcd60e51b81526004016108a690612321565b6005546040515f9161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314610f005760405162461bcd60e51b81526004016108a690612321565b60158054911515620100000262ff000019909216919091179055565b60606004805461091e90612356565b6005546001600160a01b03610100909104163314610f5b5760405162461bcd60e51b81526004016108a690612321565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110025760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108a6565b61100c8282611c65565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156110915760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108a6565b61109e33858584036113f0565b5060019392505050565b5f6109ab338484611513565b6005546001600160a01b036101009091041633146110e45760405162461bcd60e51b81526004016108a690612321565b6011546040516001600160a01b03918216918316907f4ada2d22a90111066633ac6f5699c229e70195492fdbd4410ea4f8069600fd7290611142906020808252600990820152684d61726b6574696e6760b81b604082015260600190565b60405180910390a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0361010090910416331461119c5760405162461bcd60e51b81526004016108a690612321565b6001600160a01b0382165f818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0361010090910416331461122a5760405162461bcd60e51b81526004016108a690612321565b61271061123660025490565b61124190600a6123a2565b61124b91906123b9565b8110156112925760405162461bcd60e51b81526020600482015260156024820152746d61785472616e73616374696f6e203c20302e312560581b60448201526064016108a6565b60055460ff166112a390600a6124b8565b6112ad90826123a2565b60125550565b6005545f906001600160a01b036101009091041633146112e55760405162461bcd60e51b81526004016108a690612321565b506017805460ff19169055600190565b6005546001600160a01b036101009091041633146113255760405162461bcd60e51b81526004016108a690612321565b6001600160a01b03811661138a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a6565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383166114525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a6565b6001600160a01b0382166114b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115395760405162461bcd60e51b81526004016108a6906124d9565b6001600160a01b03821661155f5760405162461bcd60e51b81526004016108a69061251e565b805f036115765761157183835f611cb8565b505050565b60155460ff1615611a2b576005546001600160a01b0384811661010090920416148015906115b757506005546001600160a01b038381166101009092041614155b80156115cb57506001600160a01b03821615155b80156115e257506001600160a01b03821661dead14155b80156115f85750600654600160a01b900460ff16155b15611a2b57601554610100900460ff1661168e576001600160a01b0383165f908152600d602052604090205460ff168061164957506001600160a01b0382165f908152600d602052604090205460ff165b61168e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108a6565b60175460ff16156117d8576005546001600160a01b0383811661010090920416148015906116ee57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561172c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156117d857325f9081526016602052604090205443116117c65760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016108a6565b325f9081526016602052604090204390555b6001600160a01b0383165f908152600f602052604090205460ff16801561181757506001600160a01b0382165f908152600e602052604090205460ff16155b156118f4576012548111156118865760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016108a6565b6014546001600160a01b0383165f908152602081905260409020546118ab90836124c6565b11156118ef5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108a6565b611a2b565b6001600160a01b0382165f908152600f602052604090205460ff16801561193357506001600160a01b0383165f908152600e602052604090205460ff16155b156119a3576012548111156118ef5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016108a6565b6001600160a01b0382165f908152600e602052604090205460ff16611a2b576014546001600160a01b0383165f908152602081905260409020546119e790836124c6565b1115611a2b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108a6565b305f9081526020819052604090205460135481108015908190611a56575060155462010000900460ff165b8015611a6c5750600654600160a01b900460ff16155b8015611a9057506001600160a01b0385165f908152600f602052604090205460ff16155b8015611ab457506001600160a01b0385165f908152600d602052604090205460ff16155b8015611ad857506001600160a01b0384165f908152600d602052604090205460ff16155b8015611ae75750600a54600c54115b15611b24576006805460ff60a01b1916600160a01b179055600954611b1690611b11908490611e0b565b611e22565b6006805460ff60a01b191690555b6006546001600160a01b0386165f908152600d602052604090205460ff600160a01b909204821615911680611b7057506001600160a01b0385165f908152600d602052604090205460ff165b15611b7857505f5b5f8115611c51576001600160a01b0386165f908152600f602052604090205460ff168015611ba757505f600854115b15611bd457611bcd612710611bc760085488611eff90919063ffffffff16565b90611f7d565b9050611c33565b6001600160a01b0387165f908152600f602052604090205460ff168015611bfc57505f600754115b15611c3357611c1c612710611bc760075488611eff90919063ffffffff16565b600c80549192505f611c2d83612561565b91905055505b8015611c4457611c44873083611cb8565b611c4e8186612579565b94505b611c5c878787611cb8565b50505050505050565b6001600160a01b0382165f818152600f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611cde5760405162461bcd60e51b81526004016108a6906124d9565b6001600160a01b038216611d045760405162461bcd60e51b81526004016108a69061251e565b6001600160a01b0383165f9081526020819052604090205481811015611d7b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108a6565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611db19084906124c6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dfd91815260200190565b60405180910390a350505050565b5f818311611e195782611e1b565b815b9392505050565b5f815f03611e2e575050565b81611e3881611fbe565b475f611e456002836123b9565b90505f611e528284612579565b6011546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611e9d576040519150601f19603f3d011682016040523d82523d5f602084013e611ea2565b606091505b50506010546040519196506001600160a01b03169082905f81818185875af1925050503d805f8114611eef576040519150601f19603f3d011682016040523d82523d5f602084013e611ef4565b606091505b505050505050505050565b5f825f03611f0e57505f6109af565b5f611f1983856123a2565b905082611f2685836123b9565b14611e1b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108a6565b5f611e1b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612174565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611ff157611ff161258c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209191906125a0565b816001815181106120a4576120a461258c565b60200260200101906001600160a01b031690816001600160a01b0316815250506120ef307f0000000000000000000000000000000000000000000000000000000000000000846113f0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906121439085905f908690309042906004016125bb565b5f604051808303815f87803b15801561215a575f80fd5b505af115801561216c573d5f803e3d5ffd5b505050505050565b5f81836121945760405162461bcd60e51b81526004016108a691906121a9565b505f6121a084866123b9565b95945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03811681146121f2575f80fd5b50565b5f8060408385031215612206575f80fd5b8235612211816121de565b946020939093013593505050565b5f6020828403121561222f575f80fd5b5035919050565b5f805f60608486031215612248575f80fd5b8335612253816121de565b92506020840135612263816121de565b929592945050506040919091013590565b5f60208284031215612284575f80fd5b8135611e1b816121de565b80358015158114610adc575f80fd5b5f80604083850312156122af575f80fd5b82356122ba816121de565b91506122c86020840161228f565b90509250929050565b5f602082840312156122e1575f80fd5b611e1b8261228f565b5f80604083850312156122fb575f80fd5b8235612306816121de565b91506020830135612316816121de565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061236a57607f821691505b60208210810361238857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176109af576109af61238e565b5f826123d357634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b8085111561241257815f19048211156123f8576123f861238e565b8085161561240557918102915b93841c93908002906123dd565b509250929050565b5f82612428575060016109af565b8161243457505f6109af565b816001811461244a576002811461245457612470565b60019150506109af565b60ff8411156124655761246561238e565b50506001821b6109af565b5060208310610133831016604e8410600b8410161715612493575081810a6109af565b61249d83836123d8565b805f19048211156124b0576124b061238e565b029392505050565b5f611e1b60ff84168361241a565b808201808211156109af576109af61238e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f600182016125725761257261238e565b5060010190565b818103818111156109af576109af61238e565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156125b0575f80fd5b8151611e1b816121de565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561260b5784516001600160a01b0316835293830193918301916001016125e6565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122077a8dddd2af6e2e5b8cb35a7ab07262d0e9cc3100f336b0f4636fbe0f786316464736f6c634300081900334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x608060405260043610610283575f3560e01c80637571336a11610155578063c0246668116100be578063e1bc339411610078578063e1bc3394146107d6578063e2f4560514610804578063e4748b9e14610819578063e884f2601461082e578063f2fde38b14610842578063f8b45b0514610861575f80fd5b8063c024666814610715578063c3f70b5214610734578063c81d924614610749578063cd73ab021461075e578063dd62ed3e1461077d578063e0f3ccf5146107c1575f80fd5b80639a7a23d61161010f5780639a7a23d614610644578063a457c2d714610663578063a9059cbb14610682578063aacebbe3146106a1578063b62496f5146106c0578063b94a6dfe146106ee575f80fd5b80637571336a1461059d5780637cb332bb146105bc5780638da5cb5b146105db578063914eb66a146105fd578063924de9b71461061157806395d89b4114610630575f80fd5b806323b872dd116101f75780634fbee193116101b15780634fbee193146104da57806351a783cd1461051157806363ee4d1c1461052a578063680182261461053f57806370a082311461055457806373a9429214610588575f80fd5b806323b872dd1461040a578063313ce56714610429578063351a964d1461044a5780633950935114610469578063467abe0a1461048857806349bd5a5e146104a7575f80fd5b80630b006d60116102485780630b006d60146103365780630b44190e146103555780631694505e1461036e57806318160ddd146103b95780631d933a4a146103d7578063232050f9146103f6575f80fd5b806301339c211461028e578063064a59d0146102a457806306fdde03146102d7578063095ea7b3146102f857806309d6bf0a14610317575f80fd5b3661028a57005b5f80fd5b348015610299575f80fd5b506102a2610876565b005b3480156102af575f80fd5b506015546102c290610100900460ff1681565b60405190151581526020015b60405180910390f35b3480156102e2575f80fd5b506102eb61090f565b6040516102ce91906121a9565b348015610303575f80fd5b506102c26103123660046121f5565b61099f565b348015610322575f80fd5b506102c261033136600461221f565b6109b5565b348015610341575f80fd5b506102a261035036600461221f565b610ae1565b348015610360575f80fd5b506015546102c29060ff1681565b348015610379575f80fd5b506103a17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102ce565b3480156103c4575f80fd5b506002545b6040519081526020016102ce565b3480156103e2575f80fd5b506102a26103f136600461221f565b610b95565b348015610401575f80fd5b506102c2610bda565b348015610415575f80fd5b506102c2610424366004612236565b610c1c565b348015610434575f80fd5b5060055460405160ff90911681526020016102ce565b348015610455575f80fd5b506015546102c29062010000900460ff1681565b348015610474575f80fd5b506102c26104833660046121f5565b610cc4565b348015610493575f80fd5b506102a26104a236600461221f565b610cff565b3480156104b2575f80fd5b506103a17f000000000000000000000000b503f71d000cfbcd4cd48e5684369c2625eff19e81565b3480156104e5575f80fd5b506102c26104f4366004612274565b6001600160a01b03165f908152600d602052604090205460ff1690565b34801561051c575f80fd5b506017546102c29060ff1681565b348015610535575f80fd5b506103c960185481565b34801561054a575f80fd5b506103c9600b5481565b34801561055f575f80fd5b506103c961056e366004612274565b6001600160a01b03165f9081526020819052604090205490565b348015610593575f80fd5b506103c9600c5481565b3480156105a8575f80fd5b506102a26105b736600461229e565b610d44565b3480156105c7575f80fd5b506102a26105d6366004612274565b610d9e565b3480156105e6575f80fd5b5060055461010090046001600160a01b03166103a1565b348015610608575f80fd5b506102a2610e51565b34801561061c575f80fd5b506102a261062b3660046122d1565b610ed0565b34801561063b575f80fd5b506102eb610f1c565b34801561064f575f80fd5b506102a261065e36600461229e565b610f2b565b34801561066e575f80fd5b506102c261067d3660046121f5565b611010565b34801561068d575f80fd5b506102c261069c3660046121f5565b6110a8565b3480156106ac575f80fd5b506102a26106bb366004612274565b6110b4565b3480156106cb575f80fd5b506102c26106da366004612274565b600f6020525f908152604090205460ff1681565b3480156106f9575f80fd5b506103a1737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610720575f80fd5b506102a261072f36600461229e565b61116c565b34801561073f575f80fd5b506103c960125481565b348015610754575f80fd5b506103c9600a5481565b348015610769575f80fd5b506102a261077836600461221f565b6111fa565b348015610788575f80fd5b506103c96107973660046122ea565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156107cc575f80fd5b506103c960085481565b3480156107e1575f80fd5b506102c26107f0366004612274565b600e6020525f908152604090205460ff1681565b34801561080f575f80fd5b506103c960135481565b348015610824575f80fd5b506103c960075481565b348015610839575f80fd5b506102c26112b3565b34801561084d575f80fd5b506102a261085c366004612274565b6112f5565b34801561086c575f80fd5b506103c960145481565b6005546001600160a01b036101009091041633146108af5760405162461bcd60e51b81526004016108a690612321565b60405180910390fd5b601554610100900460ff16156108f85760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b60448201526064016108a6565b601580544360185562ffff00191662010100179055565b60606003805461091e90612356565b80601f016020809104026020016040519081016040528092919081815260200182805461094a90612356565b80156109955780601f1061096c57610100808354040283529160200191610995565b820191905f5260205f20905b81548152906001019060200180831161097857829003601f168201915b5050505050905090565b5f6109ab3384846113f0565b5060015b92915050565b6005545f906001600160a01b036101009091041633146109e75760405162461bcd60e51b81526004016108a690612321565b620186a06109f460025490565b6109ff9060016123a2565b610a0991906123b9565b821015610a635760405162461bcd60e51b815260206004820152602260248201527f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c6044820152613c9760f11b60648201526084016108a6565b612710610a6f60025490565b610a7a9060646123a2565b610a8491906123b9565b821115610ad35760405162461bcd60e51b815260206004820152601e60248201527f5377617020616d6f756e74203e20312520746f74616c20737570706c792e000060448201526064016108a6565b50601381905560015b919050565b6005546001600160a01b03610100909104163314610b115760405162461bcd60e51b81526004016108a690612321565b612710610b1d60025490565b610b289060326123a2565b610b3291906123b9565b811015610b745760405162461bcd60e51b815260206004820152601060248201526f6d617857616c6c6574203c20302e352560801b60448201526064016108a6565b60055460ff16610b8590600a6124b8565b610b8f90826123a2565b60145550565b6005546001600160a01b03610100909104163314610bc55760405162461bcd60e51b81526004016108a690612321565b6113886008541115610bd5575f80fd5b600855565b6005545f906001600160a01b03610100909104163314610c0c5760405162461bcd60e51b81526004016108a690612321565b506015805460ff19169055600190565b5f610c28848484611513565b6001600160a01b0384165f90815260016020908152604080832033845290915290205482811015610cac5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108a6565b610cb985338584036113f0565b506001949350505050565b335f8181526001602090815260408083206001600160a01b038716845290915281205490916109ab918590610cfa9086906124c6565b6113f0565b6005546001600160a01b03610100909104163314610d2f5760405162461bcd60e51b81526004016108a690612321565b6113886007541115610d3f575f80fd5b600755565b6005546001600160a01b03610100909104163314610d745760405162461bcd60e51b81526004016108a690612321565b6001600160a01b03919091165f908152600e60205260409020805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610dce5760405162461bcd60e51b81526004016108a690612321565b6010546040516001600160a01b03918216918316907f4ada2d22a90111066633ac6f5699c229e70195492fdbd4410ea4f8069600fd7290610e27906020808252600490820152635465616d60e01b604082015260600190565b60405180910390a3601080546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314610e815760405162461bcd60e51b81526004016108a690612321565b6005546040515f9161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314610f005760405162461bcd60e51b81526004016108a690612321565b60158054911515620100000262ff000019909216919091179055565b60606004805461091e90612356565b6005546001600160a01b03610100909104163314610f5b5760405162461bcd60e51b81526004016108a690612321565b7f000000000000000000000000b503f71d000cfbcd4cd48e5684369c2625eff19e6001600160a01b0316826001600160a01b0316036110025760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108a6565b61100c8282611c65565b5050565b335f9081526001602090815260408083206001600160a01b0386168452909152812054828110156110915760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108a6565b61109e33858584036113f0565b5060019392505050565b5f6109ab338484611513565b6005546001600160a01b036101009091041633146110e45760405162461bcd60e51b81526004016108a690612321565b6011546040516001600160a01b03918216918316907f4ada2d22a90111066633ac6f5699c229e70195492fdbd4410ea4f8069600fd7290611142906020808252600990820152684d61726b6574696e6760b81b604082015260600190565b60405180910390a3601180546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0361010090910416331461119c5760405162461bcd60e51b81526004016108a690612321565b6001600160a01b0382165f818152600d6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0361010090910416331461122a5760405162461bcd60e51b81526004016108a690612321565b61271061123660025490565b61124190600a6123a2565b61124b91906123b9565b8110156112925760405162461bcd60e51b81526020600482015260156024820152746d61785472616e73616374696f6e203c20302e312560581b60448201526064016108a6565b60055460ff166112a390600a6124b8565b6112ad90826123a2565b60125550565b6005545f906001600160a01b036101009091041633146112e55760405162461bcd60e51b81526004016108a690612321565b506017805460ff19169055600190565b6005546001600160a01b036101009091041633146113255760405162461bcd60e51b81526004016108a690612321565b6001600160a01b03811661138a5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108a6565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383166114525760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108a6565b6001600160a01b0382166114b35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108a6565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115395760405162461bcd60e51b81526004016108a6906124d9565b6001600160a01b03821661155f5760405162461bcd60e51b81526004016108a69061251e565b805f036115765761157183835f611cb8565b505050565b60155460ff1615611a2b576005546001600160a01b0384811661010090920416148015906115b757506005546001600160a01b038381166101009092041614155b80156115cb57506001600160a01b03821615155b80156115e257506001600160a01b03821661dead14155b80156115f85750600654600160a01b900460ff16155b15611a2b57601554610100900460ff1661168e576001600160a01b0383165f908152600d602052604090205460ff168061164957506001600160a01b0382165f908152600d602052604090205460ff165b61168e5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108a6565b60175460ff16156117d8576005546001600160a01b0383811661010090920416148015906116ee57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561172c57507f000000000000000000000000b503f71d000cfbcd4cd48e5684369c2625eff19e6001600160a01b0316826001600160a01b031614155b156117d857325f9081526016602052604090205443116117c65760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016108a6565b325f9081526016602052604090204390555b6001600160a01b0383165f908152600f602052604090205460ff16801561181757506001600160a01b0382165f908152600e602052604090205460ff16155b156118f4576012548111156118865760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016108a6565b6014546001600160a01b0383165f908152602081905260409020546118ab90836124c6565b11156118ef5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108a6565b611a2b565b6001600160a01b0382165f908152600f602052604090205460ff16801561193357506001600160a01b0383165f908152600e602052604090205460ff16155b156119a3576012548111156118ef5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016108a6565b6001600160a01b0382165f908152600e602052604090205460ff16611a2b576014546001600160a01b0383165f908152602081905260409020546119e790836124c6565b1115611a2b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108a6565b305f9081526020819052604090205460135481108015908190611a56575060155462010000900460ff165b8015611a6c5750600654600160a01b900460ff16155b8015611a9057506001600160a01b0385165f908152600f602052604090205460ff16155b8015611ab457506001600160a01b0385165f908152600d602052604090205460ff16155b8015611ad857506001600160a01b0384165f908152600d602052604090205460ff16155b8015611ae75750600a54600c54115b15611b24576006805460ff60a01b1916600160a01b179055600954611b1690611b11908490611e0b565b611e22565b6006805460ff60a01b191690555b6006546001600160a01b0386165f908152600d602052604090205460ff600160a01b909204821615911680611b7057506001600160a01b0385165f908152600d602052604090205460ff165b15611b7857505f5b5f8115611c51576001600160a01b0386165f908152600f602052604090205460ff168015611ba757505f600854115b15611bd457611bcd612710611bc760085488611eff90919063ffffffff16565b90611f7d565b9050611c33565b6001600160a01b0387165f908152600f602052604090205460ff168015611bfc57505f600754115b15611c3357611c1c612710611bc760075488611eff90919063ffffffff16565b600c80549192505f611c2d83612561565b91905055505b8015611c4457611c44873083611cb8565b611c4e8186612579565b94505b611c5c878787611cb8565b50505050505050565b6001600160a01b0382165f818152600f6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611cde5760405162461bcd60e51b81526004016108a6906124d9565b6001600160a01b038216611d045760405162461bcd60e51b81526004016108a69061251e565b6001600160a01b0383165f9081526020819052604090205481811015611d7b5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108a6565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611db19084906124c6565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dfd91815260200190565b60405180910390a350505050565b5f818311611e195782611e1b565b815b9392505050565b5f815f03611e2e575050565b81611e3881611fbe565b475f611e456002836123b9565b90505f611e528284612579565b6011546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611e9d576040519150601f19603f3d011682016040523d82523d5f602084013e611ea2565b606091505b50506010546040519196506001600160a01b03169082905f81818185875af1925050503d805f8114611eef576040519150601f19603f3d011682016040523d82523d5f602084013e611ef4565b606091505b505050505050505050565b5f825f03611f0e57505f6109af565b5f611f1983856123a2565b905082611f2685836123b9565b14611e1b5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108a6565b5f611e1b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612174565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611ff157611ff161258c565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209191906125a0565b816001815181106120a4576120a461258c565b60200260200101906001600160a01b031690816001600160a01b0316815250506120ef307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113f0565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906121439085905f908690309042906004016125bb565b5f604051808303815f87803b15801561215a575f80fd5b505af115801561216c573d5f803e3d5ffd5b505050505050565b5f81836121945760405162461bcd60e51b81526004016108a691906121a9565b505f6121a084866123b9565b95945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b6001600160a01b03811681146121f2575f80fd5b50565b5f8060408385031215612206575f80fd5b8235612211816121de565b946020939093013593505050565b5f6020828403121561222f575f80fd5b5035919050565b5f805f60608486031215612248575f80fd5b8335612253816121de565b92506020840135612263816121de565b929592945050506040919091013590565b5f60208284031215612284575f80fd5b8135611e1b816121de565b80358015158114610adc575f80fd5b5f80604083850312156122af575f80fd5b82356122ba816121de565b91506122c86020840161228f565b90509250929050565b5f602082840312156122e1575f80fd5b611e1b8261228f565b5f80604083850312156122fb575f80fd5b8235612306816121de565b91506020830135612316816121de565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c9082168061236a57607f821691505b60208210810361238857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b80820281158282048414176109af576109af61238e565b5f826123d357634e487b7160e01b5f52601260045260245ffd5b500490565b600181815b8085111561241257815f19048211156123f8576123f861238e565b8085161561240557918102915b93841c93908002906123dd565b509250929050565b5f82612428575060016109af565b8161243457505f6109af565b816001811461244a576002811461245457612470565b60019150506109af565b60ff8411156124655761246561238e565b50506001821b6109af565b5060208310610133831016604e8410600b8410161715612493575081810a6109af565b61249d83836123d8565b805f19048211156124b0576124b061238e565b029392505050565b5f611e1b60ff84168361241a565b808201808211156109af576109af61238e565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b5f600182016125725761257261238e565b5060010190565b818103818111156109af576109af61238e565b634e487b7160e01b5f52603260045260245ffd5b5f602082840312156125b0575f80fd5b8151611e1b816121de565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b8181101561260b5784516001600160a01b0316835293830193918301916001016125e6565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122077a8dddd2af6e2e5b8cb35a7ab07262d0e9cc3100f336b0f4636fbe0f786316464736f6c63430008190033

Deployed Bytecode Sourcemap

22482:11675:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25079:204;;;;;;;;;;;;;:::i;:::-;;23428:36;;;;;;;;;;-1:-1:-1;23428:36:0;;;;;;;;;;;;;;179:14:1;;172:22;154:41;;142:2;127:18;23428:36:0;;;;;;;;2422:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;3484:210::-;;;;;;;;;;-1:-1:-1;3484:210:0;;;;;:::i;:::-;;:::i;32161:457::-;;;;;;;;;;-1:-1:-1;32161:457:0;;;;;:::i;:::-;;:::i;32889:240::-;;;;;;;;;;-1:-1:-1;32889:240:0;;;;;:::i;:::-;;:::i;23387:34::-;;;;;;;;;;-1:-1:-1;23387:34:0;;;;;;;;22559:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1461:32:1;;;1443:51;;1431:2;1416:18;22559:51:0;1270:230:1;2750:108:0;;;;;;;;;;-1:-1:-1;2838:12:0;;2750:108;;;1651:25:1;;;1639:2;1624:18;2750:108:0;1505:177:1;33477:133:0;;;;;;;;;;-1:-1:-1;33477:133:0;;;;;:::i;:::-;;:::i;25291:119::-;;;;;;;;;;;;;:::i;3702:529::-;;;;;;;;;;-1:-1:-1;3702:529:0;;;;;:::i;:::-;;:::i;2642:100::-;;;;;;;;;;-1:-1:-1;2725:9:0;;2642:100;;2725:9;;;;2290:36:1;;2278:2;2263:18;2642:100:0;2148:184:1;23471:33:0;;;;;;;;;;-1:-1:-1;23471:33:0;;;;;;;;;;;4239:297;;;;;;;;;;-1:-1:-1;4239:297:0;;;;;:::i;:::-;;:::i;33339:130::-;;;;;;;;;;-1:-1:-1;33339:130:0;;;;;:::i;:::-;;:::i;22617:38::-;;;;;;;;;;;;;;;26846:126;;;;;;;;;;-1:-1:-1;26846:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;26936:28:0;26912:4;26936:28;;;:19;:28;;;;;;;;;26846:126;23580:40;;;;;;;;;;-1:-1:-1;23580:40:0;;;;;;;;23627:28;;;;;;;;;;;;;;;;22938:35;;;;;;;;;;;;;;;;2866:177;;;;;;;;;;-1:-1:-1;2866:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;3017:18:0;2985:7;3017:18;;;;;;;;;;;;2866:177;22980:29;;;;;;;;;;;;;;;;25615:161;;;;;;;;;;-1:-1:-1;25615:161:0;;;;;:::i;:::-;;:::i;26673:165::-;;;;;;;;;;-1:-1:-1;26673:165:0;;;;;:::i;:::-;;:::i;12630:79::-;;;;;;;;;;-1:-1:-1;12695:6:0;;;;;-1:-1:-1;;;;;12695:6:0;12630:79;;12844:145;;;;;;;;;;;;;:::i;33225:106::-;;;;;;;;;;-1:-1:-1;33225:106:0;;;;;:::i;:::-;;:::i;2530:104::-;;;;;;;;;;;;;:::i;25974:304::-;;;;;;;;;;-1:-1:-1;25974:304:0;;;;;:::i;:::-;;:::i;4544:482::-;;;;;;;;;;-1:-1:-1;4544:482:0;;;;;:::i;:::-;;:::i;3051:216::-;;;;;;;;;;-1:-1:-1;3051:216:0;;;;;:::i;:::-;;:::i;26480:185::-;;;;;;;;;;-1:-1:-1;26480:185:0;;;;;:::i;:::-;;:::i;23141:57::-;;;;;;;;;;-1:-1:-1;23141:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22662:92;;;;;;;;;;;;22712:42;22662:92;;25784:182;;;;;;;;;;-1:-1:-1;25784:182:0;;;;;:::i;:::-;;:::i;23278:29::-;;;;;;;;;;;;;;;;22893:38;;;;;;;;;;;;;;;;32626:255;;;;;;;;;;-1:-1:-1;32626:255:0;;;;;:::i;:::-;;:::i;3275:201::-;;;;;;;;;;-1:-1:-1;3275:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;3441:18:0;;;3409:7;3441:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3275:201;22820:23;;;;;;;;;;;;;;;;23077:57;;;;;;;;;;-1:-1:-1;23077:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23314:33;;;;;;;;;;;;;;;;22791:22;;;;;;;;;;;;;;;;25471:136;;;;;;;;;;;;;:::i;12997:281::-;;;;;;;;;;-1:-1:-1;12997:281:0;;;;;:::i;:::-;;:::i;23354:24::-;;;;;;;;;;;;;;;;25079:204;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;;;;;;;;;25136:16:::1;::::0;::::1;::::0;::::1;;;25135:17;25127:44;;;::::0;-1:-1:-1;;;25127:44:0;;4423:2:1;25127:44:0::1;::::0;::::1;4405:21:1::0;4462:2;4442:18;;;4435:30;-1:-1:-1;;;4481:18:1;;;4474:44;4535:18;;25127:44:0::1;4221:338:1::0;25127:44:0::1;25182:16;:23:::0;;25232:12:::1;25216:13;:28:::0;-1:-1:-1;;25255:20:0;;;;;25079:204::o;2422:100::-;2476:13;2509:5;2502:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2422:100;:::o;3484:210::-;3603:4;3625:39;410:10;3648:7;3657:6;3625:8;:39::i;:::-;-1:-1:-1;3682:4:0;3484:210;;;;;:::o;32161:457::-;12757:6;;32268:4;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;32346:7:::1;32325:13;2838:12:::0;;;2750:108;32325:13:::1;:17;::::0;32341:1:::1;32325:17;:::i;:::-;32324:29;;;;:::i;:::-;32312:8;:41;;32290:125;;;::::0;-1:-1:-1;;;32290:125:0;;5678:2:1;32290:125:0::1;::::0;::::1;5660:21:1::0;5717:2;5697:18;;;5690:30;5756:34;5736:18;;;5729:62;-1:-1:-1;;;5807:18:1;;;5800:32;5849:19;;32290:125:0::1;5476:398:1::0;32290:125:0::1;32484:6;32461:13;2838:12:::0;;;2750:108;32461:13:::1;:19;::::0;32477:3:::1;32461:19;:::i;:::-;32460:30;;;;:::i;:::-;32448:8;:42;;32426:122;;;::::0;-1:-1:-1;;;32426:122:0;;6081:2:1;32426:122:0::1;::::0;::::1;6063:21:1::0;6120:2;6100:18;;;6093:30;6159:32;6139:18;;;6132:60;6209:18;;32426:122:0::1;5879:354:1::0;32426:122:0::1;-1:-1:-1::0;32559:18:0::1;:29:::0;;;32606:4:::1;12827:1;32161:457:::0;;;:::o;32889:240::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;33020:6:::1;32998:13;2838:12:::0;;;2750:108;32998:13:::1;:18;::::0;33014:2:::1;32998:18;:::i;:::-;32997:29;;;;:::i;:::-;32984:8;:43;;32962:109;;;::::0;-1:-1:-1;;;32962:109:0;;6440:2:1;32962:109:0::1;::::0;::::1;6422:21:1::0;6479:2;6459:18;;;6452:30;-1:-1:-1;;;6498:18:1;;;6491:46;6554:18;;32962:109:0::1;6238:340:1::0;32962:109:0::1;2725:9:::0;;;;33106:14:::1;::::0;:2:::1;:14;:::i;:::-;33094:27;::::0;:8;:27:::1;:::i;:::-;33082:9;:39:::0;-1:-1:-1;32889:240:0:o;33477:133::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;33567:5:::1;33555:8;;:17;;33547:26;;;::::0;::::1;;33584:8;:18:::0;33477:133::o;25291:119::-;12757:6;;25340:4;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;-1:-1:-1;25357:15:0::1;:23:::0;;-1:-1:-1;;25357:23:0::1;::::0;;;25291:119;:::o;3702:529::-;3842:4;3859:36;3869:6;3877:9;3888:6;3859:9;:36::i;:::-;-1:-1:-1;;;;;3935:19:0;;3908:24;3935:19;;;:11;:19;;;;;;;;410:10;3935:33;;;;;;;;4001:26;;;;3979:116;;;;-1:-1:-1;;;3979:116:0;;8162:2:1;3979:116:0;;;8144:21:1;8201:2;8181:18;;;8174:30;8240:34;8220:18;;;8213:62;-1:-1:-1;;;8291:18:1;;;8284:38;8339:19;;3979:116:0;7960:404:1;3979:116:0;4131:57;4140:6;410:10;4181:6;4162:16;:25;4131:8;:57::i;:::-;-1:-1:-1;4219:4:0;;3702:529;-1:-1:-1;;;;3702:529:0:o;4239:297::-;410:10;4354:4;4448:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4448:34:0;;;;;;;;;;4354:4;;4376:130;;4426:7;;4448:47;;4485:10;;4448:47;:::i;:::-;4376:8;:130::i;33339:::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;33427:5:::1;33416:7;;:16;;33408:25;;;::::0;::::1;;33444:7;:17:::0;33339:130::o;25615:161::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25728:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;25728:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25615:161::o;26673:165::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;26778:10:::1;::::0;26753:44:::1;::::0;-1:-1:-1;;;;;26778:10:0;;::::1;::::0;26753:44;::::1;::::0;::::1;::::0;::::1;::::0;8701:2:1;8683:21;;;8740:1;8720:18;;;8713:29;-1:-1:-1;;;8773:2:1;8758:18;;8751:34;8817:2;8802:18;;8499:327;26753:44:0::1;;;;;;;;26808:10;:22:::0;;-1:-1:-1;;;;;;26808:22:0::1;-1:-1:-1::0;;;;;26808:22:0;;;::::1;::::0;;;::::1;::::0;;26673:165::o;12844:145::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;12932:6:::1;::::0;12911:40:::1;::::0;12948:1:::1;::::0;12932:6:::1;::::0;::::1;-1:-1:-1::0;;;;;12932:6:0::1;::::0;12911:40:::1;::::0;12948:1;;12911:40:::1;12962:6;:19:::0;;-1:-1:-1;;;;;;12962:19:0::1;::::0;;12844:145::o;33225:106::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;33298:13:::1;:25:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;33298:25:0;;::::1;::::0;;;::::1;::::0;;33225:106::o;2530:104::-;2586:13;2619:7;2612:14;;;;;:::i;25974:304::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;26118:13:::1;-1:-1:-1::0;;;;;26110:21:0::1;:4;-1:-1:-1::0;;;;;26110:21:0::1;::::0;26088:128:::1;;;::::0;-1:-1:-1;;;26088:128:0;;9033:2:1;26088:128:0::1;::::0;::::1;9015:21:1::0;9072:2;9052:18;;;9045:30;9111:34;9091:18;;;9084:62;9182:27;9162:18;;;9155:55;9227:19;;26088:128:0::1;8831:421:1::0;26088:128:0::1;26229:41;26258:4;26264:5;26229:28;:41::i;:::-;25974:304:::0;;:::o;4544:482::-;410:10;4664:4;4713:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4713:34:0;;;;;;;;;;4780:35;;;;4758:122;;;;-1:-1:-1;;;4758:122:0;;9459:2:1;4758:122:0;;;9441:21:1;9498:2;9478:18;;;9471:30;9537:34;9517:18;;;9510:62;-1:-1:-1;;;9588:18:1;;;9581:35;9633:19;;4758:122:0;9257:401:1;4758:122:0;4916:67;410:10;4939:7;4967:15;4948:16;:34;4916:8;:67::i;:::-;-1:-1:-1;5014:4:0;;4544:482;-1:-1:-1;;;4544:482:0:o;3051:216::-;3173:4;3195:42;410:10;3219:9;3230:6;3195:9;:42::i;26480:185::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;26590:15:::1;::::0;26565:54:::1;::::0;-1:-1:-1;;;;;26590:15:0;;::::1;::::0;26565:54;::::1;::::0;::::1;::::0;::::1;::::0;9865:2:1;9847:21;;;9904:1;9884:18;;;9877:29;-1:-1:-1;;;9937:2:1;9922:18;;9915:39;9986:2;9971:18;;9663:332;26565:54:0::1;;;;;;;;26630:15;:27:::0;;-1:-1:-1;;;;;;26630:27:0::1;-1:-1:-1::0;;;;;26630:27:0;;;::::1;::::0;;;::::1;::::0;;26480:185::o;25784:182::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25869:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;25869:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;25924:34;;154:41:1;;;25924:34:0::1;::::0;127:18:1;25924:34:0::1;;;;;;;25784:182:::0;;:::o;32626:255::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;32762:6:::1;32740:13;2838:12:::0;;;2750:108;32740:13:::1;:18;::::0;32756:2:::1;32740:18;:::i;:::-;32739:29;;;;:::i;:::-;32726:8;:43;;32704:114;;;::::0;-1:-1:-1;;;32704:114:0;;10202:2:1;32704:114:0::1;::::0;::::1;10184:21:1::0;10241:2;10221:18;;;10214:30;-1:-1:-1;;;10260:18:1;;;10253:51;10321:18;;32704:114:0::1;10000:345:1::0;32704:114:0::1;2725:9:::0;;;;32858:14:::1;::::0;:2:::1;:14;:::i;:::-;32846:27;::::0;:8;:27:::1;:::i;:::-;32829:14;:44:::0;-1:-1:-1;32626:255:0:o;25471:136::-;12757:6;;25531:4;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;-1:-1:-1;25548:21:0::1;:29:::0;;-1:-1:-1;;25548:29:0::1;::::0;;;25471:136;:::o;12997:281::-;12757:6;;-1:-1:-1;;;;;12757:6:0;;;;;410:10;12757:22;12749:67;;;;-1:-1:-1;;;12749:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13100:22:0;::::1;13078:110;;;::::0;-1:-1:-1;;;13078:110:0;;10552:2:1;13078:110:0::1;::::0;::::1;10534:21:1::0;10591:2;10571:18;;;10564:30;10630:34;10610:18;;;10603:62;-1:-1:-1;;;10681:18:1;;;10674:36;10727:19;;13078:110:0::1;10350:402:1::0;13078:110:0::1;13225:6;::::0;13204:38:::1;::::0;-1:-1:-1;;;;;13204:38:0;;::::1;::::0;13225:6:::1;::::0;::::1;;::::0;13204:38:::1;::::0;;;::::1;13253:6;:17:::0;;-1:-1:-1;;;;;13253:17:0;;::::1;;;-1:-1:-1::0;;;;;;13253:17:0;;::::1;::::0;;;::::1;::::0;;12997:281::o;6818:380::-;-1:-1:-1;;;;;6954:19:0;;6946:68;;;;-1:-1:-1;;;6946:68:0;;10959:2:1;6946:68:0;;;10941:21:1;10998:2;10978:18;;;10971:30;11037:34;11017:18;;;11010:62;-1:-1:-1;;;11088:18:1;;;11081:34;11132:19;;6946:68:0;10757:400:1;6946:68:0;-1:-1:-1;;;;;7033:21:0;;7025:68;;;;-1:-1:-1;;;7025:68:0;;11364:2:1;7025:68:0;;;11346:21:1;11403:2;11383:18;;;11376:30;11442:34;11422:18;;;11415:62;-1:-1:-1;;;11493:18:1;;;11486:32;11535:19;;7025:68:0;11162:398:1;7025:68:0;-1:-1:-1;;;;;7106:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7158:32;;1651:25:1;;;7158:32:0;;1624:18:1;7158:32:0;;;;;;;6818:380;;;:::o;26980:3982::-;-1:-1:-1;;;;;27112:18:0;;27104:68;;;;-1:-1:-1;;;27104:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27191:16:0;;27183:64;;;;-1:-1:-1;;;27183:64:0;;;;;;;:::i;:::-;27264:6;27274:1;27264:11;27260:93;;27292:28;27308:4;27314:2;27318:1;27292:15;:28::i;:::-;26980:3982;;;:::o;27260:93::-;27369:15;;;;27365:2269;;;12695:6;;-1:-1:-1;;;;;27423:15:0;;;12695:6;;;;;27423:15;;;;:49;;-1:-1:-1;12695:6:0;;-1:-1:-1;;;;;27459:13:0;;;12695:6;;;;;27459:13;;27423:49;:86;;;;-1:-1:-1;;;;;;27493:16:0;;;;27423:86;:128;;;;-1:-1:-1;;;;;;27530:21:0;;27544:6;27530:21;;27423:128;:158;;;;-1:-1:-1;27573:8:0;;-1:-1:-1;;;27573:8:0;;;;27572:9;27423:158;27401:2222;;;27621:16;;;;;;;27616:226;;-1:-1:-1;;;;;27696:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27725:23:0;;;;;;:19;:23;;;;;;;;27696:52;27662:160;;;;-1:-1:-1;;;27662:160:0;;12577:2:1;27662:160:0;;;12559:21:1;12616:2;12596:18;;;12589:30;-1:-1:-1;;;12635:18:1;;;12628:52;12697:18;;27662:160:0;12375:346:1;27662:160:0;27866:21;;;;27862:601;;;12695:6;;-1:-1:-1;;;;;27942:13:0;;;12695:6;;;;;27942:13;;;;:72;;;27998:15;-1:-1:-1;;;;;27984:30:0;:2;-1:-1:-1;;;;;27984:30:0;;;27942:72;:129;;;;;28057:13;-1:-1:-1;;;;;28043:28:0;:2;-1:-1:-1;;;;;28043:28:0;;;27942:129;27912:532;;;28185:9;28160:35;;;;:24;:35;;;;;;28198:12;-1:-1:-1;28122:221:0;;;;-1:-1:-1;;;28122:221:0;;12928:2:1;28122:221:0;;;12910:21:1;12967:2;12947:18;;;12940:30;13006:34;12986:18;;;12979:62;13077:34;13057:18;;;13050:62;-1:-1:-1;;;13128:19:1;;;13121:40;13178:19;;28122:221:0;12726:477:1;28122:221:0;28395:9;28370:35;;;;:24;:35;;;;;28408:12;28370:50;;27912:532;-1:-1:-1;;;;;28533:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;28590:29:0;;;;;;:25;:29;;;;;;;;28589:30;28533:86;28507:1101;;;28706:14;;28696:6;:24;;28662:157;;;;-1:-1:-1;;;28662:157:0;;13410:2:1;28662:157:0;;;13392:21:1;13449:2;13429:18;;;13422:30;13488:34;13468:18;;;13461:62;-1:-1:-1;;;13539:18:1;;;13532:45;13594:19;;28662:157:0;13208:411:1;28662:157:0;28902:9;;-1:-1:-1;;;;;3017:18:0;;2985:7;3017:18;;;;;;;;;;;28876:22;;:6;:22;:::i;:::-;:35;;28842:140;;;;-1:-1:-1;;;28842:140:0;;13826:2:1;28842:140:0;;;13808:21:1;13865:2;13845:18;;;13838:30;-1:-1:-1;;;13884:18:1;;;13877:49;13943:18;;28842:140:0;13624:343:1;28842:140:0;28507:1101;;;-1:-1:-1;;;;;29076:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;29131:31:0;;;;;;:25;:31;;;;;;;;29130:32;29076:86;29050:558;;;29249:14;;29239:6;:24;;29205:158;;;;-1:-1:-1;;;29205:158:0;;14174:2:1;29205:158:0;;;14156:21:1;14213:2;14193:18;;;14186:30;14252:34;14232:18;;;14225:62;-1:-1:-1;;;14303:18:1;;;14296:46;14359:19;;29205:158:0;13972:412:1;29050:558:0;-1:-1:-1;;;;;29394:29:0;;;;;;:25;:29;;;;;;;;29389:219;;29508:9;;-1:-1:-1;;;;;3017:18:0;;2985:7;3017:18;;;;;;;;;;;29482:22;;:6;:22;:::i;:::-;:35;;29448:140;;;;-1:-1:-1;;;29448:140:0;;13826:2:1;29448:140:0;;;13808:21:1;13865:2;13845:18;;;13838:30;-1:-1:-1;;;13884:18:1;;;13877:49;13943:18;;29448:140:0;13624:343:1;29448:140:0;29695:4;29646:28;3017:18;;;;;;;;;;;29753;;29729:42;;;;;;;29802:37;;-1:-1:-1;29826:13:0;;;;;;;29802:37;:63;;;;-1:-1:-1;29857:8:0;;-1:-1:-1;;;29857:8:0;;;;29856:9;29802:63;:112;;;;-1:-1:-1;;;;;;29883:31:0;;;;;;:25;:31;;;;;;;;29882:32;29802:112;:155;;;;-1:-1:-1;;;;;;29932:25:0;;;;;;:19;:25;;;;;;;;29931:26;29802:155;:196;;;;-1:-1:-1;;;;;;29975:23:0;;;;;;:19;:23;;;;;;;;29974:24;29802:196;:244;;;;;30028:18;;30015:10;;:31;29802:244;29784:417;;;30073:8;:15;;-1:-1:-1;;;;30073:15:0;-1:-1:-1;;;30073:15:0;;;30138:18;;30103:55;;30112:45;;30116:20;;30112:3;:45::i;:::-;30103:8;:55::i;:::-;30173:8;:16;;-1:-1:-1;;;;30173:16:0;;;29784:417;30229:8;;-1:-1:-1;;;;;30254:25:0;;30213:12;30254:25;;;:19;:25;;;;;;30229:8;-1:-1:-1;;;30229:8:0;;;;;30228:9;;30254:25;;:52;;-1:-1:-1;;;;;;30283:23:0;;;;;;:19;:23;;;;;;;;30254:52;30250:100;;;-1:-1:-1;30333:5:0;30250:100;30362:12;30395:7;30391:518;;;-1:-1:-1;;;;;30444:29:0;;;;;;:25;:29;;;;;;;;:45;;;;;30488:1;30477:8;;:12;30444:45;30440:320;;;30517:32;30542:6;30517:20;30528:8;;30517:6;:10;;:20;;;;:::i;:::-;:24;;:32::i;:::-;30510:39;;30440:320;;;-1:-1:-1;;;;;30608:31:0;;;;;;:25;:31;;;;;;;;:46;;;;;30653:1;30643:7;;:11;30608:46;30604:156;;;30682:31;30706:6;30682:19;30693:7;;30682:6;:10;;:19;;;;:::i;:31::-;30732:10;:12;;30675:38;;-1:-1:-1;30732:10:0;:12;;;:::i;:::-;;;;;;30604:156;30780:8;;30776:91;;30809:42;30825:4;30839;30846;30809:15;:42::i;:::-;30883:14;30893:4;30883:14;;:::i;:::-;;;30391:518;30921:33;30937:4;30943:2;30947:6;30921:15;:33::i;:::-;27093:3869;;;;26980:3982;;;:::o;26286:186::-;-1:-1:-1;;;;;26369:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;26369:39:0;;;;;;;;;;26424:40;;26369:39;;:31;26424:40;;;26286:186;;:::o;5034:770::-;-1:-1:-1;;;;;5174:20:0;;5166:70;;;;-1:-1:-1;;;5166:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5255:23:0;;5247:71;;;;-1:-1:-1;;;5247:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5415:17:0;;5391:21;5415:17;;;;;;;;;;;5465:23;;;;5443:111;;;;-1:-1:-1;;;5443:111:0;;14864:2:1;5443:111:0;;;14846:21:1;14903:2;14883:18;;;14876:30;14942:34;14922:18;;;14915:62;-1:-1:-1;;;14993:18:1;;;14986:36;15039:19;;5443:111:0;14662:402:1;5443:111:0;-1:-1:-1;;;;;5590:17:0;;;:9;:17;;;;;;;;;;;5610:22;;;5590:42;;5654:20;;;;;;;;:30;;5626:6;;5590:9;5654:30;;5626:6;;5654:30;:::i;:::-;;;;;;;;5719:9;-1:-1:-1;;;;;5702:35:0;5711:6;-1:-1:-1;;;;;5702:35:0;;5730:6;5702:35;;;;1651:25:1;;1639:2;1624:18;;1505:177;5702:35:0;;;;;;;;5155:649;5034:770;;;:::o;30970:107::-;31027:7;31059:1;31055;:5;31054:15;;31068:1;31054:15;;;31064:1;31054:15;31047:22;30970:107;-1:-1:-1;;;30970:107:0:o;31568:585::-;31621:12;31650:6;31660:1;31650:11;31646:50;;31678:7;31568:585;:::o;31646:50::-;31737:6;31754:36;31737:6;31754:16;:36::i;:::-;31822:21;31801:18;31909:14;31922:1;31822:21;31909:14;:::i;:::-;31888:35;-1:-1:-1;31934:26:0;31963:23;31888:35;31963:10;:23;:::i;:::-;32021:15;;32013:52;;31934;;-1:-1:-1;;;;;;32021:15:0;;32050:10;;32013:52;;;;32050:10;32021:15;32013:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32098:10:0;;32090:55;;31999:66;;-1:-1:-1;;;;;;32098:10:0;;32122:18;;32090:55;;;;32122:18;32098:10;32090:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;31568:585:0:o;8061:250::-;8119:7;8143:1;8148;8143:6;8139:47;;-1:-1:-1;8173:1:0;8166:8;;8139:47;8198:9;8210:5;8214:1;8210;:5;:::i;:::-;8198:17;-1:-1:-1;8243:1:0;8234:5;8238:1;8198:17;8234:5;:::i;:::-;:10;8226:56;;;;-1:-1:-1;;;8226:56:0;;15481:2:1;8226:56:0;;;15463:21:1;15520:2;15500:18;;;15493:30;15559:34;15539:18;;;15532:62;-1:-1:-1;;;15610:18:1;;;15603:31;15651:19;;8226:56:0;15279:397:1;8319:132:0;8377:7;8404:39;8408:1;8411;8404:39;;;;;;;;;;;;;;;;;:3;:39::i;31085:475::-;31175:16;;;31189:1;31175:16;;;;;;;;31151:21;;31175:16;;;;;;;;;;-1:-1:-1;31175:16:0;31151:40;;31220:4;31202;31207:1;31202:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31202:23:0;;;-1:-1:-1;;;;;31202:23:0;;;;;31246:15;-1:-1:-1;;;;;31246:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31236:4;31241:1;31236:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31236:32:0;;;-1:-1:-1;;;;;31236:32:0;;;;;31281:62;31298:4;31313:15;31331:11;31281:8;:62::i;:::-;31356:196;;-1:-1:-1;;;31356:196:0;;-1:-1:-1;;;;;31356:15:0;:66;;;;:196;;31437:11;;31463:1;;31479:4;;31506;;31526:15;;31356:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31140:420;31085:475;:::o;8459:312::-;8579:7;8614:12;8607:5;8599:28;;;;-1:-1:-1;;;8599:28:0;;;;;;;;:::i;:::-;-1:-1:-1;8638:9:0;8650:5;8654:1;8650;:5;:::i;:::-;8638:17;8459:312;-1:-1:-1;;;;;8459:312:0:o;206:418:1:-;355:2;344:9;337:21;318:4;387:6;381:13;430:6;425:2;414:9;410:18;403:34;489:6;484:2;476:6;472:15;467:2;456:9;452:18;446:50;545:1;540:2;531:6;520:9;516:22;512:31;505:42;615:2;608;604:7;599:2;591:6;587:15;583:29;572:9;568:45;564:54;556:62;;;206:418;;;;:::o;629:131::-;-1:-1:-1;;;;;704:31:1;;694:42;;684:70;;750:1;747;740:12;684:70;629:131;:::o;765:315::-;833:6;841;894:2;882:9;873:7;869:23;865:32;862:52;;;910:1;907;900:12;862:52;949:9;936:23;968:31;993:5;968:31;:::i;:::-;1018:5;1070:2;1055:18;;;;1042:32;;-1:-1:-1;;;765:315:1:o;1085:180::-;1144:6;1197:2;1185:9;1176:7;1172:23;1168:32;1165:52;;;1213:1;1210;1203:12;1165:52;-1:-1:-1;1236:23:1;;1085:180;-1:-1:-1;1085:180:1:o;1687:456::-;1764:6;1772;1780;1833:2;1821:9;1812:7;1808:23;1804:32;1801:52;;;1849:1;1846;1839:12;1801:52;1888:9;1875:23;1907:31;1932:5;1907:31;:::i;:::-;1957:5;-1:-1:-1;2014:2:1;1999:18;;1986:32;2027:33;1986:32;2027:33;:::i;:::-;1687:456;;2079:7;;-1:-1:-1;;;2133:2:1;2118:18;;;;2105:32;;1687:456::o;2545:247::-;2604:6;2657:2;2645:9;2636:7;2632:23;2628:32;2625:52;;;2673:1;2670;2663:12;2625:52;2712:9;2699:23;2731:31;2756:5;2731:31;:::i;2797:160::-;2862:20;;2918:13;;2911:21;2901:32;;2891:60;;2947:1;2944;2937:12;2962:315;3027:6;3035;3088:2;3076:9;3067:7;3063:23;3059:32;3056:52;;;3104:1;3101;3094:12;3056:52;3143:9;3130:23;3162:31;3187:5;3162:31;:::i;:::-;3212:5;-1:-1:-1;3236:35:1;3267:2;3252:18;;3236:35;:::i;:::-;3226:45;;2962:315;;;;;:::o;3282:180::-;3338:6;3391:2;3379:9;3370:7;3366:23;3362:32;3359:52;;;3407:1;3404;3397:12;3359:52;3430:26;3446:9;3430:26;:::i;3467:388::-;3535:6;3543;3596:2;3584:9;3575:7;3571:23;3567:32;3564:52;;;3612:1;3609;3602:12;3564:52;3651:9;3638:23;3670:31;3695:5;3670:31;:::i;:::-;3720:5;-1:-1:-1;3777:2:1;3762:18;;3749:32;3790:33;3749:32;3790:33;:::i;:::-;3842:7;3832:17;;;3467:388;;;;;:::o;3860:356::-;4062:2;4044:21;;;4081:18;;;4074:30;4140:34;4135:2;4120:18;;4113:62;4207:2;4192:18;;3860:356::o;4564:380::-;4643:1;4639:12;;;;4686;;;4707:61;;4761:4;4753:6;4749:17;4739:27;;4707:61;4814:2;4806:6;4803:14;4783:18;4780:38;4777:161;;4860:10;4855:3;4851:20;4848:1;4841:31;4895:4;4892:1;4885:15;4923:4;4920:1;4913:15;4777:161;;4564:380;;;:::o;4949:127::-;5010:10;5005:3;5001:20;4998:1;4991:31;5041:4;5038:1;5031:15;5065:4;5062:1;5055:15;5081:168;5154:9;;;5185;;5202:15;;;5196:22;;5182:37;5172:71;;5223:18;;:::i;5254:217::-;5294:1;5320;5310:132;;5364:10;5359:3;5355:20;5352:1;5345:31;5399:4;5396:1;5389:15;5427:4;5424:1;5417:15;5310:132;-1:-1:-1;5456:9:1;;5254:217::o;6583:416::-;6672:1;6709:5;6672:1;6723:270;6744:7;6734:8;6731:21;6723:270;;;6803:4;6799:1;6795:6;6791:17;6785:4;6782:27;6779:53;;;6812:18;;:::i;:::-;6862:7;6852:8;6848:22;6845:55;;;6882:16;;;;6845:55;6961:22;;;;6921:15;;;;6723:270;;;6727:3;6583:416;;;;;:::o;7004:806::-;7053:5;7083:8;7073:80;;-1:-1:-1;7124:1:1;7138:5;;7073:80;7172:4;7162:76;;-1:-1:-1;7209:1:1;7223:5;;7162:76;7254:4;7272:1;7267:59;;;;7340:1;7335:130;;;;7247:218;;7267:59;7297:1;7288:10;;7311:5;;;7335:130;7372:3;7362:8;7359:17;7356:43;;;7379:18;;:::i;:::-;-1:-1:-1;;7435:1:1;7421:16;;7450:5;;7247:218;;7549:2;7539:8;7536:16;7530:3;7524:4;7521:13;7517:36;7511:2;7501:8;7498:16;7493:2;7487:4;7484:12;7480:35;7477:77;7474:159;;;-1:-1:-1;7586:19:1;;;7618:5;;7474:159;7665:34;7690:8;7684:4;7665:34;:::i;:::-;7735:6;7731:1;7727:6;7723:19;7714:7;7711:32;7708:58;;;7746:18;;:::i;:::-;7784:20;;7004:806;-1:-1:-1;;;7004:806:1:o;7815:140::-;7873:5;7902:47;7943:4;7933:8;7929:19;7923:4;7902:47;:::i;8369:125::-;8434:9;;;8455:10;;;8452:36;;;8468:18;;:::i;11565:401::-;11767:2;11749:21;;;11806:2;11786:18;;;11779:30;11845:34;11840:2;11825:18;;11818:62;-1:-1:-1;;;11911:2:1;11896:18;;11889:35;11956:3;11941:19;;11565:401::o;11971:399::-;12173:2;12155:21;;;12212:2;12192:18;;;12185:30;12251:34;12246:2;12231:18;;12224:62;-1:-1:-1;;;12317:2:1;12302:18;;12295:33;12360:3;12345:19;;11971:399::o;14389:135::-;14428:3;14449:17;;;14446:43;;14469:18;;:::i;:::-;-1:-1:-1;14516:1:1;14505:13;;14389:135::o;14529:128::-;14596:9;;;14617:11;;;14614:37;;;14631:18;;:::i;15813:127::-;15874:10;15869:3;15865:20;15862:1;15855:31;15905:4;15902:1;15895:15;15929:4;15926:1;15919:15;15945:251;16015:6;16068:2;16056:9;16047:7;16043:23;16039:32;16036:52;;;16084:1;16081;16074:12;16036:52;16116:9;16110:16;16135:31;16160:5;16135:31;:::i;16201:980::-;16463:4;16511:3;16500:9;16496:19;16542:6;16531:9;16524:25;16568:2;16606:6;16601:2;16590:9;16586:18;16579:34;16649:3;16644:2;16633:9;16629:18;16622:31;16673:6;16708;16702:13;16739:6;16731;16724:22;16777:3;16766:9;16762:19;16755:26;;16816:2;16808:6;16804:15;16790:29;;16837:1;16847:195;16861:6;16858:1;16855:13;16847:195;;;16926:13;;-1:-1:-1;;;;;16922:39:1;16910:52;;17017:15;;;;16982:12;;;;16958:1;16876:9;16847:195;;;-1:-1:-1;;;;;;;17098:32:1;;;;17093:2;17078:18;;17071:60;-1:-1:-1;;;17162:3:1;17147:19;17140:35;17059:3;16201:980;-1:-1:-1;;;16201:980:1:o

Swarm Source

ipfs://77a8dddd2af6e2e5b8cb35a7ab07262d0e9cc3100f336b0f4636fbe0f7863164
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.