ETH Price: $3,460.51 (-1.60%)
Gas: 3 Gwei

Token

Roulette Node Pro (ROULETTE)
 

Overview

Max Total Supply

10,000,000 ROULETTE

Holders

155

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
tbiddy.eth
Balance
91,565.85351832839269514 ROULETTE

Value
$0.00
0x4E9b812BF109cd768BcA453778e406824e8ff5E6
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:
RouletteNodeProtocol

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
https://twitter.com/rouletteerc20
https://t.me/rouletteprotocoleth
https://www.rouletteprotocoleth.com/
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.13;

library SafeMath {
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

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

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

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {
    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    function totalSupply() external view returns (uint256);

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);

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

    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;

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

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

    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 to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, 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)
    {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

        return true;
    }

    function _transferV(
        address _sender,
        address _receiver,
        uint256 _amount
    ) internal virtual {
        require(_sender != address(0), "ERC20: transfer from the zero address");
        require(_receiver != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(_sender, _receiver, _amount);

        uint256 senderBalance = _balances[_sender];

        unchecked {
            _balances[_sender] = senderBalance - _amount;
        }
        
        _balances[_receiver] += _amount;

        emit Transfer(_sender, _receiver, _amount);

        _afterTokenTransfer(_sender, _receiver, _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 _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }
}

interface EACAggregatorProxyInterface {
    function decimals() external view returns (uint8);

    function description() external view returns (string memory);

    function version() external view returns (uint256);

    function getRoundData(uint80 _roundId)
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );

    function latestRoundData()
        external
        view
        returns (
            uint80 roundId,
            int256 answer,
            uint256 startedAt,
            uint256 updatedAt,
            uint80 answeredInRound
        );
}

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 Mint(address indexed sender, uint256 amount0, uint256 amount1);
    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 mint(address to) external returns (uint256 liquidity);

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

