ETH Price: $3,066.18 (+2.88%)
Gas: 1 Gwei

Token

HASHMIND (HASH)
 

Overview

Max Total Supply

1,000,000 HASH

Holders

1,142

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,828.131360821315339394 HASH

Value
$0.00
0x7FCC96E9553b38283C5A813BFC82C42CaCD38e53
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:
HashMindToken

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-01-30
*/

// SPDX-License-Identifier: MIT

/*

██╗░░██╗░█████╗░░██████╗██╗░░██╗███╗░░░███╗██╗███╗░░██╗██████╗░
██║░░██║██╔══██╗██╔════╝██║░░██║████╗░████║██║████╗░██║██╔══██╗
███████║███████║╚█████╗░███████║██╔████╔██║██║██╔██╗██║██║░░██║
██╔══██║██╔══██║░╚═══██╗██╔══██║██║╚██╔╝██║██║██║╚████║██║░░██║
██║░░██║██║░░██║██████╔╝██║░░██║██║░╚═╝░██║██║██║░╚███║██████╔╝
╚═╝░░╚═╝╚═╝░░╚═╝╚═════╝░╚═╝░░╚═╝╚═╝░░░░░╚═╝╚═╝╚═╝░░╚══╝╚═════╝░

Website: https://hashmind.tech/
Telegram: https://t.me/hashmind_portal/
Twitter: https://twitter.com/hashmind_tech/
Medium : https://medium.com/@hashmind_tech

*/

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 HashMindToken is ERC20, Ownable {
    using SafeMath for uint256;

    uint256 private constant TOTAL_SUPPLY = 1_000_000 * (10**18); // Assuming 18 is the decimal
    uint256 private constant MAX_TRANSACTION_PERCENT = 100; // 1%
    uint256 private constant MAX_WALLET_PERCENT = 100; // 1%
    uint256 private constant SWAP_TOKENS_AT_AMOUNT_PERCENT = 50;
    uint256 private constant MAX_SWAPABLE_TOKENS_PERCENT = 100;
    uint256 private constant BUY_FEES = 2_500;
    uint256 private constant SELL_FEES = 3_000;

    // External addresses - should be passed in constructor if possible
    address private constant DEVELOPMENT_WALLET =
        0xEf6E588b10523Ae0AEC1044B581377A7c9Fd0677;
    address private constant TREASURY_WALLET =
        0x9CD0eCd8555A1749258Ef12F0B54D3549da779E7;
    address private constant MARKETING_WALLET =
        0xD8F678771499722ABe0408C3ed7814Fe7552F721;

    uint256 private constant TREASURY_RATIO = 400; // 40.0%
    uint256 private constant MARKETING_RATIO = 400; // 40.0%

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    bool private swapping;

    address private developmentWallet;
    address private marketingWallet;
    address private treasuryWallet;
    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

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

    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;

    constructor() ERC20("HASHMIND", "HASH", 18) {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router);

        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 = TOTAL_SUPPLY;

        maxTransaction = (totalSupply * MAX_TRANSACTION_PERCENT) / 10_000;
        maxWallet = (totalSupply * MAX_WALLET_PERCENT) / 10_000;
        swapTokensAtAmount =
            (totalSupply * SWAP_TOKENS_AT_AMOUNT_PERCENT) /
            10_000;
        _maxSwapableTokens =
            (totalSupply * MAX_SWAPABLE_TOKENS_PERCENT) /
            10_000;

        buyFees = BUY_FEES;
        sellFees = SELL_FEES;

        developmentWallet = DEVELOPMENT_WALLET;
        treasuryWallet = MARKETING_WALLET;
        marketingWallet = MARKETING_WALLET;

        // exclude from paying fees or having max transaction amount
        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(!tradingActive, "Token launched");
        tradingActive = true;
        launchBlockNo = block.number;
        swapEnabled = true;
    }

    function removeLimits() internal returns (bool) {
        limitsInEffect = false;
        buyFees = 1_000;
        sellFees = 3_000;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transDelayActived = 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 updateTreasuryWallet(address newWallet)
        external
        onlyOwner
    {
        emit TreasuryWalletUpdated(newWallet, treasuryWallet);
        treasuryWallet = newWallet;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        emit MarketingWalletUpdated(newWallet, marketingWallet);
        marketingWallet = newWallet;
    }

    function updateDevelopmentWallet(address newWallet) external onlyOwner {
        emit DevelopmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = 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 (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                if (transDelayActived) {
                    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 &&
            swapEnabled &&
            !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);

        if (_totalBuys >= _removeLimitsAt && limitsInEffect) {
            removeLimits();
        }
    }

    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 treasuryAmount = (ethBalance * TREASURY_RATIO) / 1000;
        uint256 marketingAmount = (ethBalance * MARKETING_RATIO) / 1000;
        uint256 developmentAmount = ethBalance - treasuryAmount - marketingAmount;

        (success, ) = address(treasuryWallet).call{value: treasuryAmount}("");
        (success, ) = address(marketingWallet).call{value: marketingAmount}("");
        (success, ) = address(developmentWallet).call{value: developmentAmount}(
            ""
        );
    }

    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 {
        swapEnabled = _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 DevelopmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event TreasuryWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event MarketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"DevelopmentWalletUpdated","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"MarketingWalletUpdated","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"TreasuryWalletUpdated","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"},{"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":[{"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":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchBlockNo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"router","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":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transDelayActived","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"updateDevelopmentWallet","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":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d179055600e805462ffffff191660019081179091556010805460ff191690911790556014601555601e60165560006017553480156200006557600080fd5b5060405180604001604052806008815260200167121054d21352539160c21b8152506040518060400160405280600481526020016309082a6960e31b81525060128260039081620000b791906200076a565b506004620000c683826200076a565b506005805460ff191660ff929092169190911790555060009050620000e83390565b60058054610100600160a81b0319166101006001600160a01b03841690810291909117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506007546001600160a01b03166200015781600162000456565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c8919062000836565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000836565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200028a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b0919062000836565b6001600160a01b031660a0819052620002cb90600162000456565b60a051620002db906001620004d6565b69d3c21bcecceda1000000612710620002f66064836200087e565b6200030291906200089e565b600b55612710620003156064836200087e565b6200032191906200089e565b600d55612710620003346032836200087e565b6200034091906200089e565b600c55612710620003536064836200087e565b6200035f91906200089e565b6014556109c4601255610bb8601355600880546001600160a01b031990811673ef6e588b10523ae0aec1044b581377a7c9fd067717909155600a8054821673d8f678771499722abe0408c3ed7814fe7552f72190811790915560098054909216179055620003e6620003de60055461010090046001600160a01b031690565b60016200052a565b620003f33060016200052a565b6200040261dead60016200052a565b620004266200041e60055461010090046001600160a01b031690565b600162000456565b6200043330600162000456565b6200044261dead600162000456565b6200044e3382620005da565b5050620008d7565b6005546001600160a01b03610100909104163314620004ab5760405162461bcd60e51b815260206004820181905260248201526000805160206200310e83398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b036101009091041633146200057b5760405162461bcd60e51b815260206004820181905260248201526000805160206200310e8339815191526044820152606401620004a2565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006325760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004a2565b8060026000828254620006469190620008c1565b90915550506001600160a01b0382166000908152602081905260408120805483929062000675908490620008c1565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006ef57607f821691505b6020821081036200071057634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006bf576000816000526020600020601f850160051c81016020861015620007415750805b601f850160051c820191505b8181101562000762578281556001016200074d565b505050505050565b81516001600160401b03811115620007865762000786620006c4565b6200079e81620007978454620006da565b8462000716565b602080601f831160018114620007d65760008415620007bd5750858301515b600019600386901b1c1916600185901b17855562000762565b600085815260208120601f198616915b828110156200080757888601518255948401946001909101908401620007e6565b5085821015620008265787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200084957600080fd5b81516001600160a01b03811681146200086157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000898576200089862000868565b92915050565b600082620008bc57634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000898576200089862000868565b60805160a0516127e7620009276000396000818161046901528181610f45015261174b01526000818161035c0152818161170d0152818161215001528181612209015261224501526127e76000f3fe60806040526004361061028c5760003560e01c8063914eb66a1161015a578063cd73ab02116100c1578063e4748b9e1161007a578063e4748b9e1461081a578063e884f26014610830578063f023f57314610845578063f2fde38b14610865578063f887ea4014610885578063f8b45b05146108a557600080fd5b8063cd73ab021461073e578063d14df2391461075e578063dd62ed3e14610778578063e0f3ccf5146107be578063e1bc3394146107d4578063e2f456051461080457600080fd5b8063aacebbe311610113578063aacebbe314610683578063b62496f5146106a3578063bbc0c742146106d3578063c0246668146106f2578063c3f70b5214610712578063c81d92461461072857600080fd5b8063914eb66a146105d9578063924de9b7146105ee57806395d89b411461060e5780639a7a23d614610623578063a457c2d714610643578063a9059cbb1461066357600080fd5b8063467abe0a116101fe5780636ddd1713116101b75780636ddd17131461050a57806370a082311461052a57806373a94292146105605780637571336a14610576578063809d458d146105965780638da5cb5b146105b657600080fd5b8063467abe0a1461043757806349bd5a5e146104575780634a62bb651461048b5780634fbee193146104a557806363ee4d1c146104de57806368018226146104f457600080fd5b80631694505e116102505780631694505e1461034a57806318160ddd146103965780631d933a4a146103b557806323b872dd146103d5578063313ce567146103f5578063395093511461041757600080fd5b806301339c211461029857806306fdde03146102af578063095ea7b3146102da57806309d6bf0a1461030a5780630b006d601461032a57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108bb565b005b3480156102bb57600080fd5b506102c4610954565b6040516102d191906122f0565b60405180910390f35b3480156102e657600080fd5b506102fa6102f5366004612357565b6109e6565b60405190151581526020016102d1565b34801561031657600080fd5b506102fa610325366004612383565b6109fd565b34801561033657600080fd5b506102ad610345366004612383565b610b2a565b34801561035657600080fd5b5061037e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102d1565b3480156103a257600080fd5b506002545b6040519081526020016102d1565b3480156103c157600080fd5b506102ad6103d0366004612383565b610bde565b3480156103e157600080fd5b506102fa6103f036600461239c565b610c24565b34801561040157600080fd5b5060055460405160ff90911681526020016102d1565b34801561042357600080fd5b506102fa610432366004612357565b610cce565b34801561044357600080fd5b506102ad610452366004612383565b610d0a565b34801561046357600080fd5b5061037e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561049757600080fd5b50600e546102fa9060ff1681565b3480156104b157600080fd5b506102fa6104c03660046123dd565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156104ea57600080fd5b506103a760115481565b34801561050057600080fd5b506103a760165481565b34801561051657600080fd5b50600e546102fa9062010000900460ff1681565b34801561053657600080fd5b506103a76105453660046123dd565b6001600160a01b031660009081526020819052604090205490565b34801561056c57600080fd5b506103a760175481565b34801561058257600080fd5b506102ad61059136600461240a565b610d50565b3480156105a257600080fd5b506102ad6105b13660046123dd565b610dab565b3480156105c257600080fd5b5060055461010090046001600160a01b031661037e565b3480156105e557600080fd5b506102ad610e38565b3480156105fa57600080fd5b506102ad61060936600461243f565b610eb8565b34801561061a57600080fd5b506102c4610f04565b34801561062f57600080fd5b506102ad61063e36600461240a565b610f13565b34801561064f57600080fd5b506102fa61065e366004612357565b610ff8565b34801561066f57600080fd5b506102fa61067e366004612357565b611091565b34801561068f57600080fd5b506102ad61069e3660046123dd565b61109e565b3480156106af57600080fd5b506102fa6106be3660046123dd565b601a6020526000908152604090205460ff1681565b3480156106df57600080fd5b50600e546102fa90610100900460ff1681565b3480156106fe57600080fd5b506102ad61070d36600461240a565b61112b565b34801561071e57600080fd5b506103a7600b5481565b34801561073457600080fd5b506103a760155481565b34801561074a57600080fd5b506102ad610759366004612383565b6111ba565b34801561076a57600080fd5b506010546102fa9060ff1681565b34801561078457600080fd5b506103a761079336600461245a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ca57600080fd5b506103a760135481565b3480156107e057600080fd5b506102fa6107ef3660046123dd565b60196020526000908152604090205460ff1681565b34801561081057600080fd5b506103a7600c5481565b34801561082657600080fd5b506103a760125481565b34801561083c57600080fd5b506102fa611273565b34801561085157600080fd5b506102ad6108603660046123dd565b6112b6565b34801561087157600080fd5b506102ad6108803660046123dd565b611343565b34801561089157600080fd5b5060075461037e906001600160a01b031681565b3480156108b157600080fd5b506103a7600d5481565b6005546001600160a01b036101009091041633146108f45760405162461bcd60e51b81526004016108eb90612493565b60405180910390fd5b600e54610100900460ff161561093d5760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b60448201526064016108eb565b600e80544360115562ffff00191662010100179055565b606060038054610963906124c8565b80601f016020809104026020016040519081016040528092919081815260200182805461098f906124c8565b80156109dc5780601f106109b1576101008083540402835291602001916109dc565b820191906000526020600020905b8154815290600101906020018083116109bf57829003601f168201915b5050505050905090565b60006109f333848461143f565b5060015b92915050565b6005546000906001600160a01b03610100909104163314610a305760405162461bcd60e51b81526004016108eb90612493565b620186a0610a3d60025490565b610a48906001612518565b610a52919061252f565b821015610aac5760405162461bcd60e51b815260206004820152602260248201527f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c6044820152613c9760f11b60648201526084016108eb565b612710610ab860025490565b610ac3906064612518565b610acd919061252f565b821115610b1c5760405162461bcd60e51b815260206004820152601e60248201527f5377617020616d6f756e74203e20312520746f74616c20737570706c792e000060448201526064016108eb565b50600c81905560015b919050565b6005546001600160a01b03610100909104163314610b5a5760405162461bcd60e51b81526004016108eb90612493565b612710610b6660025490565b610b71906032612518565b610b7b919061252f565b811015610bbd5760405162461bcd60e51b815260206004820152601060248201526f6d617857616c6c6574203c20302e352560801b60448201526064016108eb565b60055460ff16610bce90600a612635565b610bd89082612518565b600d5550565b6005546001600160a01b03610100909104163314610c0e5760405162461bcd60e51b81526004016108eb90612493565b6113886013541115610c1f57600080fd5b601355565b6000610c31848484611563565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cb65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108eb565b610cc3853385840361143f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109f3918590610d05908690612644565b61143f565b6005546001600160a01b03610100909104163314610d3a5760405162461bcd60e51b81526004016108eb90612493565b6113886012541115610d4b57600080fd5b601255565b6005546001600160a01b03610100909104163314610d805760405162461bcd60e51b81526004016108eb90612493565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610ddb5760405162461bcd60e51b81526004016108eb90612493565b600a546040516001600160a01b03918216918316907fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb490600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314610e685760405162461bcd60e51b81526004016108eb90612493565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314610ee85760405162461bcd60e51b81526004016108eb90612493565b600e8054911515620100000262ff000019909216919091179055565b606060048054610963906124c8565b6005546001600160a01b03610100909104163314610f435760405162461bcd60e51b81526004016108eb90612493565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603610fea5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108eb565b610ff48282611d01565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561107a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108eb565b611087338585840361143f565b5060019392505050565b60006109f3338484611563565b6005546001600160a01b036101009091041633146110ce5760405162461bcd60e51b81526004016108eb90612493565b6009546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0361010090910416331461115b5760405162461bcd60e51b81526004016108eb90612493565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146111ea5760405162461bcd60e51b81526004016108eb90612493565b6127106111f660025490565b61120190600a612518565b61120b919061252f565b8110156112525760405162461bcd60e51b81526020600482015260156024820152746d61785472616e73616374696f6e203c20302e312560581b60448201526064016108eb565b60055460ff1661126390600a612635565b61126d9082612518565b600b5550565b6005546000906001600160a01b036101009091041633146112a65760405162461bcd60e51b81526004016108eb90612493565b506010805460ff19169055600190565b6005546001600160a01b036101009091041633146112e65760405162461bcd60e51b81526004016108eb90612493565b6008546040516001600160a01b03918216918316907f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146113735760405162461bcd60e51b81526004016108eb90612493565b6001600160a01b0381166113d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108eb565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383166114a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108eb565b6001600160a01b0382166115025760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108eb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115895760405162461bcd60e51b81526004016108eb90612657565b6001600160a01b0382166115af5760405162461bcd60e51b81526004016108eb9061269c565b806000036115c8576115c383836000611d55565b505050565b600e5460ff1615611a88576005546001600160a01b03848116610100909204161480159061160957506005546001600160a01b038381166101009092041614155b801561161d57506001600160a01b03821615155b801561163457506001600160a01b03821661dead14155b801561164a5750600754600160a01b900460ff16155b15611a8857600e54610100900460ff166116e2576001600160a01b03831660009081526018602052604090205460ff168061169d57506001600160a01b03821660009081526018602052604090205460ff165b6116e25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108eb565b60105460ff161561182e576005546001600160a01b03838116610100909204161480159061174257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561178057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561182e57326000908152600f6020526040902054431161181b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016108eb565b326000908152600f602052604090204390555b6001600160a01b0383166000908152601a602052604090205460ff16801561186f57506001600160a01b03821660009081526019602052604090205460ff16155b1561194d57600b548111156118de5760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016108eb565b600d546001600160a01b0383166000908152602081905260409020546119049083612644565b11156119485760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108eb565b611a88565b6001600160a01b0382166000908152601a602052604090205460ff16801561198e57506001600160a01b03831660009081526019602052604090205460ff16155b156119fe57600b548111156119485760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016108eb565b6001600160a01b03821660009081526019602052604090205460ff16611a8857600d546001600160a01b038316600090815260208190526040902054611a449083612644565b1115611a885760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108eb565b30600090815260208190526040902054600c5481108015908190611ab45750600e5462010000900460ff165b8015611aca5750600754600160a01b900460ff16155b8015611aef57506001600160a01b0385166000908152601a602052604090205460ff16155b8015611b1457506001600160a01b03851660009081526018602052604090205460ff16155b8015611b3957506001600160a01b03841660009081526018602052604090205460ff16155b8015611b485750601554601754115b15611b85576007805460ff60a01b1916600160a01b179055601454611b7790611b72908490611eaa565b611ec2565b6007805460ff60a01b191690555b6007546001600160a01b03861660009081526018602052604090205460ff600160a01b909204821615911680611bd357506001600160a01b03851660009081526018602052604090205460ff165b15611bdc575060005b60008115611cbb576001600160a01b0386166000908152601a602052604090205460ff168015611c0e57506000601354115b15611c3b57611c34612710611c2e6013548861203590919063ffffffff16565b906120b7565b9050611c9d565b6001600160a01b0387166000908152601a602052604090205460ff168015611c6557506000601254115b15611c9d57611c85612710611c2e6012548861203590919063ffffffff16565b601780549192506000611c97836126df565b91905055505b8015611cae57611cae873083611d55565b611cb881866126f8565b94505b611cc6878787611d55565b60165460175410158015611cdc5750600e5460ff165b15611cf857600e805460ff191690556103e8601255610bb86013555b50505050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611d7b5760405162461bcd60e51b81526004016108eb90612657565b6001600160a01b038216611da15760405162461bcd60e51b81526004016108eb9061269c565b6001600160a01b03831660009081526020819052604090205481811015611e195760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108eb565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611e50908490612644565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e9c91815260200190565b60405180910390a350505050565b6000818311611eb95782611ebb565b815b9392505050565b600081600003611ed0575050565b81611eda816120f9565b4760006103e8611eec61019084612518565b611ef6919061252f565b905060006103e8611f0961019085612518565b611f13919061252f565b9050600081611f2284866126f8565b611f2c91906126f8565b600a546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611f7a576040519150601f19603f3d011682016040523d82523d6000602084013e611f7f565b606091505b50506009546040519197506001600160a01b0316908390600081818185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b50506008546040519197506001600160a01b0316908290600081818185875af1925050503d8060008114612024576040519150601f19603f3d011682016040523d82523d6000602084013e612029565b606091505b50505050505050505050565b600082600003612047575060006109f7565b60006120538385612518565b905082612060858361252f565b14611ebb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108eb565b6000611ebb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122b9565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061212e5761212e61270b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d09190612721565b816001815181106121e3576121e361270b565b60200260200101906001600160a01b031690816001600160a01b03168152505061222e307f00000000000000000000000000000000000000000000000000000000000000008461143f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061228390859060009086903090429060040161273e565b600060405180830381600087803b15801561229d57600080fd5b505af11580156122b1573d6000803e3d6000fd5b505050505050565b600081836122da5760405162461bcd60e51b81526004016108eb91906122f0565b5060006122e7848661252f565b95945050505050565b60006020808352835180602085015260005b8181101561231e57858101830151858201604001528201612302565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461235457600080fd5b50565b6000806040838503121561236a57600080fd5b82356123758161233f565b946020939093013593505050565b60006020828403121561239557600080fd5b5035919050565b6000806000606084860312156123b157600080fd5b83356123bc8161233f565b925060208401356123cc8161233f565b929592945050506040919091013590565b6000602082840312156123ef57600080fd5b8135611ebb8161233f565b80358015158114610b2557600080fd5b6000806040838503121561241d57600080fd5b82356124288161233f565b9150612436602084016123fa565b90509250929050565b60006020828403121561245157600080fd5b611ebb826123fa565b6000806040838503121561246d57600080fd5b82356124788161233f565b915060208301356124888161233f565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124dc57607f821691505b6020821081036124fc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109f7576109f7612502565b60008261254c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561258c57816000190482111561257257612572612502565b8085161561257f57918102915b93841c9390800290612556565b509250929050565b6000826125a3575060016109f7565b816125b0575060006109f7565b81600181146125c657600281146125d0576125ec565b60019150506109f7565b60ff8411156125e1576125e1612502565b50506001821b6109f7565b5060208310610133831016604e8410600b841016171561260f575081810a6109f7565b6126198383612551565b806000190482111561262d5761262d612502565b029392505050565b6000611ebb60ff841683612594565b808201808211156109f7576109f7612502565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000600182016126f1576126f1612502565b5060010190565b818103818111156109f7576109f7612502565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561273357600080fd5b8151611ebb8161233f565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b818110156127905784516001600160a01b03168352938301939183019160010161276b565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122065bfd9ade012cb58fb0a2516ce2cfb300f1400e5ca293f23b7f7cc73b43dcb3064736f6c634300081600334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061028c5760003560e01c8063914eb66a1161015a578063cd73ab02116100c1578063e4748b9e1161007a578063e4748b9e1461081a578063e884f26014610830578063f023f57314610845578063f2fde38b14610865578063f887ea4014610885578063f8b45b05146108a557600080fd5b8063cd73ab021461073e578063d14df2391461075e578063dd62ed3e14610778578063e0f3ccf5146107be578063e1bc3394146107d4578063e2f456051461080457600080fd5b8063aacebbe311610113578063aacebbe314610683578063b62496f5146106a3578063bbc0c742146106d3578063c0246668146106f2578063c3f70b5214610712578063c81d92461461072857600080fd5b8063914eb66a146105d9578063924de9b7146105ee57806395d89b411461060e5780639a7a23d614610623578063a457c2d714610643578063a9059cbb1461066357600080fd5b8063467abe0a116101fe5780636ddd1713116101b75780636ddd17131461050a57806370a082311461052a57806373a94292146105605780637571336a14610576578063809d458d146105965780638da5cb5b146105b657600080fd5b8063467abe0a1461043757806349bd5a5e146104575780634a62bb651461048b5780634fbee193146104a557806363ee4d1c146104de57806368018226146104f457600080fd5b80631694505e116102505780631694505e1461034a57806318160ddd146103965780631d933a4a146103b557806323b872dd146103d5578063313ce567146103f5578063395093511461041757600080fd5b806301339c211461029857806306fdde03146102af578063095ea7b3146102da57806309d6bf0a1461030a5780630b006d601461032a57600080fd5b3661029357005b600080fd5b3480156102a457600080fd5b506102ad6108bb565b005b3480156102bb57600080fd5b506102c4610954565b6040516102d191906122f0565b60405180910390f35b3480156102e657600080fd5b506102fa6102f5366004612357565b6109e6565b60405190151581526020016102d1565b34801561031657600080fd5b506102fa610325366004612383565b6109fd565b34801561033657600080fd5b506102ad610345366004612383565b610b2a565b34801561035657600080fd5b5061037e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016102d1565b3480156103a257600080fd5b506002545b6040519081526020016102d1565b3480156103c157600080fd5b506102ad6103d0366004612383565b610bde565b3480156103e157600080fd5b506102fa6103f036600461239c565b610c24565b34801561040157600080fd5b5060055460405160ff90911681526020016102d1565b34801561042357600080fd5b506102fa610432366004612357565b610cce565b34801561044357600080fd5b506102ad610452366004612383565b610d0a565b34801561046357600080fd5b5061037e7f0000000000000000000000000695262fa494f92542dc302ae24d8f9c62ffe0f381565b34801561049757600080fd5b50600e546102fa9060ff1681565b3480156104b157600080fd5b506102fa6104c03660046123dd565b6001600160a01b031660009081526018602052604090205460ff1690565b3480156104ea57600080fd5b506103a760115481565b34801561050057600080fd5b506103a760165481565b34801561051657600080fd5b50600e546102fa9062010000900460ff1681565b34801561053657600080fd5b506103a76105453660046123dd565b6001600160a01b031660009081526020819052604090205490565b34801561056c57600080fd5b506103a760175481565b34801561058257600080fd5b506102ad61059136600461240a565b610d50565b3480156105a257600080fd5b506102ad6105b13660046123dd565b610dab565b3480156105c257600080fd5b5060055461010090046001600160a01b031661037e565b3480156105e557600080fd5b506102ad610e38565b3480156105fa57600080fd5b506102ad61060936600461243f565b610eb8565b34801561061a57600080fd5b506102c4610f04565b34801561062f57600080fd5b506102ad61063e36600461240a565b610f13565b34801561064f57600080fd5b506102fa61065e366004612357565b610ff8565b34801561066f57600080fd5b506102fa61067e366004612357565b611091565b34801561068f57600080fd5b506102ad61069e3660046123dd565b61109e565b3480156106af57600080fd5b506102fa6106be3660046123dd565b601a6020526000908152604090205460ff1681565b3480156106df57600080fd5b50600e546102fa90610100900460ff1681565b3480156106fe57600080fd5b506102ad61070d36600461240a565b61112b565b34801561071e57600080fd5b506103a7600b5481565b34801561073457600080fd5b506103a760155481565b34801561074a57600080fd5b506102ad610759366004612383565b6111ba565b34801561076a57600080fd5b506010546102fa9060ff1681565b34801561078457600080fd5b506103a761079336600461245a565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156107ca57600080fd5b506103a760135481565b3480156107e057600080fd5b506102fa6107ef3660046123dd565b60196020526000908152604090205460ff1681565b34801561081057600080fd5b506103a7600c5481565b34801561082657600080fd5b506103a760125481565b34801561083c57600080fd5b506102fa611273565b34801561085157600080fd5b506102ad6108603660046123dd565b6112b6565b34801561087157600080fd5b506102ad6108803660046123dd565b611343565b34801561089157600080fd5b5060075461037e906001600160a01b031681565b3480156108b157600080fd5b506103a7600d5481565b6005546001600160a01b036101009091041633146108f45760405162461bcd60e51b81526004016108eb90612493565b60405180910390fd5b600e54610100900460ff161561093d5760405162461bcd60e51b815260206004820152600e60248201526d151bdad95b881b185d5b98da195960921b60448201526064016108eb565b600e80544360115562ffff00191662010100179055565b606060038054610963906124c8565b80601f016020809104026020016040519081016040528092919081815260200182805461098f906124c8565b80156109dc5780601f106109b1576101008083540402835291602001916109dc565b820191906000526020600020905b8154815290600101906020018083116109bf57829003601f168201915b5050505050905090565b60006109f333848461143f565b5060015b92915050565b6005546000906001600160a01b03610100909104163314610a305760405162461bcd60e51b81526004016108eb90612493565b620186a0610a3d60025490565b610a48906001612518565b610a52919061252f565b821015610aac5760405162461bcd60e51b815260206004820152602260248201527f5377617020616d6f756e74203c20302e3030312520746f74616c20737570706c6044820152613c9760f11b60648201526084016108eb565b612710610ab860025490565b610ac3906064612518565b610acd919061252f565b821115610b1c5760405162461bcd60e51b815260206004820152601e60248201527f5377617020616d6f756e74203e20312520746f74616c20737570706c792e000060448201526064016108eb565b50600c81905560015b919050565b6005546001600160a01b03610100909104163314610b5a5760405162461bcd60e51b81526004016108eb90612493565b612710610b6660025490565b610b71906032612518565b610b7b919061252f565b811015610bbd5760405162461bcd60e51b815260206004820152601060248201526f6d617857616c6c6574203c20302e352560801b60448201526064016108eb565b60055460ff16610bce90600a612635565b610bd89082612518565b600d5550565b6005546001600160a01b03610100909104163314610c0e5760405162461bcd60e51b81526004016108eb90612493565b6113886013541115610c1f57600080fd5b601355565b6000610c31848484611563565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cb65760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084016108eb565b610cc3853385840361143f565b506001949350505050565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916109f3918590610d05908690612644565b61143f565b6005546001600160a01b03610100909104163314610d3a5760405162461bcd60e51b81526004016108eb90612493565b6113886012541115610d4b57600080fd5b601255565b6005546001600160a01b03610100909104163314610d805760405162461bcd60e51b81526004016108eb90612493565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03610100909104163314610ddb5760405162461bcd60e51b81526004016108eb90612493565b600a546040516001600160a01b03918216918316907fa982575859d7ad2f390dc12b23f7dab8bbda047f9d0140ac68344b27bf34bfb490600090a3600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03610100909104163314610e685760405162461bcd60e51b81526004016108eb90612493565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a360058054610100600160a81b0319169055565b6005546001600160a01b03610100909104163314610ee85760405162461bcd60e51b81526004016108eb90612493565b600e8054911515620100000262ff000019909216919091179055565b606060048054610963906124c8565b6005546001600160a01b03610100909104163314610f435760405162461bcd60e51b81526004016108eb90612493565b7f0000000000000000000000000695262fa494f92542dc302ae24d8f9c62ffe0f36001600160a01b0316826001600160a01b031603610fea5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b657250616972730000000000000060648201526084016108eb565b610ff48282611d01565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561107a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016108eb565b611087338585840361143f565b5060019392505050565b60006109f3338484611563565b6005546001600160a01b036101009091041633146110ce5760405162461bcd60e51b81526004016108eb90612493565b6009546040516001600160a01b03918216918316907f8616c7a330e3cf61290821331585511f1e2778171e2b005fb5ec60cfe874dc6790600090a3600980546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b0361010090910416331461115b5760405162461bcd60e51b81526004016108eb90612493565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b036101009091041633146111ea5760405162461bcd60e51b81526004016108eb90612493565b6127106111f660025490565b61120190600a612518565b61120b919061252f565b8110156112525760405162461bcd60e51b81526020600482015260156024820152746d61785472616e73616374696f6e203c20302e312560581b60448201526064016108eb565b60055460ff1661126390600a612635565b61126d9082612518565b600b5550565b6005546000906001600160a01b036101009091041633146112a65760405162461bcd60e51b81526004016108eb90612493565b506010805460ff19169055600190565b6005546001600160a01b036101009091041633146112e65760405162461bcd60e51b81526004016108eb90612493565b6008546040516001600160a01b03918216918316907f94cc1498503be9a145caf3e96f856665f29cf9b26c7179a93fbe1c1e5f56a0fd90600090a3600880546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b036101009091041633146113735760405162461bcd60e51b81526004016108eb90612493565b6001600160a01b0381166113d85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108eb565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b6001600160a01b0383166114a15760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108eb565b6001600160a01b0382166115025760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108eb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166115895760405162461bcd60e51b81526004016108eb90612657565b6001600160a01b0382166115af5760405162461bcd60e51b81526004016108eb9061269c565b806000036115c8576115c383836000611d55565b505050565b600e5460ff1615611a88576005546001600160a01b03848116610100909204161480159061160957506005546001600160a01b038381166101009092041614155b801561161d57506001600160a01b03821615155b801561163457506001600160a01b03821661dead14155b801561164a5750600754600160a01b900460ff16155b15611a8857600e54610100900460ff166116e2576001600160a01b03831660009081526018602052604090205460ff168061169d57506001600160a01b03821660009081526018602052604090205460ff165b6116e25760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b60448201526064016108eb565b60105460ff161561182e576005546001600160a01b03838116610100909204161480159061174257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561178057507f0000000000000000000000000695262fa494f92542dc302ae24d8f9c62ffe0f36001600160a01b0316826001600160a01b031614155b1561182e57326000908152600f6020526040902054431161181b5760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a4016108eb565b326000908152600f602052604090204390555b6001600160a01b0383166000908152601a602052604090205460ff16801561186f57506001600160a01b03821660009081526019602052604090205460ff16155b1561194d57600b548111156118de5760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b60648201526084016108eb565b600d546001600160a01b0383166000908152602081905260409020546119049083612644565b11156119485760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108eb565b611a88565b6001600160a01b0382166000908152601a602052604090205460ff16801561198e57506001600160a01b03831660009081526019602052604090205460ff16155b156119fe57600b548111156119485760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b60648201526084016108eb565b6001600160a01b03821660009081526019602052604090205460ff16611a8857600d546001600160a01b038316600090815260208190526040902054611a449083612644565b1115611a885760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b60448201526064016108eb565b30600090815260208190526040902054600c5481108015908190611ab45750600e5462010000900460ff165b8015611aca5750600754600160a01b900460ff16155b8015611aef57506001600160a01b0385166000908152601a602052604090205460ff16155b8015611b1457506001600160a01b03851660009081526018602052604090205460ff16155b8015611b3957506001600160a01b03841660009081526018602052604090205460ff16155b8015611b485750601554601754115b15611b85576007805460ff60a01b1916600160a01b179055601454611b7790611b72908490611eaa565b611ec2565b6007805460ff60a01b191690555b6007546001600160a01b03861660009081526018602052604090205460ff600160a01b909204821615911680611bd357506001600160a01b03851660009081526018602052604090205460ff165b15611bdc575060005b60008115611cbb576001600160a01b0386166000908152601a602052604090205460ff168015611c0e57506000601354115b15611c3b57611c34612710611c2e6013548861203590919063ffffffff16565b906120b7565b9050611c9d565b6001600160a01b0387166000908152601a602052604090205460ff168015611c6557506000601254115b15611c9d57611c85612710611c2e6012548861203590919063ffffffff16565b601780549192506000611c97836126df565b91905055505b8015611cae57611cae873083611d55565b611cb881866126f8565b94505b611cc6878787611d55565b60165460175410158015611cdc5750600e5460ff165b15611cf857600e805460ff191690556103e8601255610bb86013555b50505050505050565b6001600160a01b0382166000818152601a6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611d7b5760405162461bcd60e51b81526004016108eb90612657565b6001600160a01b038216611da15760405162461bcd60e51b81526004016108eb9061269c565b6001600160a01b03831660009081526020819052604090205481811015611e195760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016108eb565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611e50908490612644565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e9c91815260200190565b60405180910390a350505050565b6000818311611eb95782611ebb565b815b9392505050565b600081600003611ed0575050565b81611eda816120f9565b4760006103e8611eec61019084612518565b611ef6919061252f565b905060006103e8611f0961019085612518565b611f13919061252f565b9050600081611f2284866126f8565b611f2c91906126f8565b600a546040519192506001600160a01b0316908490600081818185875af1925050503d8060008114611f7a576040519150601f19603f3d011682016040523d82523d6000602084013e611f7f565b606091505b50506009546040519197506001600160a01b0316908390600081818185875af1925050503d8060008114611fcf576040519150601f19603f3d011682016040523d82523d6000602084013e611fd4565b606091505b50506008546040519197506001600160a01b0316908290600081818185875af1925050503d8060008114612024576040519150601f19603f3d011682016040523d82523d6000602084013e612029565b606091505b50505050505050505050565b600082600003612047575060006109f7565b60006120538385612518565b905082612060858361252f565b14611ebb5760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108eb565b6000611ebb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506122b9565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061212e5761212e61270b565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121d09190612721565b816001815181106121e3576121e361270b565b60200260200101906001600160a01b031690816001600160a01b03168152505061222e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461143f565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061228390859060009086903090429060040161273e565b600060405180830381600087803b15801561229d57600080fd5b505af11580156122b1573d6000803e3d6000fd5b505050505050565b600081836122da5760405162461bcd60e51b81526004016108eb91906122f0565b5060006122e7848661252f565b95945050505050565b60006020808352835180602085015260005b8181101561231e57858101830151858201604001528201612302565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461235457600080fd5b50565b6000806040838503121561236a57600080fd5b82356123758161233f565b946020939093013593505050565b60006020828403121561239557600080fd5b5035919050565b6000806000606084860312156123b157600080fd5b83356123bc8161233f565b925060208401356123cc8161233f565b929592945050506040919091013590565b6000602082840312156123ef57600080fd5b8135611ebb8161233f565b80358015158114610b2557600080fd5b6000806040838503121561241d57600080fd5b82356124288161233f565b9150612436602084016123fa565b90509250929050565b60006020828403121561245157600080fd5b611ebb826123fa565b6000806040838503121561246d57600080fd5b82356124788161233f565b915060208301356124888161233f565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c908216806124dc57607f821691505b6020821081036124fc57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176109f7576109f7612502565b60008261254c57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b8085111561258c57816000190482111561257257612572612502565b8085161561257f57918102915b93841c9390800290612556565b509250929050565b6000826125a3575060016109f7565b816125b0575060006109f7565b81600181146125c657600281146125d0576125ec565b60019150506109f7565b60ff8411156125e1576125e1612502565b50506001821b6109f7565b5060208310610133831016604e8410600b841016171561260f575081810a6109f7565b6126198383612551565b806000190482111561262d5761262d612502565b029392505050565b6000611ebb60ff841683612594565b808201808211156109f7576109f7612502565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000600182016126f1576126f1612502565b5060010190565b818103818111156109f7576109f7612502565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561273357600080fd5b8151611ebb8161233f565b600060a08201878352602087602085015260a0604085015281875180845260c08601915060208901935060005b818110156127905784516001600160a01b03168352938301939183019160010161276b565b50506001600160a01b0396909616606085015250505060800152939250505056fea264697066735822122065bfd9ade012cb58fb0a2516ce2cfb300f1400e5ca293f23b7f7cc73b43dcb3064736f6c63430008160033

Deployed Bytecode Sourcemap

23589:13642:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27348:196;;;;;;;;;;;;;:::i;:::-;;3529:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4591:210;;;;;;;;;;-1:-1:-1;4591:210:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;4591:210:0;1023:187:1;35023:457:0;;;;;;;;;;-1:-1:-1;35023:457:0;;;;;:::i;:::-;;:::i;35751:240::-;;;;;;;;;;-1:-1:-1;35751:240:0;;;;;:::i;:::-;;:::i;24635:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1591:32:1;;;1573:51;;1561:2;1546:18;24635:51:0;1400:230:1;3857:108:0;;;;;;;;;;-1:-1:-1;3945:12:0;;3857:108;;;1781:25:1;;;1769:2;1754:18;3857:108:0;1635:177:1;36337:133:0;;;;;;;;;;-1:-1:-1;36337:133:0;;;;;:::i;:::-;;:::i;4809:529::-;;;;;;;;;;-1:-1:-1;4809:529:0;;;;;:::i;:::-;;:::i;3749:100::-;;;;;;;;;;-1:-1:-1;3832:9:0;;3749:100;;3832:9;;;;2420:36:1;;2408:2;2393:18;3749:100:0;2278:184:1;5346:297:0;;;;;;;;;;-1:-1:-1;5346:297:0;;;;;:::i;:::-;;:::i;36199:130::-;;;;;;;;;;-1:-1:-1;36199:130:0;;;;;:::i;:::-;;:::i;24693:38::-;;;;;;;;;;;;;;;25067:33;;;;;;;;;;-1:-1:-1;25067:33:0;;;;;;;;29376:126;;;;;;;;;;-1:-1:-1;29376:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;29466:28:0;29442:4;29466:28;;;:19;:28;;;;;;;;;29376:126;25297:28;;;;;;;;;;;;;;;;25481:35;;;;;;;;;;;;;;;;25147:31;;;;;;;;;;-1:-1:-1;25147:31:0;;;;;;;;;;;3973:177;;;;;;;;;;-1:-1:-1;3973:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;4124:18:0;4092:7;4124:18;;;;;;;;;;;;3973:177;25523:29;;;;;;;;;;;;;;;;27917:161;;;;;;;;;;-1:-1:-1;27917:161:0;;;;;:::i;:::-;;:::i;28782:200::-;;;;;;;;;;-1:-1:-1;28782:200:0;;;;;:::i;:::-;;:::i;13737:79::-;;;;;;;;;;-1:-1:-1;13802:6:0;;;;;-1:-1:-1;;;;;13802:6:0;13737:79;;13951:145;;;;;;;;;;;;;:::i;36087:104::-;;;;;;;;;;-1:-1:-1;36087:104:0;;;;;:::i;:::-;;:::i;3637:::-;;;;;;;;;;;;;:::i;28276:304::-;;;;;;;;;;-1:-1:-1;28276:304:0;;;;;:::i;:::-;;:::i;5651:482::-;;;;;;;;;;-1:-1:-1;5651:482:0;;;;;:::i;:::-;;:::i;4158:216::-;;;;;;;;;;-1:-1:-1;4158:216:0;;;;;:::i;:::-;;:::i;28990:181::-;;;;;;;;;;-1:-1:-1;28990:181:0;;;;;:::i;:::-;;:::i;25684:57::-;;;;;;;;;;-1:-1:-1;25684:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;25107:33;;;;;;;;;;-1:-1:-1;25107:33:0;;;;;;;;;;;28086:182;;;;;;;;;;-1:-1:-1;28086:182:0;;;;;:::i;:::-;;:::i;24958:29::-;;;;;;;;;;;;;;;;25436:38;;;;;;;;;;;;;;;;35488:255;;;;;;;;;;-1:-1:-1;35488:255:0;;;;;:::i;:::-;;:::i;25254:36::-;;;;;;;;;;-1:-1:-1;25254:36:0;;;;;;;;4382:201;;;;;;;;;;-1:-1:-1;4382:201:0;;;;;:::i;:::-;-1:-1:-1;;;;;4548:18:0;;;4516:7;4548:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;4382:201;25363:23;;;;;;;;;;;;;;;;25620:57;;;;;;;;;;-1:-1:-1;25620:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;24994:33;;;;;;;;;;;;;;;;25334:22;;;;;;;;;;;;;;;;27777:132;;;;;;;;;;;;;:::i;29179:189::-;;;;;;;;;;-1:-1:-1;29179:189:0;;;;;:::i;:::-;;:::i;14104:281::-;;;;;;;;;;-1:-1:-1;14104:281:0;;;;;:::i;:::-;;:::i;24738:66::-;;;;;;;;;;-1:-1:-1;24738:66:0;;;;-1:-1:-1;;;;;24738:66:0;;;25034:24;;;;;;;;;;;;;;;;27348:196;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;;;;;;;;;27405:13:::1;::::0;::::1;::::0;::::1;;;27404:14;27396:41;;;::::0;-1:-1:-1;;;27396:41:0;;4553:2:1;27396:41:0::1;::::0;::::1;4535:21:1::0;4592:2;4572:18;;;4565:30;-1:-1:-1;;;4611:18:1;;;4604:44;4665:18;;27396:41:0::1;4351:338:1::0;27396:41:0::1;27448:13;:20:::0;;27495:12:::1;27479:13;:28:::0;-1:-1:-1;;27518:18:0;;;;;27348:196::o;3529:100::-;3583:13;3616:5;3609:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3529:100;:::o;4591:210::-;4710:4;4732:39;1517:10;4755:7;4764:6;4732:8;:39::i;:::-;-1:-1:-1;4789:4:0;4591:210;;;;;:::o;35023:457::-;13864:6;;35130:4;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;35208:7:::1;35187:13;3945:12:::0;;;3857:108;35187:13:::1;:17;::::0;35203:1:::1;35187:17;:::i;:::-;35186:29;;;;:::i;:::-;35174:8;:41;;35152:125;;;::::0;-1:-1:-1;;;35152:125:0;;5808:2:1;35152:125:0::1;::::0;::::1;5790:21:1::0;5847:2;5827:18;;;5820:30;5886:34;5866:18;;;5859:62;-1:-1:-1;;;5937:18:1;;;5930:32;5979:19;;35152:125:0::1;5606:398:1::0;35152:125:0::1;35346:6;35323:13;3945:12:::0;;;3857:108;35323:13:::1;:19;::::0;35339:3:::1;35323:19;:::i;:::-;35322:30;;;;:::i;:::-;35310:8;:42;;35288:122;;;::::0;-1:-1:-1;;;35288:122:0;;6211:2:1;35288:122:0::1;::::0;::::1;6193:21:1::0;6250:2;6230:18;;;6223:30;6289:32;6269:18;;;6262:60;6339:18;;35288:122:0::1;6009:354:1::0;35288:122:0::1;-1:-1:-1::0;35421:18:0::1;:29:::0;;;35468:4:::1;13934:1;35023:457:::0;;;:::o;35751:240::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;35882:6:::1;35860:13;3945:12:::0;;;3857:108;35860:13:::1;:18;::::0;35876:2:::1;35860:18;:::i;:::-;35859:29;;;;:::i;:::-;35846:8;:43;;35824:109;;;::::0;-1:-1:-1;;;35824:109:0;;6570:2:1;35824:109:0::1;::::0;::::1;6552:21:1::0;6609:2;6589:18;;;6582:30;-1:-1:-1;;;6628:18:1;;;6621:46;6684:18;;35824:109:0::1;6368:340:1::0;35824:109:0::1;3832:9:::0;;;;35968:14:::1;::::0;:2:::1;:14;:::i;:::-;35956:27;::::0;:8;:27:::1;:::i;:::-;35944:9;:39:::0;-1:-1:-1;35751:240:0:o;36337:133::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;36427:5:::1;36415:8;;:17;;36407:26;;;::::0;::::1;;36444:8;:18:::0;36337:133::o;4809:529::-;4949:4;4966:36;4976:6;4984:9;4995:6;4966:9;:36::i;:::-;-1:-1:-1;;;;;5042:19:0;;5015:24;5042:19;;;:11;:19;;;;;;;;1517:10;5042:33;;;;;;;;5108:26;;;;5086:116;;;;-1:-1:-1;;;5086:116:0;;8292:2:1;5086:116:0;;;8274:21:1;8331:2;8311:18;;;8304:30;8370:34;8350:18;;;8343:62;-1:-1:-1;;;8421:18:1;;;8414:38;8469:19;;5086:116:0;8090:404:1;5086:116:0;5238:57;5247:6;1517:10;5288:6;5269:16;:25;5238:8;:57::i;:::-;-1:-1:-1;5326:4:0;;4809:529;-1:-1:-1;;;;4809:529:0:o;5346:297::-;1517:10;5461:4;5555:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5555:34:0;;;;;;;;;;5461:4;;5483:130;;5533:7;;5555:47;;5592:10;;5555:47;:::i;:::-;5483:8;:130::i;36199:::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;36287:5:::1;36276:7;;:16;;36268:25;;;::::0;::::1;;36304:7;:17:::0;36199:130::o;27917:161::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28030:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;28030:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27917:161::o;28782:200::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;28922:14:::1;::::0;28889:48:::1;::::0;-1:-1:-1;;;;;28922:14:0;;::::1;::::0;28889:48;::::1;::::0;::::1;::::0;28922:14:::1;::::0;28889:48:::1;28948:14;:26:::0;;-1:-1:-1;;;;;;28948:26:0::1;-1:-1:-1::0;;;;;28948:26:0;;;::::1;::::0;;;::::1;::::0;;28782:200::o;13951:145::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;14039:6:::1;::::0;14018:40:::1;::::0;14055:1:::1;::::0;14039:6:::1;::::0;::::1;-1:-1:-1::0;;;;;14039:6:0::1;::::0;14018:40:::1;::::0;14055:1;;14018:40:::1;14069:6;:19:::0;;-1:-1:-1;;;;;;14069:19:0::1;::::0;;13951:145::o;36087:104::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;36160:11:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;36160:23:0;;::::1;::::0;;;::::1;::::0;;36087:104::o;3637:::-;3693:13;3726:7;3719:14;;;;;:::i;28276:304::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;28420:13:::1;-1:-1:-1::0;;;;;28412:21:0::1;:4;-1:-1:-1::0;;;;;28412:21:0::1;::::0;28390:128:::1;;;::::0;-1:-1:-1;;;28390:128:0;;8831:2:1;28390:128:0::1;::::0;::::1;8813:21:1::0;8870:2;8850:18;;;8843:30;8909:34;8889:18;;;8882:62;8980:27;8960:18;;;8953:55;9025:19;;28390:128:0::1;8629:421:1::0;28390:128:0::1;28531:41;28560:4;28566:5;28531:28;:41::i;:::-;28276:304:::0;;:::o;5651:482::-;1517:10;5771:4;5820:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;5820:34:0;;;;;;;;;;5887:35;;;;5865:122;;;;-1:-1:-1;;;5865:122:0;;9257:2:1;5865:122:0;;;9239:21:1;9296:2;9276:18;;;9269:30;9335:34;9315:18;;;9308:62;-1:-1:-1;;;9386:18:1;;;9379:35;9431:19;;5865:122:0;9055:401:1;5865:122:0;6023:67;1517:10;6046:7;6074:15;6055:16;:34;6023:8;:67::i;:::-;-1:-1:-1;6121:4:0;;5651:482;-1:-1:-1;;;5651:482:0:o;4158:216::-;4280:4;4302:42;1517:10;4326:9;4337:6;4302:9;:42::i;28990:181::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;29109:15:::1;::::0;29075:50:::1;::::0;-1:-1:-1;;;;;29109:15:0;;::::1;::::0;29075:50;::::1;::::0;::::1;::::0;29109:15:::1;::::0;29075:50:::1;29136:15;:27:::0;;-1:-1:-1;;;;;;29136:27:0::1;-1:-1:-1::0;;;;;29136:27:0;;;::::1;::::0;;;::::1;::::0;;28990:181::o;28086:182::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28171:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;28171:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28226:34;;1163:41:1;;;28226:34:0::1;::::0;1136:18:1;28226:34:0::1;;;;;;;28086:182:::0;;:::o;35488:255::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;35624:6:::1;35602:13;3945:12:::0;;;3857:108;35602:13:::1;:18;::::0;35618:2:::1;35602:18;:::i;:::-;35601:29;;;;:::i;:::-;35588:8;:43;;35566:114;;;::::0;-1:-1:-1;;;35566:114:0;;9663:2:1;35566:114:0::1;::::0;::::1;9645:21:1::0;9702:2;9682:18;;;9675:30;-1:-1:-1;;;9721:18:1;;;9714:51;9782:18;;35566:114:0::1;9461:345:1::0;35566:114:0::1;3832:9:::0;;;;35720:14:::1;::::0;:2:::1;:14;:::i;:::-;35708:27;::::0;:8;:27:::1;:::i;:::-;35691:14;:44:::0;-1:-1:-1;35488:255:0:o;27777:132::-;13864:6;;27837:4;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;-1:-1:-1;27854:17:0::1;:25:::0;;-1:-1:-1;;27854:25:0::1;::::0;;;27777:132;:::o;29179:189::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;29302:17:::1;::::0;29266:54:::1;::::0;-1:-1:-1;;;;;29302:17:0;;::::1;::::0;29266:54;::::1;::::0;::::1;::::0;29302:17:::1;::::0;29266:54:::1;29331:17;:29:::0;;-1:-1:-1;;;;;;29331:29:0::1;-1:-1:-1::0;;;;;29331:29:0;;;::::1;::::0;;;::::1;::::0;;29179:189::o;14104:281::-;13864:6;;-1:-1:-1;;;;;13864:6:0;;;;;1517:10;13864:22;13856:67;;;;-1:-1:-1;;;13856:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14207:22:0;::::1;14185:110;;;::::0;-1:-1:-1;;;14185:110:0;;10013:2:1;14185:110:0::1;::::0;::::1;9995:21:1::0;10052:2;10032:18;;;10025:30;10091:34;10071:18;;;10064:62;-1:-1:-1;;;10142:18:1;;;10135:36;10188:19;;14185:110:0::1;9811:402:1::0;14185:110:0::1;14332:6;::::0;14311:38:::1;::::0;-1:-1:-1;;;;;14311:38:0;;::::1;::::0;14332:6:::1;::::0;::::1;;::::0;14311:38:::1;::::0;;;::::1;14360:6;:17:::0;;-1:-1:-1;;;;;14360:17:0;;::::1;;;-1:-1:-1::0;;;;;;14360:17:0;;::::1;::::0;;;::::1;::::0;;14104:281::o;7925:380::-;-1:-1:-1;;;;;8061:19:0;;8053:68;;;;-1:-1:-1;;;8053:68:0;;10420:2:1;8053:68:0;;;10402:21:1;10459:2;10439:18;;;10432:30;10498:34;10478:18;;;10471:62;-1:-1:-1;;;10549:18:1;;;10542:34;10593:19;;8053:68:0;10218:400:1;8053:68:0;-1:-1:-1;;;;;8140:21:0;;8132:68;;;;-1:-1:-1;;;8132:68:0;;10825:2:1;8132:68:0;;;10807:21:1;10864:2;10844:18;;;10837:30;10903:34;10883:18;;;10876:62;-1:-1:-1;;;10954:18:1;;;10947:32;10996:19;;8132:68:0;10623:398:1;8132:68:0;-1:-1:-1;;;;;8213:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;8265:32;;1781:25:1;;;8265:32:0;;1754:18:1;8265:32:0;;;;;;;7925:380;;;:::o;29510:4078::-;-1:-1:-1;;;;;29642:18:0;;29634:68;;;;-1:-1:-1;;;29634:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29721:16:0;;29713:64;;;;-1:-1:-1;;;29713:64:0;;;;;;;:::i;:::-;29794:6;29804:1;29794:11;29790:93;;29822:28;29838:4;29844:2;29848:1;29822:15;:28::i;:::-;29510:4078;;;:::o;29790:93::-;29899:14;;;;29895:2261;;;13802:6;;-1:-1:-1;;;;;29952:15:0;;;13802:6;;;;;29952:15;;;;:49;;-1:-1:-1;13802:6:0;;-1:-1:-1;;;;;29988:13:0;;;13802:6;;;;;29988:13;;29952:49;:86;;;;-1:-1:-1;;;;;;30022:16:0;;;;29952:86;:128;;;;-1:-1:-1;;;;;;30059:21:0;;30073:6;30059:21;;29952:128;:158;;;;-1:-1:-1;30102:8:0;;-1:-1:-1;;;30102:8:0;;;;30101:9;29952:158;29930:2215;;;30150:13;;;;;;;30145:223;;-1:-1:-1;;;;;30222:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;30251:23:0;;;;;;:19;:23;;;;;;;;30222:52;30188:160;;;;-1:-1:-1;;;30188:160:0;;12038:2:1;30188:160:0;;;12020:21:1;12077:2;12057:18;;;12050:30;-1:-1:-1;;;12096:18:1;;;12089:52;12158:18;;30188:160:0;11836:346:1;30188:160:0;30392:17;;;;30388:597;;;13802:6;;-1:-1:-1;;;;;30464:13:0;;;13802:6;;;;;30464:13;;;;:72;;;30520:15;-1:-1:-1;;;;;30506:30:0;:2;-1:-1:-1;;;;;30506:30:0;;;30464:72;:129;;;;;30579:13;-1:-1:-1;;;;;30565:28:0;:2;-1:-1:-1;;;;;30565:28:0;;;30464:129;30434:532;;;30707:9;30682:35;;;;:24;:35;;;;;;30720:12;-1:-1:-1;30644:221:0;;;;-1:-1:-1;;;30644:221:0;;12389:2:1;30644:221:0;;;12371:21:1;12428:2;12408:18;;;12401:30;12467:34;12447:18;;;12440:62;12538:34;12518:18;;;12511:62;-1:-1:-1;;;12589:19:1;;;12582:40;12639:19;;30644:221:0;12187:477:1;30644:221:0;30917:9;30892:35;;;;:24;:35;;;;;30930:12;30892:50;;30434:532;-1:-1:-1;;;;;31055:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;31112:29:0;;;;;;:25;:29;;;;;;;;31111:30;31055:86;31029:1101;;;31228:14;;31218:6;:24;;31184:157;;;;-1:-1:-1;;;31184:157:0;;12871:2:1;31184:157:0;;;12853:21:1;12910:2;12890:18;;;12883:30;12949:34;12929:18;;;12922:62;-1:-1:-1;;;13000:18:1;;;12993:45;13055:19;;31184:157:0;12669:411:1;31184:157:0;31424:9;;-1:-1:-1;;;;;4124:18:0;;4092:7;4124:18;;;;;;;;;;;31398:22;;:6;:22;:::i;:::-;:35;;31364:140;;;;-1:-1:-1;;;31364:140:0;;13287:2:1;31364:140:0;;;13269:21:1;13326:2;13306:18;;;13299:30;-1:-1:-1;;;13345:18:1;;;13338:49;13404:18;;31364:140:0;13085:343:1;31364:140:0;31029:1101;;;-1:-1:-1;;;;;31598:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;31653:31:0;;;;;;:25;:31;;;;;;;;31652:32;31598:86;31572:558;;;31771:14;;31761:6;:24;;31727:158;;;;-1:-1:-1;;;31727:158:0;;13635:2:1;31727:158:0;;;13617:21:1;13674:2;13654:18;;;13647:30;13713:34;13693:18;;;13686:62;-1:-1:-1;;;13764:18:1;;;13757:46;13820:19;;31727:158:0;13433:412:1;31572:558:0;-1:-1:-1;;;;;31916:29:0;;;;;;:25;:29;;;;;;;;31911:219;;32030:9;;-1:-1:-1;;;;;4124:18:0;;4092:7;4124:18;;;;;;;;;;;32004:22;;:6;:22;:::i;:::-;:35;;31970:140;;;;-1:-1:-1;;;31970:140:0;;13287:2:1;31970:140:0;;;13269:21:1;13326:2;13306:18;;;13299:30;-1:-1:-1;;;13345:18:1;;;13338:49;13404:18;;31970:140:0;13085:343:1;31970:140:0;32217:4;32168:28;4124:18;;;;;;;;;;;32275;;32251:42;;;;;;;32324:35;;-1:-1:-1;32348:11:0;;;;;;;32324:35;:61;;;;-1:-1:-1;32377:8:0;;-1:-1:-1;;;32377:8:0;;;;32376:9;32324:61;:110;;;;-1:-1:-1;;;;;;32403:31:0;;;;;;:25;:31;;;;;;;;32402:32;32324:110;:153;;;;-1:-1:-1;;;;;;32452:25:0;;;;;;:19;:25;;;;;;;;32451:26;32324:153;:194;;;;-1:-1:-1;;;;;;32495:23:0;;;;;;:19;:23;;;;;;;;32494:24;32324:194;:242;;;;;32548:18;;32535:10;;:31;32324:242;32306:415;;;32593:8;:15;;-1:-1:-1;;;;32593:15:0;-1:-1:-1;;;32593:15:0;;;:8;32658:18;32623:55;;32632:45;;32636:20;;32632:3;:45::i;:::-;32623:8;:55::i;:::-;32693:8;:16;;-1:-1:-1;;;;32693:16:0;;;32306:415;32749:8;;-1:-1:-1;;;;;32774:25:0;;32733:12;32774:25;;;:19;:25;;;;;;32749:8;-1:-1:-1;;;32749:8:0;;;;;32748:9;;32774:25;;:52;;-1:-1:-1;;;;;;32803:23:0;;;;;;:19;:23;;;;;;;;32774:52;32770:100;;;-1:-1:-1;32853:5:0;32770:100;32882:12;32915:7;32911:518;;;-1:-1:-1;;;;;32964:29:0;;;;;;:25;:29;;;;;;;;:45;;;;;33008:1;32997:8;;:12;32964:45;32960:320;;;33037:32;33062:6;33037:20;33048:8;;33037:6;:10;;:20;;;;:::i;:::-;:24;;:32::i;:::-;33030:39;;32960:320;;;-1:-1:-1;;;;;33128:31:0;;;;;;:25;:31;;;;;;;;:46;;;;;33173:1;33163:7;;:11;33128:46;33124:156;;;33202:31;33226:6;33202:19;33213:7;;33202:6;:10;;:19;;;;:::i;:31::-;33252:10;:12;;33195:38;;-1:-1:-1;33252:10:0;:12;;;:::i;:::-;;;;;;33124:156;33300:8;;33296:91;;33329:42;33345:4;33359;33366;33329:15;:42::i;:::-;33403:14;33413:4;33403:14;;:::i;:::-;;;32911:518;33441:33;33457:4;33463:2;33467:6;33441:15;:33::i;:::-;33505:15;;33491:10;;:29;;:47;;;;-1:-1:-1;33524:14:0;;;;33491:47;33487:94;;;27611:14;:22;;-1:-1:-1;;27611:22:0;;;27654:5;27644:7;:15;27681:5;27670:8;:16;33487:94;29623:3965;;;;29510:4078;;;:::o;28588:186::-;-1:-1:-1;;;;;28671:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;28671:39:0;;;;;;;;;;28726:40;;28671:39;;:31;28726:40;;;28588:186;;:::o;6141:770::-;-1:-1:-1;;;;;6281:20:0;;6273:70;;;;-1:-1:-1;;;6273:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6362:23:0;;6354:71;;;;-1:-1:-1;;;6354:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6522:17:0;;6498:21;6522:17;;;;;;;;;;;6572:23;;;;6550:111;;;;-1:-1:-1;;;6550:111:0;;14325:2:1;6550:111:0;;;14307:21:1;14364:2;14344:18;;;14337:30;14403:34;14383:18;;;14376:62;-1:-1:-1;;;14454:18:1;;;14447:36;14500:19;;6550:111:0;14123:402:1;6550:111:0;-1:-1:-1;;;;;6697:17:0;;;:9;:17;;;;;;;;;;;6717:22;;;6697:42;;6761:20;;;;;;;;:30;;6733:6;;6697:9;6761:30;;6733:6;;6761:30;:::i;:::-;;;;;;;;6826:9;-1:-1:-1;;;;;6809:35:0;6818:6;-1:-1:-1;;;;;6809:35:0;;6837:6;6809:35;;;;1781:25:1;;1769:2;1754:18;;1635:177;6809:35:0;;;;;;;;6262:649;6141:770;;;:::o;33596:107::-;33653:7;33685:1;33681;:5;33680:15;;33694:1;33680:15;;;33690:1;33680:15;33673:22;33596:107;-1:-1:-1;;;33596:107:0:o;34194:821::-;34247:12;34276:6;34286:1;34276:11;34272:50;;34304:7;34194:821;:::o;34272:50::-;34363:6;34380:36;34363:6;34380:16;:36::i;:::-;34448:21;34427:18;34571:4;34540:27;24552:3;34448:21;34540:27;:::i;:::-;34539:36;;;;:::i;:::-;34514:61;-1:-1:-1;34586:23:0;34645:4;34613:28;24614:3;34613:10;:28;:::i;:::-;34612:37;;;;:::i;:::-;34586:63;-1:-1:-1;34660:25:0;34586:63;34688:27;34701:14;34688:10;:27;:::i;:::-;:45;;;;:::i;:::-;34768:14;;34760:55;;34660:73;;-1:-1:-1;;;;;;34768:14:0;;34796;;34760:55;;;;34796:14;34768;34760:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34848:15:0;;34840:57;;34746:69;;-1:-1:-1;;;;;;34848:15:0;;34877;;34840:57;;;;34877:15;34848;34840:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34930:17:0;;34922:85;;34826:71;;-1:-1:-1;;;;;;34930:17:0;;34961;;34922:85;;;;34961:17;34930;34922:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;34194:821:0:o;9168:250::-;9226:7;9250:1;9255;9250:6;9246:47;;-1:-1:-1;9280:1:0;9273:8;;9246:47;9305:9;9317:5;9321:1;9317;:5;:::i;:::-;9305:17;-1:-1:-1;9350:1:0;9341:5;9345:1;9305:17;9341:5;:::i;:::-;:10;9333:56;;;;-1:-1:-1;;;9333:56:0;;14942:2:1;9333:56:0;;;14924:21:1;14981:2;14961:18;;;14954:30;15020:34;15000:18;;;14993:62;-1:-1:-1;;;15071:18:1;;;15064:31;15112:19;;9333:56:0;14740:397:1;9426:132:0;9484:7;9511:39;9515:1;9518;9511:39;;;;;;;;;;;;;;;;;:3;:39::i;33711:475::-;33801:16;;;33815:1;33801:16;;;;;;;;33777:21;;33801:16;;;;;;;;;;-1:-1:-1;33801:16:0;33777:40;;33846:4;33828;33833:1;33828:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;33828:23:0;;;-1:-1:-1;;;;;33828:23:0;;;;;33872:15;-1:-1:-1;;;;;33872:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33862:4;33867:1;33862:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;33862:32:0;;;-1:-1:-1;;;;;33862:32:0;;;;;33907:62;33924:4;33939:15;33957:11;33907:8;:62::i;:::-;33982:196;;-1:-1:-1;;;33982:196:0;;-1:-1:-1;;;;;33982:15:0;:66;;;;:196;;34063:11;;34089:1;;34105:4;;34132;;34152:15;;33982:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33766:420;33711:475;:::o;9566:312::-;9686:7;9721:12;9714:5;9706:28;;;;-1:-1:-1;;;9706:28:0;;;;;;;;:::i;:::-;-1:-1:-1;9745:9:0;9757:5;9761:1;9757;:5;:::i;:::-;9745:17;9566:312;-1:-1:-1;;;;;9566:312:0:o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;622:70;567:131;:::o;703:315::-;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:180::-;1274:6;1327:2;1315:9;1306:7;1302:23;1298:32;1295:52;;;1343:1;1340;1333:12;1295:52;-1:-1:-1;1366:23:1;;1215:180;-1:-1:-1;1215:180:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2675:247::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:31;2886:5;2861:31;:::i;2927:160::-;2992:20;;3048:13;;3041:21;3031:32;;3021:60;;3077:1;3074;3067:12;3092:315;3157:6;3165;3218:2;3206:9;3197:7;3193:23;3189:32;3186:52;;;3234:1;3231;3224:12;3186:52;3273:9;3260:23;3292:31;3317:5;3292:31;:::i;:::-;3342:5;-1:-1:-1;3366:35:1;3397:2;3382:18;;3366:35;:::i;:::-;3356:45;;3092:315;;;;;:::o;3412:180::-;3468:6;3521:2;3509:9;3500:7;3496:23;3492:32;3489:52;;;3537:1;3534;3527:12;3489:52;3560:26;3576:9;3560:26;:::i;3597:388::-;3665:6;3673;3726:2;3714:9;3705:7;3701:23;3697:32;3694:52;;;3742:1;3739;3732:12;3694:52;3781:9;3768:23;3800:31;3825:5;3800:31;:::i;:::-;3850:5;-1:-1:-1;3907:2:1;3892:18;;3879:32;3920:33;3879:32;3920:33;:::i;:::-;3972:7;3962:17;;;3597:388;;;;;:::o;3990:356::-;4192:2;4174:21;;;4211:18;;;4204:30;4270:34;4265:2;4250:18;;4243:62;4337:2;4322:18;;3990:356::o;4694:380::-;4773:1;4769:12;;;;4816;;;4837:61;;4891:4;4883:6;4879:17;4869:27;;4837:61;4944:2;4936:6;4933:14;4913:18;4910:38;4907:161;;4990:10;4985:3;4981:20;4978:1;4971:31;5025:4;5022:1;5015:15;5053:4;5050:1;5043:15;4907:161;;4694:380;;;:::o;5079:127::-;5140:10;5135:3;5131:20;5128:1;5121:31;5171:4;5168:1;5161:15;5195:4;5192:1;5185:15;5211:168;5284:9;;;5315;;5332:15;;;5326:22;;5312:37;5302:71;;5353:18;;:::i;5384:217::-;5424:1;5450;5440:132;;5494:10;5489:3;5485:20;5482:1;5475:31;5529:4;5526:1;5519:15;5557:4;5554:1;5547:15;5440:132;-1:-1:-1;5586:9:1;;5384:217::o;6713:416::-;6802:1;6839:5;6802:1;6853:270;6874:7;6864:8;6861:21;6853:270;;;6933:4;6929:1;6925:6;6921:17;6915:4;6912:27;6909:53;;;6942:18;;:::i;:::-;6992:7;6982:8;6978:22;6975:55;;;7012:16;;;;6975:55;7091:22;;;;7051:15;;;;6853:270;;;6857:3;6713:416;;;;;:::o;7134:806::-;7183:5;7213:8;7203:80;;-1:-1:-1;7254:1:1;7268:5;;7203:80;7302:4;7292:76;;-1:-1:-1;7339:1:1;7353:5;;7292:76;7384:4;7402:1;7397:59;;;;7470:1;7465:130;;;;7377:218;;7397:59;7427:1;7418:10;;7441:5;;;7465:130;7502:3;7492:8;7489:17;7486:43;;;7509:18;;:::i;:::-;-1:-1:-1;;7565:1:1;7551:16;;7580:5;;7377:218;;7679:2;7669:8;7666:16;7660:3;7654:4;7651:13;7647:36;7641:2;7631:8;7628:16;7623:2;7617:4;7614:12;7610:35;7607:77;7604:159;;;-1:-1:-1;7716:19:1;;;7748:5;;7604:159;7795:34;7820:8;7814:4;7795:34;:::i;:::-;7865:6;7861:1;7857:6;7853:19;7844:7;7841:32;7838:58;;;7876:18;;:::i;:::-;7914:20;;7134:806;-1:-1:-1;;;7134:806:1:o;7945:140::-;8003:5;8032:47;8073:4;8063:8;8059:19;8053:4;8032:47;:::i;8499:125::-;8564:9;;;8585:10;;;8582:36;;;8598:18;;:::i;11026:401::-;11228:2;11210:21;;;11267:2;11247:18;;;11240:30;11306:34;11301:2;11286:18;;11279:62;-1:-1:-1;;;11372:2:1;11357:18;;11350:35;11417:3;11402:19;;11026:401::o;11432:399::-;11634:2;11616:21;;;11673:2;11653:18;;;11646:30;11712:34;11707:2;11692:18;;11685:62;-1:-1:-1;;;11778:2:1;11763:18;;11756:33;11821:3;11806:19;;11432:399::o;13850:135::-;13889:3;13910:17;;;13907:43;;13930:18;;:::i;:::-;-1:-1:-1;13977:1:1;13966:13;;13850:135::o;13990:128::-;14057:9;;;14078:11;;;14075:37;;;14092:18;;:::i;15274:127::-;15335:10;15330:3;15326:20;15323:1;15316:31;15366:4;15363:1;15356:15;15390:4;15387:1;15380:15;15406:251;15476:6;15529:2;15517:9;15508:7;15504:23;15500:32;15497:52;;;15545:1;15542;15535:12;15497:52;15577:9;15571:16;15596:31;15621:5;15596:31;:::i;15662:980::-;15924:4;15972:3;15961:9;15957:19;16003:6;15992:9;15985:25;16029:2;16067:6;16062:2;16051:9;16047:18;16040:34;16110:3;16105:2;16094:9;16090:18;16083:31;16134:6;16169;16163:13;16200:6;16192;16185:22;16238:3;16227:9;16223:19;16216:26;;16277:2;16269:6;16265:15;16251:29;;16298:1;16308:195;16322:6;16319:1;16316:13;16308:195;;;16387:13;;-1:-1:-1;;;;;16383:39:1;16371:52;;16478:15;;;;16443:12;;;;16419:1;16337:9;16308:195;;;-1:-1:-1;;;;;;;16559:32:1;;;;16554:2;16539:18;;16532:60;-1:-1:-1;;;16623:3:1;16608:19;16601:35;16520:3;15662:980;-1:-1:-1;;;15662:980:1:o

Swarm Source

ipfs://65bfd9ade012cb58fb0a2516ce2cfb300f1400e5ca293f23b7f7cc73b43dcb30
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.