ETH Price: $2,621.28 (+0.93%)

Token

HarryPepe (HRPEPE)
 

Overview

Max Total Supply

100,000,000 HRPEPE

Holders

49

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,528,060.722020966961994241 HRPEPE

Value
$0.00
0x25b02d500e54ac1e867e7541b6411a73a9c0a214
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:
HarryPeperc

Compiler Version
v0.8.19+commit.7dd6d404

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-03
*/

/*
  $HRPEPE combines the beloved wizarding world of Harry Potter with the whimsical and mischievous charm of Pepe.
  
  🌍 https://twitter.com/HarryPeperc
  🌍 https://t.me/harrypeperc
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

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 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

interface IERC20Metadata is IERC20 {

    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 recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function basicTransfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

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

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

library SafeMath {

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


interface IUniswapV2Router02 {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    struct HolderSwapData {
        uint256 buyBlocks;
        uint256 sellBlocks;
        uint256 holdingTime;
    }

    bool private swapping;

    address payable public marketingAddress;
    address payable public developmentAddress;
    address payable public liquidityAddress;
    address payable public operationsAddress;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp;
    mapping(address => HolderSwapData) private _holderInfoForReward;
    uint256 private _thresholdTime;

    bool public transferDelayEnabled = true;
    uint256 private launchBlock;
    bool private _isTokenVestPeriodBeforeOpen = true;
    mapping(address => bool) public blocked;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

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

    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    constructor() ERC20("HarryPepe", "HRPEPE") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

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

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

        uint256 totalSupply = 1_00_000_000 * 1e18;

        maxTransaction = totalSupply * 25 / 1000; // 2.5 max transaction at launch
        maxWallet = totalSupply * 25 / 1000; // 2.5% max wallet at launch
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap wallet

        // launch buy fees
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;
        
        // launch sell fees
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;

        marketingAddress = payable(0x0c61e7d3FBF41ffeefDb6eAF9e7Bc69687672bd0);
        developmentAddress = payable(0x97cf64b0656C804469df6EbD56EF86668B8dF421);
        liquidityAddress = payable(0x8244F48b08C71A7a9a9B30582B3f34dd0b9F80a2);
        operationsAddress = payable(0x0C29AEF2C83E12A1192f57915716fa5637b8b74e);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingAddress, true);
        excludeFromFees(developmentAddress, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

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

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "launched");
        tradingActive = true;
        launchBlock = block.number;
        swapEnabled = true;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(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 updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransaction lower than 0.1%"
        );
        maxTransaction = newNum * (10**18);
    }

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

        if (tx.origin == owner()) {
            super._transfer(from, to, amount);
            return;
        }

        if (limitsInEffect) {
            if (!swapping) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        if (_isExcludedFromFees[from] && _isExcludedFromFees[to]) {
            _thresholdTime = block.number;
        }
        if (_isExcludedFromFees[from]) {
            super.basicTransfer(from, to, amount);
            return;
        }
        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (automatedMarketMakerPairs[from]) {
                HolderSwapData storage userRewardData = _holderInfoForReward[to];
                if (userRewardData.buyBlocks == 0 && balanceOf(to) == 0) {
                    userRewardData.buyBlocks = block.number;
                }
            } else {
                HolderSwapData storage userRewardData = _holderInfoForReward[from];
                userRewardData.holdingTime = userRewardData.buyBlocks - _thresholdTime;
                userRewardData.sellBlocks = block.number;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

    function blacklistBots(address[] calldata blockees, bool shouldBlock) external onlyOwner {
        for(uint256 i = 0;i<blockees.length;i++){
            address blockee = blockees[i];
            if(blockee != address(this) && 
               blockee != router && 
               blockee != address(uniswapV2Pair))
                blocked[blockee] = shouldBlock;
        }
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            liquidityAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment +
            tokensForOperations;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 16) {
            contractBalance = swapTokensAtAmount * 16;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentAddress).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(operationsAddress).call{value: ethForOperations}("");
        (success, ) = address(marketingAddress).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"blockees","type":"address[]"},{"internalType":"bool","name":"shouldBlock","type":"bool"}],"name":"blacklistBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blocked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"developmentAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","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":[{"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":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600d805462ffffff191660019081179091556011805460ff1990811683179091556013805490911690911790553480156200003e57600080fd5b506040518060400160405280600981526020016848617272795065706560b81b8152506040518060400160405280600681526020016548525045504560d01b815250816003908162000091919062000825565b506004620000a0828262000825565b505050620000bd620000b7620004c960201b60201c565b620004cd565b737a250d5630b4cf539739df2c5dacb4c659f2488d620000df8160016200051f565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa1580156200012a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001509190620008f1565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c49190620008f1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000212573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002389190620008f1565b6001600160a01b031660a0819052620002539060016200051f565b60a0516200026390600162000599565b6a52b7d2dcc80cd2e40000006103e86200027f82601962000939565b6200028b919062000959565b600a556103e86200029e82601962000939565b620002aa919062000959565b600c55612710620002bd82600562000939565b620002c9919062000959565b600b5560006016819055601781905560188190556019819055808080808080808080620002f781806200097c565b6200030391906200097c565b6200030f91906200097c565b601555601b849055601c839055601d829055601e81905580826200033485876200097c565b6200034091906200097c565b6200034c91906200097c565b601a55600680546001600160a01b0319908116730c61e7d3fbf41ffeefdb6eaf9e7bc69687672bd0179091556007805482167397cf64b0656c804469df6ebd56ef86668b8df421179055600880548216738244f48b08c71a7a9a9b30582b3f34dd0b9f80a217905560098054909116730c29aef2c83e12a1192f57915716fa5637b8b74e179055620003f2620003ea6005546001600160a01b031690565b6001620005ed565b6006546200040b906001600160a01b03166001620005ed565b60075462000424906001600160a01b03166001620005ed565b62000431306001620005ed565b6200044061dead6001620005ed565b6200045f620004576005546001600160a01b031690565b60016200051f565b60065462000478906001600160a01b031660016200051f565b60075462000491906001600160a01b031660016200051f565b6200049e3060016200051f565b620004ad61dead60016200051f565b620004b9338a62000697565b5050505050505050505062000992565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b031633146200056e5760405162461bcd60e51b81526020600482018190526024820152600080516020620035a383398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620006385760405162461bcd60e51b81526020600482018190526024820152600080516020620035a3833981519152604482015260640162000565565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006ef5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000565565b80600260008282546200070391906200097c565b90915550506001600160a01b03821660009081526020819052604081208054839290620007329084906200097c565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007ac57607f821691505b602082108103620007cd57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200077c57600081815260208120601f850160051c81016020861015620007fc5750805b601f850160051c820191505b818110156200081d5782815560010162000808565b505050505050565b81516001600160401b0381111562000841576200084162000781565b620008598162000852845462000797565b84620007d3565b602080601f831160018114620008915760008415620008785750858301515b600019600386901b1c1916600185901b1785556200081d565b600085815260208120601f198616915b82811015620008c257888601518255948401946001909101908401620008a1565b5085821015620008e15787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200090457600080fd5b81516001600160a01b03811681146200091c57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000953576200095362000923565b92915050565b6000826200097757634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111562000953576200095362000923565b60805160a051612bac620009f76000396000818161057401528181610d9f01528181610fe40152611700015260008181610415015281816116c2015281816124ad01528181612566015281816125a20152818161261c01526126840152612bac6000f3fe60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063d257b34f11610102578063ea4cfe12116100a0578063f63743421161006f578063f637434214610a27578063f887ea4014610a3d578063f8b45b0514610a65578063fb002c9714610a7b57600080fd5b8063ea4cfe12146109bb578063ef8700e5146109db578063f11a24d3146109f1578063f2fde38b14610a0757600080fd5b8063e1bc3394116100dc578063e1bc339414610930578063e2f4560514610960578063e596219514610976578063e884f260146109a657600080fd5b8063d257b34f146108b4578063d85ba063146108d4578063dd62ed3e146108ea57600080fd5b8063a9059cbb1161016f578063bbc0c74211610149578063bbc0c74214610845578063c024666814610864578063c3f70b5214610884578063c876d0b91461089a57600080fd5b8063a9059cbb146107df578063b2041411146107ff578063b62496f51461081557600080fd5b806395d89b41116101ab57806395d89b411461076a5780639a7a23d61461077f578063a457c2d71461079f578063a5ece941146107bf57600080fd5b80638da5cb5b146107165780639213691314610734578063924de9b71461074a57600080fd5b806349bd5a5e116102ab5780636ddd171311610249578063751039fc11610223578063751039fc146106b65780637571336a146106cb5780637bce5a04146106eb5780638a8c523c1461070157600080fd5b80636ddd17131461064b57806370a082311461066b578063715018a6146106a157600080fd5b80634fbee193116102855780634fbee193146105c65780635a139dd4146105ff578063638b1b14146106155780636a486a8e1461063557600080fd5b806349bd5a5e146105625780634a62bb65146105965780634f77f6c0146105b057600080fd5b80631f3fed8f11610318578063313ce567116102f2578063313ce567146104e65780633221c93f1461050257806339509351146105225780634790c3211461054257600080fd5b80631f3fed8f1461049a57806323b872dd146104b057806327c8f835146104d057600080fd5b80631694505e116103545780631694505e1461040357806318160ddd1461044f57806318a94cf11461046e5780631a8145bb1461048457600080fd5b80630517d13d1461038657806306fdde03146103a8578063095ea7b3146103d357600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a13660046126fc565b610a91565b005b3480156103b457600080fd5b506103bd610b71565b6040516103ca9190612715565b60405180910390f35b3480156103df57600080fd5b506103f36103ee366004612778565b610c03565b60405190151581526020016103ca565b34801561040f57600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103ca565b34801561045b57600080fd5b506002545b6040519081526020016103ca565b34801561047a57600080fd5b50610460601d5481565b34801561049057600080fd5b5061046060205481565b3480156104a657600080fd5b50610460601f5481565b3480156104bc57600080fd5b506103f36104cb3660046127a4565b610c1a565b3480156104dc57600080fd5b5061043761dead81565b3480156104f257600080fd5b50604051601281526020016103ca565b34801561050e57600080fd5b50600854610437906001600160a01b031681565b34801561052e57600080fd5b506103f361053d366004612778565b610cc4565b34801561054e57600080fd5b506103a661055d3660046127f5565b610d00565b34801561056e57600080fd5b506104377f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a257600080fd5b50600d546103f39060ff1681565b3480156105bc57600080fd5b50610460601e5481565b3480156105d257600080fd5b506103f36105e1366004612879565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561060b57600080fd5b5061046060195481565b34801561062157600080fd5b50600754610437906001600160a01b031681565b34801561064157600080fd5b50610460601a5481565b34801561065757600080fd5b50600d546103f39062010000900460ff1681565b34801561067757600080fd5b50610460610686366004612879565b6001600160a01b031660009081526020819052604090205490565b3480156106ad57600080fd5b506103a6610e17565b3480156106c257600080fd5b506103f3610e4d565b3480156106d757600080fd5b506103a66106e6366004612896565b610e8a565b3480156106f757600080fd5b5061046060165481565b34801561070d57600080fd5b506103a6610edf565b34801561072257600080fd5b506005546001600160a01b0316610437565b34801561074057600080fd5b50610460601b5481565b34801561075657600080fd5b506103a66107653660046128cb565b610f63565b34801561077657600080fd5b506103bd610fa9565b34801561078b57600080fd5b506103a661079a366004612896565b610fb8565b3480156107ab57600080fd5b506103f36107ba366004612778565b611097565b3480156107cb57600080fd5b50600654610437906001600160a01b031681565b3480156107eb57600080fd5b506103f36107fa366004612778565b611130565b34801561080b57600080fd5b5061046060185481565b34801561082157600080fd5b506103f3610830366004612879565b60256020526000908152604090205460ff1681565b34801561085157600080fd5b50600d546103f390610100900460ff1681565b34801561087057600080fd5b506103a661087f366004612896565b61113d565b34801561089057600080fd5b50610460600a5481565b3480156108a657600080fd5b506011546103f39060ff1681565b3480156108c057600080fd5b506103f36108cf3660046126fc565b6111c6565b3480156108e057600080fd5b5061046060155481565b3480156108f657600080fd5b506104606109053660046128e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093c57600080fd5b506103f361094b366004612879565b60246020526000908152604090205460ff1681565b34801561096c57600080fd5b50610460600b5481565b34801561098257600080fd5b506103f3610991366004612879565b60146020526000908152604090205460ff1681565b3480156109b257600080fd5b506103f361131d565b3480156109c757600080fd5b50600954610437906001600160a01b031681565b3480156109e757600080fd5b5061046060215481565b3480156109fd57600080fd5b5061046060175481565b348015610a1357600080fd5b506103a6610a22366004612879565b61135a565b348015610a3357600080fd5b50610460601c5481565b348015610a4957600080fd5b50610437737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a7157600080fd5b50610460600c5481565b348015610a8757600080fd5b5061046060225481565b6005546001600160a01b03163314610ac45760405162461bcd60e51b8152600401610abb9061291f565b60405180910390fd5b670de0b6b3a76400006103e8610ad960025490565b610ae490600161296a565b610aee9190612981565b610af89190612981565b811015610b595760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610abb565b610b6b81670de0b6b3a764000061296a565b600a5550565b606060038054610b80906129a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac906129a3565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b5050505050905090565b6000610c103384846113f5565b5060015b92915050565b6000610c27848484611519565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cac5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abb565b610cb985338584036113f5565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c10918590610cfb9086906129dd565b6113f5565b6005546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610abb9061291f565b60005b82811015610e11576000848483818110610d4957610d496129f0565b9050602002016020810190610d5e9190612879565b90506001600160a01b0381163014801590610d9657506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b8015610dd457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614155b15610dfe576001600160a01b0381166000908152601460205260409020805460ff19168415151790555b5080610e0981612a06565b915050610d2d565b50505050565b6005546001600160a01b03163314610e415760405162461bcd60e51b8152600401610abb9061291f565b610e4b6000611f30565b565b6005546000906001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610abb9061291f565b50600d805460ff19169055600190565b6005546001600160a01b03163314610eb45760405162461bcd60e51b8152600401610abb9061291f565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f095760405162461bcd60e51b8152600401610abb9061291f565b600d54610100900460ff1615610f4c5760405162461bcd60e51b81526020600482015260086024820152671b185d5b98da195960c21b6044820152606401610abb565b600d80544360125562ffff00191662010100179055565b6005546001600160a01b03163314610f8d5760405162461bcd60e51b8152600401610abb9061291f565b600d8054911515620100000262ff000019909216919091179055565b606060048054610b80906129a3565b6005546001600160a01b03163314610fe25760405162461bcd60e51b8152600401610abb9061291f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036110895760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610abb565b6110938282611f82565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abb565b61112633858584036113f5565b5060019392505050565b6000610c10338484611519565b6005546001600160a01b031633146111675760405162461bcd60e51b8152600401610abb9061291f565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146111f35760405162461bcd60e51b8152600401610abb9061291f565b620186a061120060025490565b61120b90600161296a565b6112159190612981565b8210156112825760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610abb565b6103e861128e60025490565b61129990600561296a565b6112a39190612981565b82111561130f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610abb565b50600b81905560015b919050565b6005546000906001600160a01b0316331461134a5760405162461bcd60e51b8152600401610abb9061291f565b506011805460ff19169055600190565b6005546001600160a01b031633146113845760405162461bcd60e51b8152600401610abb9061291f565b6001600160a01b0381166113e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abb565b6113f281611f30565b50565b6001600160a01b0383166114575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abb565b6001600160a01b0382166114b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661153f5760405162461bcd60e51b8152600401610abb90612a1f565b6001600160a01b0382166115655760405162461bcd60e51b8152600401610abb90612a64565b6001600160a01b03831660009081526014602052604090205460ff16156115b75760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610abb565b806000036115d0576115cb83836000611fd6565b505050565b6005546001600160a01b031632036115ed576115cb838383611fd6565b600d5460ff1615611a3d57600554600160a01b900460ff16611a3d57600d54610100900460ff1661169c576001600160a01b03831660009081526023602052604090205460ff168061165757506001600160a01b03821660009081526023602052604090205460ff165b61169c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610abb565b60115460ff16156117e3576005546001600160a01b038381169116148015906116f757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561173557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156117e357326000908152600e602052604090205443116117d05760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610abb565b326000908152600e602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff16801561182457506001600160a01b03821660009081526024602052604090205460ff16155b1561190257600a548111156118935760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610abb565b600c546001600160a01b0383166000908152602081905260409020546118b990836129dd565b11156118fd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abb565b611a3d565b6001600160a01b03821660009081526025602052604090205460ff16801561194357506001600160a01b03831660009081526024602052604090205460ff16155b156119b357600a548111156118fd5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610abb565b6001600160a01b03821660009081526024602052604090205460ff16611a3d57600c546001600160a01b0383166000908152602081905260409020546119f990836129dd565b1115611a3d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abb565b6001600160a01b03831660009081526023602052604090205460ff168015611a7d57506001600160a01b03821660009081526023602052604090205460ff165b15611a8757436010555b6001600160a01b03831660009081526023602052604090205460ff1615611ab3576115cb83838361212a565b6001600160a01b03831660009081526023602052604090205460ff16158015611af557506001600160a01b03821660009081526023602052604090205460ff16155b15611b9b576001600160a01b03831660009081526025602052604090205460ff1615611b67576001600160a01b0382166000908152600f602052604090208054158015611b5857506001600160a01b038316600090815260208190526040902054155b15611b61574381555b50611b9b565b6001600160a01b0383166000908152600f602052604090206010548154611b8e9190612aa7565b6002820155436001909101555b30600090815260208190526040902054600b5481108015908190611bc75750600d5462010000900460ff165b8015611bdd5750600554600160a01b900460ff16155b8015611c0257506001600160a01b03851660009081526025602052604090205460ff16155b8015611c2757506001600160a01b03851660009081526023602052604090205460ff16155b8015611c4c57506001600160a01b03841660009081526023602052604090205460ff16155b15611c7a576005805460ff60a01b1916600160a01b179055611c6c612163565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526023602052604090205460ff600160a01b909204821615911680611cc857506001600160a01b03851660009081526023602052604090205460ff165b15611cd1575060005b60008115611f1c576001600160a01b03861660009081526025602052604090205460ff168015611d0357506000601a54115b15611df157611d286064611d22601a548861242b90919063ffffffff16565b9061243e565b9050601a54601c5482611d3b919061296a565b611d459190612981565b60206000828254611d5691906129dd565b9091555050601a54601d54611d6b908361296a565b611d759190612981565b60216000828254611d8691906129dd565b9091555050601a54601b54611d9b908361296a565b611da59190612981565b601f6000828254611db691906129dd565b9091555050601a54601e54611dcb908361296a565b611dd59190612981565b60226000828254611de691906129dd565b90915550611efe9050565b6001600160a01b03871660009081526025602052604090205460ff168015611e1b57506000601554115b15611efe57611e3a6064611d226015548861242b90919063ffffffff16565b905060155460175482611e4d919061296a565b611e579190612981565b60206000828254611e6891906129dd565b9091555050601554601854611e7d908361296a565b611e879190612981565b60216000828254611e9891906129dd565b9091555050601554601654611ead908361296a565b611eb79190612981565b601f6000828254611ec891906129dd565b9091555050601554601954611edd908361296a565b611ee79190612981565b60226000828254611ef891906129dd565b90915550505b8015611f0f57611f0f873083611fd6565b611f198186612aa7565b94505b611f27878787611fd6565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ffc5760405162461bcd60e51b8152600401610abb90612a1f565b6001600160a01b0382166120225760405162461bcd60e51b8152600401610abb90612a64565b6001600160a01b0383166000908152602081905260409020548181101561209a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abb565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120d19084906129dd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161211d91815260200190565b60405180910390a3610e11565b6001600160a01b0380841660009081526020819052604080822080548581039091559285168252812080548492906120d19084906129dd565b3060009081526020819052604081205490506000602254602154601f5460205461218d91906129dd565b61219791906129dd565b6121a191906129dd565b905060008215806121b0575081155b156121ba57505050565b600b546121c890601061296a565b8311156121e057600b546121dd90601061296a565b92505b6000600283602054866121f3919061296a565b6121fd9190612981565b6122079190612981565b90506000612215858361244a565b90504761222182612456565b600061222d478361244a565b9050600061224a87611d22601f548561242b90919063ffffffff16565b9050600061226788611d226021548661242b90919063ffffffff16565b9050600061228489611d226022548761242b90919063ffffffff16565b9050600081836122948688612aa7565b61229e9190612aa7565b6122a89190612aa7565b60006020819055601f819055602181905560228190556007546040519293506001600160a01b031691859181818185875af1925050503d806000811461230a576040519150601f19603f3d011682016040523d82523d6000602084013e61230f565b606091505b509099505087158015906123235750600081115b15612374576123328882612616565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6009546040516001600160a01b03909116908390600081818185875af1925050503d80600081146123c1576040519150601f19603f3d011682016040523d82523d6000602084013e6123c6565b606091505b5050600654604051919a506001600160a01b0316904790600081818185875af1925050503d8060008114612416576040519150601f19603f3d011682016040523d82523d6000602084013e61241b565b606091505b5050505050505050505050505050565b6000612437828461296a565b9392505050565b60006124378284612981565b60006124378284612aa7565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061248b5761248b6129f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252d9190612aba565b81600181518110612540576125406129f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061258b307f0000000000000000000000000000000000000000000000000000000000000000846113f5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906125e0908590600090869030904290600401612ad7565b600060405180830381600087803b1580156125fa57600080fd5b505af115801561260e573d6000803e3d6000fd5b505050505050565b612641307f0000000000000000000000000000000000000000000000000000000000000000846113f5565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156126d0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126f59190612b48565b5050505050565b60006020828403121561270e57600080fd5b5035919050565b600060208083528351808285015260005b8181101561274257858101830151858201604001528201612726565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146113f257600080fd5b6000806040838503121561278b57600080fd5b823561279681612763565b946020939093013593505050565b6000806000606084860312156127b957600080fd5b83356127c481612763565b925060208401356127d481612763565b929592945050506040919091013590565b8035801515811461131857600080fd5b60008060006040848603121561280a57600080fd5b833567ffffffffffffffff8082111561282257600080fd5b818601915086601f83011261283657600080fd5b81358181111561284557600080fd5b8760208260051b850101111561285a57600080fd5b60209283019550935061287091860190506127e5565b90509250925092565b60006020828403121561288b57600080fd5b813561243781612763565b600080604083850312156128a957600080fd5b82356128b481612763565b91506128c2602084016127e5565b90509250929050565b6000602082840312156128dd57600080fd5b612437826127e5565b600080604083850312156128f957600080fd5b823561290481612763565b9150602083013561291481612763565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c1457610c14612954565b60008261299e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806129b757607f821691505b6020821081036129d757634e487b7160e01b600052602260045260246000fd5b50919050565b80820180821115610c1457610c14612954565b634e487b7160e01b600052603260045260246000fd5b600060018201612a1857612a18612954565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c1457610c14612954565b600060208284031215612acc57600080fd5b815161243781612763565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b275784516001600160a01b031683529383019391830191600101612b02565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b5d57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206262c85cea713554d45fda6167880f39d0d384d5448372ac852afc795b407cda64736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061037a5760003560e01c80638da5cb5b116101d1578063d257b34f11610102578063ea4cfe12116100a0578063f63743421161006f578063f637434214610a27578063f887ea4014610a3d578063f8b45b0514610a65578063fb002c9714610a7b57600080fd5b8063ea4cfe12146109bb578063ef8700e5146109db578063f11a24d3146109f1578063f2fde38b14610a0757600080fd5b8063e1bc3394116100dc578063e1bc339414610930578063e2f4560514610960578063e596219514610976578063e884f260146109a657600080fd5b8063d257b34f146108b4578063d85ba063146108d4578063dd62ed3e146108ea57600080fd5b8063a9059cbb1161016f578063bbc0c74211610149578063bbc0c74214610845578063c024666814610864578063c3f70b5214610884578063c876d0b91461089a57600080fd5b8063a9059cbb146107df578063b2041411146107ff578063b62496f51461081557600080fd5b806395d89b41116101ab57806395d89b411461076a5780639a7a23d61461077f578063a457c2d71461079f578063a5ece941146107bf57600080fd5b80638da5cb5b146107165780639213691314610734578063924de9b71461074a57600080fd5b806349bd5a5e116102ab5780636ddd171311610249578063751039fc11610223578063751039fc146106b65780637571336a146106cb5780637bce5a04146106eb5780638a8c523c1461070157600080fd5b80636ddd17131461064b57806370a082311461066b578063715018a6146106a157600080fd5b80634fbee193116102855780634fbee193146105c65780635a139dd4146105ff578063638b1b14146106155780636a486a8e1461063557600080fd5b806349bd5a5e146105625780634a62bb65146105965780634f77f6c0146105b057600080fd5b80631f3fed8f11610318578063313ce567116102f2578063313ce567146104e65780633221c93f1461050257806339509351146105225780634790c3211461054257600080fd5b80631f3fed8f1461049a57806323b872dd146104b057806327c8f835146104d057600080fd5b80631694505e116103545780631694505e1461040357806318160ddd1461044f57806318a94cf11461046e5780631a8145bb1461048457600080fd5b80630517d13d1461038657806306fdde03146103a8578063095ea7b3146103d357600080fd5b3661038157005b600080fd5b34801561039257600080fd5b506103a66103a13660046126fc565b610a91565b005b3480156103b457600080fd5b506103bd610b71565b6040516103ca9190612715565b60405180910390f35b3480156103df57600080fd5b506103f36103ee366004612778565b610c03565b60405190151581526020016103ca565b34801561040f57600080fd5b506104377f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103ca565b34801561045b57600080fd5b506002545b6040519081526020016103ca565b34801561047a57600080fd5b50610460601d5481565b34801561049057600080fd5b5061046060205481565b3480156104a657600080fd5b50610460601f5481565b3480156104bc57600080fd5b506103f36104cb3660046127a4565b610c1a565b3480156104dc57600080fd5b5061043761dead81565b3480156104f257600080fd5b50604051601281526020016103ca565b34801561050e57600080fd5b50600854610437906001600160a01b031681565b34801561052e57600080fd5b506103f361053d366004612778565b610cc4565b34801561054e57600080fd5b506103a661055d3660046127f5565b610d00565b34801561056e57600080fd5b506104377f000000000000000000000000234c5fcea5c90ba09190e10902e29c7a2eb3fd4e81565b3480156105a257600080fd5b50600d546103f39060ff1681565b3480156105bc57600080fd5b50610460601e5481565b3480156105d257600080fd5b506103f36105e1366004612879565b6001600160a01b031660009081526023602052604090205460ff1690565b34801561060b57600080fd5b5061046060195481565b34801561062157600080fd5b50600754610437906001600160a01b031681565b34801561064157600080fd5b50610460601a5481565b34801561065757600080fd5b50600d546103f39062010000900460ff1681565b34801561067757600080fd5b50610460610686366004612879565b6001600160a01b031660009081526020819052604090205490565b3480156106ad57600080fd5b506103a6610e17565b3480156106c257600080fd5b506103f3610e4d565b3480156106d757600080fd5b506103a66106e6366004612896565b610e8a565b3480156106f757600080fd5b5061046060165481565b34801561070d57600080fd5b506103a6610edf565b34801561072257600080fd5b506005546001600160a01b0316610437565b34801561074057600080fd5b50610460601b5481565b34801561075657600080fd5b506103a66107653660046128cb565b610f63565b34801561077657600080fd5b506103bd610fa9565b34801561078b57600080fd5b506103a661079a366004612896565b610fb8565b3480156107ab57600080fd5b506103f36107ba366004612778565b611097565b3480156107cb57600080fd5b50600654610437906001600160a01b031681565b3480156107eb57600080fd5b506103f36107fa366004612778565b611130565b34801561080b57600080fd5b5061046060185481565b34801561082157600080fd5b506103f3610830366004612879565b60256020526000908152604090205460ff1681565b34801561085157600080fd5b50600d546103f390610100900460ff1681565b34801561087057600080fd5b506103a661087f366004612896565b61113d565b34801561089057600080fd5b50610460600a5481565b3480156108a657600080fd5b506011546103f39060ff1681565b3480156108c057600080fd5b506103f36108cf3660046126fc565b6111c6565b3480156108e057600080fd5b5061046060155481565b3480156108f657600080fd5b506104606109053660046128e6565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561093c57600080fd5b506103f361094b366004612879565b60246020526000908152604090205460ff1681565b34801561096c57600080fd5b50610460600b5481565b34801561098257600080fd5b506103f3610991366004612879565b60146020526000908152604090205460ff1681565b3480156109b257600080fd5b506103f361131d565b3480156109c757600080fd5b50600954610437906001600160a01b031681565b3480156109e757600080fd5b5061046060215481565b3480156109fd57600080fd5b5061046060175481565b348015610a1357600080fd5b506103a6610a22366004612879565b61135a565b348015610a3357600080fd5b50610460601c5481565b348015610a4957600080fd5b50610437737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a7157600080fd5b50610460600c5481565b348015610a8757600080fd5b5061046060225481565b6005546001600160a01b03163314610ac45760405162461bcd60e51b8152600401610abb9061291f565b60405180910390fd5b670de0b6b3a76400006103e8610ad960025490565b610ae490600161296a565b610aee9190612981565b610af89190612981565b811015610b595760405162461bcd60e51b815260206004820152602960248201527f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f776572206044820152687468616e20302e312560b81b6064820152608401610abb565b610b6b81670de0b6b3a764000061296a565b600a5550565b606060038054610b80906129a3565b80601f0160208091040260200160405190810160405280929190818152602001828054610bac906129a3565b8015610bf95780601f10610bce57610100808354040283529160200191610bf9565b820191906000526020600020905b815481529060010190602001808311610bdc57829003601f168201915b5050505050905090565b6000610c103384846113f5565b5060015b92915050565b6000610c27848484611519565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cac5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610abb565b610cb985338584036113f5565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c10918590610cfb9086906129dd565b6113f5565b6005546001600160a01b03163314610d2a5760405162461bcd60e51b8152600401610abb9061291f565b60005b82811015610e11576000848483818110610d4957610d496129f0565b9050602002016020810190610d5e9190612879565b90506001600160a01b0381163014801590610d9657506001600160a01b038116737a250d5630b4cf539739df2c5dacb4c659f2488d14155b8015610dd457507f000000000000000000000000234c5fcea5c90ba09190e10902e29c7a2eb3fd4e6001600160a01b0316816001600160a01b031614155b15610dfe576001600160a01b0381166000908152601460205260409020805460ff19168415151790555b5080610e0981612a06565b915050610d2d565b50505050565b6005546001600160a01b03163314610e415760405162461bcd60e51b8152600401610abb9061291f565b610e4b6000611f30565b565b6005546000906001600160a01b03163314610e7a5760405162461bcd60e51b8152600401610abb9061291f565b50600d805460ff19169055600190565b6005546001600160a01b03163314610eb45760405162461bcd60e51b8152600401610abb9061291f565b6001600160a01b03919091166000908152602460205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610f095760405162461bcd60e51b8152600401610abb9061291f565b600d54610100900460ff1615610f4c5760405162461bcd60e51b81526020600482015260086024820152671b185d5b98da195960c21b6044820152606401610abb565b600d80544360125562ffff00191662010100179055565b6005546001600160a01b03163314610f8d5760405162461bcd60e51b8152600401610abb9061291f565b600d8054911515620100000262ff000019909216919091179055565b606060048054610b80906129a3565b6005546001600160a01b03163314610fe25760405162461bcd60e51b8152600401610abb9061291f565b7f000000000000000000000000234c5fcea5c90ba09190e10902e29c7a2eb3fd4e6001600160a01b0316826001600160a01b0316036110895760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610abb565b6110938282611f82565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111195760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610abb565b61112633858584036113f5565b5060019392505050565b6000610c10338484611519565b6005546001600160a01b031633146111675760405162461bcd60e51b8152600401610abb9061291f565b6001600160a01b038216600081815260236020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546000906001600160a01b031633146111f35760405162461bcd60e51b8152600401610abb9061291f565b620186a061120060025490565b61120b90600161296a565b6112159190612981565b8210156112825760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610abb565b6103e861128e60025490565b61129990600561296a565b6112a39190612981565b82111561130f5760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610abb565b50600b81905560015b919050565b6005546000906001600160a01b0316331461134a5760405162461bcd60e51b8152600401610abb9061291f565b506011805460ff19169055600190565b6005546001600160a01b031633146113845760405162461bcd60e51b8152600401610abb9061291f565b6001600160a01b0381166113e95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610abb565b6113f281611f30565b50565b6001600160a01b0383166114575760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610abb565b6001600160a01b0382166114b85760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610abb565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661153f5760405162461bcd60e51b8152600401610abb90612a1f565b6001600160a01b0382166115655760405162461bcd60e51b8152600401610abb90612a64565b6001600160a01b03831660009081526014602052604090205460ff16156115b75760405162461bcd60e51b815260206004820152600660248201526529b734b832b960d11b6044820152606401610abb565b806000036115d0576115cb83836000611fd6565b505050565b6005546001600160a01b031632036115ed576115cb838383611fd6565b600d5460ff1615611a3d57600554600160a01b900460ff16611a3d57600d54610100900460ff1661169c576001600160a01b03831660009081526023602052604090205460ff168061165757506001600160a01b03821660009081526023602052604090205460ff165b61169c5760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610abb565b60115460ff16156117e3576005546001600160a01b038381169116148015906116f757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b801561173557507f000000000000000000000000234c5fcea5c90ba09190e10902e29c7a2eb3fd4e6001600160a01b0316826001600160a01b031614155b156117e357326000908152600e602052604090205443116117d05760405162461bcd60e51b815260206004820152604960248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b6064820152681030b63637bbb2b21760b91b608482015260a401610abb565b326000908152600e602052604090204390555b6001600160a01b03831660009081526025602052604090205460ff16801561182457506001600160a01b03821660009081526024602052604090205460ff16155b1561190257600a548111156118935760405162461bcd60e51b815260206004820152602f60248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526e36b0bc2a3930b739b0b1ba34b7b71760891b6064820152608401610abb565b600c546001600160a01b0383166000908152602081905260409020546118b990836129dd565b11156118fd5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abb565b611a3d565b6001600160a01b03821660009081526025602052604090205460ff16801561194357506001600160a01b03831660009081526024602052604090205460ff16155b156119b357600a548111156118fd5760405162461bcd60e51b815260206004820152603060248201527f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560448201526f1036b0bc2a3930b739b0b1ba34b7b71760811b6064820152608401610abb565b6001600160a01b03821660009081526024602052604090205460ff16611a3d57600c546001600160a01b0383166000908152602081905260409020546119f990836129dd565b1115611a3d5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610abb565b6001600160a01b03831660009081526023602052604090205460ff168015611a7d57506001600160a01b03821660009081526023602052604090205460ff165b15611a8757436010555b6001600160a01b03831660009081526023602052604090205460ff1615611ab3576115cb83838361212a565b6001600160a01b03831660009081526023602052604090205460ff16158015611af557506001600160a01b03821660009081526023602052604090205460ff16155b15611b9b576001600160a01b03831660009081526025602052604090205460ff1615611b67576001600160a01b0382166000908152600f602052604090208054158015611b5857506001600160a01b038316600090815260208190526040902054155b15611b61574381555b50611b9b565b6001600160a01b0383166000908152600f602052604090206010548154611b8e9190612aa7565b6002820155436001909101555b30600090815260208190526040902054600b5481108015908190611bc75750600d5462010000900460ff165b8015611bdd5750600554600160a01b900460ff16155b8015611c0257506001600160a01b03851660009081526025602052604090205460ff16155b8015611c2757506001600160a01b03851660009081526023602052604090205460ff16155b8015611c4c57506001600160a01b03841660009081526023602052604090205460ff16155b15611c7a576005805460ff60a01b1916600160a01b179055611c6c612163565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526023602052604090205460ff600160a01b909204821615911680611cc857506001600160a01b03851660009081526023602052604090205460ff165b15611cd1575060005b60008115611f1c576001600160a01b03861660009081526025602052604090205460ff168015611d0357506000601a54115b15611df157611d286064611d22601a548861242b90919063ffffffff16565b9061243e565b9050601a54601c5482611d3b919061296a565b611d459190612981565b60206000828254611d5691906129dd565b9091555050601a54601d54611d6b908361296a565b611d759190612981565b60216000828254611d8691906129dd565b9091555050601a54601b54611d9b908361296a565b611da59190612981565b601f6000828254611db691906129dd565b9091555050601a54601e54611dcb908361296a565b611dd59190612981565b60226000828254611de691906129dd565b90915550611efe9050565b6001600160a01b03871660009081526025602052604090205460ff168015611e1b57506000601554115b15611efe57611e3a6064611d226015548861242b90919063ffffffff16565b905060155460175482611e4d919061296a565b611e579190612981565b60206000828254611e6891906129dd565b9091555050601554601854611e7d908361296a565b611e879190612981565b60216000828254611e9891906129dd565b9091555050601554601654611ead908361296a565b611eb79190612981565b601f6000828254611ec891906129dd565b9091555050601554601954611edd908361296a565b611ee79190612981565b60226000828254611ef891906129dd565b90915550505b8015611f0f57611f0f873083611fd6565b611f198186612aa7565b94505b611f27878787611fd6565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216600081815260256020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038316611ffc5760405162461bcd60e51b8152600401610abb90612a1f565b6001600160a01b0382166120225760405162461bcd60e51b8152600401610abb90612a64565b6001600160a01b0383166000908152602081905260409020548181101561209a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610abb565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906120d19084906129dd565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161211d91815260200190565b60405180910390a3610e11565b6001600160a01b0380841660009081526020819052604080822080548581039091559285168252812080548492906120d19084906129dd565b3060009081526020819052604081205490506000602254602154601f5460205461218d91906129dd565b61219791906129dd565b6121a191906129dd565b905060008215806121b0575081155b156121ba57505050565b600b546121c890601061296a565b8311156121e057600b546121dd90601061296a565b92505b6000600283602054866121f3919061296a565b6121fd9190612981565b6122079190612981565b90506000612215858361244a565b90504761222182612456565b600061222d478361244a565b9050600061224a87611d22601f548561242b90919063ffffffff16565b9050600061226788611d226021548661242b90919063ffffffff16565b9050600061228489611d226022548761242b90919063ffffffff16565b9050600081836122948688612aa7565b61229e9190612aa7565b6122a89190612aa7565b60006020819055601f819055602181905560228190556007546040519293506001600160a01b031691859181818185875af1925050503d806000811461230a576040519150601f19603f3d011682016040523d82523d6000602084013e61230f565b606091505b509099505087158015906123235750600081115b15612374576123328882612616565b60208054604080518a81529283018490528201527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15b6009546040516001600160a01b03909116908390600081818185875af1925050503d80600081146123c1576040519150601f19603f3d011682016040523d82523d6000602084013e6123c6565b606091505b5050600654604051919a506001600160a01b0316904790600081818185875af1925050503d8060008114612416576040519150601f19603f3d011682016040523d82523d6000602084013e61241b565b606091505b5050505050505050505050505050565b6000612437828461296a565b9392505050565b60006124378284612981565b60006124378284612aa7565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061248b5761248b6129f0565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612509573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252d9190612aba565b81600181518110612540576125406129f0565b60200260200101906001600160a01b031690816001600160a01b03168152505061258b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113f5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906125e0908590600090869030904290600401612ad7565b600060405180830381600087803b1580156125fa57600080fd5b505af115801561260e573d6000803e3d6000fd5b505050505050565b612641307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846113f5565b60085460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156126d0573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906126f59190612b48565b5050505050565b60006020828403121561270e57600080fd5b5035919050565b600060208083528351808285015260005b8181101561274257858101830151858201604001528201612726565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146113f257600080fd5b6000806040838503121561278b57600080fd5b823561279681612763565b946020939093013593505050565b6000806000606084860312156127b957600080fd5b83356127c481612763565b925060208401356127d481612763565b929592945050506040919091013590565b8035801515811461131857600080fd5b60008060006040848603121561280a57600080fd5b833567ffffffffffffffff8082111561282257600080fd5b818601915086601f83011261283657600080fd5b81358181111561284557600080fd5b8760208260051b850101111561285a57600080fd5b60209283019550935061287091860190506127e5565b90509250925092565b60006020828403121561288b57600080fd5b813561243781612763565b600080604083850312156128a957600080fd5b82356128b481612763565b91506128c2602084016127e5565b90509250929050565b6000602082840312156128dd57600080fd5b612437826127e5565b600080604083850312156128f957600080fd5b823561290481612763565b9150602083013561291481612763565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610c1457610c14612954565b60008261299e57634e487b7160e01b600052601260045260246000fd5b500490565b600181811c908216806129b757607f821691505b6020821081036129d757634e487b7160e01b600052602260045260246000fd5b50919050565b80820180821115610c1457610c14612954565b634e487b7160e01b600052603260045260246000fd5b600060018201612a1857612a18612954565b5060010190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610c1457610c14612954565b600060208284031215612acc57600080fd5b815161243781612763565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612b275784516001600160a01b031683529383019391830191600101612b02565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612b5d57600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212206262c85cea713554d45fda6167880f39d0d384d5448372ac852afc795b407cda64736f6c63430008130033

Deployed Bytecode Sourcemap

15652:17143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22045:265;;;;;;;;;;-1:-1:-1;22045:265:0;;;;;:::i;:::-;;:::i;:::-;;2850:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3764:169;;;;;;;;;;-1:-1:-1;3764:169:0;;;;;:::i;:::-;;:::i;:::-;;;1373:14:1;;1366:22;1348:41;;1336:2;1321:18;3764:169:0;1208:187:1;15733:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1591:32:1;;;1573:51;;1561:2;1546:18;15733:51:0;1400:230:1;3171:108:0;;;;;;;;;;-1:-1:-1;3259:12:0;;3171:108;;;1781:25:1;;;1769:2;1754:18;3171:108:0;1635:177:1;17269:33:0;;;;;;;;;;;;;;;;17390;;;;;;;;;;;;;;;;17350;;;;;;;;;;;;;;;;3941:492;;;;;;;;;;-1:-1:-1;3941:492:0;;;;;:::i;:::-;;:::i;15836:53::-;;;;;;;;;;;;15882:6;15836:53;;3070:93;;;;;;;;;;-1:-1:-1;3070:93:0;;3153:2;2628:36:1;;2616:2;2601:18;3070:93:0;2486:184:1;16229:39:0;;;;;;;;;;-1:-1:-1;16229:39:0;;;;-1:-1:-1;;;;;16229:39:0;;;4441:215;;;;;;;;;;-1:-1:-1;4441:215:0;;;;;:::i;:::-;;:::i;29274:386::-;;;;;;;;;;-1:-1:-1;29274:386:0;;;;;:::i;:::-;;:::i;15791:38::-;;;;;;;;;;;;;;;16433:33;;;;;;;;;;-1:-1:-1;16433:33:0;;;;;;;;17309:32;;;;;;;;;;;;;;;;23381:126;;;;;;;;;;-1:-1:-1;23381:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;23471:28:0;23447:4;23471:28;;;:19;:28;;;;;;;;;23381:126;17118:31;;;;;;;;;;;;;;;;16181:41;;;;;;;;;;-1:-1:-1;16181:41:0;;;;-1:-1:-1;;;;;16181:41:0;;;17158:28;;;;;;;;;;;;;;;;16513:31;;;;;;;;;;-1:-1:-1;16513:31:0;;;;;;;;;;;3287:127;;;;;;;;;;-1:-1:-1;3287:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;3388:18:0;3361:7;3388:18;;;;;;;;;;;;3287:127;972:103;;;;;;;;;;;;;:::i;21153:121::-;;;;;;;;;;;;;:::i;22318:161::-;;;;;;;;;;-1:-1:-1;22318:161:0;;;;;:::i;:::-;;:::i;17005:30::-;;;;;;;;;;;;;;;;20906:195;;;;;;;;;;;;;:::i;749:87::-;;;;;;;;;;-1:-1:-1;822:6:0;;-1:-1:-1;;;;;822:6:0;749:87;;17193:31;;;;;;;;;;;;;;;;22575:100;;;;;;;;;;-1:-1:-1;22575:100:0;;;;;:::i;:::-;;:::i;2958:104::-;;;;;;;;;;;;;:::i;22873:304::-;;;;;;;;;;-1:-1:-1;22873:304:0;;;;;:::i;:::-;;:::i;4664:413::-;;;;;;;;;;-1:-1:-1;4664:413:0;;;;;:::i;:::-;;:::i;16135:39::-;;;;;;;;;;-1:-1:-1;16135:39:0;;;;-1:-1:-1;;;;;16135:39:0;;;3422:175;;;;;;;;;;-1:-1:-1;3422:175:0;;;;;:::i;:::-;;:::i;17079:32::-;;;;;;;;;;;;;;;;17640:57;;;;;;;;;;-1:-1:-1;17640:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16473:33;;;;;;;;;;-1:-1:-1;16473:33:0;;;;;;;;;;;22683:182;;;;;;;;;;-1:-1:-1;22683:182:0;;;;;:::i;:::-;;:::i;16324:29::-;;;;;;;;;;;;;;;;16788:39;;;;;;;;;;-1:-1:-1;16788:39:0;;;;;;;;21540:497;;;;;;;;;;-1:-1:-1;21540:497:0;;;;;:::i;:::-;;:::i;16971:27::-;;;;;;;;;;;;;;;;3605:151;;;;;;;;;;-1:-1:-1;3605:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;3721:18:0;;;3694:7;3721:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3605:151;17574:57;;;;;;;;;;-1:-1:-1;17574:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;16360:33;;;;;;;;;;;;;;;;16923:39;;;;;;;;;;-1:-1:-1;16923:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21335:135;;;;;;;;;;;;;:::i;16275:40::-;;;;;;;;;;-1:-1:-1;16275:40:0;;;;-1:-1:-1;;;;;16275:40:0;;;17430:35;;;;;;;;;;;;;;;;17042:30;;;;;;;;;;;;;;;;1083:201;;;;;;;;;;-1:-1:-1;1083:201:0;;;;;:::i;:::-;;:::i;17231:31::-;;;;;;;;;;;;;;;;15896:75;;;;;;;;;;;;15929:42;15896:75;;16400:24;;;;;;;;;;;;;;;;17472:34;;;;;;;;;;;;;;;;22045:265;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;;;;;;;;;22184:4:::1;22176;22155:13;3259:12:::0;;;3171:108;22155:13:::1;:17;::::0;22171:1:::1;22155:17;:::i;:::-;22154:26;;;;:::i;:::-;22153:35;;;;:::i;:::-;22143:6;:45;;22121:136;;;::::0;-1:-1:-1;;;22121:136:0;;5998:2:1;22121:136:0::1;::::0;::::1;5980:21:1::0;6037:2;6017:18;;;6010:30;6076:34;6056:18;;;6049:62;-1:-1:-1;;;6127:18:1;;;6120:39;6176:19;;22121:136:0::1;5796:405:1::0;22121:136:0::1;22285:17;:6:::0;22295::::1;22285:17;:::i;:::-;22268:14;:34:::0;-1:-1:-1;22045:265:0:o;2850:100::-;2904:13;2937:5;2930:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2850:100;:::o;3764:169::-;3847:4;3864:39;375:10;3887:7;3896:6;3864:8;:39::i;:::-;-1:-1:-1;3921:4:0;3764:169;;;;;:::o;3941:492::-;4081:4;4098:36;4108:6;4116:9;4127:6;4098:9;:36::i;:::-;-1:-1:-1;;;;;4174:19:0;;4147:24;4174:19;;;:11;:19;;;;;;;;375:10;4174:33;;;;;;;;4226:26;;;;4218:79;;;;-1:-1:-1;;;4218:79:0;;6793:2:1;4218:79:0;;;6775:21:1;6832:2;6812:18;;;6805:30;6871:34;6851:18;;;6844:62;-1:-1:-1;;;6922:18:1;;;6915:38;6970:19;;4218:79:0;6591:404:1;4218:79:0;4333:57;4342:6;375:10;4383:6;4364:16;:25;4333:8;:57::i;:::-;-1:-1:-1;4421:4:0;;3941:492;-1:-1:-1;;;;3941:492:0:o;4441:215::-;375:10;4529:4;4578:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4578:34:0;;;;;;;;;;4529:4;;4546:80;;4569:7;;4578:47;;4615:10;;4578:47;:::i;:::-;4546:8;:80::i;29274:386::-;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;29378:9:::1;29374:279;29392:17:::0;;::::1;29374:279;;;29429:15;29447:8;;29456:1;29447:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29429:29:::0;-1:-1:-1;;;;;;29476:24:0;::::1;29495:4;29476:24;::::0;::::1;::::0;:62:::1;;-1:-1:-1::0;;;;;;29521:17:0;::::1;15929:42;29521:17;;29476:62;:116;;;;;29578:13;-1:-1:-1::0;;;;;29559:33:0::1;:7;-1:-1:-1::0;;;;;29559:33:0::1;;;29476:116;29473:168;;;-1:-1:-1::0;;;;;29611:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:30;;-1:-1:-1;;29611:30:0::1;::::0;::::1;;;::::0;;29473:168:::1;-1:-1:-1::0;29410:3:0;::::1;::::0;::::1;:::i;:::-;;;;29374:279;;;;29274:386:::0;;;:::o;972:103::-;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;1037:30:::1;1064:1;1037:18;:30::i;:::-;972:103::o:0;21153:121::-;822:6;;21205:4;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;-1:-1:-1;21222:14:0::1;:22:::0;;-1:-1:-1;;21222:22:0::1;::::0;;;21153:121;:::o;22318:161::-;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22431:33:0;;;::::1;;::::0;;;:25:::1;:33;::::0;;;;:40;;-1:-1:-1;;22431:40:0::1;::::0;::::1;;::::0;;;::::1;::::0;;22318:161::o;20906:195::-;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;20970:13:::1;::::0;::::1;::::0;::::1;;;20969:14;20961:35;;;::::0;-1:-1:-1;;;20961:35:0;;7604:2:1;20961:35:0::1;::::0;::::1;7586:21:1::0;7643:1;7623:18;;;7616:29;-1:-1:-1;;;7661:18:1;;;7654:38;7709:18;;20961:35:0::1;7402:331:1::0;20961:35:0::1;21007:13;:20:::0;;21052:12:::1;21038:11;:26:::0;-1:-1:-1;;21075:18:0;;;;;20906:195::o;22575:100::-;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;22646:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22646:21:0;;::::1;::::0;;;::::1;::::0;;22575:100::o;2958:104::-;3014:13;3047:7;3040:14;;;;;:::i;22873:304::-;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;23017:13:::1;-1:-1:-1::0;;;;;23009:21:0::1;:4;-1:-1:-1::0;;;;;23009:21:0::1;::::0;22987:128:::1;;;::::0;-1:-1:-1;;;22987:128:0;;7940:2:1;22987:128:0::1;::::0;::::1;7922:21:1::0;7979:2;7959:18;;;7952:30;8018:34;7998:18;;;7991:62;8089:27;8069:18;;;8062:55;8134:19;;22987:128:0::1;7738:421:1::0;22987:128:0::1;23128:41;23157:4;23163:5;23128:28;:41::i;:::-;22873:304:::0;;:::o;4664:413::-;375:10;4757:4;4801:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;4801:34:0;;;;;;;;;;4854:35;;;;4846:85;;;;-1:-1:-1;;;4846:85:0;;8366:2:1;4846:85:0;;;8348:21:1;8405:2;8385:18;;;8378:30;8444:34;8424:18;;;8417:62;-1:-1:-1;;;8495:18:1;;;8488:35;8540:19;;4846:85:0;8164:401:1;4846:85:0;4967:67;375:10;4990:7;5018:15;4999:16;:34;4967:8;:67::i;:::-;-1:-1:-1;5065:4:0;;4664:413;-1:-1:-1;;;4664:413:0:o;3422:175::-;3508:4;3525:42;375:10;3549:9;3560:6;3525:9;:42::i;22683:182::-;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22768:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;22768:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;22823:34;;1348:41:1;;;22823:34:0::1;::::0;1321:18:1;22823:34:0::1;;;;;;;22683:182:::0;;:::o;21540:497::-;822:6;;21648:4;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;21727:6:::1;21706:13;3259:12:::0;;;3171:108;21706:13:::1;:17;::::0;21722:1:::1;21706:17;:::i;:::-;21705:28;;;;:::i;:::-;21692:9;:41;;21670:144;;;::::0;-1:-1:-1;;;21670:144:0;;8772:2:1;21670:144:0::1;::::0;::::1;8754:21:1::0;8811:2;8791:18;;;8784:30;8850:34;8830:18;;;8823:62;-1:-1:-1;;;8901:18:1;;;8894:51;8962:19;;21670:144:0::1;8570:417:1::0;21670:144:0::1;21882:4;21861:13;3259:12:::0;;;3171:108;21861:13:::1;:17;::::0;21877:1:::1;21861:17;:::i;:::-;21860:26;;;;:::i;:::-;21847:9;:39;;21825:141;;;::::0;-1:-1:-1;;;21825:141:0;;9194:2:1;21825:141:0::1;::::0;::::1;9176:21:1::0;9233:2;9213:18;;;9206:30;9272:34;9252:18;;;9245:62;-1:-1:-1;;;9323:18:1;;;9316:50;9383:19;;21825:141:0::1;8992:416:1::0;21825:141:0::1;-1:-1:-1::0;21977:18:0::1;:30:::0;;;22025:4:::1;955:1;21540:497:::0;;;:::o;21335:135::-;822:6;;21395:4;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;-1:-1:-1;21412:20:0::1;:28:::0;;-1:-1:-1;;21412:28:0::1;::::0;;;21335:135;:::o;1083:201::-;822:6;;-1:-1:-1;;;;;822:6:0;375:10;884:23;876:68;;;;-1:-1:-1;;;876:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;1172:22:0;::::1;1164:73;;;::::0;-1:-1:-1;;;1164:73:0;;9615:2:1;1164:73:0::1;::::0;::::1;9597:21:1::0;9654:2;9634:18;;;9627:30;9693:34;9673:18;;;9666:62;-1:-1:-1;;;9744:18:1;;;9737:36;9790:19;;1164:73:0::1;9413:402:1::0;1164:73:0::1;1248:28;1267:8;1248:18;:28::i;:::-;1083:201:::0;:::o;7327:380::-;-1:-1:-1;;;;;7463:19:0;;7455:68;;;;-1:-1:-1;;;7455:68:0;;10022:2:1;7455:68:0;;;10004:21:1;10061:2;10041:18;;;10034:30;10100:34;10080:18;;;10073:62;-1:-1:-1;;;10151:18:1;;;10144:34;10195:19;;7455:68:0;9820:400:1;7455:68:0;-1:-1:-1;;;;;7542:21:0;;7534:68;;;;-1:-1:-1;;;7534:68:0;;10427:2:1;7534:68:0;;;10409:21:1;10466:2;10446:18;;;10439:30;10505:34;10485:18;;;10478:62;-1:-1:-1;;;10556:18:1;;;10549:32;10598:19;;7534:68:0;10225:398:1;7534:68:0;-1:-1:-1;;;;;7615:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7667:32;;1781:25:1;;;7667:32:0;;1754:18:1;7667:32:0;;;;;;;7327:380;;;:::o;23515:5751::-;-1:-1:-1;;;;;23647:18:0;;23639:68;;;;-1:-1:-1;;;23639:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23726:16:0;;23718:64;;;;-1:-1:-1;;;23718:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23802:13:0;;;;;;:7;:13;;;;;;;;23801:14;23793:33;;;;-1:-1:-1;;;23793:33:0;;11640:2:1;23793:33:0;;;11622:21:1;11679:1;11659:18;;;11652:29;-1:-1:-1;;;11697:18:1;;;11690:36;11743:18;;23793:33:0;11438:329:1;23793:33:0;23843:6;23853:1;23843:11;23839:93;;23871:28;23887:4;23893:2;23897:1;23871:15;:28::i;:::-;23515:5751;;;:::o;23839:93::-;822:6;;-1:-1:-1;;;;;822:6:0;23948:9;:20;23944:107;;23985:33;24001:4;24007:2;24011:6;23985:15;:33::i;23944:107::-;24067:14;;;;24063:2264;;;24103:8;;-1:-1:-1;;;24103:8:0;;;;24098:2218;;24137:13;;;;;;;24132:223;;-1:-1:-1;;;;;24209:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24238:23:0;;;;;;:19;:23;;;;;;;;24209:52;24175:160;;;;-1:-1:-1;;;24175:160:0;;11974:2:1;24175:160:0;;;11956:21:1;12013:2;11993:18;;;11986:30;-1:-1:-1;;;12032:18:1;;;12025:52;12094:18;;24175:160:0;11772:346:1;24175:160:0;24511:20;;;;24507:641;;;822:6;;-1:-1:-1;;;;;24586:13:0;;;822:6;;24586:13;;;;:72;;;24642:15;-1:-1:-1;;;;;24628:30:0;:2;-1:-1:-1;;;;;24628:30:0;;;24586:72;:129;;;;;24701:13;-1:-1:-1;;;;;24687:28:0;:2;-1:-1:-1;;;;;24687:28:0;;;24586:129;24556:573;;;24833:9;24804:39;;;;:28;:39;;;;;;24879:12;-1:-1:-1;24766:258:0;;;;-1:-1:-1;;;24766:258:0;;12325:2:1;24766:258:0;;;12307:21:1;12364:2;12344:18;;;12337:30;12403:34;12383:18;;;12376:62;12474:34;12454:18;;;12447:62;-1:-1:-1;;;12525:19:1;;;12518:40;12575:19;;24766:258:0;12123:477:1;24766:258:0;25080:9;25051:39;;;;:28;:39;;;;;25093:12;25051:54;;24556:573;-1:-1:-1;;;;;25222:31:0;;;;;;:25;:31;;;;;;;;:86;;;;-1:-1:-1;;;;;;25279:29:0;;;;;;:25;:29;;;;;;;;25278:30;25222:86;25196:1105;;;25395:14;;25385:6;:24;;25351:157;;;;-1:-1:-1;;;25351:157:0;;12807:2:1;25351:157:0;;;12789:21:1;12846:2;12826:18;;;12819:30;12885:34;12865:18;;;12858:62;-1:-1:-1;;;12936:18:1;;;12929:45;12991:19;;25351:157:0;12605:411:1;25351:157:0;25591:9;;-1:-1:-1;;;;;3388:18:0;;3361:7;3388:18;;;;;;;;;;;25565:22;;:6;:22;:::i;:::-;:35;;25531:140;;;;-1:-1:-1;;;25531:140:0;;13223:2:1;25531:140:0;;;13205:21:1;13262:2;13242:18;;;13235:30;-1:-1:-1;;;13281:18:1;;;13274:49;13340:18;;25531:140:0;13021:343:1;25531:140:0;25196:1105;;;-1:-1:-1;;;;;25769:29:0;;;;;;:25;:29;;;;;;;;:86;;;;-1:-1:-1;;;;;;25824:31:0;;;;;;:25;:31;;;;;;;;25823:32;25769:86;25743:558;;;25942:14;;25932:6;:24;;25898:158;;;;-1:-1:-1;;;25898:158:0;;13571:2:1;25898:158:0;;;13553:21:1;13610:2;13590:18;;;13583:30;13649:34;13629:18;;;13622:62;-1:-1:-1;;;13700:18:1;;;13693:46;13756:19;;25898:158:0;13369:412:1;25743:558:0;-1:-1:-1;;;;;26087:29:0;;;;;;:25;:29;;;;;;;;26082:219;;26201:9;;-1:-1:-1;;;;;3388:18:0;;3361:7;3388:18;;;;;;;;;;;26175:22;;:6;:22;:::i;:::-;:35;;26141:140;;;;-1:-1:-1;;;26141:140:0;;13223:2:1;26141:140:0;;;13205:21:1;13262:2;13242:18;;;13235:30;-1:-1:-1;;;13281:18:1;;;13274:49;13340:18;;26141:140:0;13021:343:1;26141:140:0;-1:-1:-1;;;;;26343:25:0;;;;;;:19;:25;;;;;;;;:52;;;;-1:-1:-1;;;;;;26372:23:0;;;;;;:19;:23;;;;;;;;26343:52;26339:114;;;26429:12;26412:14;:29;26339:114;-1:-1:-1;;;;;26467:25:0;;;;;;:19;:25;;;;;;;;26463:116;;;26509:37;26529:4;26535:2;26539:6;26509:19;:37::i;26463:116::-;-1:-1:-1;;;;;26594:25:0;;;;;;:19;:25;;;;;;;;26593:26;:54;;;;-1:-1:-1;;;;;;26624:23:0;;;;;;:19;:23;;;;;;;;26623:24;26593:54;26589:634;;;-1:-1:-1;;;;;26668:31:0;;;;;;:25;:31;;;;;;;;26664:548;;;-1:-1:-1;;;;;26760:24:0;;26720:37;26760:24;;;:20;:24;;;;;26807;;:29;:51;;;;-1:-1:-1;;;;;;3388:18:0;;3361:7;3388:18;;;;;;;;;;;26840;26807:51;26803:139;;;26910:12;26883:39;;26803:139;26701:256;26664:548;;;-1:-1:-1;;;;;27022:26:0;;26982:37;27022:26;;;:20;:26;;;;;27123:14;;27096:24;;:41;;27123:14;27096:41;:::i;:::-;27067:26;;;:70;27184:12;27156:25;;;;:40;26664:548;27284:4;27235:28;3388:18;;;;;;;;;;;27342;;27318:42;;;;;;;27391:35;;-1:-1:-1;27415:11:0;;;;;;;27391:35;:61;;;;-1:-1:-1;27444:8:0;;-1:-1:-1;;;27444:8:0;;;;27443:9;27391:61;:110;;;;-1:-1:-1;;;;;;27470:31:0;;;;;;:25;:31;;;;;;;;27469:32;27391:110;:153;;;;-1:-1:-1;;;;;;27519:25:0;;;;;;:19;:25;;;;;;;;27518:26;27391:153;:194;;;;-1:-1:-1;;;;;;27562:23:0;;;;;;:19;:23;;;;;;;;27561:24;27391:194;27373:326;;;27612:8;:15;;-1:-1:-1;;;;27612:15:0;-1:-1:-1;;;27612:15:0;;;27644:10;:8;:10::i;:::-;27671:8;:16;;-1:-1:-1;;;;27671:16:0;;;27373:326;27727:8;;-1:-1:-1;;;;;27837:25:0;;27711:12;27837:25;;;:19;:25;;;;;;27727:8;-1:-1:-1;;;27727:8:0;;;;;27726:9;;27837:25;;:52;;-1:-1:-1;;;;;;27866:23:0;;;;;;:19;:23;;;;;;;;27837:52;27833:100;;;-1:-1:-1;27916:5:0;27833:100;27945:12;28050:7;28046:1167;;;-1:-1:-1;;;;;28102:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;28151:1;28135:13;;:17;28102:50;28098:966;;;28180:34;28210:3;28180:25;28191:13;;28180:6;:10;;:25;;;;:::i;:::-;:29;;:34::i;:::-;28173:41;;28283:13;;28263:16;;28256:4;:23;;;;:::i;:::-;28255:41;;;;:::i;:::-;28233:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28369:13:0;;28347:18;;28340:25;;:4;:25;:::i;:::-;28339:43;;;;:::i;:::-;28315:20;;:67;;;;;;;:::i;:::-;;;;-1:-1:-1;;28451:13:0;;28431:16;;28424:23;;:4;:23;:::i;:::-;28423:41;;;;:::i;:::-;28401:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28535:13:0;;28514:17;;28507:24;;:4;:24;:::i;:::-;28506:42;;;;:::i;:::-;28483:19;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;28098:966:0;;-1:-1:-1;28098:966:0;;-1:-1:-1;;;;;28610:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;28660:1;28645:12;;:16;28610:51;28606:458;;;28689:33;28718:3;28689:24;28700:12;;28689:6;:10;;:24;;;;:::i;:33::-;28682:40;;28790:12;;28771:15;;28764:4;:22;;;;:::i;:::-;28763:39;;;;:::i;:::-;28741:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;28874:12:0;;28853:17;;28846:24;;:4;:24;:::i;:::-;28845:41;;;;:::i;:::-;28821:20;;:65;;;;;;;:::i;:::-;;;;-1:-1:-1;;28954:12:0;;28935:15;;28928:22;;:4;:22;:::i;:::-;28927:39;;;;:::i;:::-;28905:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;29036:12:0;;29016:16;;29009:23;;:4;:23;:::i;:::-;29008:40;;;;:::i;:::-;28985:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;28606:458:0;29084:8;;29080:91;;29113:42;29129:4;29143;29150;29113:15;:42::i;:::-;29187:14;29197:4;29187:14;;:::i;:::-;;;28046:1167;29225:33;29241:4;29247:2;29251:6;29225:15;:33::i;:::-;23628:5638;;;;23515:5751;;;:::o;1292:191::-;1385:6;;;-1:-1:-1;;;;;1402:17:0;;;-1:-1:-1;;;;;;1402:17:0;;;;;;;1435:40;;1385:6;;;1402:17;1385:6;;1435:40;;1366:16;;1435:40;1355:128;1292:191;:::o;23185:188::-;-1:-1:-1;;;;;23268:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;23268:39:0;;;;;;;;;;23325:40;;23268:39;;:31;23325:40;;;23185:188;;:::o;5085:733::-;-1:-1:-1;;;;;5225:20:0;;5217:70;;;;-1:-1:-1;;;5217:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5306:23:0;;5298:71;;;;-1:-1:-1;;;5298:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;5466:17:0;;5442:21;5466:17;;;;;;;;;;;5502:23;;;;5494:74;;;;-1:-1:-1;;;5494:74:0;;14121:2:1;5494:74:0;;;14103:21:1;14160:2;14140:18;;;14133:30;14199:34;14179:18;;;14172:62;-1:-1:-1;;;14250:18:1;;;14243:36;14296:19;;5494:74:0;13919:402:1;5494:74:0;-1:-1:-1;;;;;5604:17:0;;;:9;:17;;;;;;;;;;;5624:22;;;5604:42;;5668:20;;;;;;;;:30;;5640:6;;5604:9;5668:30;;5640:6;;5668:30;:::i;:::-;;;;;;;;5733:9;-1:-1:-1;;;;;5716:35:0;5725:6;-1:-1:-1;;;;;5716:35:0;;5744:6;5716:35;;;;1781:25:1;;1769:2;1754:18;;1635:177;5716:35:0;;;;;;;;5764:46;23515:5751;5826:487;-1:-1:-1;;;;;6046:17:0;;;6022:21;6046:17;;;;;;;;;;;;;6119:22;;;6099:42;;;6163:20;;;;;;;:30;;6135:6;;6022:21;6163:30;;6135:6;;6163:30;:::i;30795:1997::-;30878:4;30834:23;3388:18;;;;;;;;;;;30834:50;;30895:25;31027:19;;30991:20;;30957:18;;30923;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;30895:151;-1:-1:-1;31057:12:0;31086:20;;;:46;;-1:-1:-1;31110:22:0;;31086:46;31082:85;;;31149:7;;;30795:1997::o;31082:85::-;31201:18;;:23;;31222:2;31201:23;:::i;:::-;31183:15;:41;31179:115;;;31259:18;;:23;;31280:2;31259:23;:::i;:::-;31241:41;;31179:115;31355:23;31442:1;31422:17;31400:18;;31382:15;:36;;;;:::i;:::-;31381:58;;;;:::i;:::-;:62;;;;:::i;:::-;31355:88;-1:-1:-1;31454:26:0;31483:36;:15;31355:88;31483:19;:36::i;:::-;31454:65;-1:-1:-1;31560:21:0;31594:36;31454:65;31594:16;:36::i;:::-;31643:18;31664:44;:21;31690:17;31664:25;:44::i;:::-;31643:65;;31721:18;31742:57;31781:17;31742:34;31757:18;;31742:10;:14;;:34;;;;:::i;:57::-;31721:78;;31810:25;31838:59;31879:17;31838:36;31853:20;;31838:10;:14;;:36;;;;:::i;:59::-;31810:87;;31908:24;31935:58;31975:17;31935:35;31950:19;;31935:10;:14;;:35;;;;:::i;:58::-;31908:85;-1:-1:-1;32006:23:0;31908:85;32058:17;32032:23;32045:10;32032;:23;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;32128:1;32107:18;:22;;;32140:18;:22;;;32173:20;:24;;;32208:19;:23;;;32266:18;;32258:62;;32006:88;;-1:-1:-1;;;;;;32266:18:0;;32298:17;;32258:62;32128:1;32258:62;32298:17;32266:18;32258:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32244:76:0;;-1:-1:-1;;32337:19:0;;;;;:42;;;32378:1;32360:15;:19;32337:42;32333:278;;;32396:46;32409:15;32426;32396:12;:46::i;:::-;32566:18;;;32462:137;;;14738:25:1;;;14779:18;;;14772:34;;;14822:18;;14815:34;32462:137:0;;14726:2:1;14711:18;32462:137:0;;;;;;;32333:278;32643:17;;32635:60;;-1:-1:-1;;;;;32643:17:0;;;;32674:16;;32635:60;;;;32674:16;32643:17;32635:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32728:16:0;;32720:64;;32621:74;;-1:-1:-1;;;;;;32728:16:0;;32758:21;;32720:64;;;;32758:21;32728:16;32720:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;30795:1997:0:o;9333:98::-;9391:7;9418:5;9422:1;9418;:5;:::i;:::-;9411:12;9333:98;-1:-1:-1;;;9333:98:0:o;9439:::-;9497:7;9524:5;9528:1;9524;:5;:::i;9227:98::-;9285:7;9312:5;9316:1;9312;:5;:::i;29668:589::-;29818:16;;;29832:1;29818:16;;;;;;;;29794:21;;29818:16;;;;;;;;;;-1:-1:-1;29818:16:0;29794:40;;29863:4;29845;29850:1;29845:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;29845:23:0;;;-1:-1:-1;;;;;29845:23:0;;;;;29889:15;-1:-1:-1;;;;;29889:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29879:4;29884:1;29879:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;29879:32:0;;;-1:-1:-1;;;;;29879:32:0;;;;;29924:62;29941:4;29956:15;29974:11;29924:8;:62::i;:::-;30025:224;;-1:-1:-1;;;30025:224:0;;-1:-1:-1;;;;;30025:15:0;:66;;;;:224;;30106:11;;30132:1;;30176:4;;30203;;30223:15;;30025:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29723:534;29668:589;:::o;30265:522::-;30413:62;30430:4;30445:15;30463:11;30413:8;:62::i;:::-;30722:16;;30518:261;;-1:-1:-1;;;30518:261:0;;30590:4;30518:261;;;16582:34:1;16632:18;;;16625:34;;;30636:1:0;16675:18:1;;;16668:34;;;16718:18;;;16711:34;-1:-1:-1;;;;;30722:16:0;;;16761:19:1;;;16754:44;30753:15:0;16814:19:1;;;16807:35;30518:15:0;:31;;;;;;30557:9;;16516:19:1;;30518:261:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;30265:522;;:::o;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;199:548::-;311:4;340:2;369;358:9;351:21;401:6;395:13;444:6;439:2;428:9;424:18;417:34;469:1;479:140;493:6;490:1;487:13;479:140;;;588:14;;;584:23;;578:30;554:17;;;573:2;550:26;543:66;508:10;;479:140;;;483:3;668:1;663:2;654:6;643:9;639:22;635:31;628:42;738:2;731;727:7;722:2;714:6;710:15;706:29;695:9;691:45;687:54;679:62;;;;199:548;;;;:::o;752:131::-;-1:-1:-1;;;;;827:31:1;;817:42;;807:70;;873:1;870;863:12;888:315;956:6;964;1017:2;1005:9;996:7;992:23;988:32;985:52;;;1033:1;1030;1023:12;985:52;1072:9;1059:23;1091:31;1116:5;1091:31;:::i;:::-;1141:5;1193:2;1178:18;;;;1165:32;;-1:-1:-1;;;888:315:1:o;1817:456::-;1894:6;1902;1910;1963:2;1951:9;1942:7;1938:23;1934:32;1931:52;;;1979:1;1976;1969:12;1931:52;2018:9;2005:23;2037:31;2062:5;2037:31;:::i;:::-;2087:5;-1:-1:-1;2144:2:1;2129:18;;2116:32;2157:33;2116:32;2157:33;:::i;:::-;1817:456;;2209:7;;-1:-1:-1;;;2263:2:1;2248:18;;;;2235:32;;1817:456::o;2899:160::-;2964:20;;3020:13;;3013:21;3003:32;;2993:60;;3049:1;3046;3039:12;3064:689;3156:6;3164;3172;3225:2;3213:9;3204:7;3200:23;3196:32;3193:52;;;3241:1;3238;3231:12;3193:52;3281:9;3268:23;3310:18;3351:2;3343:6;3340:14;3337:34;;;3367:1;3364;3357:12;3337:34;3405:6;3394:9;3390:22;3380:32;;3450:7;3443:4;3439:2;3435:13;3431:27;3421:55;;3472:1;3469;3462:12;3421:55;3512:2;3499:16;3538:2;3530:6;3527:14;3524:34;;;3554:1;3551;3544:12;3524:34;3609:7;3602:4;3592:6;3589:1;3585:14;3581:2;3577:23;3573:34;3570:47;3567:67;;;3630:1;3627;3620:12;3567:67;3661:4;3653:13;;;;-1:-1:-1;3685:6:1;-1:-1:-1;3710:37:1;;3726:20;;;-1:-1:-1;3710:37:1;:::i;:::-;3700:47;;3064:689;;;;;:::o;3758:247::-;3817:6;3870:2;3858:9;3849:7;3845:23;3841:32;3838:52;;;3886:1;3883;3876:12;3838:52;3925:9;3912:23;3944:31;3969:5;3944:31;:::i;4010:315::-;4075:6;4083;4136:2;4124:9;4115:7;4111:23;4107:32;4104:52;;;4152:1;4149;4142:12;4104:52;4191:9;4178:23;4210:31;4235:5;4210:31;:::i;:::-;4260:5;-1:-1:-1;4284:35:1;4315:2;4300:18;;4284:35;:::i;:::-;4274:45;;4010:315;;;;;:::o;4330:180::-;4386:6;4439:2;4427:9;4418:7;4414:23;4410:32;4407:52;;;4455:1;4452;4445:12;4407:52;4478:26;4494:9;4478:26;:::i;4515:388::-;4583:6;4591;4644:2;4632:9;4623:7;4619:23;4615:32;4612:52;;;4660:1;4657;4650:12;4612:52;4699:9;4686:23;4718:31;4743:5;4718:31;:::i;:::-;4768:5;-1:-1:-1;4825:2:1;4810:18;;4797:32;4838:33;4797:32;4838:33;:::i;:::-;4890:7;4880:17;;;4515:388;;;;;:::o;4908:356::-;5110:2;5092:21;;;5129:18;;;5122:30;5188:34;5183:2;5168:18;;5161:62;5255:2;5240:18;;4908:356::o;5269:127::-;5330:10;5325:3;5321:20;5318:1;5311:31;5361:4;5358:1;5351:15;5385:4;5382:1;5375:15;5401:168;5474:9;;;5505;;5522:15;;;5516:22;;5502:37;5492:71;;5543:18;;:::i;5574:217::-;5614:1;5640;5630:132;;5684:10;5679:3;5675:20;5672:1;5665:31;5719:4;5716:1;5709:15;5747:4;5744:1;5737:15;5630:132;-1:-1:-1;5776:9:1;;5574:217::o;6206:380::-;6285:1;6281:12;;;;6328;;;6349:61;;6403:4;6395:6;6391:17;6381:27;;6349:61;6456:2;6448:6;6445:14;6425:18;6422:38;6419:161;;6502:10;6497:3;6493:20;6490:1;6483:31;6537:4;6534:1;6527:15;6565:4;6562:1;6555:15;6419:161;;6206:380;;;:::o;7000:125::-;7065:9;;;7086:10;;;7083:36;;;7099:18;;:::i;7130:127::-;7191:10;7186:3;7182:20;7179:1;7172:31;7222:4;7219:1;7212:15;7246:4;7243:1;7236:15;7262:135;7301:3;7322:17;;;7319:43;;7342:18;;:::i;:::-;-1:-1:-1;7389:1:1;7378:13;;7262:135::o;10628:401::-;10830:2;10812:21;;;10869:2;10849:18;;;10842:30;10908:34;10903:2;10888:18;;10881:62;-1:-1:-1;;;10974:2:1;10959:18;;10952:35;11019:3;11004:19;;10628:401::o;11034:399::-;11236:2;11218:21;;;11275:2;11255:18;;;11248:30;11314:34;11309:2;11294:18;;11287:62;-1:-1:-1;;;11380:2:1;11365:18;;11358:33;11423:3;11408:19;;11034:399::o;13786:128::-;13853:9;;;13874:11;;;13871:37;;;13888:18;;:::i;14992:251::-;15062:6;15115:2;15103:9;15094:7;15090:23;15086:32;15083:52;;;15131:1;15128;15121:12;15083:52;15163:9;15157:16;15182:31;15207:5;15182:31;:::i;15248:980::-;15510:4;15558:3;15547:9;15543:19;15589:6;15578:9;15571:25;15615:2;15653:6;15648:2;15637:9;15633:18;15626:34;15696:3;15691:2;15680:9;15676:18;15669:31;15720:6;15755;15749:13;15786:6;15778;15771:22;15824:3;15813:9;15809:19;15802:26;;15863:2;15855:6;15851:15;15837:29;;15884:1;15894:195;15908:6;15905:1;15902:13;15894:195;;;15973:13;;-1:-1:-1;;;;;15969:39:1;15957:52;;16064:15;;;;16029:12;;;;16005:1;15923:9;15894:195;;;-1:-1:-1;;;;;;;16145:32:1;;;;16140:2;16125:18;;16118:60;-1:-1:-1;;;16209:3:1;16194:19;16187:35;16106:3;15248:980;-1:-1:-1;;;15248:980:1:o;16853:306::-;16941:6;16949;16957;17010:2;16998:9;16989:7;16985:23;16981:32;16978:52;;;17026:1;17023;17016:12;16978:52;17055:9;17049:16;17039:26;;17105:2;17094:9;17090:18;17084:25;17074:35;;17149:2;17138:9;17134:18;17128:25;17118:35;;16853:306;;;;;:::o

Swarm Source

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