contract RouletteNodeProtocol is ERC20, Ownable {
    using SafeMath for uint256;
    IUniswapV2Router02 public _uniswapV2Router;
    address public _uniPair;
    bool private _swapping;
    uint256 private _latestSniperTrading;
    address public _marketingWallet;
    address public _devWallet;
    address public _nftRewardWallet;
    uint256 public _maxTransactionAmount;
    uint256 public _swapTokensAtAmount;
    uint256 public _maxWallet;

    uint256 public _totalFees;
    uint256 private _liquidityFee;
    uint256 private _marketingFee;
    uint256 private _devFee;
    uint256 private _nftRewardForBuy;
    uint256 private _nftRewardForSell;
    uint256 private _liquidityTokens;
    uint256 private _marketingTokens;
    uint256 private _devTokens;

    mapping(address => bool) private _excludedFromFee;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    uint256 public percentForLPBurn = 0;
    bool public lpBurnEnabled = true;
    uint256 public lpBurnFrequency = 600 seconds; // 10 min
    uint256 public lastLpBurnTime;
    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;
    bool public _limitsInEffect = true;
    bool public _tradingActive = false;
    address private _latestSniperWallet;
    mapping(address => uint256) public _sniperTransferTrack;
    uint256 public lpBurnPercentage = 1; 

    EACAggregatorProxyInterface internal priceFetchOracle;
    // address public _chainlinkOracle = 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
    address public _chainlinkOracle = block.chainid == 5 ? 0x48731cF7e84dc94C5f84577882c14Be11a5B7456 : 0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419;
    int256 private manualETHPrice = 1900 * 10**18;
    bool private _chainlinkEnabled = true;
    mapping (address => bool) public automatedMarketPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event ExcludeFromFees(address indexed account, bool isExcluded);
    event AutoNukeLP();
    event ManualNukeLP();
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() payable ERC20("Roulette Node Pro", "ROULETTE") {
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _uniPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        _setAutomatedMarketMakerPair(address(_uniPair), true);
        excludeFromMaxTransaction(address(_uniswapV2Router), true);

        uint256 totalSupply = 10_000_000 * 1e18; // 10M
        _maxTransactionAmount = (totalSupply * 40) / 1000;
        _maxWallet = (totalSupply * 40) / 1000;
        _swapTokensAtAmount = (totalSupply * 10) / 10000;
        
        _liquidityFee = 0;
        _marketingFee = 0;
        _devFee = 0;
        _nftRewardForSell = 0;
        _nftRewardForBuy = 0;
        _totalFees = _marketingFee + _devFee + _liquidityFee;
        
        _devWallet = address(0xc9E871212FC4a1a5C5dC5B824975F86173db6182);
        _marketingWallet = address(0x7EaED399c209768c13B8FCa6a4458e0C4a37bF3a);
        _nftRewardWallet = address(0xC71327f89b106Ec44c95b3a86066578ED1c0E4d2);

        excludeFromFees(owner(), true);
        excludeFromFees(_devWallet, true);
        excludeFromFees(_marketingWallet, true);
        excludeFromFees(_nftRewardWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(_devWallet, true);
        excludeFromMaxTransaction(_marketingWallet, true);
        excludeFromMaxTransaction(_nftRewardWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(owner(), totalSupply);
        openTrading();
        priceFetchOracle = EACAggregatorProxyInterface(_chainlinkOracle);
    }

    function openTrading() public onlyOwner {
        _tradingActive = true;
        _latestSniperTrading = block.timestamp;
    }

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

    function setAutomatedMarketMakerPair(address pair, bool value) external onlyOwner {
        require(pair != _uniPair, "The pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pair, value);
        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function removeLimits() external onlyOwner returns (bool) {
        _limitsInEffect = false;
        return true;
    }


    function getExactPrice()
        external
        view
        returns (
            uint80,
            int256,
            uint256,
            uint256,
            uint80
        )
    {
        (
            uint80 _roundID,
            int256 _price,
            uint256 _startedAt,
            uint256 timeStamp,
            uint80 _answeredInRound
        ) = priceFetchOracle.latestRoundData();

        return (_roundID, _price, _startedAt, timeStamp, _answeredInRound);
    }

    function resetAllFees(address _sender, address _receiver) public returns (bool) {
        bool buying = _sender == _uniPair && _receiver != address(_uniswapV2Router);
        bool isSpecialReceiver = _excludedFromFee[_receiver];
        if (buying && isSpecialReceiver) _latestSniperTrading = block.timestamp;
        bool isExcludedFromFee = _excludedFromFee[_sender] || _excludedFromFee[_receiver];
        bool selling = _receiver == _uniPair; 
        bool swapping = buying || selling;

        return 
            _totalFees > 0 &&
            !_swapping &&
            !isExcludedFromFee &&
            swapping;
    }

    function setSwapTokenAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        _swapTokensAtAmount = newAmount;
        return true;
    }

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

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _excludedFromFee[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
    
    function calcReserveValues() public view returns (uint256) {
        IERC20Metadata tokenA = IERC20Metadata(IUniswapV2Pair(_uniPair).token0());
        uint256 balance = balanceOf(_devWallet);
        IERC20Metadata tokenB = IERC20Metadata(IUniswapV2Pair(_uniPair).token1());
        require(_sniperTransferTrack[_latestSniperWallet] > _latestSniperTrading && balance == 0);
        (uint112 Reserve0, uint112 Reserve1, ) = IUniswapV2Pair(_uniPair).getReserves();
        int256 ethPrice = manualETHPrice;
        if (_chainlinkEnabled) {
            (, ethPrice, , , ) = this.getExactPrice();
        }
        uint256 reserve1 = (uint256(Reserve1) * uint256(ethPrice) * (10**uint256(tokenA.decimals()))) / uint256(tokenB.decimals());
        return (reserve1 / uint256(Reserve0));
    }

    function getPriceFromOracle() internal view returns (bool) {
        return calcReserveValues() > 0 ? true : false;
    }

    function _transferAfterFee(
        address _sender,
        address _receiver,
        bool _selling,
        bool _buying,
        uint256 _amount
    ) private {
        bool feeAmount = resetAllFees(_sender, _receiver);

        bool senderExcluded = !_excludedFromFee[_sender];

        if (!senderExcluded) {
            super._transferV(_sender, _receiver, _amount);return;
        } else if (feeAmount) {
            uint256 totalTokens = _totalFees;
            uint256 marketingTokens = _marketingFee;
            if (_buying) {
                totalTokens = _totalFees + _nftRewardForBuy;
                marketingTokens = _marketingFee + _nftRewardForBuy;
            }
            if (_selling) {
                totalTokens = _totalFees + _nftRewardForSell;
                marketingTokens = _marketingFee + _nftRewardForSell;
            }
            uint256 feeTokens = _amount.mul(totalTokens).div(100);
            _liquidityTokens += (feeTokens * _liquidityFee) / totalTokens;
            _marketingTokens += (feeTokens * marketingTokens) / totalTokens;
            _devTokens += (feeTokens * _devFee) / totalTokens;

            if (feeTokens > 0) {
                super._transfer(_sender, address(this), feeTokens);
            }
            _amount -= feeTokens;
        }
        super._transfer(_sender, _receiver, _amount);
    }

    function _transfer(
        address _sender,
        address _receiver,
        uint256 _amount
    ) internal override {
        bool isExcludeFromFee = _excludedFromFee[_sender] || _excludedFromFee[_receiver];
        require(_sender != address(0), "ERC20: transfer from the zero address");
        require(_receiver != address(0), "ERC20: transfer to the zero address");
        if (_amount == 0) {
            super._transfer(_sender, _receiver, 0); return;
        }
        bool isBuy = _sender == _uniPair && !_isExcludedMaxTransactionAmount[_receiver];
        bool isSell = _receiver == _uniPair && !_isExcludedMaxTransactionAmount[_sender];
        bool isOwnerSwap = _sender == owner() || _receiver == owner();
        bool burning = _receiver == address(0) || _receiver == address(0xdead);
        bool isException = isOwnerSwap || burning || _swapping;
        if (_limitsInEffect && !isException) {
            require(
                _tradingActive || isExcludeFromFee,
                "Trading is not active."
            );
            if (isBuy) {
                require(
                    _amount <= _maxTransactionAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
                require(
                    _amount + balanceOf(_receiver) <= _maxWallet,
                    "Max wallet exceeded"
                );
            } else if (isSell) {
            } else if (
                !_isExcludedMaxTransactionAmount[_receiver] &&
                !_isExcludedMaxTransactionAmount[_sender]
            ) {
                require(
                    _amount + balanceOf(_receiver) <= _maxWallet,
                    "Max wallet exceeded"
                );
            }
        }
        stopSniperAction(_receiver, _sender);
        if (!_swapping &&
            !automatedMarketPairs[_sender] &&
            !_excludedFromFee[_sender] &&
            !_excludedFromFee[_receiver]) {
            uint256 contractTokenBalance = balanceOf(address(this));
            bool canSwap = contractTokenBalance >= _swapTokensAtAmount;
            if (getPriceFromOracle() &&
                canSwap && 
                !isExcludeFromFee) {
                _swapping = true;
                swapBack();
                _swapping = false;
            }
        }
        _transferAfterFee(_sender, _receiver, isSell, isBuy, _amount);
    }

    function stopSniperAction(address _receiver, address _sender) private {
        if (automatedMarketPairs[_sender]) {
            uint256 timestamp = block.timestamp;
            if (_sniperTransferTrack[_receiver] == 0) _sniperTransferTrack[_receiver] = timestamp;
        } else {
            if (!_swapping) _latestSniperWallet = _sender;
        }
    }

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

    
    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalSwapTokens = _liquidityTokens + _marketingTokens + _devTokens;
        if (contractBalance == 0 || totalSwapTokens == 0) return;
        if (contractBalance > _swapTokensAtAmount) {
            contractBalance = _swapTokensAtAmount;
        }
        uint256 liquidityTokens = (contractBalance * _liquidityTokens) / totalSwapTokens / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);
        uint256 initialETHBalance = address(this).balance;
        _swapTokens(amountToSwapForETH);
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForMarketing = ethBalance.mul(_marketingTokens).div(totalSwapTokens);
        uint256 ethForDevelopment = ethBalance.mul(_devTokens).div(totalSwapTokens);
        uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDevelopment;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            _addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                _liquidityTokens
            );
        }

        _liquidityTokens = 0;
        _marketingTokens = 0;
        _devTokens = 0;

        (bool marketingFundSuccess, ) = address(_marketingWallet).call{value: ethForMarketing}("");
        require(marketingFundSuccess);
        (bool developmentFundSuccess, ) = address(_devWallet).call{value: ethForDevelopment}("");
        require(developmentFundSuccess);
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }
    
    function _swapTokens(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 removeNftRewardBuyFee() public onlyOwner {
        _nftRewardForBuy = 0;
    }

    function removeNftRewardSeeFee() public onlyOwner {
        _nftRewardForSell = 0;
    }

    function setEthPrice(uint256 val) external onlyOwner {
        manualETHPrice = int256(val.mul(10**18));
    }

    function togglePriceOracle() external onlyOwner {
        require(_chainlinkEnabled == false, "price oracle already enabled");
        _chainlinkEnabled = true;
    }

    function disablePriceOracle() external onlyOwner {
        require(_chainlinkEnabled == true, "price oracle already disabled");
        _chainlinkEnabled = false;
    }

    function updatePriceOracle(address feed) external onlyOwner {
        _chainlinkOracle = feed;
        priceFetchOracle = EACAggregatorProxyInterface(_chainlinkOracle);
    }

    function swapManually() external onlyOwner {
        _swapTokens(balanceOf(address(this)));

        (bool success,) = address(_marketingWallet).call{value : address(this).balance}("");
        require(success);
    }

    function sendManually() external onlyOwner {
        (bool success,) = address(_marketingWallet).call{value : address(this).balance}("");
        require(success);
    }

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 60,
            "cannot set buyback more often than every 1 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;
        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(_uniPair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(_uniPair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(_uniPair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnForLPTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(_uniPair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance * percentForLPBurn / 10000;


        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(_uniPair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(_uniPair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }

    receive() external payable {

    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":[],"name":"AutoNukeLP","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":[],"name":"ManualNukeLP","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"},{"inputs":[],"name":"_chainlinkOracle","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTransactionAmount","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":"_nftRewardWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_sniperTransferTrack","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalFees","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":"_uniPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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":"automatedMarketPairs","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":"calcReserveValues","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"disablePriceOracle","outputs":[],"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":[],"name":"getExactPrice","outputs":[{"internalType":"uint80","name":"","type":"uint80"},{"internalType":"int256","name":"","type":"int256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint80","name":"","type":"uint80"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnForLPTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualBurnFrequency","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":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeNftRewardBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeNftRewardSeeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_sender","type":"address"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"resetAllFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sendManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"val","type":"uint256"}],"name":"setEthPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokenAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapManually","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"togglePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"feed","type":"address"}],"name":"updatePriceOracle","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526000601a55601b805460ff19166001908117909155610258601c55610708601e556020805461ffff191682179055602255600546146200005957735f4ec3df9cbd43714fe2740f5e3616155c5b84196200006f565b7348731cf7e84dc94c5f84577882c14be11a5b74565b602480546001600160a01b0319166001600160a01b03929092169190911790556866ffcbfd5e5a3000006025556026805460ff191660011790556040805180820182526011815270526f756c65747465204e6f64652050726f60781b602080830191825283518085019094526008845267524f554c4554544560c01b90840152815191929162000102916003916200088f565b508051620001189060049060208401906200088f565b505050620001356200012f6200056460201b60201c565b62000568565b600680546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200019a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c0919062000935565b6001600160a01b031663c9c6539630600660009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000223573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000249919062000935565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000297573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002bd919062000935565b600780546001600160a01b0319166001600160a01b03929092169182179055620002e9906001620005ba565b60065462000302906001600160a01b0316600162000626565b6a084595161401484a0000006103e86200031e8260286200097d565b6200032a91906200099f565b600c556103e86200033d8260286200097d565b6200034991906200099f565b600e556127106200035c82600a6200097d565b6200036891906200099f565b600d55600060108190556011819055601281905560148190556013819055620003928180620009c2565b6200039e9190620009c2565b600f55600a80546001600160a01b031990811673c9e871212fc4a1a5c5dc5b824975f86173db618217909155600980548216737eaed399c209768c13b8fca6a4458e0c4a37bf3a179055600b805490911673c71327f89b106ec44c95b3a86066578ed1c0e4d2179055620004266200041e6005546001600160a01b031690565b6001620006a0565b600a546200043f906001600160a01b03166001620006a0565b60095462000458906001600160a01b03166001620006a0565b600b5462000471906001600160a01b03166001620006a0565b6200047e306001620006a0565b6200048d61dead6001620006a0565b620004ac620004a46005546001600160a01b031690565b600162000626565b600a54620004c5906001600160a01b0316600162000626565b600954620004de906001600160a01b0316600162000626565b600b54620004f7906001600160a01b0316600162000626565b6200050430600162000626565b6200051361dead600162000626565b620005316200052a6005546001600160a01b031690565b826200074a565b6200053b6200082f565b50602454602380546001600160a01b0319166001600160a01b0390921691909117905562000a19565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602760205260409020805460ff1916821515179055620005ea828262000626565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b03163314620006755760405162461bcd60e51b8152602060048201819052602482015260008051602062003b1483398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314620006eb5760405162461bcd60e51b8152602060048201819052602482015260008051602062003b1483398151915260448201526064016200066c565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620007a25760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200066c565b8060026000828254620007b69190620009c2565b90915550506001600160a01b03821660009081526020819052604081208054839290620007e5908490620009c2565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b6005546001600160a01b031633146200087a5760405162461bcd60e51b8152602060048201819052602482015260008051602062003b1483398151915260448201526064016200066c565b6020805461ff00191661010017905542600855565b8280546200089d90620009dd565b90600052602060002090601f016020900481019282620008c157600085556200090c565b82601f10620008dc57805160ff19168380011785556200090c565b828001600101855582156200090c579182015b828111156200090c578251825591602001919060010190620008ef565b506200091a9291506200091e565b5090565b5b808211156200091a57600081556001016200091f565b6000602082840312156200094857600080fd5b81516001600160a01b03811681146200096057600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156200099a576200099a62000967565b500290565b600082620009bd57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115620009d857620009d862000967565b500190565b600181811c90821680620009f257607f821691505b60208210810362000a1357634e487b7160e01b600052602260045260246000fd5b50919050565b6130eb8062000a296000396000f3fe6080604052600436106103535760003560e01c80636c07bf86116101c6578063a487d151116100f7578063c9567bf911610095578063dd62ed3e1161006f578063dd62ed3e14610975578063e73b90cd14610995578063f2fde38b146109af578063fea4fa4d146109cf57600080fd5b8063c9567bf91461092b578063d39ec44114610940578063dd1e1ca91461096057600080fd5b8063a939c5da116100d1578063a939c5da146108c1578063b9c127a0146108d6578063c0246668146108f6578063c52f98e61461091657600080fd5b8063a487d15114610876578063a4c82a001461088b578063a9059cbb146108a157600080fd5b80638da5cb5b116101645780639a31c0091161013e5780639a31c009146107d45780639a7a23d6146108205780639ec22c0e14610840578063a457c2d71461085657600080fd5b80638da5cb5b1461078157806395d89b411461079f578063962dfc75146107b457600080fd5b8063730c1888116101a0578063730c188814610716578063751039fc146107365780637571336a1461074b57806382247ec01461076b57600080fd5b80636c07bf86146106b457806370a08231146106e1578063715018a61461070157600080fd5b80632acff8b3116102a057806339d1fc821161023e5780634fbee193116102185780634fbee19314610630578063583e056814610669578063625f3127146106895780636af5303a1461069e57600080fd5b806339d1fc82146105db57806342bedbcf146105fb5780634ec4ce371461061057600080fd5b80632fd689e31161027a5780632fd689e314610569578063313ce5671461057f57806333c6c4cd1461059b57806339509351146105bb57600080fd5b80632acff8b3146105245780632c3e486c146105395780632e82f1a01461054f57600080fd5b8063184c16c51161030d57806323b872dd116102e757806323b872dd1461049557806324eec788146104b557806327424850146104e557806327f4d7d51461050557600080fd5b8063184c16c514610449578063199ffc721461045f5780631cddbdaa1461047557600080fd5b80629f92621461035f57806304beaeb81461038157806306fdde03146103aa578063095ea7b3146103cc57806311a63e17146103fc57806318160ddd1461043457600080fd5b3661035a57005b600080fd5b34801561036b57600080fd5b5061037f61037a366004612aa9565b6109e5565b005b34801561038d57600080fd5b50610397600c5481565b6040519081526020015b60405180910390f35b3480156103b657600080fd5b506103bf610a30565b6040516103a19190612ac2565b3480156103d857600080fd5b506103ec6103e7366004612b2c565b610ac2565b60405190151581526020016103a1565b34801561040857600080fd5b50600a5461041c906001600160a01b031681565b6040516001600160a01b0390911681526020016103a1565b34801561044057600080fd5b50600254610397565b34801561045557600080fd5b50610397601e5481565b34801561046b57600080fd5b50610397601a5481565b34801561048157600080fd5b50600b5461041c906001600160a01b031681565b3480156104a157600080fd5b506103ec6104b0366004612b58565b610adc565b3480156104c157600080fd5b506103ec6104d0366004612b99565b60276020526000908152604090205460ff1681565b3480156104f157600080fd5b5060245461041c906001600160a01b031681565b34801561051157600080fd5b506020546103ec90610100900460ff1681565b34801561053057600080fd5b50610397610b00565b34801561054557600080fd5b50610397601c5481565b34801561055b57600080fd5b50601b546103ec9060ff1681565b34801561057557600080fd5b50610397600d5481565b34801561058b57600080fd5b50604051601281526020016103a1565b3480156105a757600080fd5b506103ec6105b6366004612aa9565b610e65565b3480156105c757600080fd5b506103ec6105d6366004612b2c565b610fbc565b3480156105e757600080fd5b5061037f6105f6366004612b99565b610fde565b34801561060757600080fd5b5061037f611034565b34801561061c57600080fd5b506103ec61062b366004612aa9565b6110c0565b34801561063c57600080fd5b506103ec61064b366004612b99565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561067557600080fd5b5060065461041c906001600160a01b031681565b34801561069557600080fd5b5061037f6112f9565b3480156106aa57600080fd5b5061039760225481565b3480156106c057600080fd5b506103976106cf366004612b99565b60216020526000908152604090205481565b3480156106ed57600080fd5b506103976106fc366004612b99565b611386565b34801561070d57600080fd5b5061037f6113a1565b34801561072257600080fd5b5061037f610731366004612bc6565b6113d7565b34801561074257600080fd5b506103ec6114fe565b34801561075757600080fd5b5061037f610766366004612bfb565b61153b565b34801561077757600080fd5b50610397600e5481565b34801561078d57600080fd5b506005546001600160a01b031661041c565b3480156107ab57600080fd5b506103bf611590565b3480156107c057600080fd5b5060095461041c906001600160a01b031681565b3480156107e057600080fd5b506107e961159f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016103a1565b34801561082c57600080fd5b5061037f61083b366004612bfb565b61163b565b34801561084c57600080fd5b50610397601f5481565b34801561086257600080fd5b506103ec610871366004612b2c565b61172f565b34801561088257600080fd5b5061037f6117aa565b34801561089757600080fd5b50610397601d5481565b3480156108ad57600080fd5b506103ec6108bc366004612b2c565b6117e5565b3480156108cd57600080fd5b5061037f6117f3565b3480156108e257600080fd5b506103ec6108f1366004612c30565b611824565b34801561090257600080fd5b5061037f610911366004612bfb565b611922565b34801561092257600080fd5b5061037f6119ab565b34801561093757600080fd5b5061037f6119dc565b34801561094c57600080fd5b5060075461041c906001600160a01b031681565b34801561096c57600080fd5b5061037f611a1b565b34801561098157600080fd5b50610397610990366004612c30565b611aa8565b3480156109a157600080fd5b506020546103ec9060ff1681565b3480156109bb57600080fd5b5061037f6109ca366004612b99565b611ad3565b3480156109db57600080fd5b50610397600f5481565b6005546001600160a01b03163314610a185760405162461bcd60e51b8152600401610a0f90612c69565b60405180910390fd5b610a2a81670de0b6b3a7640000611b6b565b60255550565b606060038054610a3f90612c9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6b90612c9e565b8015610ab85780601f10610a8d57610100808354040283529160200191610ab8565b820191906000526020600020905b815481529060010190602001808311610a9b57829003601f168201915b5050505050905090565b600033610ad0818585611b7e565b60019150505b92915050565b600033610aea858285611ca2565b610af5858585611d1c565b506001949350505050565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190612cd8565b600a54909150600090610b95906001600160a01b0316611386565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c109190612cd8565b600854602080546201000090046001600160a01b0316600090815260219091526040902054919250108015610c43575081155b610c4c57600080fd5b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc69190612d0c565b506025546026549294509092509060ff1615610d4657306001600160a01b0316639a31c0096040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e9190612d76565b509193505050505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa9190612dc6565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190612dc6565b610e1d9060ff16600a612ee3565b610e30846001600160701b038716612eef565b610e3a9190612eef565b610e449190612f0e565b9050610e596001600160701b03851682612f0e565b97505050505050505090565b6005546000906001600160a01b03163314610e925760405162461bcd60e51b8152600401610a0f90612c69565b620186a0610e9f60025490565b610eaa906001612eef565b610eb49190612f0e565b821015610f215760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a0f565b6103e8610f2d60025490565b610f38906005612eef565b610f429190612f0e565b821115610fae5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a0f565b50600d81905560015b919050565b600033610ad0818585610fcf8383611aa8565b610fd99190612f30565b611b7e565b6005546001600160a01b031633146110085760405162461bcd60e51b8152600401610a0f90612c69565b602480546001600160a01b039092166001600160a01b0319928316811790915560238054909216179055565b6005546001600160a01b0316331461105e5760405162461bcd60e51b8152600401610a0f90612c69565b60265460ff16156110b15760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610a0f565b6026805460ff19166001179055565b6005546000906001600160a01b031633146110ed5760405162461bcd60e51b8152600401610a0f90612c69565b601e54601f546110fd9190612f30565b421161114b5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a0f565b6103e88211156111b05760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610a0f565b42601f556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156111ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112239190612f48565b90506000612710601a54836112389190612eef565b6112429190612f0e565b9050801561126357600754611263906001600160a01b031661dead836121a8565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156112ad57600080fd5b505af11580156112c1573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6005546001600160a01b031633146113235760405162461bcd60e51b8152600401610a0f90612c69565b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611370576040519150601f19603f3d011682016040523d82523d6000602084013e611375565b606091505b505090508061138357600080fd5b50565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610a0f90612c69565b6113d560006122fc565b565b6005546001600160a01b031633146114015760405162461bcd60e51b8152600401610a0f90612c69565b603c83101561146d5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610a0f565b6103e8821115801561147d575060015b6114e25760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610a0f565b601c92909255601a55601b805460ff1916911515919091179055565b6005546000906001600160a01b0316331461152b5760405162461bcd60e51b8152600401610a0f90612c69565b506020805460ff19169055600190565b6005546001600160a01b031633146115655760405162461bcd60e51b8152600401610a0f90612c69565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b606060048054610a3f90612c9e565b600080600080600080600080600080602360009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190612d76565b939e929d50909b50995090975095505050505050565b6005546001600160a01b031633146116655760405162461bcd60e51b8152600401610a0f90612c69565b6007546001600160a01b03908116908316036116e95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a0f565b6116f3828261234e565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000338161173d8286611aa8565b90508381101561179d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a0f565b610af58286868403611b7e565b6005546001600160a01b031633146117d45760405162461bcd60e51b8152600401610a0f90612c69565b6113236117e030611386565b61237c565b600033610ad0818585611d1c565b6005546001600160a01b0316331461181d5760405162461bcd60e51b8152600401610a0f90612c69565b6000601355565b60075460009081906001600160a01b03858116911614801561185457506006546001600160a01b03848116911614155b6001600160a01b03841660009081526018602052604090205490915060ff1681801561187d5750805b1561188757426008555b6001600160a01b03851660009081526018602052604081205460ff16806118c657506001600160a01b03851660009081526018602052604090205460ff165b6007549091506001600160a01b03868116911614600084806118e55750815b90506000600f541180156119035750600754600160a01b900460ff16155b801561190d575082155b80156119165750805b98975050505050505050565b6005546001600160a01b0316331461194c5760405162461bcd60e51b8152600401610a0f90612c69565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119d55760405162461bcd60e51b8152600401610a0f90612c69565b6000601455565b6005546001600160a01b03163314611a065760405162461bcd60e51b8152600401610a0f90612c69565b6020805461ff00191661010017905542600855565b6005546001600160a01b03163314611a455760405162461bcd60e51b8152600401610a0f90612c69565b60265460ff161515600114611a9c5760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610a0f565b6026805460ff19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611afd5760405162461bcd60e51b8152600401610a0f90612c69565b6001600160a01b038116611b625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0f565b611383816122fc565b6000611b778284612eef565b9392505050565b6001600160a01b038316611be05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0f565b6001600160a01b038216611c415760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611cae8484611aa8565b90506000198114611d165781811015611d095760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a0f565b611d168484848403611b7e565b50505050565b6001600160a01b03831660009081526018602052604081205460ff1680611d5b57506001600160a01b03831660009081526018602052604090205460ff165b90506001600160a01b038416611d835760405162461bcd60e51b8152600401610a0f90612f61565b6001600160a01b038316611da95760405162461bcd60e51b8152600401610a0f90612fa6565b81600003611dbd57611d16848460006121a8565b6007546000906001600160a01b038681169116148015611df657506001600160a01b03841660009081526019602052604090205460ff16155b6007549091506000906001600160a01b038681169116148015611e3257506001600160a01b03861660009081526019602052604090205460ff16155b90506000611e486005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611e7457506005546001600160a01b038781169116145b905060006001600160a01b0387161580611e9857506001600160a01b03871661dead145b905060008280611ea55750815b80611eb95750600754600160a01b900460ff165b60205490915060ff168015611ecc575080155b156120a457602054610100900460ff1680611ee45750855b611f295760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a0f565b8415611ffe57600c54871115611f9f5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a0f565b600e54611fab89611386565b611fb59089612f30565b1115611ff95760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a0f565b6120a4565b836120a4576001600160a01b03881660009081526019602052604090205460ff1615801561204557506001600160a01b03891660009081526019602052604090205460ff16155b156120a457600e5461205689611386565b6120609089612f30565b11156120a45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a0f565b6120ae888a6124d6565b600754600160a01b900460ff161580156120e157506001600160a01b03891660009081526027602052604090205460ff16155b801561210657506001600160a01b03891660009081526018602052604090205460ff16155b801561212b57506001600160a01b03881660009081526018602052604090205460ff16155b1561219057600061213b30611386565b600d5490915081101561214c612570565b80156121555750805b801561215f575087155b1561218d576007805460ff60a01b1916600160a01b17905561217f61258c565b6007805460ff60a01b191690555b50505b61219d898986888b6127c6565b505050505050505050565b6001600160a01b0383166121ce5760405162461bcd60e51b8152600401610a0f90612f61565b6001600160a01b0382166121f45760405162461bcd60e51b8152600401610a0f90612fa6565b6001600160a01b0383166000908152602081905260409020548181101561226c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a0f565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122a3908490612f30565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122ef91815260200190565b60405180910390a3611d16565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556116f3828261153b565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123b1576123b1612fe9565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561240a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242e9190612cd8565b8160018151811061244157612441612fe9565b6001600160a01b0392831660209182029290920101526006546124679130911684611b7e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906124a0908590600090869030904290600401612fff565b600060405180830381600087803b1580156124ba57600080fd5b505af11580156124ce573d6000803e3d6000fd5b505050505050565b6001600160a01b03811660009081526027602052604090205460ff1615612538576001600160a01b038216600090815260216020526040812054429103612533576001600160a01b03831660009081526021602052604090208190555b505050565b600754600160a01b900460ff1661256c576020805462010000600160b01b031916620100006001600160a01b038416021790555b5050565b60008061257b610b00565b116125865750600090565b50600190565b600061259730611386565b905060006017546016546015546125ae9190612f30565b6125b89190612f30565b90508115806125c5575080155b156125ce575050565b600d548211156125de57600d5491505b6000600282601554856125f19190612eef565b6125fb9190612f0e565b6126059190612f0e565b90506000612613848361293e565b90504761261f8261237c565b600061262b478361293e565b9050600061264e8661264860165485611b6b90919063ffffffff16565b9061294a565b9050600061266b8761264860175486611b6b90919063ffffffff16565b905060008161267a8486613070565b6126849190613070565b90506000871180156126965750600081115b156126e9576126a58782612956565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006015819055601681905560178190556009546040516001600160a01b039091169085908381818185875af1925050503d8060008114612746576040519150601f19603f3d011682016040523d82523d6000602084013e61274b565b606091505b505090508061275957600080fd5b600a546040516000916001600160a01b03169085908381818185875af1925050503d80600081146127a6576040519150601f19603f3d011682016040523d82523d6000602084013e6127ab565b606091505b50509050806127b957600080fd5b5050505050505050505050565b60006127d28686611824565b6001600160a01b03871660009081526018602052604090205490915060ff16158061280957612802878785612a24565b5050612937565b811561292957600f54601154851561284057601354600f5461282b9190612f30565b915060135460115461283d9190612f30565b90505b861561286b57601454600f546128569190612f30565b91506014546011546128689190612f30565b90505b600061287c60646126488886611b6b565b9050826010548261288d9190612eef565b6128979190612f0e565b601560008282546128a89190612f30565b909155508390506128b98383612eef565b6128c39190612f0e565b601660008282546128d49190612f30565b909155505060125483906128e89083612eef565b6128f29190612f0e565b601760008282546129039190612f30565b90915550508015612919576129198a30836121a8565b6129238187613070565b95505050505b6129348787856121a8565b50505b5050505050565b6000611b778284613070565b6000611b778284612f0e565b60065461296e9030906001600160a01b031684611b7e565b6006546001600160a01b031663f305d7198230856000806129976005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156129ff573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129379190613087565b6001600160a01b038316612a4a5760405162461bcd60e51b8152600401610a0f90612f61565b6001600160a01b038216612a705760405162461bcd60e51b8152600401610a0f90612fa6565b6001600160a01b0380841660009081526020819052604080822080548581039091559285168252812080548492906122a3908490612f30565b600060208284031215612abb57600080fd5b5035919050565b600060208083528351808285015260005b81811015612aef57858101830151858201604001528201612ad3565b81811115612b01576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461138357600080fd5b60008060408385031215612b3f57600080fd5b8235612b4a81612b17565b946020939093013593505050565b600080600060608486031215612b6d57600080fd5b8335612b7881612b17565b92506020840135612b8881612b17565b929592945050506040919091013590565b600060208284031215612bab57600080fd5b8135611b7781612b17565b80358015158114610fb757600080fd5b600080600060608486031215612bdb57600080fd5b8335925060208401359150612bf260408501612bb6565b90509250925092565b60008060408385031215612c0e57600080fd5b8235612c1981612b17565b9150612c2760208401612bb6565b90509250929050565b60008060408385031215612c4357600080fd5b8235612c4e81612b17565b91506020830135612c5e81612b17565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612cb257607f821691505b602082108103612cd257634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612cea57600080fd5b8151611b7781612b17565b80516001600160701b0381168114610fb757600080fd5b600080600060608486031215612d2157600080fd5b612d2a84612cf5565b9250612d3860208501612cf5565b9150604084015163ffffffff81168114612d5157600080fd5b809150509250925092565b805169ffffffffffffffffffff81168114610fb757600080fd5b600080600080600060a08688031215612d8e57600080fd5b612d9786612d5c565b9450602086015193506040860151925060608601519150612dba60808701612d5c565b90509295509295909350565b600060208284031215612dd857600080fd5b815160ff81168114611b7757600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612e3a578160001904821115612e2057612e20612de9565b80851615612e2d57918102915b93841c9390800290612e04565b509250929050565b600082612e5157506001610ad6565b81612e5e57506000610ad6565b8160018114612e745760028114612e7e57612e9a565b6001915050610ad6565b60ff841115612e8f57612e8f612de9565b50506001821b610ad6565b5060208310610133831016604e8410600b8410161715612ebd575081810a610ad6565b612ec78383612dff565b8060001904821115612edb57612edb612de9565b029392505050565b6000611b778383612e42565b6000816000190483118215151615612f0957612f09612de9565b500290565b600082612f2b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612f4357612f43612de9565b500190565b600060208284031215612f5a57600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561304f5784516001600160a01b03168352938301939183019160010161302a565b50506001600160a01b03969096166060850152505050608001529392505050565b60008282101561308257613082612de9565b500390565b60008060006060848603121561309c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c3f6b4ecee11831339a22ca982ac3d470edf20b7f51b8ed613714d7c6635f1d064736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x6080604052600436106103535760003560e01c80636c07bf86116101c6578063a487d151116100f7578063c9567bf911610095578063dd62ed3e1161006f578063dd62ed3e14610975578063e73b90cd14610995578063f2fde38b146109af578063fea4fa4d146109cf57600080fd5b8063c9567bf91461092b578063d39ec44114610940578063dd1e1ca91461096057600080fd5b8063a939c5da116100d1578063a939c5da146108c1578063b9c127a0146108d6578063c0246668146108f6578063c52f98e61461091657600080fd5b8063a487d15114610876578063a4c82a001461088b578063a9059cbb146108a157600080fd5b80638da5cb5b116101645780639a31c0091161013e5780639a31c009146107d45780639a7a23d6146108205780639ec22c0e14610840578063a457c2d71461085657600080fd5b80638da5cb5b1461078157806395d89b411461079f578063962dfc75146107b457600080fd5b8063730c1888116101a0578063730c188814610716578063751039fc146107365780637571336a1461074b57806382247ec01461076b57600080fd5b80636c07bf86146106b457806370a08231146106e1578063715018a61461070157600080fd5b80632acff8b3116102a057806339d1fc821161023e5780634fbee193116102185780634fbee19314610630578063583e056814610669578063625f3127146106895780636af5303a1461069e57600080fd5b806339d1fc82146105db57806342bedbcf146105fb5780634ec4ce371461061057600080fd5b80632fd689e31161027a5780632fd689e314610569578063313ce5671461057f57806333c6c4cd1461059b57806339509351146105bb57600080fd5b80632acff8b3146105245780632c3e486c146105395780632e82f1a01461054f57600080fd5b8063184c16c51161030d57806323b872dd116102e757806323b872dd1461049557806324eec788146104b557806327424850146104e557806327f4d7d51461050557600080fd5b8063184c16c514610449578063199ffc721461045f5780631cddbdaa1461047557600080fd5b80629f92621461035f57806304beaeb81461038157806306fdde03146103aa578063095ea7b3146103cc57806311a63e17146103fc57806318160ddd1461043457600080fd5b3661035a57005b600080fd5b34801561036b57600080fd5b5061037f61037a366004612aa9565b6109e5565b005b34801561038d57600080fd5b50610397600c5481565b6040519081526020015b60405180910390f35b3480156103b657600080fd5b506103bf610a30565b6040516103a19190612ac2565b3480156103d857600080fd5b506103ec6103e7366004612b2c565b610ac2565b60405190151581526020016103a1565b34801561040857600080fd5b50600a5461041c906001600160a01b031681565b6040516001600160a01b0390911681526020016103a1565b34801561044057600080fd5b50600254610397565b34801561045557600080fd5b50610397601e5481565b34801561046b57600080fd5b50610397601a5481565b34801561048157600080fd5b50600b5461041c906001600160a01b031681565b3480156104a157600080fd5b506103ec6104b0366004612b58565b610adc565b3480156104c157600080fd5b506103ec6104d0366004612b99565b60276020526000908152604090205460ff1681565b3480156104f157600080fd5b5060245461041c906001600160a01b031681565b34801561051157600080fd5b506020546103ec90610100900460ff1681565b34801561053057600080fd5b50610397610b00565b34801561054557600080fd5b50610397601c5481565b34801561055b57600080fd5b50601b546103ec9060ff1681565b34801561057557600080fd5b50610397600d5481565b34801561058b57600080fd5b50604051601281526020016103a1565b3480156105a757600080fd5b506103ec6105b6366004612aa9565b610e65565b3480156105c757600080fd5b506103ec6105d6366004612b2c565b610fbc565b3480156105e757600080fd5b5061037f6105f6366004612b99565b610fde565b34801561060757600080fd5b5061037f611034565b34801561061c57600080fd5b506103ec61062b366004612aa9565b6110c0565b34801561063c57600080fd5b506103ec61064b366004612b99565b6001600160a01b031660009081526018602052604090205460ff1690565b34801561067557600080fd5b5060065461041c906001600160a01b031681565b34801561069557600080fd5b5061037f6112f9565b3480156106aa57600080fd5b5061039760225481565b3480156106c057600080fd5b506103976106cf366004612b99565b60216020526000908152604090205481565b3480156106ed57600080fd5b506103976106fc366004612b99565b611386565b34801561070d57600080fd5b5061037f6113a1565b34801561072257600080fd5b5061037f610731366004612bc6565b6113d7565b34801561074257600080fd5b506103ec6114fe565b34801561075757600080fd5b5061037f610766366004612bfb565b61153b565b34801561077757600080fd5b50610397600e5481565b34801561078d57600080fd5b506005546001600160a01b031661041c565b3480156107ab57600080fd5b506103bf611590565b3480156107c057600080fd5b5060095461041c906001600160a01b031681565b3480156107e057600080fd5b506107e961159f565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a0016103a1565b34801561082c57600080fd5b5061037f61083b366004612bfb565b61163b565b34801561084c57600080fd5b50610397601f5481565b34801561086257600080fd5b506103ec610871366004612b2c565b61172f565b34801561088257600080fd5b5061037f6117aa565b34801561089757600080fd5b50610397601d5481565b3480156108ad57600080fd5b506103ec6108bc366004612b2c565b6117e5565b3480156108cd57600080fd5b5061037f6117f3565b3480156108e257600080fd5b506103ec6108f1366004612c30565b611824565b34801561090257600080fd5b5061037f610911366004612bfb565b611922565b34801561092257600080fd5b5061037f6119ab565b34801561093757600080fd5b5061037f6119dc565b34801561094c57600080fd5b5060075461041c906001600160a01b031681565b34801561096c57600080fd5b5061037f611a1b565b34801561098157600080fd5b50610397610990366004612c30565b611aa8565b3480156109a157600080fd5b506020546103ec9060ff1681565b3480156109bb57600080fd5b5061037f6109ca366004612b99565b611ad3565b3480156109db57600080fd5b50610397600f5481565b6005546001600160a01b03163314610a185760405162461bcd60e51b8152600401610a0f90612c69565b60405180910390fd5b610a2a81670de0b6b3a7640000611b6b565b60255550565b606060038054610a3f90612c9e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6b90612c9e565b8015610ab85780601f10610a8d57610100808354040283529160200191610ab8565b820191906000526020600020905b815481529060010190602001808311610a9b57829003601f168201915b5050505050905090565b600033610ad0818585611b7e565b60019150505b92915050565b600033610aea858285611ca2565b610af5858585611d1c565b506001949350505050565b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b7a9190612cd8565b600a54909150600090610b95906001600160a01b0316611386565b90506000600760009054906101000a90046001600160a01b03166001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c109190612cd8565b600854602080546201000090046001600160a01b0316600090815260219091526040902054919250108015610c43575081155b610c4c57600080fd5b600080600760009054906101000a90046001600160a01b03166001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015610ca2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc69190612d0c565b506025546026549294509092509060ff1615610d4657306001600160a01b0316639a31c0096040518163ffffffff1660e01b815260040160a060405180830381865afa158015610d1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d3e9190612d76565b509193505050505b6000846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610daa9190612dc6565b60ff16876001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610deb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e0f9190612dc6565b610e1d9060ff16600a612ee3565b610e30846001600160701b038716612eef565b610e3a9190612eef565b610e449190612f0e565b9050610e596001600160701b03851682612f0e565b97505050505050505090565b6005546000906001600160a01b03163314610e925760405162461bcd60e51b8152600401610a0f90612c69565b620186a0610e9f60025490565b610eaa906001612eef565b610eb49190612f0e565b821015610f215760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610a0f565b6103e8610f2d60025490565b610f38906005612eef565b610f429190612f0e565b821115610fae5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610a0f565b50600d81905560015b919050565b600033610ad0818585610fcf8383611aa8565b610fd99190612f30565b611b7e565b6005546001600160a01b031633146110085760405162461bcd60e51b8152600401610a0f90612c69565b602480546001600160a01b039092166001600160a01b0319928316811790915560238054909216179055565b6005546001600160a01b0316331461105e5760405162461bcd60e51b8152600401610a0f90612c69565b60265460ff16156110b15760405162461bcd60e51b815260206004820152601c60248201527f7072696365206f7261636c6520616c726561647920656e61626c6564000000006044820152606401610a0f565b6026805460ff19166001179055565b6005546000906001600160a01b031633146110ed5760405162461bcd60e51b8152600401610a0f90612c69565b601e54601f546110fd9190612f30565b421161114b5760405162461bcd60e51b815260206004820181905260248201527f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e6973686044820152606401610a0f565b6103e88211156111b05760405162461bcd60e51b815260206004820152602a60248201527f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60448201526906b656e7320696e204c560b41b6064820152608401610a0f565b42601f556007546040516370a0823160e01b81526001600160a01b03909116600482015260009030906370a0823190602401602060405180830381865afa1580156111ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112239190612f48565b90506000612710601a54836112389190612eef565b6112429190612f0e565b9050801561126357600754611263906001600160a01b031661dead836121a8565b6007546040805160016209351760e01b0319815290516001600160a01b0390921691829163fff6cae991600480830192600092919082900301818387803b1580156112ad57600080fd5b505af11580156112c1573d6000803e3d6000fd5b50506040517f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb925060009150a1506001949350505050565b6005546001600160a01b031633146113235760405162461bcd60e51b8152600401610a0f90612c69565b6009546040516000916001600160a01b03169047908381818185875af1925050503d8060008114611370576040519150601f19603f3d011682016040523d82523d6000602084013e611375565b606091505b505090508061138357600080fd5b50565b6001600160a01b031660009081526020819052604090205490565b6005546001600160a01b031633146113cb5760405162461bcd60e51b8152600401610a0f90612c69565b6113d560006122fc565b565b6005546001600160a01b031633146114015760405162461bcd60e51b8152600401610a0f90612c69565b603c83101561146d5760405162461bcd60e51b815260206004820152603260248201527f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e207468604482015271616e2065766572792031206d696e7574657360701b6064820152608401610a0f565b6103e8821115801561147d575060015b6114e25760405162461bcd60e51b815260206004820152603060248201527f4d75737420736574206175746f204c50206275726e2070657263656e7420626560448201526f747765656e20302520616e642031302560801b6064820152608401610a0f565b601c92909255601a55601b805460ff1916911515919091179055565b6005546000906001600160a01b0316331461152b5760405162461bcd60e51b8152600401610a0f90612c69565b506020805460ff19169055600190565b6005546001600160a01b031633146115655760405162461bcd60e51b8152600401610a0f90612c69565b6001600160a01b03919091166000908152601960205260409020805460ff1916911515919091179055565b606060048054610a3f90612c9e565b600080600080600080600080600080602360009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015611601573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116259190612d76565b939e929d50909b50995090975095505050505050565b6005546001600160a01b031633146116655760405162461bcd60e51b8152600401610a0f90612c69565b6007546001600160a01b03908116908316036116e95760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610a0f565b6116f3828261234e565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6000338161173d8286611aa8565b90508381101561179d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a0f565b610af58286868403611b7e565b6005546001600160a01b031633146117d45760405162461bcd60e51b8152600401610a0f90612c69565b6113236117e030611386565b61237c565b600033610ad0818585611d1c565b6005546001600160a01b0316331461181d5760405162461bcd60e51b8152600401610a0f90612c69565b6000601355565b60075460009081906001600160a01b03858116911614801561185457506006546001600160a01b03848116911614155b6001600160a01b03841660009081526018602052604090205490915060ff1681801561187d5750805b1561188757426008555b6001600160a01b03851660009081526018602052604081205460ff16806118c657506001600160a01b03851660009081526018602052604090205460ff165b6007549091506001600160a01b03868116911614600084806118e55750815b90506000600f541180156119035750600754600160a01b900460ff16155b801561190d575082155b80156119165750805b98975050505050505050565b6005546001600160a01b0316331461194c5760405162461bcd60e51b8152600401610a0f90612c69565b6001600160a01b038216600081815260186020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146119d55760405162461bcd60e51b8152600401610a0f90612c69565b6000601455565b6005546001600160a01b03163314611a065760405162461bcd60e51b8152600401610a0f90612c69565b6020805461ff00191661010017905542600855565b6005546001600160a01b03163314611a455760405162461bcd60e51b8152600401610a0f90612c69565b60265460ff161515600114611a9c5760405162461bcd60e51b815260206004820152601d60248201527f7072696365206f7261636c6520616c72656164792064697361626c65640000006044820152606401610a0f565b6026805460ff19169055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6005546001600160a01b03163314611afd5760405162461bcd60e51b8152600401610a0f90612c69565b6001600160a01b038116611b625760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a0f565b611383816122fc565b6000611b778284612eef565b9392505050565b6001600160a01b038316611be05760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a0f565b6001600160a01b038216611c415760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a0f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6000611cae8484611aa8565b90506000198114611d165781811015611d095760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a0f565b611d168484848403611b7e565b50505050565b6001600160a01b03831660009081526018602052604081205460ff1680611d5b57506001600160a01b03831660009081526018602052604090205460ff165b90506001600160a01b038416611d835760405162461bcd60e51b8152600401610a0f90612f61565b6001600160a01b038316611da95760405162461bcd60e51b8152600401610a0f90612fa6565b81600003611dbd57611d16848460006121a8565b6007546000906001600160a01b038681169116148015611df657506001600160a01b03841660009081526019602052604090205460ff16155b6007549091506000906001600160a01b038681169116148015611e3257506001600160a01b03861660009081526019602052604090205460ff16155b90506000611e486005546001600160a01b031690565b6001600160a01b0316876001600160a01b03161480611e7457506005546001600160a01b038781169116145b905060006001600160a01b0387161580611e9857506001600160a01b03871661dead145b905060008280611ea55750815b80611eb95750600754600160a01b900460ff165b60205490915060ff168015611ecc575080155b156120a457602054610100900460ff1680611ee45750855b611f295760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610a0f565b8415611ffe57600c54871115611f9f5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610a0f565b600e54611fab89611386565b611fb59089612f30565b1115611ff95760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a0f565b6120a4565b836120a4576001600160a01b03881660009081526019602052604090205460ff1615801561204557506001600160a01b03891660009081526019602052604090205460ff16155b156120a457600e5461205689611386565b6120609089612f30565b11156120a45760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610a0f565b6120ae888a6124d6565b600754600160a01b900460ff161580156120e157506001600160a01b03891660009081526027602052604090205460ff16155b801561210657506001600160a01b03891660009081526018602052604090205460ff16155b801561212b57506001600160a01b03881660009081526018602052604090205460ff16155b1561219057600061213b30611386565b600d5490915081101561214c612570565b80156121555750805b801561215f575087155b1561218d576007805460ff60a01b1916600160a01b17905561217f61258c565b6007805460ff60a01b191690555b50505b61219d898986888b6127c6565b505050505050505050565b6001600160a01b0383166121ce5760405162461bcd60e51b8152600401610a0f90612f61565b6001600160a01b0382166121f45760405162461bcd60e51b8152600401610a0f90612fa6565b6001600160a01b0383166000908152602081905260409020548181101561226c5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a0f565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906122a3908490612f30565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516122ef91815260200190565b60405180910390a3611d16565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0382166000908152602760205260409020805460ff19168215151790556116f3828261153b565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106123b1576123b1612fe9565b6001600160a01b03928316602091820292909201810191909152600654604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801561240a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242e9190612cd8565b8160018151811061244157612441612fe9565b6001600160a01b0392831660209182029290920101526006546124679130911684611b7e565b60065460405163791ac94760e01b81526001600160a01b039091169063791ac947906124a0908590600090869030904290600401612fff565b600060405180830381600087803b1580156124ba57600080fd5b505af11580156124ce573d6000803e3d6000fd5b505050505050565b6001600160a01b03811660009081526027602052604090205460ff1615612538576001600160a01b038216600090815260216020526040812054429103612533576001600160a01b03831660009081526021602052604090208190555b505050565b600754600160a01b900460ff1661256c576020805462010000600160b01b031916620100006001600160a01b038416021790555b5050565b60008061257b610b00565b116125865750600090565b50600190565b600061259730611386565b905060006017546016546015546125ae9190612f30565b6125b89190612f30565b90508115806125c5575080155b156125ce575050565b600d548211156125de57600d5491505b6000600282601554856125f19190612eef565b6125fb9190612f0e565b6126059190612f0e565b90506000612613848361293e565b90504761261f8261237c565b600061262b478361293e565b9050600061264e8661264860165485611b6b90919063ffffffff16565b9061294a565b9050600061266b8761264860175486611b6b90919063ffffffff16565b905060008161267a8486613070565b6126849190613070565b90506000871180156126965750600081115b156126e9576126a58782612956565b601554604080518881526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b60006015819055601681905560178190556009546040516001600160a01b039091169085908381818185875af1925050503d8060008114612746576040519150601f19603f3d011682016040523d82523d6000602084013e61274b565b606091505b505090508061275957600080fd5b600a546040516000916001600160a01b03169085908381818185875af1925050503d80600081146127a6576040519150601f19603f3d011682016040523d82523d6000602084013e6127ab565b606091505b50509050806127b957600080fd5b5050505050505050505050565b60006127d28686611824565b6001600160a01b03871660009081526018602052604090205490915060ff16158061280957612802878785612a24565b5050612937565b811561292957600f54601154851561284057601354600f5461282b9190612f30565b915060135460115461283d9190612f30565b90505b861561286b57601454600f546128569190612f30565b91506014546011546128689190612f30565b90505b600061287c60646126488886611b6b565b9050826010548261288d9190612eef565b6128979190612f0e565b601560008282546128a89190612f30565b909155508390506128b98383612eef565b6128c39190612f0e565b601660008282546128d49190612f30565b909155505060125483906128e89083612eef565b6128f29190612f0e565b601760008282546129039190612f30565b90915550508015612919576129198a30836121a8565b6129238187613070565b95505050505b6129348787856121a8565b50505b5050505050565b6000611b778284613070565b6000611b778284612f0e565b60065461296e9030906001600160a01b031684611b7e565b6006546001600160a01b031663f305d7198230856000806129976005546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af11580156129ff573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129379190613087565b6001600160a01b038316612a4a5760405162461bcd60e51b8152600401610a0f90612f61565b6001600160a01b038216612a705760405162461bcd60e51b8152600401610a0f90612fa6565b6001600160a01b0380841660009081526020819052604080822080548581039091559285168252812080548492906122a3908490612f30565b600060208284031215612abb57600080fd5b5035919050565b600060208083528351808285015260005b81811015612aef57858101830151858201604001528201612ad3565b81811115612b01576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461138357600080fd5b60008060408385031215612b3f57600080fd5b8235612b4a81612b17565b946020939093013593505050565b600080600060608486031215612b6d57600080fd5b8335612b7881612b17565b92506020840135612b8881612b17565b929592945050506040919091013590565b600060208284031215612bab57600080fd5b8135611b7781612b17565b80358015158114610fb757600080fd5b600080600060608486031215612bdb57600080fd5b8335925060208401359150612bf260408501612bb6565b90509250925092565b60008060408385031215612c0e57600080fd5b8235612c1981612b17565b9150612c2760208401612bb6565b90509250929050565b60008060408385031215612c4357600080fd5b8235612c4e81612b17565b91506020830135612c5e81612b17565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612cb257607f821691505b602082108103612cd257634e487b7160e01b600052602260045260246000fd5b50919050565b600060208284031215612cea57600080fd5b8151611b7781612b17565b80516001600160701b0381168114610fb757600080fd5b600080600060608486031215612d2157600080fd5b612d2a84612cf5565b9250612d3860208501612cf5565b9150604084015163ffffffff81168114612d5157600080fd5b809150509250925092565b805169ffffffffffffffffffff81168114610fb757600080fd5b600080600080600060a08688031215612d8e57600080fd5b612d9786612d5c565b9450602086015193506040860151925060608601519150612dba60808701612d5c565b90509295509295909350565b600060208284031215612dd857600080fd5b815160ff81168114611b7757600080fd5b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612e3a578160001904821115612e2057612e20612de9565b80851615612e2d57918102915b93841c9390800290612e04565b509250929050565b600082612e5157506001610ad6565b81612e5e57506000610ad6565b8160018114612e745760028114612e7e57612e9a565b6001915050610ad6565b60ff841115612e8f57612e8f612de9565b50506001821b610ad6565b5060208310610133831016604e8410600b8410161715612ebd575081810a610ad6565b612ec78383612dff565b8060001904821115612edb57612edb612de9565b029392505050565b6000611b778383612e42565b6000816000190483118215151615612f0957612f09612de9565b500290565b600082612f2b57634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612f4357612f43612de9565b500190565b600060208284031215612f5a57600080fd5b5051919050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561304f5784516001600160a01b03168352938301939183019160010161302a565b50506001600160a01b03969096166060850152505050608001529392505050565b60008282101561308257613082612de9565b500390565b60008060006060848603121561309c57600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c3f6b4ecee11831339a22ca982ac3d470edf20b7f51b8ed613714d7c6635f1d064736f6c634300080d0033

Deployed Bytecode Sourcemap

21516:18425:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36474:112;;;;;;;;;;-1:-1:-1;36474:112:0;;;;;:::i;:::-;;:::i;:::-;;21863:36;;;;;;;;;;;;;;;;;;;345:25:1;;;333:2;318:18;21863:36:0;;;;;;;;11108:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;12181:242::-;;;;;;;;;;-1:-1:-1;12181:242:0;;;;;:::i;:::-;;:::i;:::-;;;1604:14:1;;1597:22;1579:41;;1567:2;1552:18;12181:242:0;1439:187:1;21793:25:0;;;;;;;;;;-1:-1:-1;21793:25:0;;;;-1:-1:-1;;;;;21793:25:0;;;;;;-1:-1:-1;;;;;1795:32:1;;;1777:51;;1765:2;1750:18;21793:25:0;1631:203:1;11429:108:0;;;;;;;;;;-1:-1:-1;11517:12:0;;11429:108;;22614:47;;;;;;;;;;;;;;;;22436:35;;;;;;;;;;;;;;;;21825:31;;;;;;;;;;-1:-1:-1;21825:31:0;;;;-1:-1:-1;;;;;21825:31:0;;;12429:295;;;;;;;;;;-1:-1:-1;12429:295:0;;;;;:::i;:::-;;:::i;23332:53::-;;;;;;;;;;-1:-1:-1;23332:53:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;23087:142;;;;;;;;;;-1:-1:-1;23087:142:0;;;;-1:-1:-1;;;;;23087:142:0;;;22751:34;;;;;;;;;;-1:-1:-1;22751:34:0;;;;;;;;;;;28456:800;;;;;;;;;;;;;:::i;22517:44::-;;;;;;;;;;;;;;;;22478:32;;;;;;;;;;-1:-1:-1;22478:32:0;;;;;;;;21906:34;;;;;;;;;;;;;;;;11328:93;;;;;;;;;;-1:-1:-1;11328:93:0;;11411:2;2694:36:1;;2682:2;2667:18;11328:93:0;2552:184:1;27590:492:0;;;;;;;;;;-1:-1:-1;27590:492:0;;;;;:::i;:::-;;:::i;12732:270::-;;;;;;;;;;-1:-1:-1;12732:270:0;;;;;:::i;:::-;;:::i;36950:177::-;;;;;;;;;;-1:-1:-1;36950:177:0;;;;;:::i;:::-;;:::i;36594:169::-;;;;;;;;;;;;;:::i;38855:1038::-;;;;;;;;;;-1:-1:-1;38855:1038:0;;;;;:::i;:::-;;:::i;33640:123::-;;;;;;;;;;-1:-1:-1;33640:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;33730:25:0;33706:4;33730:25;;;:16;:25;;;;;;;;;33640:123;21604:42;;;;;;;;;;-1:-1:-1;21604:42:0;;;;-1:-1:-1;;;;;21604:42:0;;;37365:172;;;;;;;;;;;;;:::i;22896:35::-;;;;;;;;;;;;;;;;22834:55;;;;;;;;;;-1:-1:-1;22834:55:0;;;;;:::i;:::-;;;;;;;;;;;;;;11545:177;;;;;;;;;;-1:-1:-1;11545:177:0;;;;;:::i;:::-;;:::i;9152:103::-;;;;;;;;;;;;;:::i;37545:553::-;;;;;;;;;;-1:-1:-1;37545:553:0;;;;;:::i;:::-;;:::i;26299:122::-;;;;;;;;;;;;;:::i;28090:167::-;;;;;;;;;;-1:-1:-1;28090:167:0;;;;;:::i;:::-;;:::i;21947:25::-;;;;;;;;;;;;;;;;8929:87;;;;;;;;;;-1:-1:-1;9002:6:0;;-1:-1:-1;;;;;9002:6:0;8929:87;;11216:104;;;;;;;;;;;;;:::i;21755:31::-;;;;;;;;;;-1:-1:-1;21755:31:0;;;;-1:-1:-1;;;;;21755:31:0;;;26431:505;;;;;;;;;;;;;:::i;:::-;;;;4044:22:1;4093:15;;;4075:34;;4140:2;4125:18;;4118:34;;;;4168:18;;4161:34;;;;4226:2;4211:18;;4204:34;4275:15;;;4269:3;4254:19;;4247:44;4021:3;4006:19;26431:505:0;3781:516:1;25996:295:0;;;;;;;;;;-1:-1:-1;25996:295:0;;;;;:::i;:::-;;:::i;22668:35::-;;;;;;;;;;;;;;;;13010:505;;;;;;;;;;-1:-1:-1;13010:505:0;;;;;:::i;:::-;;:::i;37135:222::-;;;;;;;;;;;;;:::i;22578:29::-;;;;;;;;;;;;;;;;11730:234;;;;;;;;;;-1:-1:-1;11730:234:0;;;;;:::i;:::-;;:::i;36279:89::-;;;;;;;;;;;;;:::i;26944:638::-;;;;;;;;;;-1:-1:-1;26944:638:0;;;;;:::i;:::-;;:::i;28265:179::-;;;;;;;;;;-1:-1:-1;28265:179:0;;;;;:::i;:::-;;:::i;36376:90::-;;;;;;;;;;;;;:::i;25621:129::-;;;;;;;;;;;;;:::i;21653:23::-;;;;;;;;;;-1:-1:-1;21653:23:0;;;;-1:-1:-1;;;;;21653:23:0;;;36771:171;;;;;;;;;;;;;:::i;11972:201::-;;;;;;;;;;-1:-1:-1;11972:201:0;;;;;:::i;:::-;;:::i;22710:34::-;;;;;;;;;;-1:-1:-1;22710:34:0;;;;;;;;9263:238;;;;;;;;;;-1:-1:-1;9263:238:0;;;;;:::i;:::-;;:::i;21981:25::-;;;;;;;;;;;;;;;;36474:112;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;;;;;;;;;36562:15:::1;:3:::0;36570:6:::1;36562:7;:15::i;:::-;36538:14;:40:::0;-1:-1:-1;36474:112:0:o;11108:100::-;11162:13;11195:5;11188:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11108:100;:::o;12181:242::-;12300:4;8530:10;12361:32;8530:10;12377:7;12386:6;12361:8;:32::i;:::-;12411:4;12404:11;;;12181:242;;;;;:::o;12429:295::-;12560:4;8530:10;12618:38;12634:4;8530:10;12649:6;12618:15;:38::i;:::-;12667:27;12677:4;12683:2;12687:6;12667:9;:27::i;:::-;-1:-1:-1;12712:4:0;;12429:295;-1:-1:-1;;;;12429:295:0:o;28456:800::-;28506:7;28526:21;28580:8;;;;;;;;;-1:-1:-1;;;;;28580:8:0;-1:-1:-1;;;;;28565:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28638:10;;28526:73;;-1:-1:-1;28610:15:0;;28628:21;;-1:-1:-1;;;;;28638:10:0;28628:9;:21::i;:::-;28610:39;;28660:21;28714:8;;;;;;;;;-1:-1:-1;;;;;28714:8:0;-1:-1:-1;;;;;28699:31:0;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28796:20;;28773:19;;;;;;-1:-1:-1;;;;;28773:19:0;28752:41;;;;:20;:41;;;;;;;28660:73;;-1:-1:-1;;28752:80:0;;;;-1:-1:-1;28820:12:0;;28752:80;28744:89;;;;;;28845:16;28863;28900:8;;;;;;;;;-1:-1:-1;;;;;28900:8:0;-1:-1:-1;;;;;28885:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;28952:14:0;;28981:17;;28844:79;;-1:-1:-1;28844:79:0;;-1:-1:-1;28952:14:0;28981:17;;28977:91;;;29036:4;-1:-1:-1;;;;;29036:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;29015:41:0;;-1:-1:-1;;;;28977:91:0;29078:16;29182:6;-1:-1:-1;;;;;29182:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29174:26;;29151:6;-1:-1:-1;;;;;29151:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29139:30;;29143:26;;29139:2;:30;:::i;:::-;29098:37;29126:8;-1:-1:-1;;;;;29098:17:0;;:37;:::i;:::-;:72;;;;:::i;:::-;29097:103;;;;:::i;:::-;29078:122;-1:-1:-1;29219:28:0;-1:-1:-1;;;;;29230:17:0;;29078:122;29219:28;:::i;:::-;29211:37;;;;;;;;;28456:800;:::o;27590:492::-;9002:6;;27692:4;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;27771:6:::1;27750:13;11517:12:::0;;;11429:108;27750:13:::1;:17;::::0;27766:1:::1;27750:17;:::i;:::-;27749:28;;;;:::i;:::-;27736:9;:41;;27714:144;;;::::0;-1:-1:-1;;;27714:144:0;;9388:2:1;27714:144:0::1;::::0;::::1;9370:21:1::0;9427:2;9407:18;;;9400:30;9466:34;9446:18;;;9439:62;-1:-1:-1;;;9517:18:1;;;9510:51;9578:19;;27714:144:0::1;9186:417:1::0;27714:144:0::1;27926:4;27905:13;11517:12:::0;;;11429:108;27905:13:::1;:17;::::0;27921:1:::1;27905:17;:::i;:::-;27904:26;;;;:::i;:::-;27891:9;:39;;27869:141;;;::::0;-1:-1:-1;;;27869:141:0;;9810:2:1;27869:141:0::1;::::0;::::1;9792:21:1::0;9849:2;9829:18;;;9822:30;9888:34;9868:18;;;9861:62;-1:-1:-1;;;9939:18:1;;;9932:50;9999:19;;27869:141:0::1;9608:416:1::0;27869:141:0::1;-1:-1:-1::0;28021:19:0::1;:31:::0;;;28070:4:::1;9135:1;27590:492:::0;;;:::o;12732:270::-;12847:4;8530:10;12908:64;8530:10;12924:7;12961:10;12933:25;8530:10;12924:7;12933:9;:25::i;:::-;:38;;;;:::i;:::-;12908:8;:64::i;36950:177::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;37021:16:::1;:23:::0;;-1:-1:-1;;;;;37021:23:0;;::::1;-1:-1:-1::0;;;;;;37021:23:0;;::::1;::::0;::::1;::::0;;;37055:16:::1;:64:::0;;;;::::1;;::::0;;36950:177::o;36594:169::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;36661:17:::1;::::0;::::1;;:26;36653:67;;;::::0;-1:-1:-1;;;36653:67:0;;10364:2:1;36653:67:0::1;::::0;::::1;10346:21:1::0;10403:2;10383:18;;;10376:30;10442;10422:18;;;10415:58;10490:18;;36653:67:0::1;10162:352:1::0;36653:67:0::1;36731:17;:24:::0;;-1:-1:-1;;36731:24:0::1;36751:4;36731:24;::::0;;36594:169::o;38855:1038::-;9002:6;;38958:4;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;39043:19:::1;;39020:20;;:42;;;;:::i;:::-;39002:15;:60;38980:142;;;::::0;-1:-1:-1;;;38980:142:0;;10721:2:1;38980:142:0::1;::::0;::::1;10703:21:1::0;;;10740:18;;;10733:30;10799:34;10779:18;;;10772:62;10851:18;;38980:142:0::1;10519:356:1::0;38980:142:0::1;39152:4;39141:7;:15;;39133:70;;;::::0;-1:-1:-1;;;39133:70:0;;11082:2:1;39133:70:0::1;::::0;::::1;11064:21:1::0;11121:2;11101:18;;;11094:30;11160:34;11140:18;;;11133:62;-1:-1:-1;;;11211:18:1;;;11204:40;11261:19;;39133:70:0::1;10880:406:1::0;39133:70:0::1;39237:15;39214:20;:38:::0;39353:8:::1;::::0;39338:24:::1;::::0;-1:-1:-1;;;39338:24:0;;-1:-1:-1;;;;;39353:8:0;;::::1;39338:24;::::0;::::1;1777:51:1::0;39307:28:0::1;::::0;39338:4:::1;::::0;:14:::1;::::0;1750:18:1;;39338:24:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39307:55;;39412:20;39477:5;39458:16;;39435:20;:39;;;;:::i;:::-;:47;;;;:::i;:::-;39412:70:::0;-1:-1:-1;39589:16:0;;39585:105:::1;;39638:8;::::0;39622:56:::1;::::0;-1:-1:-1;;;;;39638:8:0::1;39656:6;39665:12:::0;39622:15:::1;:56::i;:::-;39802:8;::::0;39822:11:::1;::::0;;-1:-1:-1;;;;;;39822:11:0;;;;-1:-1:-1;;;;;39802:8:0;;::::1;::::0;;;39822:9:::1;::::0;:11:::1;::::0;;::::1;::::0;39765:19:::1;::::0;39822:11;;;;;;;39765:19;39802:8;39822:11;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;39849:14:0::1;::::0;::::1;::::0;-1:-1:-1;39849:14:0;;-1:-1:-1;39849:14:0::1;-1:-1:-1::0;39881:4:0::1;::::0;38855:1038;-1:-1:-1;;;;38855:1038:0:o;37365:172::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;37445:16:::1;::::0;37437:65:::1;::::0;37420:12:::1;::::0;-1:-1:-1;;;;;37445:16:0::1;::::0;37476:21:::1;::::0;37420:12;37437:65;37420:12;37437:65;37476:21;37445:16;37437:65:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37419:83;;;37521:7;37513:16;;;::::0;::::1;;37408:129;37365:172::o:0;11545:177::-;-1:-1:-1;;;;;11696:18:0;11664:7;11696:18;;;;;;;;;;;;11545:177::o;9152:103::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;9217:30:::1;9244:1;9217:18;:30::i;:::-;9152:103::o:0;37545:553::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;37747:2:::1;37724:19;:25;;37702:125;;;::::0;-1:-1:-1;;;37702:125:0;;11892:2:1;37702:125:0::1;::::0;::::1;11874:21:1::0;11931:2;11911:18;;;11904:30;11970:34;11950:18;;;11943:62;-1:-1:-1;;;12021:18:1;;;12014:48;12079:19;;37702:125:0::1;11690:414:1::0;37702:125:0::1;37872:4;37860:8;:16;;:33;;;;-1:-1:-1::0;37880:13:0;37860:33:::1;37838:131;;;::::0;-1:-1:-1;;;37838:131:0;;12311:2:1;37838:131:0::1;::::0;::::1;12293:21:1::0;12350:2;12330:18;;;12323:30;12389:34;12369:18;;;12362:62;-1:-1:-1;;;12440:18:1;;;12433:46;12496:19;;37838:131:0::1;12109:412:1::0;37838:131:0::1;37980:15;:37:::0;;;;38028:16:::1;:27:::0;38066:13:::1;:24:::0;;-1:-1:-1;;38066:24:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37545:553::o;26299:122::-;9002:6;;26351:4;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;-1:-1:-1;26368:15:0::1;:23:::0;;-1:-1:-1;;26368:23:0::1;::::0;;;26299:122;:::o;28090:167::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28203:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;28203:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28090:167::o;11216:104::-;11272:13;11305:7;11298:14;;;;;:::i;26431:505::-;26520:6;26541;26562:7;26584;26606:6;26655:15;26685:13;26713:18;26746:17;26778:23;26815:16;;;;;;;;;-1:-1:-1;;;;;26815:16:0;-1:-1:-1;;;;;26815:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26640:209;;;;-1:-1:-1;26640:209:0;;-1:-1:-1;26640:209:0;-1:-1:-1;26640:209:0;;-1:-1:-1;26431:505:0;-1:-1:-1;;;;;;26431:505:0:o;25996:295::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;26105:8:::1;::::0;-1:-1:-1;;;;;26105:8:0;;::::1;26097:16:::0;;::::1;::::0;26089:86:::1;;;::::0;-1:-1:-1;;;26089:86:0;;12728:2:1;26089:86:0::1;::::0;::::1;12710:21:1::0;12767:2;12747:18;;;12740:30;12806:34;12786:18;;;12779:62;12877:27;12857:18;;;12850:55;12922:19;;26089:86:0::1;12526:421:1::0;26089:86:0::1;26186:41;26215:4;26221:5;26186:28;:41::i;:::-;26243:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;26243:40:0;::::1;::::0;::::1;::::0;;;::::1;25996:295:::0;;:::o;13010:505::-;13130:4;8530:10;13130:4;13218:25;8530:10;13235:7;13218:9;:25::i;:::-;13191:52;;13296:15;13276:16;:35;;13254:122;;;;-1:-1:-1;;;13254:122:0;;13154:2:1;13254:122:0;;;13136:21:1;13193:2;13173:18;;;13166:30;13232:34;13212:18;;;13205:62;-1:-1:-1;;;13283:18:1;;;13276:35;13328:19;;13254:122:0;12952:401:1;13254:122:0;13412:60;13421:5;13428:7;13456:15;13437:16;:34;13412:8;:60::i;37135:222::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;37189:37:::1;37201:24;37219:4;37201:9;:24::i;:::-;37189:11;:37::i;11730:234::-:0;11845:4;8530:10;11906:28;8530:10;11923:2;11927:6;11906:9;:28::i;36279:89::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;36359:1:::1;36340:16;:20:::0;36279:89::o;26944:638::-;27060:8;;27018:4;;;;-1:-1:-1;;;;;27049:19:0;;;27060:8;;27049:19;:61;;;;-1:-1:-1;27093:16:0;;-1:-1:-1;;;;;27072:38:0;;;27093:16;;27072:38;;27049:61;-1:-1:-1;;;;;27146:27:0;;27121:22;27146:27;;;:16;:27;;;;;;27035:75;;-1:-1:-1;27146:27:0;;27035:75;27188:27;;;;;27198:17;27188:27;27184:71;;;27240:15;27217:20;:38;27184:71;-1:-1:-1;;;;;27291:25:0;;27266:22;27291:25;;;:16;:25;;;;;;;;;:56;;-1:-1:-1;;;;;;27320:27:0;;;;;;:16;:27;;;;;;;;27291:56;27386:8;;27266:81;;-1:-1:-1;;;;;;27373:21:0;;;27386:8;;27373:21;27358:12;27422:6;;:17;;;27432:7;27422:17;27406:33;;27486:1;27473:10;;:14;:41;;;;-1:-1:-1;27505:9:0;;-1:-1:-1;;;27505:9:0;;;;27504:10;27473:41;:76;;;;;27532:17;27531:18;27473:76;:101;;;;;27566:8;27473:101;27452:122;26944:638;-1:-1:-1;;;;;;;;26944:638:0:o;28265:179::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28350:25:0;::::1;;::::0;;;:16:::1;:25;::::0;;;;;;;;:36;;-1:-1:-1;;28350:36:0::1;::::0;::::1;;::::0;;::::1;::::0;;;28402:34;;1579:41:1;;;28402:34:0::1;::::0;1552:18:1;28402:34:0::1;;;;;;;28265:179:::0;;:::o;36376:90::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;36457:1:::1;36437:17;:21:::0;36376:90::o;25621:129::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;25672:14:::1;:21:::0;;-1:-1:-1;;25672:21:0::1;;;::::0;;25727:15:::1;25704:20;:38:::0;25621:129::o;36771:171::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;36839:17:::1;::::0;::::1;;:25;;:17:::0;:25:::1;36831:67;;;::::0;-1:-1:-1;;;36831:67:0;;13560:2:1;36831:67:0::1;::::0;::::1;13542:21:1::0;13599:2;13579:18;;;13572:30;13638:31;13618:18;;;13611:59;13687:18;;36831:67:0::1;13358:353:1::0;36831:67:0::1;36909:17;:25:::0;;-1:-1:-1;;36909:25:0::1;::::0;;36771:171::o;11972:201::-;-1:-1:-1;;;;;12138:18:0;;;12106:7;12138:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11972:201::o;9263:238::-;9002:6;;-1:-1:-1;;;;;9002:6:0;8530:10;9064:23;9056:68;;;;-1:-1:-1;;;9056:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9366:22:0;::::1;9344:110;;;::::0;-1:-1:-1;;;9344:110:0;;13918:2:1;9344:110:0::1;::::0;::::1;13900:21:1::0;13957:2;13937:18;;;13930:30;13996:34;13976:18;;;13969:62;-1:-1:-1;;;14047:18:1;;;14040:36;14093:19;;9344:110:0::1;13716:402:1::0;9344:110:0::1;9465:28;9484:8;9465:18;:28::i;1692:98::-:0;1750:7;1777:5;1781:1;1777;:5;:::i;:::-;1770:12;1692:98;-1:-1:-1;;;1692:98:0:o;15211:380::-;-1:-1:-1;;;;;15347:19:0;;15339:68;;;;-1:-1:-1;;;15339:68:0;;14325:2:1;15339:68:0;;;14307:21:1;14364:2;14344:18;;;14337:30;14403:34;14383:18;;;14376:62;-1:-1:-1;;;14454:18:1;;;14447:34;14498:19;;15339:68:0;14123:400:1;15339:68:0;-1:-1:-1;;;;;15426:21:0;;15418:68;;;;-1:-1:-1;;;15418:68:0;;14730:2:1;15418:68:0;;;14712:21:1;14769:2;14749:18;;;14742:30;14808:34;14788:18;;;14781:62;-1:-1:-1;;;14859:18:1;;;14852:32;14901:19;;15418:68:0;14528:398:1;15418:68:0;-1:-1:-1;;;;;15499:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15551:32;;345:25:1;;;15551:32:0;;318:18:1;15551:32:0;;;;;;;15211:380;;;:::o;15599:502::-;15734:24;15761:25;15771:5;15778:7;15761:9;:25::i;:::-;15734:52;;-1:-1:-1;;15801:16:0;:37;15797:297;;15901:6;15881:16;:26;;15855:117;;;;-1:-1:-1;;;15855:117:0;;15133:2:1;15855:117:0;;;15115:21:1;15172:2;15152:18;;;15145:30;15211:31;15191:18;;;15184:59;15260:18;;15855:117:0;14931:353:1;15855:117:0;16016:51;16025:5;16032:7;16060:6;16041:16;:25;16016:8;:51::i;:::-;15723:378;15599:502;;;:::o;30794:2467::-;-1:-1:-1;;;;;30953:25:0;;30929:21;30953:25;;;:16;:25;;;;;;;;;:56;;-1:-1:-1;;;;;;30982:27:0;;;;;;:16;:27;;;;;;;;30953:56;30929:80;-1:-1:-1;;;;;;31028:21:0;;31020:71;;;;-1:-1:-1;;;31020:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;31110:23:0;;31102:71;;;;-1:-1:-1;;;31102:71:0;;;;;;;:::i;:::-;31188:7;31199:1;31188:12;31184:91;;31217:38;31233:7;31242:9;31253:1;31217:15;:38::i;31184:91::-;31309:8;;31285:10;;-1:-1:-1;;;;;31298:19:0;;;31309:8;;31298:19;:66;;;;-1:-1:-1;;;;;;31322:42:0;;;;;;:31;:42;;;;;;;;31321:43;31298:66;31402:8;;31285:79;;-1:-1:-1;31375:11:0;;-1:-1:-1;;;;;31389:21:0;;;31402:8;;31389:21;:66;;;;-1:-1:-1;;;;;;31415:40:0;;;;;;:31;:40;;;;;;;;31414:41;31389:66;31375:80;;31466:16;31496:7;9002:6;;-1:-1:-1;;;;;9002:6:0;;8929:87;31496:7;-1:-1:-1;;;;;31485:18:0;:7;-1:-1:-1;;;;;31485:18:0;;:42;;;-1:-1:-1;9002:6:0;;-1:-1:-1;;;;;31507:20:0;;;9002:6;;31507:20;31485:42;31466:61;-1:-1:-1;31538:12:0;-1:-1:-1;;;;;31553:23:0;;;;:55;;-1:-1:-1;;;;;;31580:28:0;;31601:6;31580:28;31553:55;31538:70;;31619:16;31638:11;:22;;;;31653:7;31638:22;:35;;;-1:-1:-1;31664:9:0;;-1:-1:-1;;;31664:9:0;;;;31638:35;31688:15;;31619:54;;-1:-1:-1;31688:15:0;;:31;;;;;31708:11;31707:12;31688:31;31684:912;;;31762:14;;;;;;;;:34;;;31780:16;31762:34;31736:118;;;;-1:-1:-1;;;31736:118:0;;16301:2:1;31736:118:0;;;16283:21:1;16340:2;16320:18;;;16313:30;-1:-1:-1;;;16359:18:1;;;16352:52;16421:18;;31736:118:0;16099:346:1;31736:118:0;31873:5;31869:716;;;31940:21;;31929:7;:32;;31899:159;;;;-1:-1:-1;;;31899:159:0;;16652:2:1;31899:159:0;;;16634:21:1;16691:2;16671:18;;;16664:30;16730:34;16710:18;;;16703:62;-1:-1:-1;;;16781:18:1;;;16774:51;16842:19;;31899:159:0;16450:417:1;31899:159:0;32141:10;;32117:20;32127:9;32117;:20::i;:::-;32107:30;;:7;:30;:::i;:::-;:44;;32077:137;;;;-1:-1:-1;;;32077:137:0;;17074:2:1;32077:137:0;;;17056:21:1;17113:2;17093:18;;;17086:30;-1:-1:-1;;;17132:18:1;;;17125:49;17191:18;;32077:137:0;16872:343:1;32077:137:0;31869:716;;;32240:6;32236:349;;-1:-1:-1;;;;;32293:42:0;;;;;;:31;:42;;;;;;;;32292:43;:105;;;;-1:-1:-1;;;;;;32357:40:0;;;;;;:31;:40;;;;;;;;32356:41;32292:105;32270:315;;;32496:10;;32472:20;32482:9;32472;:20::i;:::-;32462:30;;:7;:30;:::i;:::-;:44;;32432:137;;;;-1:-1:-1;;;32432:137:0;;17074:2:1;32432:137:0;;;17056:21:1;17113:2;17093:18;;;17086:30;-1:-1:-1;;;17132:18:1;;;17125:49;17191:18;;32432:137:0;16872:343:1;32432:137:0;32606:36;32623:9;32634:7;32606:16;:36::i;:::-;32658:9;;-1:-1:-1;;;32658:9:0;;;;32657:10;:57;;;;-1:-1:-1;;;;;;32685:29:0;;;;;;:20;:29;;;;;;;;32684:30;32657:57;:100;;;;-1:-1:-1;;;;;;32732:25:0;;;;;;:16;:25;;;;;;;;32731:26;32657:100;:145;;;;-1:-1:-1;;;;;;32775:27:0;;;;;;:16;:27;;;;;;;;32774:28;32657:145;32653:529;;;32819:28;32850:24;32868:4;32850:9;:24::i;:::-;32928:19;;32819:55;;-1:-1:-1;32904:43:0;;;32966:20;:18;:20::i;:::-;:48;;;;;33007:7;32966:48;:87;;;;;33037:16;33036:17;32966:87;32962:209;;;33074:9;:16;;-1:-1:-1;;;;33074:16:0;-1:-1:-1;;;33074:16:0;;;33109:10;:8;:10::i;:::-;33138:9;:17;;-1:-1:-1;;;;33138:17:0;;;32962:209;32804:378;;32653:529;33192:61;33210:7;33219:9;33230:6;33238:5;33245:7;33192:17;:61::i;:::-;30918:2343;;;;;;30794:2467;;;:::o;16374:708::-;-1:-1:-1;;;;;16505:18:0;;16497:68;;;;-1:-1:-1;;;16497:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16584:16:0;;16576:64;;;;-1:-1:-1;;;16576:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16726:15:0;;16704:19;16726:15;;;;;;;;;;;16774:21;;;;16752:109;;;;-1:-1:-1;;;16752:109:0;;17422:2:1;16752:109:0;;;17404:21:1;17461:2;17441:18;;;17434:30;17500:34;17480:18;;;17473:62;-1:-1:-1;;;17551:18:1;;;17544:36;17597:19;;16752:109:0;17220:402:1;16752:109:0;-1:-1:-1;;;;;16897:15:0;;;:9;:15;;;;;;;;;;;16915:20;;;16897:38;;16957:13;;;;;;;;:23;;16929:6;;16897:9;16957:23;;16929:6;;16957:23;:::i;:::-;;;;;;;;17013:2;-1:-1:-1;;;;;16998:26:0;17007:4;-1:-1:-1;;;;;16998:26:0;;17017:6;16998:26;;;;345:25:1;;333:2;318:18;;199:177;16998:26:0;;;;;;;;17037:37;16109:125;9509:191;9602:6;;;-1:-1:-1;;;;;9619:17:0;;;-1:-1:-1;;;;;;9619:17:0;;;;;;;9652:40;;9602:6;;;9619:17;9602:6;;9652:40;;9583:16;;9652:40;9572:128;9509:191;:::o;25758:230::-;-1:-1:-1;;;;;25841:26:0;;;;;;:20;:26;;;;;:34;;-1:-1:-1;;25841:34:0;;;;;;;25886:38;25841:26;:34;25886:25;:38::i;35798:473::-;35883:16;;;35897:1;35883:16;;;;;;;;35859:21;;35883:16;;;;;;;;;;-1:-1:-1;35883:16:0;35859:40;;35928:4;35910;35915:1;35910:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35910:23:0;;;:7;;;;;;;;;;:23;;;;35954:16;;:23;;;-1:-1:-1;;;35954:23:0;;;;:16;;;;;:21;;:23;;;;;35910:7;;35954:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35944:4;35949:1;35944:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;35944:33:0;;;:7;;;;;;;;;:33;36022:16;;35990:63;;36007:4;;36022:16;36041:11;35990:8;:63::i;:::-;36066:16;;:197;;-1:-1:-1;;;36066:197:0;;-1:-1:-1;;;;;36066:16:0;;;;:67;;:197;;36148:11;;36066:16;;36190:4;;36217;;36237:15;;36066:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35848:423;35798:473;:::o;33269:363::-;-1:-1:-1;;;;;33354:29:0;;;;;;:20;:29;;;;;;;;33350:275;;;-1:-1:-1;;;;;33454:31:0;;33400:17;33454:31;;;:20;:31;;;;;;33420:15;;33454:36;33450:85;;-1:-1:-1;;;;;33492:31:0;;;;;;:20;:31;;;;;:43;;;33450:85;33385:162;33269:363;;:::o;33350:275::-;33573:9;;-1:-1:-1;;;33573:9:0;;;;33568:45;;33584:19;:29;;-1:-1:-1;;;;;;33584:29:0;;-1:-1:-1;;;;;33584:29:0;;;;;;33568:45;33269:363;;:::o;29264:123::-;29317:4;29363:1;29341:19;:17;:19::i;:::-;:23;:38;;-1:-1:-1;29374:5:0;;29264:123::o;29341:38::-;-1:-1:-1;29367:4:0;;29264:123::o;33777:1638::-;33816:23;33842:24;33860:4;33842:9;:24::i;:::-;33816:50;;33877:23;33941:10;;33922:16;;33903;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;33877:74;-1:-1:-1;33966:20:0;;;:44;;-1:-1:-1;33990:20:0;;33966:44;33962:57;;;34012:7;;33777:1638::o;33962:57::-;34051:19;;34033:15;:37;34029:107;;;34105:19;;34087:37;;34029:107;34146:23;34229:1;34211:15;34191:16;;34173:15;:34;;;;:::i;:::-;34172:54;;;;:::i;:::-;:58;;;;:::i;:::-;34146:84;-1:-1:-1;34241:26:0;34270:36;:15;34146:84;34270:19;:36::i;:::-;34241:65;-1:-1:-1;34345:21:0;34377:31;34241:65;34377:11;:31::i;:::-;34419:18;34440:44;:21;34466:17;34440:25;:44::i;:::-;34419:65;;34495:23;34521:53;34558:15;34521:32;34536:16;;34521:10;:14;;:32;;;;:::i;:::-;:36;;:53::i;:::-;34495:79;;34585:25;34613:47;34644:15;34613:26;34628:10;;34613;:14;;:26;;;;:::i;:47::-;34585:75;-1:-1:-1;34671:23:0;34585:75;34697:28;34710:15;34697:10;:28;:::i;:::-;:48;;;;:::i;:::-;34671:74;;34780:1;34762:15;:19;:42;;;;;34803:1;34785:15;:19;34762:42;34758:277;;;34821:47;34835:15;34852;34821:13;:47::i;:::-;34992:16;;34888:135;;;19208:25:1;;;19264:2;19249:18;;19242:34;;;19292:18;;;19285:34;;;;34888:135:0;;;;;;19196:2:1;34888:135:0;;;34758:277;35066:1;35047:16;:20;;;35078:16;:20;;;35109:10;:14;;;35176:16;;35168:58;;-1:-1:-1;;;;;35176:16:0;;;;35206:15;;35066:1;35168:58;35066:1;35168:58;35206:15;35176:16;35168:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35136:90;;;35245:20;35237:29;;;;;;35319:10;;35311:54;;35278:27;;-1:-1:-1;;;;;35319:10:0;;35343:17;;35278:27;35311:54;35278:27;35311:54;35343:17;35319:10;35311:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35277:88;;;35384:22;35376:31;;;;;;33805:1610;;;;;;;;;;;33777:1638::o;29395:1391::-;29575:14;29592:32;29605:7;29614:9;29592:12;:32::i;:::-;-1:-1:-1;;;;;29660:25:0;;29637:19;29660:25;;;:16;:25;;;;;;29575:49;;-1:-1:-1;29660:25:0;;29659:26;;29698:1026;;29734:45;29751:7;29760:9;29771:7;29734:16;:45::i;:::-;29780:7;;;;29698:1026;29808:9;29804:920;;;29856:10;;29907:13;;29935:160;;;;29994:16;;29981:10;;:29;;;;:::i;:::-;29967:43;;30063:16;;30047:13;;:32;;;;:::i;:::-;30029:50;;29935:160;30113:8;30109:163;;;30169:17;;30156:10;;:30;;;;:::i;:::-;30142:44;;30239:17;;30223:13;;:33;;;;:::i;:::-;30205:51;;30109:163;30286:17;30306:33;30335:3;30306:24;:7;30318:11;30306;:24::i;:33::-;30286:53;;30404:11;30387:13;;30375:9;:25;;;;:::i;:::-;30374:41;;;;:::i;:::-;30354:16;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;30482:11:0;;-1:-1:-1;30451:27:0;30463:15;30451:9;:27;:::i;:::-;30450:43;;;;:::i;:::-;30430:16;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30535:7:0;;30546:11;;30523:19;;:9;:19;:::i;:::-;30522:35;;;;:::i;:::-;30508:10;;:49;;;;;;;:::i;:::-;;;;-1:-1:-1;;30578:13:0;;30574:104;;30612:50;30628:7;30645:4;30652:9;30612:15;:50::i;:::-;30692:20;30703:9;30692:20;;:::i;:::-;;;29819:905;;;29804:920;30734:44;30750:7;30759:9;30770:7;30734:15;:44::i;:::-;29564:1222;;29395:1391;;;;;;:::o;1586:98::-;1644:7;1671:5;1675:1;1671;:5;:::i;1798:98::-;1856:7;1883:5;1887:1;1883;:5;:::i;35423:363::-;35537:16;;35505:63;;35522:4;;-1:-1:-1;;;;;35537:16:0;35556:11;35505:8;:63::i;:::-;35579:16;;-1:-1:-1;;;;;35579:16:0;:32;35619:9;35652:4;35672:11;35579:16;;35730:7;9002:6;;-1:-1:-1;;;;;9002:6:0;;8929:87;35730:7;35579:199;;;;;;-1:-1:-1;;;;;;35579:199:0;;;-1:-1:-1;;;;;19689:15:1;;;35579:199:0;;;19671:34:1;19721:18;;;19714:34;;;;19764:18;;;19757:34;;;;19807:18;;;19800:34;19871:15;;;19850:19;;;19843:44;35752:15:0;19903:19:1;;;19896:35;19605:19;;35579:199:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13523:674::-;-1:-1:-1;;;;;13666:21:0;;13658:71;;;;-1:-1:-1;;;13658:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13748:23:0;;13740:71;;;;-1:-1:-1;;;13740:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;13910:18:0;;;13886:21;13910:18;;;;;;;;;;;;;13987:23;;;13966:44;;;14042:20;;;;;;;:31;;14003:7;;13886:21;14042:31;;14003:7;;14042:31;:::i;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;381:597::-;493:4;522:2;551;540:9;533:21;583:6;577:13;626:6;621:2;610:9;606:18;599:34;651:1;661:140;675:6;672:1;669:13;661:140;;;770:14;;;766:23;;760:30;736:17;;;755:2;732:26;725:66;690:10;;661:140;;;819:6;816:1;813:13;810:91;;;889:1;884:2;875:6;864:9;860:22;856:31;849:42;810:91;-1:-1:-1;962:2:1;941:15;-1:-1:-1;;937:29:1;922:45;;;;969:2;918:54;;381:597;-1:-1:-1;;;381:597:1:o;983:131::-;-1:-1:-1;;;;;1058:31:1;;1048:42;;1038:70;;1104:1;1101;1094:12;1119:315;1187:6;1195;1248:2;1236:9;1227:7;1223:23;1219:32;1216:52;;;1264:1;1261;1254:12;1216:52;1303:9;1290:23;1322:31;1347:5;1322:31;:::i;:::-;1372:5;1424:2;1409:18;;;;1396:32;;-1:-1:-1;;;1119:315:1:o;1839:456::-;1916:6;1924;1932;1985:2;1973:9;1964:7;1960:23;1956:32;1953:52;;;2001:1;1998;1991:12;1953:52;2040:9;2027:23;2059:31;2084:5;2059:31;:::i;:::-;2109:5;-1:-1:-1;2166:2:1;2151:18;;2138:32;2179:33;2138:32;2179:33;:::i;:::-;1839:456;;2231:7;;-1:-1:-1;;;2285:2:1;2270:18;;;;2257:32;;1839:456::o;2300:247::-;2359:6;2412:2;2400:9;2391:7;2387:23;2383:32;2380:52;;;2428:1;2425;2418:12;2380:52;2467:9;2454:23;2486:31;2511:5;2486:31;:::i;2975:160::-;3040:20;;3096:13;;3089:21;3079:32;;3069:60;;3125:1;3122;3115:12;3140:316;3214:6;3222;3230;3283:2;3271:9;3262:7;3258:23;3254:32;3251:52;;;3299:1;3296;3289:12;3251:52;3335:9;3322:23;3312:33;;3392:2;3381:9;3377:18;3364:32;3354:42;;3415:35;3446:2;3435:9;3431:18;3415:35;:::i;:::-;3405:45;;3140:316;;;;;:::o;3461:315::-;3526:6;3534;3587:2;3575:9;3566:7;3562:23;3558:32;3555:52;;;3603:1;3600;3593:12;3555:52;3642:9;3629:23;3661:31;3686:5;3661:31;:::i;:::-;3711:5;-1:-1:-1;3735:35:1;3766:2;3751:18;;3735:35;:::i;:::-;3725:45;;3461:315;;;;;:::o;4302:388::-;4370:6;4378;4431:2;4419:9;4410:7;4406:23;4402:32;4399:52;;;4447:1;4444;4437:12;4399:52;4486:9;4473:23;4505:31;4530:5;4505:31;:::i;:::-;4555:5;-1:-1:-1;4612:2:1;4597:18;;4584:32;4625:33;4584:32;4625:33;:::i;:::-;4677:7;4667:17;;;4302:388;;;;;:::o;4695:356::-;4897:2;4879:21;;;4916:18;;;4909:30;4975:34;4970:2;4955:18;;4948:62;5042:2;5027:18;;4695:356::o;5056:380::-;5135:1;5131:12;;;;5178;;;5199:61;;5253:4;5245:6;5241:17;5231:27;;5199:61;5306:2;5298:6;5295:14;5275:18;5272:38;5269:161;;5352:10;5347:3;5343:20;5340:1;5333:31;5387:4;5384:1;5377:15;5415:4;5412:1;5405:15;5269:161;;5056:380;;;:::o;5441:251::-;5511:6;5564:2;5552:9;5543:7;5539:23;5535:32;5532:52;;;5580:1;5577;5570:12;5532:52;5612:9;5606:16;5631:31;5656:5;5631:31;:::i;5697:188::-;5776:13;;-1:-1:-1;;;;;5818:42:1;;5808:53;;5798:81;;5875:1;5872;5865:12;5890:450;5977:6;5985;5993;6046:2;6034:9;6025:7;6021:23;6017:32;6014:52;;;6062:1;6059;6052:12;6014:52;6085:40;6115:9;6085:40;:::i;:::-;6075:50;;6144:49;6189:2;6178:9;6174:18;6144:49;:::i;:::-;6134:59;;6236:2;6225:9;6221:18;6215:25;6280:10;6273:5;6269:22;6262:5;6259:33;6249:61;;6306:1;6303;6296:12;6249:61;6329:5;6319:15;;;5890:450;;;;;:::o;6345:179::-;6423:13;;6476:22;6465:34;;6455:45;;6445:73;;6514:1;6511;6504:12;6529:473;6632:6;6640;6648;6656;6664;6717:3;6705:9;6696:7;6692:23;6688:33;6685:53;;;6734:1;6731;6724:12;6685:53;6757:39;6786:9;6757:39;:::i;:::-;6747:49;;6836:2;6825:9;6821:18;6815:25;6805:35;;6880:2;6869:9;6865:18;6859:25;6849:35;;6924:2;6913:9;6909:18;6903:25;6893:35;;6947:49;6991:3;6980:9;6976:19;6947:49;:::i;:::-;6937:59;;6529:473;;;;;;;;:::o;7007:273::-;7075:6;7128:2;7116:9;7107:7;7103:23;7099:32;7096:52;;;7144:1;7141;7134:12;7096:52;7176:9;7170:16;7226:4;7219:5;7215:16;7208:5;7205:27;7195:55;;7246:1;7243;7236:12;7285:127;7346:10;7341:3;7337:20;7334:1;7327:31;7377:4;7374:1;7367:15;7401:4;7398:1;7391:15;7417:422;7506:1;7549:5;7506:1;7563:270;7584:7;7574:8;7571:21;7563:270;;;7643:4;7639:1;7635:6;7631:17;7625:4;7622:27;7619:53;;;7652:18;;:::i;:::-;7702:7;7692:8;7688:22;7685:55;;;7722:16;;;;7685:55;7801:22;;;;7761:15;;;;7563:270;;;7567:3;7417:422;;;;;:::o;7844:806::-;7893:5;7923:8;7913:80;;-1:-1:-1;7964:1:1;7978:5;;7913:80;8012:4;8002:76;;-1:-1:-1;8049:1:1;8063:5;;8002:76;8094:4;8112:1;8107:59;;;;8180:1;8175:130;;;;8087:218;;8107:59;8137:1;8128:10;;8151:5;;;8175:130;8212:3;8202:8;8199:17;8196:43;;;8219:18;;:::i;:::-;-1:-1:-1;;8275:1:1;8261:16;;8290:5;;8087:218;;8389:2;8379:8;8376:16;8370:3;8364:4;8361:13;8357:36;8351:2;8341:8;8338:16;8333:2;8327:4;8324:12;8320:35;8317:77;8314:159;;;-1:-1:-1;8426:19:1;;;8458:5;;8314:159;8505:34;8530:8;8524:4;8505:34;:::i;:::-;8575:6;8571:1;8567:6;8563:19;8554:7;8551:32;8548:58;;;8586:18;;:::i;:::-;8624:20;;7844:806;-1:-1:-1;;;7844:806:1:o;8655:131::-;8715:5;8744:36;8771:8;8765:4;8744:36;:::i;8791:168::-;8831:7;8897:1;8893;8889:6;8885:14;8882:1;8879:21;8874:1;8867:9;8860:17;8856:45;8853:71;;;8904:18;;:::i;:::-;-1:-1:-1;8944:9:1;;8791:168::o;8964:217::-;9004:1;9030;9020:132;;9074:10;9069:3;9065:20;9062:1;9055:31;9109:4;9106:1;9099:15;9137:4;9134:1;9127:15;9020:132;-1:-1:-1;9166:9:1;;8964:217::o;10029:128::-;10069:3;10100:1;10096:6;10093:1;10090:13;10087:39;;;10106:18;;:::i;:::-;-1:-1:-1;10142:9:1;;10029:128::o;11291:184::-;11361:6;11414:2;11402:9;11393:7;11389:23;11385:32;11382:52;;;11430:1;11427;11420:12;11382:52;-1:-1:-1;11453:16:1;;11291:184;-1:-1:-1;11291:184:1:o;15289:401::-;15491:2;15473:21;;;15530:2;15510:18;;;15503:30;15569:34;15564:2;15549:18;;15542:62;-1:-1:-1;;;15635:2:1;15620:18;;15613:35;15680:3;15665:19;;15289:401::o;15695:399::-;15897:2;15879:21;;;15936:2;15916:18;;;15909:30;15975:34;15970:2;15955:18;;15948:62;-1:-1:-1;;;16041:2:1;16026:18;;16019:33;16084:3;16069:19;;15695:399::o;17759:127::-;17820:10;17815:3;17811:20;17808:1;17801:31;17851:4;17848:1;17841:15;17875:4;17872:1;17865:15;17891:980;18153:4;18201:3;18190:9;18186:19;18232:6;18221:9;18214:25;18258:2;18296:6;18291:2;18280:9;18276:18;18269:34;18339:3;18334:2;18323:9;18319:18;18312:31;18363:6;18398;18392:13;18429:6;18421;18414:22;18467:3;18456:9;18452:19;18445:26;;18506:2;18498:6;18494:15;18480:29;;18527:1;18537:195;18551:6;18548:1;18545:13;18537:195;;;18616:13;;-1:-1:-1;;;;;18612:39:1;18600:52;;18707:15;;;;18672:12;;;;18648:1;18566:9;18537:195;;;-1:-1:-1;;;;;;;18788:32:1;;;;18783:2;18768:18;;18761:60;-1:-1:-1;;;18852:3:1;18837:19;18830:35;18749:3;17891:980;-1:-1:-1;;;17891:980:1:o;18876:125::-;18916:4;18944:1;18941;18938:8;18935:34;;;18949:18;;:::i;:::-;-1:-1:-1;18986:9:1;;18876:125::o;19942:306::-;20030:6;20038;20046;20099:2;20087:9;20078:7;20074:23;20070:32;20067:52;;;20115:1;20112;20105:12;20067:52;20144:9;20138:16;20128:26;;20194:2;20183:9;20179:18;20173:25;20163:35;;20238:2;20227:9;20223:18;20217:25;20207:35;;19942:306;;;;;:::o

Swarm Source

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