ETH Price: $2,865.88 (-9.47%)
Gas: 10 Gwei

Token

PONG (PONG)
 

Overview

Max Total Supply

10,000,000 PONG

Holders

177

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 PONG

Value
$0.00
0x936de57598ca9af233f7c198b7286f104b30cc97
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:
PONG

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-27
*/

// SPDX-License-Identifier: MIT

// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// WWWWWWWWWWWWWWWMMMWNNNNNWWMMMMMMMMMWNK0OOO0KNWMMMMMMMMMWXKXNWMMMMMMMMMNK0OOO0NMM
// Kkkkk0K000KKKKXWMWd'''''',:dKWMMWKd:'.     .':dKMMMMXxc,....;l0WMMWNkc,..   .kMM
// 0dddxkOOOO0000KNMNc   ....  .xNXo.   .',;,'.   .oXWO,    ..   .oNNk,    .''';OMM
// 0ddddkOOOO0000KNMNc  .oXXO,  .o:   ,dKNWWWN0d,   ;x;   :kK0d.  .oo.  .:kKNNNXWMM
// 0ddddkOOOO0000KNMNc  .xMWX:       cXMMMMMMWWMXc   ..  'OMWWWl   ..  .xNWMMMMMMMM
// 0ddddkOOOO0000KNMWc   ':;'   ..  .OMMMMMMMMWMMO.      '0MMMWl       :XW0dooodKMM
// 0ddddkOOOO0000KNMWc      ..;xO;  .xWWMMMMMMMMWx.      '0MMMWl       ;KWd     dMM
// 0ddddkOOOO0000KNMNc   cOOOXWWWd.  'xNWMMMMMWNx.  .;.  '0MMMWl   ,,   ;OKx'  .xMM
// 0ddddkOOOO0000KNMNc  .xMMMMMMMWx.   ,ldkkkdl,   .xx.  '0MMMWl   cO;   .;l'   dMM
// 0ddddkOOOO0000KNMWc  .xMMMMMMMMW0l'           'l0Wk.  'OWMMWl   cNXx;.       oKX
// KOOOO0KKKKKKKKXNMWx,,:OMMMMMMMMMMWXOdc:;;;:coOXWMMKoccdXMMMWOlccOWMMNKxl::::lO0K
// WWMMWMWWMMMMMMMMMMWWWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

pragma solidity >=0.8.10 >=0.8.0 <0.9.0;

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;
    address private creator;
    event OwnershipTransferred(
        address indexed previousOwner,
        address indexed newOwner
    );

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    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 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    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);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);


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

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

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

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

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

    uint256 private _totalSupply;
    string private _name;
    string private _symbol;

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

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

library SafeMath {
    function 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 {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

////// src/IUniswapV2Factory.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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 PONG is ERC20, Ownable {
    event SwapBackSuccess(
        uint256 tokenAmount,
        uint256 ethAmountReceived,
        bool success
    );
    bool private swapping;
    address public marketingWallet =
        address(0xccf9C53fe2c7d224668c26b8345595AeBa63B60E);

    address public devWallet =
        address(0xccf9C53fe2c7d224668c26b8345595AeBa63B60E);

    uint256 _totalSupply = 10_000_000 * 1e18;
    uint256 public maxTransactionAmount = (_totalSupply * 10) / 1000; // 1% from total supply maxTransactionAmountTxn;
    uint256 public swapTokensAtAmount = (_totalSupply * 10) / 10000; // 0.1% swap tokens at this amount. (10_000_000 * 10) / 10000 = 0.1%(10000 tokens) of the total supply
    uint256 public maxWallet = (_totalSupply * 10) / 1000; // 1% from total supply maxWallet

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

    uint256 public buyFees = 5;
    uint256 public sellFees = 5;

    uint256 public marketingAmount = 50; //
    uint256 public devAmount = 50; //

    using SafeMath for uint256;

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

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public automatedMarketMakerPairs;

    constructor() ERC20("PONG", "PONG") {
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(devWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(devWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
        _mint(address(this), _totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }

    // remove limits after token is stable (sets sell fees to 3%)
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        sellFees = 5;
        buyFees = 5;
        return true;
    }

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

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

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

    function addLiquidity() external payable onlyOwner {
        // approve token transfer to cover all possible scenarios
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        uniswapV2Router = _uniswapV2Router;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        _approve(address(this), address(uniswapV2Router), totalSupply());
        // add the liquidity
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this), //token address
            totalSupply(), // liquidity amount
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(), // LP tokens are sent to the owner
            block.timestamp
        );
    }

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

    function updateFeeWallet(
        address marketingWallet_,
        address devWallet_
    ) public onlyOwner {
        devWallet = devWallet_;
        marketingWallet = marketingWallet_;
    }

    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(amount > 0, "Transfer amount must be greater than zero");
        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not enabled yet."
                    );
                }

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

        if (
            swapEnabled && //if this is true
            !swapping && //if this is false
            !automatedMarketMakerPairs[from] && //if this is false
            !_isExcludedFromFees[from] && //if this is false
            !_isExcludedFromFees[to] //if this is false
        ) {
            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] && sellFees > 0) {
                fees = amount.mul(sellFees).div(100);
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyFees > 0) {
                fees = amount.mul(buyFees).div(100);
            }

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

    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 swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        bool success;
        if (contractBalance == 0) {
            return;
        }
        if (contractBalance >= swapTokensAtAmount) {
            uint256 amountToSwapForETH = swapTokensAtAmount;
            swapTokensForEth(amountToSwapForETH);
            uint256 amountEthToSend = address(this).balance;
            uint256 amountToMarketing = amountEthToSend
                .mul(marketingAmount)
                .div(100);
            uint256 amountToDev = amountEthToSend.sub(amountToMarketing);
            (success, ) = address(marketingWallet).call{
                value: amountToMarketing
            }("");
            (success, ) = address(devWallet).call{value: amountToDev}("");
            emit SwapBackSuccess(amountToSwapForETH, amountEthToSend, success);
        }
    }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmountReceived","type":"uint256"},{"indexed":false,"internalType":"bool","name":"success","type":"bool"}],"name":"SwapBackSuccess","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"devAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"addressToExclude","type":"address"},{"internalType":"bool","name":"isExcluded","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":"marketingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"marketingWallet_","type":"address"},{"internalType":"address","name":"devWallet_","type":"address"}],"name":"updateFeeWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273ccf9c53fe2c7d224668c26b8345595aeba63b60e60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ccf9c53fe2c7d224668c26b8345595aeba63b60e60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506a084595161401484a0000006009556103e8600a600954620000cf919062000833565b620000db9190620008aa565b600a55612710600a600954620000f2919062000833565b620000fe9190620008aa565b600b556103e8600a60095462000115919062000833565b620001219190620008aa565b600c556001600d5f6101000a81548160ff0219169083151502179055505f600d60016101000a81548160ff0219169083151502179055505f600d60026101000a81548160ff0219169083151502179055506005600e556005600f556032601055603260115534801562000192575f80fd5b506040518060400160405280600481526020017f504f4e47000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f504f4e4700000000000000000000000000000000000000000000000000000000815250816003908162000210919062000b3c565b50806004908162000222919062000b3c565b5050506200024562000239620003c360201b60201c565b620003ca60201b60201c565b62000267620002596200048d60201b60201c565b6001620004b560201b60201c565b6200029b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004b560201b60201c565b620002cf60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620004b560201b60201c565b620002e2306001620004b560201b60201c565b620002f761dead6001620004b560201b60201c565b620003196200030b6200048d60201b60201c565b60016200059c60201b60201c565b6200034d60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200059c60201b60201c565b6200038160085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200059c60201b60201c565b620003943060016200059c60201b60201c565b620003a961dead60016200059c60201b60201c565b620003bd306009546200068360201b60201c565b62000d72565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620004c5620003c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620004eb6200048d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000544576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200053b9062000c7e565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b620005ac620003c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005d26200048d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200062b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006229062000c7e565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006f4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006eb9062000cec565b60405180910390fd5b620007075f8383620007f360201b60201c565b8060025f8282546200071a919062000d0c565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546200076e919062000d0c565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007d4919062000d57565b60405180910390a3620007ef5f8383620007f860201b60201c565b5050565b505050565b505050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6200083f82620007fd565b91506200084c83620007fd565b92508282026200085c81620007fd565b9150828204841483151762000876576200087562000806565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620008b682620007fd565b9150620008c383620007fd565b925082620008d657620008d56200087d565b5b828204905092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200095d57607f821691505b60208210810362000973576200097262000918565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009d77fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200099a565b620009e386836200099a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000a2462000a1e62000a1884620007fd565b620009fb565b620007fd565b9050919050565b5f819050919050565b62000a3f8362000a04565b62000a5762000a4e8262000a2b565b848454620009a6565b825550505050565b5f90565b62000a6d62000a5f565b62000a7a81848462000a34565b505050565b5b8181101562000aa15762000a955f8262000a63565b60018101905062000a80565b5050565b601f82111562000af05762000aba8162000979565b62000ac5846200098b565b8101602085101562000ad5578190505b62000aed62000ae4856200098b565b83018262000a7f565b50505b505050565b5f82821c905092915050565b5f62000b125f198460080262000af5565b1980831691505092915050565b5f62000b2c838362000b01565b9150826002028217905092915050565b62000b4782620008e1565b67ffffffffffffffff81111562000b635762000b62620008eb565b5b62000b6f825462000945565b62000b7c82828562000aa5565b5f60209050601f83116001811462000bb2575f841562000b9d578287015190505b62000ba9858262000b1f565b86555062000c18565b601f19841662000bc28662000979565b5f5b8281101562000beb5784890151825560018201915060208501945060208101905062000bc4565b8683101562000c0b578489015162000c07601f89168262000b01565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f62000c6660208362000c20565b915062000c738262000c30565b602082019050919050565b5f6020820190508181035f83015262000c978162000c58565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000cd4601f8362000c20565b915062000ce18262000c9e565b602082019050919050565b5f6020820190508181035f83015262000d058162000cc6565b9050919050565b5f62000d1882620007fd565b915062000d2583620007fd565b925082820190508082111562000d405762000d3f62000806565b5b92915050565b62000d5181620007fd565b82525050565b5f60208201905062000d6c5f83018462000d46565b92915050565b613e758062000d805f395ff3fe60806040526004361061023e575f3560e01c806375f0a8741161012d578063bbc0c742116100aa578063e2f456051161006e578063e2f4560514610889578063e4748b9e146108b3578063e8078d94146108dd578063f2fde38b146108e7578063f8b45b051461090f57610245565b8063bbc0c742146107a7578063c0246668146107d1578063c8c8ebe4146107f9578063dd62ed3e14610823578063e0f3ccf51461085f57610245565b806395d89b41116100f157806395d89b41146106a15780639a7a23d6146106cb578063a457c2d7146106f3578063a9059cbb1461072f578063b62496f51461076b57610245565b806375f0a874146105e55780638a8c523c1461060f5780638da5cb5b146106255780638ea5220f1461064f578063924de9b71461067957610245565b8063360bfd54116101bb5780636ddd17131161017f5780636ddd17131461051757806370a0823114610541578063715018a61461057d578063751039fc146105935780637571336a146105bd57610245565b8063360bfd5414610421578063395093511461044b57806349bd5a5e146104875780634a62bb65146104b15780634fbee193146104db57610245565b806323b872dd1161020257806323b872dd1461033f57806325d92ee21461037b57806327c8f835146103a35780632b345964146103cd578063313ce567146103f757610245565b806306fdde0314610249578063095ea7b31461027357806310d5de53146102af5780631694505e146102eb57806318160ddd1461031557610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d610939565b60405161026a9190612e2a565b60405180910390f35b34801561027e575f80fd5b5061029960048036038101906102949190612edb565b6109c9565b6040516102a69190612f33565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d09190612f4c565b6109e6565b6040516102e29190612f33565b60405180910390f35b3480156102f6575f80fd5b506102ff610a03565b60405161030c9190612fd2565b60405180910390f35b348015610320575f80fd5b50610329610a28565b6040516103369190612ffa565b60405180910390f35b34801561034a575f80fd5b5061036560048036038101906103609190613013565b610a31565b6040516103729190612f33565b60405180910390f35b348015610386575f80fd5b506103a1600480360381019061039c9190613063565b610b23565b005b3480156103ae575f80fd5b506103b7610c23565b6040516103c491906130b0565b60405180910390f35b3480156103d8575f80fd5b506103e1610c29565b6040516103ee9190612ffa565b60405180910390f35b348015610402575f80fd5b5061040b610c2f565b60405161041891906130e4565b60405180910390f35b34801561042c575f80fd5b50610435610c37565b6040516104429190612ffa565b60405180910390f35b348015610456575f80fd5b50610471600480360381019061046c9190612edb565b610c3d565b60405161047e9190612f33565b60405180910390f35b348015610492575f80fd5b5061049b610ce4565b6040516104a891906130b0565b60405180910390f35b3480156104bc575f80fd5b506104c5610d09565b6040516104d29190612f33565b60405180910390f35b3480156104e6575f80fd5b5061050160048036038101906104fc9190612f4c565b610d1b565b60405161050e9190612f33565b60405180910390f35b348015610522575f80fd5b5061052b610d6d565b6040516105389190612f33565b60405180910390f35b34801561054c575f80fd5b5061056760048036038101906105629190612f4c565b610d80565b6040516105749190612ffa565b60405180910390f35b348015610588575f80fd5b50610591610dc5565b005b34801561059e575f80fd5b506105a7610e4c565b6040516105b49190612f33565b60405180910390f35b3480156105c8575f80fd5b506105e360048036038101906105de9190613127565b610ef9565b005b3480156105f0575f80fd5b506105f9610fcd565b60405161060691906130b0565b60405180910390f35b34801561061a575f80fd5b50610623610ff2565b005b348015610630575f80fd5b506106396110a6565b60405161064691906130b0565b60405180910390f35b34801561065a575f80fd5b506106636110ce565b60405161067091906130b0565b60405180910390f35b348015610684575f80fd5b5061069f600480360381019061069a9190613165565b6110f3565b005b3480156106ac575f80fd5b506106b561118c565b6040516106c29190612e2a565b60405180910390f35b3480156106d6575f80fd5b506106f160048036038101906106ec9190613127565b61121c565b005b3480156106fe575f80fd5b5061071960048036038101906107149190612edb565b611335565b6040516107269190612f33565b60405180910390f35b34801561073a575f80fd5b5061075560048036038101906107509190612edb565b61141b565b6040516107629190612f33565b60405180910390f35b348015610776575f80fd5b50610791600480360381019061078c9190612f4c565b611438565b60405161079e9190612f33565b60405180910390f35b3480156107b2575f80fd5b506107bb611455565b6040516107c89190612f33565b60405180910390f35b3480156107dc575f80fd5b506107f760048036038101906107f29190613127565b611468565b005b348015610804575f80fd5b5061080d61153c565b60405161081a9190612ffa565b60405180910390f35b34801561082e575f80fd5b5061084960048036038101906108449190613063565b611542565b6040516108569190612ffa565b60405180910390f35b34801561086a575f80fd5b506108736115c4565b6040516108809190612ffa565b60405180910390f35b348015610894575f80fd5b5061089d6115ca565b6040516108aa9190612ffa565b60405180910390f35b3480156108be575f80fd5b506108c76115d0565b6040516108d49190612ffa565b60405180910390f35b6108e56115d6565b005b3480156108f2575f80fd5b5061090d60048036038101906109089190612f4c565b61198c565b005b34801561091a575f80fd5b50610923611a82565b6040516109309190612ffa565b60405180910390f35b606060038054610948906131bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610974906131bd565b80156109bf5780601f10610996576101008083540402835291602001916109bf565b820191905f5260205f20905b8154815290600101906020018083116109a257829003601f168201915b5050505050905090565b5f6109dc6109d5611a88565b8484611a8f565b6001905092915050565b6015602052805f5260405f205f915054906101000a900460ff1681565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f610a3d848484611c52565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610a84611a88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa9061325d565b60405180910390fd5b610b1785610b0f611a88565b858403611a8f565b60019150509392505050565b610b2b611a88565b73ffffffffffffffffffffffffffffffffffffffff16610b496110a6565b73ffffffffffffffffffffffffffffffffffffffff1614610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b96906132c5565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61dead81565b60115481565b5f6012905090565b60105481565b5f610cda610c49611a88565b848460015f610c56611a88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610cd59190613310565b611a8f565b6001905092915050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5f9054906101000a900460ff1681565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610dcd611a88565b73ffffffffffffffffffffffffffffffffffffffff16610deb6110a6565b73ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e38906132c5565b60405180910390fd5b610e4a5f6125c0565b565b5f610e55611a88565b73ffffffffffffffffffffffffffffffffffffffff16610e736110a6565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec0906132c5565b60405180910390fd5b5f600d5f6101000a81548160ff0219169083151502179055506005600f819055506005600e819055506001905090565b610f01611a88565b73ffffffffffffffffffffffffffffffffffffffff16610f1f6110a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906132c5565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ffa611a88565b73ffffffffffffffffffffffffffffffffffffffff166110186110a6565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611065906132c5565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110fb611a88565b73ffffffffffffffffffffffffffffffffffffffff166111196110a6565b73ffffffffffffffffffffffffffffffffffffffff161461116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611166906132c5565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461119b906131bd565b80601f01602080910402602001604051908101604052809291908181526020018280546111c7906131bd565b80156112125780601f106111e957610100808354040283529160200191611212565b820191905f5260205f20905b8154815290600101906020018083116111f557829003601f168201915b5050505050905090565b611224611a88565b73ffffffffffffffffffffffffffffffffffffffff166112426110a6565b73ffffffffffffffffffffffffffffffffffffffff1614611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f906132c5565b60405180910390fd5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e906133b3565b60405180910390fd5b6113318282612683565b5050565b5f8060015f611342611a88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390613441565b60405180910390fd5b611410611407611a88565b85858403611a8f565b600191505092915050565b5f61142e611427611a88565b8484611c52565b6001905092915050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611470611a88565b73ffffffffffffffffffffffffffffffffffffffff1661148e6110a6565b73ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db906132c5565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600a5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600f5481565b600b5481565b600e5481565b6115de611a88565b73ffffffffffffffffffffffffffffffffffffffff166115fc6110a6565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611649906132c5565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116b5816001610ef9565b6116e83060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116e3610a28565b611a8f565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611731573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117559190613473565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117de9190613473565b6040518363ffffffff1660e01b81526004016117fb92919061349e565b6020604051808303815f875af1158015611817573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183b9190613473565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118a660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610ef9565b6118d260135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612683565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611919610a28565b5f806119236110a6565b426040518863ffffffff1660e01b8152600401611945969594939291906134fe565b60606040518083038185885af1158015611961573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119869190613571565b50505050565b611994611a88565b73ffffffffffffffffffffffffffffffffffffffff166119b26110a6565b73ffffffffffffffffffffffffffffffffffffffff1614611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff906132c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90613631565b60405180910390fd5b611a7f816125c0565b50565b600c5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af4906136bf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b629061374d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c459190612ffa565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb7906137db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613869565b60405180910390fd5b5f8111611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d67906138f7565b60405180910390fd5b600d5f9054906101000a900460ff161561225457611d8c6110a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611dfa5750611dca6110a6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e6c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e855750600660149054906101000a900460ff16155b1561225357600d60019054906101000a900460ff16611f795760145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f39575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f9061395f565b60405180910390fd5b5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612016575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120bd57600a54811115612060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612057906139ed565b60405180910390fd5b600c5461206c83610d80565b826120779190613310565b11156120b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120af90613a55565b60405180910390fd5b612252565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561215a575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156121a957600a548111156121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90613ae3565b60405180910390fd5b612251565b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661225057600c5461220383610d80565b8261220e9190613310565b111561224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690613a55565b60405180910390fd5b5b5b5b5b5b600d60029054906101000a900460ff16801561227d5750600660149054906101000a900460ff16155b80156122d0575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612323575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612376575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123b9576001600660146101000a81548160ff02191690831515021790555061239e6126db565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612468575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612471575f90505b5f81156125ae5760165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124cf57505f600f54115b15612503576124fc60646124ee600f54866128ac90919063ffffffff16565b6128c190919063ffffffff16565b905061258b565b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561255a57505f600e54115b1561258a576125876064612579600e54866128ac90919063ffffffff16565b6128c190919063ffffffff16565b90505b5b5f81111561259f5761259e8530836128d6565b5b80836125ab9190613b01565b92505b6125b98585856128d6565b5050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6126e530610d80565b90505f8082036126f65750506128aa565b600b5482106128a7575f600b54905061270e81612b4b565b5f4790505f61273b606461272d601054856128ac90919063ffffffff16565b6128c190919063ffffffff16565b90505f6127518284612d8190919063ffffffff16565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161279890613b61565b5f6040518083038185875af1925050503d805f81146127d2576040519150601f19603f3d011682016040523d82523d5f602084013e6127d7565b606091505b50508095505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161282290613b61565b5f6040518083038185875af1925050503d805f811461285c576040519150601f19603f3d011682016040523d82523d5f602084013e612861565b606091505b5050809550507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff84848760405161289a93929190613b75565b60405180910390a1505050505b50505b565b5f81836128b99190613baa565b905092915050565b5f81836128ce9190613c18565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906137db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990613869565b60405180910390fd5b6129bd838383612d96565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3790613cb8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612ace9190613310565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b329190612ffa565b60405180910390a3612b45848484612d9b565b50505050565b5f600267ffffffffffffffff811115612b6757612b66613cd6565b5b604051908082528060200260200182016040528015612b955781602001602082028036833780820191505090505b50905030815f81518110612bac57612bab613d03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c749190613473565b81600181518110612c8857612c87613d03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612cee3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a8f565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612d50959493929190613de7565b5f604051808303815f87803b158015612d67575f80fd5b505af1158015612d79573d5f803e3d5ffd5b505050505050565b5f8183612d8e9190613b01565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612dd7578082015181840152602081019050612dbc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612dfc82612da0565b612e068185612daa565b9350612e16818560208601612dba565b612e1f81612de2565b840191505092915050565b5f6020820190508181035f830152612e428184612df2565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e7782612e4e565b9050919050565b612e8781612e6d565b8114612e91575f80fd5b50565b5f81359050612ea281612e7e565b92915050565b5f819050919050565b612eba81612ea8565b8114612ec4575f80fd5b50565b5f81359050612ed581612eb1565b92915050565b5f8060408385031215612ef157612ef0612e4a565b5b5f612efe85828601612e94565b9250506020612f0f85828601612ec7565b9150509250929050565b5f8115159050919050565b612f2d81612f19565b82525050565b5f602082019050612f465f830184612f24565b92915050565b5f60208284031215612f6157612f60612e4a565b5b5f612f6e84828501612e94565b91505092915050565b5f819050919050565b5f612f9a612f95612f9084612e4e565b612f77565b612e4e565b9050919050565b5f612fab82612f80565b9050919050565b5f612fbc82612fa1565b9050919050565b612fcc81612fb2565b82525050565b5f602082019050612fe55f830184612fc3565b92915050565b612ff481612ea8565b82525050565b5f60208201905061300d5f830184612feb565b92915050565b5f805f6060848603121561302a57613029612e4a565b5b5f61303786828701612e94565b935050602061304886828701612e94565b925050604061305986828701612ec7565b9150509250925092565b5f806040838503121561307957613078612e4a565b5b5f61308685828601612e94565b925050602061309785828601612e94565b9150509250929050565b6130aa81612e6d565b82525050565b5f6020820190506130c35f8301846130a1565b92915050565b5f60ff82169050919050565b6130de816130c9565b82525050565b5f6020820190506130f75f8301846130d5565b92915050565b61310681612f19565b8114613110575f80fd5b50565b5f81359050613121816130fd565b92915050565b5f806040838503121561313d5761313c612e4a565b5b5f61314a85828601612e94565b925050602061315b85828601613113565b9150509250929050565b5f6020828403121561317a57613179612e4a565b5b5f61318784828501613113565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806131d457607f821691505b6020821081036131e7576131e6613190565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613247602883612daa565b9150613252826131ed565b604082019050919050565b5f6020820190508181035f8301526132748161323b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6132af602083612daa565b91506132ba8261327b565b602082019050919050565b5f6020820190508181035f8301526132dc816132a3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61331a82612ea8565b915061332583612ea8565b925082820190508082111561333d5761333c6132e3565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61339d603983612daa565b91506133a882613343565b604082019050919050565b5f6020820190508181035f8301526133ca81613391565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61342b602583612daa565b9150613436826133d1565b604082019050919050565b5f6020820190508181035f8301526134588161341f565b9050919050565b5f8151905061346d81612e7e565b92915050565b5f6020828403121561348857613487612e4a565b5b5f6134958482850161345f565b91505092915050565b5f6040820190506134b15f8301856130a1565b6134be60208301846130a1565b9392505050565b5f819050919050565b5f6134e86134e36134de846134c5565b612f77565b612ea8565b9050919050565b6134f8816134ce565b82525050565b5f60c0820190506135115f8301896130a1565b61351e6020830188612feb565b61352b60408301876134ef565b61353860608301866134ef565b61354560808301856130a1565b61355260a0830184612feb565b979650505050505050565b5f8151905061356b81612eb1565b92915050565b5f805f6060848603121561358857613587612e4a565b5b5f6135958682870161355d565b93505060206135a68682870161355d565b92505060406135b78682870161355d565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61361b602683612daa565b9150613626826135c1565b604082019050919050565b5f6020820190508181035f8301526136488161360f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6136a9602483612daa565b91506136b48261364f565b604082019050919050565b5f6020820190508181035f8301526136d68161369d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613737602283612daa565b9150613742826136dd565b604082019050919050565b5f6020820190508181035f8301526137648161372b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6137c5602583612daa565b91506137d08261376b565b604082019050919050565b5f6020820190508181035f8301526137f2816137b9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613853602383612daa565b915061385e826137f9565b604082019050919050565b5f6020820190508181035f83015261388081613847565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6138e1602983612daa565b91506138ec82613887565b604082019050919050565b5f6020820190508181035f83015261390e816138d5565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e00000000005f82015250565b5f613949601b83612daa565b915061395482613915565b602082019050919050565b5f6020820190508181035f8301526139768161393d565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6139d7603583612daa565b91506139e28261397d565b604082019050919050565b5f6020820190508181035f830152613a04816139cb565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613a3f601383612daa565b9150613a4a82613a0b565b602082019050919050565b5f6020820190508181035f830152613a6c81613a33565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613acd603683612daa565b9150613ad882613a73565b604082019050919050565b5f6020820190508181035f830152613afa81613ac1565b9050919050565b5f613b0b82612ea8565b9150613b1683612ea8565b9250828203905081811115613b2e57613b2d6132e3565b5b92915050565b5f81905092915050565b50565b5f613b4c5f83613b34565b9150613b5782613b3e565b5f82019050919050565b5f613b6b82613b41565b9150819050919050565b5f606082019050613b885f830186612feb565b613b956020830185612feb565b613ba26040830184612f24565b949350505050565b5f613bb482612ea8565b9150613bbf83612ea8565b9250828202613bcd81612ea8565b91508282048414831517613be457613be36132e3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c2282612ea8565b9150613c2d83612ea8565b925082613c3d57613c3c613beb565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613ca2602683612daa565b9150613cad82613c48565b604082019050919050565b5f6020820190508181035f830152613ccf81613c96565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d6281612e6d565b82525050565b5f613d738383613d59565b60208301905092915050565b5f602082019050919050565b5f613d9582613d30565b613d9f8185613d3a565b9350613daa83613d4a565b805f5b83811015613dda578151613dc18882613d68565b9750613dcc83613d7f565b925050600181019050613dad565b5085935050505092915050565b5f60a082019050613dfa5f830188612feb565b613e0760208301876134ef565b8181036040830152613e198186613d8b565b9050613e2860608301856130a1565b613e356080830184612feb565b969550505050505056fea2646970667358221220cd5e639a97c037b0828eeeb5913366c73404119f78e06e52d11a3ca4363dfc7464736f6c63430008140033

Deployed Bytecode

0x60806040526004361061023e575f3560e01c806375f0a8741161012d578063bbc0c742116100aa578063e2f456051161006e578063e2f4560514610889578063e4748b9e146108b3578063e8078d94146108dd578063f2fde38b146108e7578063f8b45b051461090f57610245565b8063bbc0c742146107a7578063c0246668146107d1578063c8c8ebe4146107f9578063dd62ed3e14610823578063e0f3ccf51461085f57610245565b806395d89b41116100f157806395d89b41146106a15780639a7a23d6146106cb578063a457c2d7146106f3578063a9059cbb1461072f578063b62496f51461076b57610245565b806375f0a874146105e55780638a8c523c1461060f5780638da5cb5b146106255780638ea5220f1461064f578063924de9b71461067957610245565b8063360bfd54116101bb5780636ddd17131161017f5780636ddd17131461051757806370a0823114610541578063715018a61461057d578063751039fc146105935780637571336a146105bd57610245565b8063360bfd5414610421578063395093511461044b57806349bd5a5e146104875780634a62bb65146104b15780634fbee193146104db57610245565b806323b872dd1161020257806323b872dd1461033f57806325d92ee21461037b57806327c8f835146103a35780632b345964146103cd578063313ce567146103f757610245565b806306fdde0314610249578063095ea7b31461027357806310d5de53146102af5780631694505e146102eb57806318160ddd1461031557610245565b3661024557005b5f80fd5b348015610254575f80fd5b5061025d610939565b60405161026a9190612e2a565b60405180910390f35b34801561027e575f80fd5b5061029960048036038101906102949190612edb565b6109c9565b6040516102a69190612f33565b60405180910390f35b3480156102ba575f80fd5b506102d560048036038101906102d09190612f4c565b6109e6565b6040516102e29190612f33565b60405180910390f35b3480156102f6575f80fd5b506102ff610a03565b60405161030c9190612fd2565b60405180910390f35b348015610320575f80fd5b50610329610a28565b6040516103369190612ffa565b60405180910390f35b34801561034a575f80fd5b5061036560048036038101906103609190613013565b610a31565b6040516103729190612f33565b60405180910390f35b348015610386575f80fd5b506103a1600480360381019061039c9190613063565b610b23565b005b3480156103ae575f80fd5b506103b7610c23565b6040516103c491906130b0565b60405180910390f35b3480156103d8575f80fd5b506103e1610c29565b6040516103ee9190612ffa565b60405180910390f35b348015610402575f80fd5b5061040b610c2f565b60405161041891906130e4565b60405180910390f35b34801561042c575f80fd5b50610435610c37565b6040516104429190612ffa565b60405180910390f35b348015610456575f80fd5b50610471600480360381019061046c9190612edb565b610c3d565b60405161047e9190612f33565b60405180910390f35b348015610492575f80fd5b5061049b610ce4565b6040516104a891906130b0565b60405180910390f35b3480156104bc575f80fd5b506104c5610d09565b6040516104d29190612f33565b60405180910390f35b3480156104e6575f80fd5b5061050160048036038101906104fc9190612f4c565b610d1b565b60405161050e9190612f33565b60405180910390f35b348015610522575f80fd5b5061052b610d6d565b6040516105389190612f33565b60405180910390f35b34801561054c575f80fd5b5061056760048036038101906105629190612f4c565b610d80565b6040516105749190612ffa565b60405180910390f35b348015610588575f80fd5b50610591610dc5565b005b34801561059e575f80fd5b506105a7610e4c565b6040516105b49190612f33565b60405180910390f35b3480156105c8575f80fd5b506105e360048036038101906105de9190613127565b610ef9565b005b3480156105f0575f80fd5b506105f9610fcd565b60405161060691906130b0565b60405180910390f35b34801561061a575f80fd5b50610623610ff2565b005b348015610630575f80fd5b506106396110a6565b60405161064691906130b0565b60405180910390f35b34801561065a575f80fd5b506106636110ce565b60405161067091906130b0565b60405180910390f35b348015610684575f80fd5b5061069f600480360381019061069a9190613165565b6110f3565b005b3480156106ac575f80fd5b506106b561118c565b6040516106c29190612e2a565b60405180910390f35b3480156106d6575f80fd5b506106f160048036038101906106ec9190613127565b61121c565b005b3480156106fe575f80fd5b5061071960048036038101906107149190612edb565b611335565b6040516107269190612f33565b60405180910390f35b34801561073a575f80fd5b5061075560048036038101906107509190612edb565b61141b565b6040516107629190612f33565b60405180910390f35b348015610776575f80fd5b50610791600480360381019061078c9190612f4c565b611438565b60405161079e9190612f33565b60405180910390f35b3480156107b2575f80fd5b506107bb611455565b6040516107c89190612f33565b60405180910390f35b3480156107dc575f80fd5b506107f760048036038101906107f29190613127565b611468565b005b348015610804575f80fd5b5061080d61153c565b60405161081a9190612ffa565b60405180910390f35b34801561082e575f80fd5b5061084960048036038101906108449190613063565b611542565b6040516108569190612ffa565b60405180910390f35b34801561086a575f80fd5b506108736115c4565b6040516108809190612ffa565b60405180910390f35b348015610894575f80fd5b5061089d6115ca565b6040516108aa9190612ffa565b60405180910390f35b3480156108be575f80fd5b506108c76115d0565b6040516108d49190612ffa565b60405180910390f35b6108e56115d6565b005b3480156108f2575f80fd5b5061090d60048036038101906109089190612f4c565b61198c565b005b34801561091a575f80fd5b50610923611a82565b6040516109309190612ffa565b60405180910390f35b606060038054610948906131bd565b80601f0160208091040260200160405190810160405280929190818152602001828054610974906131bd565b80156109bf5780601f10610996576101008083540402835291602001916109bf565b820191905f5260205f20905b8154815290600101906020018083116109a257829003601f168201915b5050505050905090565b5f6109dc6109d5611a88565b8484611a8f565b6001905092915050565b6015602052805f5260405f205f915054906101000a900460ff1681565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b5f610a3d848484611c52565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610a84611a88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610b03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afa9061325d565b60405180910390fd5b610b1785610b0f611a88565b858403611a8f565b60019150509392505050565b610b2b611a88565b73ffffffffffffffffffffffffffffffffffffffff16610b496110a6565b73ffffffffffffffffffffffffffffffffffffffff1614610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b96906132c5565b60405180910390fd5b8060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b61dead81565b60115481565b5f6012905090565b60105481565b5f610cda610c49611a88565b848460015f610c56611a88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610cd59190613310565b611a8f565b6001905092915050565b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5f9054906101000a900460ff1681565b5f60145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600d60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610dcd611a88565b73ffffffffffffffffffffffffffffffffffffffff16610deb6110a6565b73ffffffffffffffffffffffffffffffffffffffff1614610e41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e38906132c5565b60405180910390fd5b610e4a5f6125c0565b565b5f610e55611a88565b73ffffffffffffffffffffffffffffffffffffffff16610e736110a6565b73ffffffffffffffffffffffffffffffffffffffff1614610ec9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec0906132c5565b60405180910390fd5b5f600d5f6101000a81548160ff0219169083151502179055506005600f819055506005600e819055506001905090565b610f01611a88565b73ffffffffffffffffffffffffffffffffffffffff16610f1f6110a6565b73ffffffffffffffffffffffffffffffffffffffff1614610f75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6c906132c5565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610ffa611a88565b73ffffffffffffffffffffffffffffffffffffffff166110186110a6565b73ffffffffffffffffffffffffffffffffffffffff161461106e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611065906132c5565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110fb611a88565b73ffffffffffffffffffffffffffffffffffffffff166111196110a6565b73ffffffffffffffffffffffffffffffffffffffff161461116f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611166906132c5565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b60606004805461119b906131bd565b80601f01602080910402602001604051908101604052809291908181526020018280546111c7906131bd565b80156112125780601f106111e957610100808354040283529160200191611212565b820191905f5260205f20905b8154815290600101906020018083116111f557829003601f168201915b5050505050905090565b611224611a88565b73ffffffffffffffffffffffffffffffffffffffff166112426110a6565b73ffffffffffffffffffffffffffffffffffffffff1614611298576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128f906132c5565b60405180910390fd5b60135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e906133b3565b60405180910390fd5b6113318282612683565b5050565b5f8060015f611342611a88565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f390613441565b60405180910390fd5b611410611407611a88565b85858403611a8f565b600191505092915050565b5f61142e611427611a88565b8484611c52565b6001905092915050565b6016602052805f5260405f205f915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611470611a88565b73ffffffffffffffffffffffffffffffffffffffff1661148e6110a6565b73ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db906132c5565b60405180910390fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600a5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600f5481565b600b5481565b600e5481565b6115de611a88565b73ffffffffffffffffffffffffffffffffffffffff166115fc6110a6565b73ffffffffffffffffffffffffffffffffffffffff1614611652576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611649906132c5565b60405180910390fd5b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060125f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506116b5816001610ef9565b6116e83060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166116e3610a28565b611a8f565b8073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611731573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117559190613473565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117de9190613473565b6040518363ffffffff1660e01b81526004016117fb92919061349e565b6020604051808303815f875af1158015611817573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061183b9190613473565b60135f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506118a660135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001610ef9565b6118d260135f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001612683565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7193430611919610a28565b5f806119236110a6565b426040518863ffffffff1660e01b8152600401611945969594939291906134fe565b60606040518083038185885af1158015611961573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119869190613571565b50505050565b611994611a88565b73ffffffffffffffffffffffffffffffffffffffff166119b26110a6565b73ffffffffffffffffffffffffffffffffffffffff1614611a08576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ff906132c5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6d90613631565b60405180910390fd5b611a7f816125c0565b50565b600c5481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611afd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af4906136bf565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b629061374d565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611c459190612ffa565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb7906137db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613869565b60405180910390fd5b5f8111611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d67906138f7565b60405180910390fd5b600d5f9054906101000a900460ff161561225457611d8c6110a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611dfa5750611dca6110a6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e3257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e6c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611e855750600660149054906101000a900460ff16155b1561225357600d60019054906101000a900460ff16611f795760145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611f39575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b611f78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6f9061395f565b60405180910390fd5b5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612016575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156120bd57600a54811115612060576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612057906139ed565b60405180910390fd5b600c5461206c83610d80565b826120779190613310565b11156120b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120af90613a55565b60405180910390fd5b612252565b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561215a575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156121a957600a548111156121a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219b90613ae3565b60405180910390fd5b612251565b60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661225057600c5461220383610d80565b8261220e9190613310565b111561224f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224690613a55565b60405180910390fd5b5b5b5b5b5b600d60029054906101000a900460ff16801561227d5750600660149054906101000a900460ff16155b80156122d0575060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612323575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612376575060145f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156123b9576001600660146101000a81548160ff02191690831515021790555061239e6126db565b5f600660146101000a81548160ff0219169083151502179055505b5f600660149054906101000a900460ff1615905060145f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612468575060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612471575f90505b5f81156125ae5760165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156124cf57505f600f54115b15612503576124fc60646124ee600f54866128ac90919063ffffffff16565b6128c190919063ffffffff16565b905061258b565b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561255a57505f600e54115b1561258a576125876064612579600e54866128ac90919063ffffffff16565b6128c190919063ffffffff16565b90505b5b5f81111561259f5761259e8530836128d6565b5b80836125ab9190613b01565b92505b6125b98585856128d6565b5050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f6126e530610d80565b90505f8082036126f65750506128aa565b600b5482106128a7575f600b54905061270e81612b4b565b5f4790505f61273b606461272d601054856128ac90919063ffffffff16565b6128c190919063ffffffff16565b90505f6127518284612d8190919063ffffffff16565b905060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161279890613b61565b5f6040518083038185875af1925050503d805f81146127d2576040519150601f19603f3d011682016040523d82523d5f602084013e6127d7565b606091505b50508095505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161282290613b61565b5f6040518083038185875af1925050503d805f811461285c576040519150601f19603f3d011682016040523d82523d5f602084013e612861565b606091505b5050809550507fe9f689eb4d290dd3a40869ea626055ee4a55d40f20286208d04ef55f39254cff84848760405161289a93929190613b75565b60405180910390a1505050505b50505b565b5f81836128b99190613baa565b905092915050565b5f81836128ce9190613c18565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612944576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293b906137db565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036129b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129a990613869565b60405180910390fd5b6129bd838383612d96565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3790613cb8565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254612ace9190613310565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612b329190612ffa565b60405180910390a3612b45848484612d9b565b50505050565b5f600267ffffffffffffffff811115612b6757612b66613cd6565b5b604051908082528060200260200182016040528015612b955781602001602082028036833780820191505090505b50905030815f81518110612bac57612bab613d03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c50573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c749190613473565b81600181518110612c8857612c87613d03565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612cee3060125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611a8f565b60125f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612d50959493929190613de7565b5f604051808303815f87803b158015612d67575f80fd5b505af1158015612d79573d5f803e3d5ffd5b505050505050565b5f8183612d8e9190613b01565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612dd7578082015181840152602081019050612dbc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f612dfc82612da0565b612e068185612daa565b9350612e16818560208601612dba565b612e1f81612de2565b840191505092915050565b5f6020820190508181035f830152612e428184612df2565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612e7782612e4e565b9050919050565b612e8781612e6d565b8114612e91575f80fd5b50565b5f81359050612ea281612e7e565b92915050565b5f819050919050565b612eba81612ea8565b8114612ec4575f80fd5b50565b5f81359050612ed581612eb1565b92915050565b5f8060408385031215612ef157612ef0612e4a565b5b5f612efe85828601612e94565b9250506020612f0f85828601612ec7565b9150509250929050565b5f8115159050919050565b612f2d81612f19565b82525050565b5f602082019050612f465f830184612f24565b92915050565b5f60208284031215612f6157612f60612e4a565b5b5f612f6e84828501612e94565b91505092915050565b5f819050919050565b5f612f9a612f95612f9084612e4e565b612f77565b612e4e565b9050919050565b5f612fab82612f80565b9050919050565b5f612fbc82612fa1565b9050919050565b612fcc81612fb2565b82525050565b5f602082019050612fe55f830184612fc3565b92915050565b612ff481612ea8565b82525050565b5f60208201905061300d5f830184612feb565b92915050565b5f805f6060848603121561302a57613029612e4a565b5b5f61303786828701612e94565b935050602061304886828701612e94565b925050604061305986828701612ec7565b9150509250925092565b5f806040838503121561307957613078612e4a565b5b5f61308685828601612e94565b925050602061309785828601612e94565b9150509250929050565b6130aa81612e6d565b82525050565b5f6020820190506130c35f8301846130a1565b92915050565b5f60ff82169050919050565b6130de816130c9565b82525050565b5f6020820190506130f75f8301846130d5565b92915050565b61310681612f19565b8114613110575f80fd5b50565b5f81359050613121816130fd565b92915050565b5f806040838503121561313d5761313c612e4a565b5b5f61314a85828601612e94565b925050602061315b85828601613113565b9150509250929050565b5f6020828403121561317a57613179612e4a565b5b5f61318784828501613113565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806131d457607f821691505b6020821081036131e7576131e6613190565b5b50919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613247602883612daa565b9150613252826131ed565b604082019050919050565b5f6020820190508181035f8301526132748161323b565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6132af602083612daa565b91506132ba8261327b565b602082019050919050565b5f6020820190508181035f8301526132dc816132a3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61331a82612ea8565b915061332583612ea8565b925082820190508082111561333d5761333c6132e3565b5b92915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f61339d603983612daa565b91506133a882613343565b604082019050919050565b5f6020820190508181035f8301526133ca81613391565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61342b602583612daa565b9150613436826133d1565b604082019050919050565b5f6020820190508181035f8301526134588161341f565b9050919050565b5f8151905061346d81612e7e565b92915050565b5f6020828403121561348857613487612e4a565b5b5f6134958482850161345f565b91505092915050565b5f6040820190506134b15f8301856130a1565b6134be60208301846130a1565b9392505050565b5f819050919050565b5f6134e86134e36134de846134c5565b612f77565b612ea8565b9050919050565b6134f8816134ce565b82525050565b5f60c0820190506135115f8301896130a1565b61351e6020830188612feb565b61352b60408301876134ef565b61353860608301866134ef565b61354560808301856130a1565b61355260a0830184612feb565b979650505050505050565b5f8151905061356b81612eb1565b92915050565b5f805f6060848603121561358857613587612e4a565b5b5f6135958682870161355d565b93505060206135a68682870161355d565b92505060406135b78682870161355d565b9150509250925092565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61361b602683612daa565b9150613626826135c1565b604082019050919050565b5f6020820190508181035f8301526136488161360f565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6136a9602483612daa565b91506136b48261364f565b604082019050919050565b5f6020820190508181035f8301526136d68161369d565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613737602283612daa565b9150613742826136dd565b604082019050919050565b5f6020820190508181035f8301526137648161372b565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6137c5602583612daa565b91506137d08261376b565b604082019050919050565b5f6020820190508181035f8301526137f2816137b9565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613853602383612daa565b915061385e826137f9565b604082019050919050565b5f6020820190508181035f83015261388081613847565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f6138e1602983612daa565b91506138ec82613887565b604082019050919050565b5f6020820190508181035f83015261390e816138d5565b9050919050565b7f54726164696e67206973206e6f7420656e61626c6564207965742e00000000005f82015250565b5f613949601b83612daa565b915061395482613915565b602082019050919050565b5f6020820190508181035f8301526139768161393d565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6139d7603583612daa565b91506139e28261397d565b604082019050919050565b5f6020820190508181035f830152613a04816139cb565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f613a3f601383612daa565b9150613a4a82613a0b565b602082019050919050565b5f6020820190508181035f830152613a6c81613a33565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f613acd603683612daa565b9150613ad882613a73565b604082019050919050565b5f6020820190508181035f830152613afa81613ac1565b9050919050565b5f613b0b82612ea8565b9150613b1683612ea8565b9250828203905081811115613b2e57613b2d6132e3565b5b92915050565b5f81905092915050565b50565b5f613b4c5f83613b34565b9150613b5782613b3e565b5f82019050919050565b5f613b6b82613b41565b9150819050919050565b5f606082019050613b885f830186612feb565b613b956020830185612feb565b613ba26040830184612f24565b949350505050565b5f613bb482612ea8565b9150613bbf83612ea8565b9250828202613bcd81612ea8565b91508282048414831517613be457613be36132e3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f613c2282612ea8565b9150613c2d83612ea8565b925082613c3d57613c3c613beb565b5b828204905092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613ca2602683612daa565b9150613cad82613c48565b604082019050919050565b5f6020820190508181035f830152613ccf81613c96565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613d6281612e6d565b82525050565b5f613d738383613d59565b60208301905092915050565b5f602082019050919050565b5f613d9582613d30565b613d9f8185613d3a565b9350613daa83613d4a565b805f5b83811015613dda578151613dc18882613d68565b9750613dcc83613d7f565b925050600181019050613dad565b5085935050505092915050565b5f60a082019050613dfa5f830188612feb565b613e0760208301876134ef565b8181036040830152613e198186613d8b565b9050613e2860608301856130a1565b613e356080830184612feb565b969550505050505056fea2646970667358221220cd5e639a97c037b0828eeeb5913366c73404119f78e06e52d11a3ca4363dfc7464736f6c63430008140033

Deployed Bytecode Sourcemap

18514:9931:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4885:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6487:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19906:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19649:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5374:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6689:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23256:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19732:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19573:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5216:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19528:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7226:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19697:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19339:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23463:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19419:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5545:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2308:103;;;;;;;;;;;;;:::i;:::-;;20987:166;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21161:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18705:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20800:112;;;;;;;;;;;;;:::i;:::-;;2083:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18807;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21458:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5104:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21706:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7524:475;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5901:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19976:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19379:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21566:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18950:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6164:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19492:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19070:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19459:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22018:1092;;;:::i;:::-;;2419:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19243:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4885:100;4939:13;4972:5;4965:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4885:100;:::o;6487:194::-;6595:4;6612:39;6621:12;:10;:12::i;:::-;6635:7;6644:6;6612:8;:39::i;:::-;6669:4;6662:11;;6487:194;;;;:::o;19906:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;19649:41::-;;;;;;;;;;;;;:::o;5374:108::-;5435:7;5462:12;;5455:19;;5374:108;:::o;6689:529::-;6829:4;6846:36;6856:6;6864:9;6875:6;6846:9;:36::i;:::-;6895:24;6922:11;:19;6934:6;6922:19;;;;;;;;;;;;;;;:33;6942:12;:10;:12::i;:::-;6922:33;;;;;;;;;;;;;;;;6895:60;;7008:6;6988:16;:26;;6966:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;7118:57;7127:6;7135:12;:10;:12::i;:::-;7168:6;7149:16;:25;7118:8;:57::i;:::-;7206:4;7199:11;;;6689:529;;;;;:::o;23256:199::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23392:10:::1;23380:9;;:22;;;;;;;;;;;;;;;;;;23431:16;23413:15;;:34;;;;;;;;;;;;;;;;;;23256:199:::0;;:::o;19732:53::-;19778:6;19732:53;:::o;19573:29::-;;;;:::o;5216:93::-;5274:5;5299:2;5292:9;;5216:93;:::o;19528:35::-;;;;:::o;7226:290::-;7339:4;7356:130;7379:12;:10;:12::i;:::-;7406:7;7465:10;7428:11;:25;7440:12;:10;:12::i;:::-;7428:25;;;;;;;;;;;;;;;:34;7454:7;7428:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;7356:8;:130::i;:::-;7504:4;7497:11;;7226:290;;;;:::o;19697:28::-;;;;;;;;;;;;;:::o;19339:33::-;;;;;;;;;;;;;:::o;23463:126::-;23529:4;23553:19;:28;23573:7;23553:28;;;;;;;;;;;;;;;;;;;;;;;;;23546:35;;23463:126;;;:::o;19419:31::-;;;;;;;;;;;;;:::o;5545:143::-;5635:7;5662:9;:18;5672:7;5662:18;;;;;;;;;;;;;;;;5655:25;;5545:143;;;:::o;2308:103::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2373:30:::1;2400:1;2373:18;:30::i;:::-;2308:103::o:0;20987:166::-;21039:4;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21073:5:::1;21056:14;;:22;;;;;;;;;;;;;;;;;;21100:1;21089:8;:12;;;;21122:1;21112:7;:11;;;;21141:4;21134:11;;20987:166:::0;:::o;21161:201::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21344:10:::1;21292:31;:49;21324:16;21292:49;;;;;;;;;;;;;;;;:62;;;;;;;;;;;;;;;;;;21161:201:::0;;:::o;18705:93::-;;;;;;;;;;;;;:::o;20800:112::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20871:4:::1;20855:13;;:20;;;;;;;;;;;;;;;;;;20900:4;20886:11;;:18;;;;;;;;;;;;;;;;;;20800:112::o:0;2083:87::-;2129:7;2156:6;;;;;;;;;;;2149:13;;2083:87;:::o;18807:::-;;;;;;;;;;;;;:::o;21458:100::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21543:7:::1;21529:11;;:21;;;;;;;;;;;;;;;;;;21458:100:::0;:::o;5104:104::-;5160:13;5193:7;5186:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5104:104;:::o;21706:304::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21852:13:::1;;;;;;;;;;;21844:21;;:4;:21;;::::0;21822:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21961:41;21990:4;21996:5;21961:28;:41::i;:::-;21706:304:::0;;:::o;7524:475::-;7642:4;7659:24;7686:11;:25;7698:12;:10;:12::i;:::-;7686:25;;;;;;;;;;;;;;;:34;7712:7;7686:34;;;;;;;;;;;;;;;;7659:61;;7773:15;7753:16;:35;;7731:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;7889:67;7898:12;:10;:12::i;:::-;7912:7;7940:15;7921:16;:34;7889:8;:67::i;:::-;7987:4;7980:11;;;7524:475;;;;:::o;5901:200::-;6012:4;6029:42;6039:12;:10;:12::i;:::-;6053:9;6064:6;6029:9;:42::i;:::-;6089:4;6082:11;;5901:200;;;;:::o;19976:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;19379:33::-;;;;;;;;;;;;;:::o;21566:132::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21682:8:::1;21651:19;:28;21671:7;21651:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;21566:132:::0;;:::o;18950:64::-;;;;:::o;6164:176::-;6278:7;6305:11;:18;6317:5;6305:18;;;;;;;;;;;;;;;:27;6324:7;6305:27;;;;;;;;;;;;;;;;6298:34;;6164:176;;;;:::o;19492:27::-;;;;:::o;19070:63::-;;;;:::o;19459:26::-;;;;:::o;22018:1092::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22147:35:::1;22218:42;22147:124;;22302:16;22284:15;;:34;;;;;;;;;;;;;;;;;;22329:58;22363:16;22382:4;22329:25;:58::i;:::-;22398:64;22415:4;22430:15;;;;;;;;;;;22448:13;:11;:13::i;:::-;22398:8;:64::i;:::-;22537:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22519:70;;;22598:4;22605:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22519:110;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22503:13;;:126;;;;;;;;;;;;;;;;;;22640:55;22674:13;;;;;;;;;;;22690:4;22640:25;:55::i;:::-;22706:58;22743:13;;;;;;;;;;;22759:4;22706:28;:58::i;:::-;22777:15;;;;;;;;;;;:31;;;22816:9;22849:4;22885:13;:11;:13::i;:::-;22933:1;22976::::0;23019:7:::1;:5;:7::i;:::-;23076:15;22777:325;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;22069:1041;22018:1092::o:0;2419:238::-;2231:12;:10;:12::i;:::-;2220:23;;:7;:5;:7::i;:::-;:23;;;2212:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2542:1:::1;2522:22;;:8;:22;;::::0;2500:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2621:28;2640:8;2621:18;:28::i;:::-;2419:238:::0;:::o;19243:53::-;;;;:::o;1474:98::-;1527:7;1554:10;1547:17;;1474:98;:::o;9791:380::-;9944:1;9927:19;;:5;:19;;;9919:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10025:1;10006:21;;:7;:21;;;9998:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10109:6;10079:11;:18;10091:5;10079:18;;;;;;;;;;;;;;;:27;10098:7;10079:27;;;;;;;;;;;;;;;:36;;;;10147:7;10131:32;;10140:5;10131:32;;;10156:6;10131:32;;;;;;:::i;:::-;;;;;;;;9791:380;;;:::o;23597:3339::-;23745:1;23729:18;;:4;:18;;;23721:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23822:1;23808:16;;:2;:16;;;23800:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23892:1;23883:6;:10;23875:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;23954:14;;;;;;;;;;;23950:1699;;;24015:7;:5;:7::i;:::-;24007:15;;:4;:15;;;;:49;;;;;24049:7;:5;:7::i;:::-;24043:13;;:2;:13;;;;24007:49;:86;;;;;24091:1;24077:16;;:2;:16;;;;24007:86;:128;;;;;24128:6;24114:21;;:2;:21;;;;24007:128;:158;;;;;24157:8;;;;;;;;;;;24156:9;24007:158;23985:1653;;;24205:13;;;;;;;;;;;24200:228;;24277:19;:25;24297:4;24277:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;24306:19;:23;24326:2;24306:23;;;;;;;;;;;;;;;;;;;;;;;;;24277:52;24243:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;24200:228;24502:25;:31;24528:4;24502:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;24559:31;:35;24591:2;24559:35;;;;;;;;;;;;;;;;;;;;;;;;;24558:36;24502:92;24476:1147;;;24681:20;;24671:6;:30;;24637:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;24889:9;;24872:13;24882:2;24872:9;:13::i;:::-;24863:6;:22;;;;:::i;:::-;:35;;24829:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;24476:1147;;;25067:25;:29;25093:2;25067:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;25122:31;:37;25154:4;25122:37;;;;;;;;;;;;;;;;;;;;;;;;;25121:38;25067:92;25041:582;;;25246:20;;25236:6;:30;;25202:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;25041:582;;;25403:31;:35;25435:2;25403:35;;;;;;;;;;;;;;;;;;;;;;;;;25398:225;;25523:9;;25506:13;25516:2;25506:9;:13::i;:::-;25497:6;:22;;;;:::i;:::-;:35;;25463:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;25398:225;25041:582;24476:1147;23985:1653;23950:1699;25679:11;;;;;;;;;;;:55;;;;;25726:8;;;;;;;;;;;25725:9;25679:55;:123;;;;;25771:25;:31;25797:4;25771:31;;;;;;;;;;;;;;;;;;;;;;;;;25770:32;25679:123;:185;;;;;25839:19;:25;25859:4;25839:25;;;;;;;;;;;;;;;;;;;;;;;;;25838:26;25679:185;:245;;;;;25901:19;:23;25921:2;25901:23;;;;;;;;;;;;;;;;;;;;;;;;;25900:24;25679:245;25661:392;;;25981:4;25970:8;;:15;;;;;;;;;;;;;;;;;;26000:10;:8;:10::i;:::-;26036:5;26025:8;;:16;;;;;;;;;;;;;;;;;;25661:392;26065:12;26081:8;;;;;;;;;;;26080:9;26065:24;;26191:19;:25;26211:4;26191:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;26220:19;:23;26240:2;26220:23;;;;;;;;;;;;;;;;;;;;;;;;;26191:52;26187:100;;;26270:5;26260:15;;26187:100;26299:12;26404:7;26400:485;;;26456:25;:29;26482:2;26456:29;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26500:1;26489:8;;:12;26456:45;26452:286;;;26529:29;26554:3;26529:20;26540:8;;26529:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;26522:36;;26452:286;;;26620:25;:31;26646:4;26620:31;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26665:1;26655:7;;:11;26620:46;26616:122;;;26694:28;26718:3;26694:19;26705:7;;26694:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;26687:35;;26616:122;26452:286;26765:1;26758:4;:8;26754:91;;;26787:42;26803:4;26817;26824;26787:15;:42::i;:::-;26754:91;26869:4;26859:14;;;;;:::i;:::-;;;26400:485;26895:33;26911:4;26917:2;26921:6;26895:15;:33::i;:::-;23710:3226;;23597:3339;;;:::o;2665:191::-;2739:16;2758:6;;;;;;;;;;;2739:25;;2784:8;2775:6;;:17;;;;;;;;;;;;;;;;;;2839:8;2808:40;;2829:8;2808:40;;;;;;;;;;;;2728:128;2665:191;:::o;23118:130::-;23235:5;23201:25;:31;23227:4;23201:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23118:130;;:::o;27537:905::-;27576:23;27602:24;27620:4;27602:9;:24::i;:::-;27576:50;;27637:12;27683:1;27664:15;:20;27660:59;;27701:7;;;;27660:59;27752:18;;27733:15;:37;27729:706;;27787:26;27816:18;;27787:47;;27849:36;27866:18;27849:16;:36::i;:::-;27900:23;27926:21;27900:47;;27962:25;27990:81;28067:3;27990:54;28028:15;;27990;:37;;:54;;;;:::i;:::-;:76;;:81;;;;:::i;:::-;27962:109;;28086:19;28108:38;28128:17;28108:15;:19;;:38;;;;:::i;:::-;28086:60;;28183:15;;;;;;;;;;;28175:29;;28230:17;28175:91;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28161:105;;;;;28303:9;;;;;;;;;;;28295:23;;28326:11;28295:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28281:61;;;;;28362;28378:18;28398:15;28415:7;28362:61;;;;;;;;:::i;:::-;;;;;;;;27772:663;;;;27729:706;27565:877;;27537:905;:::o;12153:98::-;12211:7;12242:1;12238;:5;;;;:::i;:::-;12231:12;;12153:98;;;;:::o;12259:::-;12317:7;12348:1;12344;:5;;;;:::i;:::-;12337:12;;12259:98;;;;:::o;8007:770::-;8165:1;8147:20;;:6;:20;;;8139:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;8249:1;8228:23;;:9;:23;;;8220:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;8304:47;8325:6;8333:9;8344:6;8304:20;:47::i;:::-;8364:21;8388:9;:17;8398:6;8388:17;;;;;;;;;;;;;;;;8364:41;;8455:6;8438:13;:23;;8416:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;8599:6;8583:13;:22;8563:9;:17;8573:6;8563:17;;;;;;;;;;;;;;;:42;;;;8651:6;8627:9;:20;8637:9;8627:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;8692:9;8675:35;;8684:6;8675:35;;;8703:6;8675:35;;;;;;:::i;:::-;;;;;;;;8723:46;8743:6;8751:9;8762:6;8723:19;:46::i;:::-;8128:649;8007:770;;;:::o;26944:585::-;27070:21;27108:1;27094:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27070:40;;27139:4;27121;27126:1;27121:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;27165:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27155:4;27160:1;27155:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;27198:62;27215:4;27230:15;;;;;;;;;;;27248:11;27198:8;:62::i;:::-;27297:15;;;;;;;;;;;:66;;;27378:11;27404:1;27448:4;27475;27495:15;27297:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26999:530;26944:585;:::o;12047:98::-;12105:7;12136:1;12132;:5;;;;:::i;:::-;12125:12;;12047:98;;;;:::o;10179:125::-;;;;:::o;10312:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:474::-;5804:6;5812;5861:2;5849:9;5840:7;5836:23;5832:32;5829:119;;;5867:79;;:::i;:::-;5829:119;5987:1;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5958:117;6114:2;6140:53;6185:7;6176:6;6165:9;6161:22;6140:53;:::i;:::-;6130:63;;6085:118;5736:474;;;;;:::o;6216:118::-;6303:24;6321:5;6303:24;:::i;:::-;6298:3;6291:37;6216:118;;:::o;6340:222::-;6433:4;6471:2;6460:9;6456:18;6448:26;;6484:71;6552:1;6541:9;6537:17;6528:6;6484:71;:::i;:::-;6340:222;;;;:::o;6568:86::-;6603:7;6643:4;6636:5;6632:16;6621:27;;6568:86;;;:::o;6660:112::-;6743:22;6759:5;6743:22;:::i;:::-;6738:3;6731:35;6660:112;;:::o;6778:214::-;6867:4;6905:2;6894:9;6890:18;6882:26;;6918:67;6982:1;6971:9;6967:17;6958:6;6918:67;:::i;:::-;6778:214;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:323::-;7789:6;7838:2;7826:9;7817:7;7813:23;7809:32;7806:119;;;7844:79;;:::i;:::-;7806:119;7964:1;7989:50;8031:7;8022:6;8011:9;8007:22;7989:50;:::i;:::-;7979:60;;7935:114;7733:323;;;;:::o;8062:180::-;8110:77;8107:1;8100:88;8207:4;8204:1;8197:15;8231:4;8228:1;8221:15;8248:320;8292:6;8329:1;8323:4;8319:12;8309:22;;8376:1;8370:4;8366:12;8397:18;8387:81;;8453:4;8445:6;8441:17;8431:27;;8387:81;8515:2;8507:6;8504:14;8484:18;8481:38;8478:84;;8534:18;;:::i;:::-;8478:84;8299:269;8248:320;;;:::o;8574:227::-;8714:34;8710:1;8702:6;8698:14;8691:58;8783:10;8778:2;8770:6;8766:15;8759:35;8574:227;:::o;8807:366::-;8949:3;8970:67;9034:2;9029:3;8970:67;:::i;:::-;8963:74;;9046:93;9135:3;9046:93;:::i;:::-;9164:2;9159:3;9155:12;9148:19;;8807:366;;;:::o;9179:419::-;9345:4;9383:2;9372:9;9368:18;9360:26;;9432:9;9426:4;9422:20;9418:1;9407:9;9403:17;9396:47;9460:131;9586:4;9460:131;:::i;:::-;9452:139;;9179:419;;;:::o;9604:182::-;9744:34;9740:1;9732:6;9728:14;9721:58;9604:182;:::o;9792:366::-;9934:3;9955:67;10019:2;10014:3;9955:67;:::i;:::-;9948:74;;10031:93;10120:3;10031:93;:::i;:::-;10149:2;10144:3;10140:12;10133:19;;9792:366;;;:::o;10164:419::-;10330:4;10368:2;10357:9;10353:18;10345:26;;10417:9;10411:4;10407:20;10403:1;10392:9;10388:17;10381:47;10445:131;10571:4;10445:131;:::i;:::-;10437:139;;10164:419;;;:::o;10589:180::-;10637:77;10634:1;10627:88;10734:4;10731:1;10724:15;10758:4;10755:1;10748:15;10775:191;10815:3;10834:20;10852:1;10834:20;:::i;:::-;10829:25;;10868:20;10886:1;10868:20;:::i;:::-;10863:25;;10911:1;10908;10904:9;10897:16;;10932:3;10929:1;10926:10;10923:36;;;10939:18;;:::i;:::-;10923:36;10775:191;;;;:::o;10972:244::-;11112:34;11108:1;11100:6;11096:14;11089:58;11181:27;11176:2;11168:6;11164:15;11157:52;10972:244;:::o;11222:366::-;11364:3;11385:67;11449:2;11444:3;11385:67;:::i;:::-;11378:74;;11461:93;11550:3;11461:93;:::i;:::-;11579:2;11574:3;11570:12;11563:19;;11222:366;;;:::o;11594:419::-;11760:4;11798:2;11787:9;11783:18;11775:26;;11847:9;11841:4;11837:20;11833:1;11822:9;11818:17;11811:47;11875:131;12001:4;11875:131;:::i;:::-;11867:139;;11594:419;;;:::o;12019:224::-;12159:34;12155:1;12147:6;12143:14;12136:58;12228:7;12223:2;12215:6;12211:15;12204:32;12019:224;:::o;12249:366::-;12391:3;12412:67;12476:2;12471:3;12412:67;:::i;:::-;12405:74;;12488:93;12577:3;12488:93;:::i;:::-;12606:2;12601:3;12597:12;12590:19;;12249:366;;;:::o;12621:419::-;12787:4;12825:2;12814:9;12810:18;12802:26;;12874:9;12868:4;12864:20;12860:1;12849:9;12845:17;12838:47;12902:131;13028:4;12902:131;:::i;:::-;12894:139;;12621:419;;;:::o;13046:143::-;13103:5;13134:6;13128:13;13119:22;;13150:33;13177:5;13150:33;:::i;:::-;13046:143;;;;:::o;13195:351::-;13265:6;13314:2;13302:9;13293:7;13289:23;13285:32;13282:119;;;13320:79;;:::i;:::-;13282:119;13440:1;13465:64;13521:7;13512:6;13501:9;13497:22;13465:64;:::i;:::-;13455:74;;13411:128;13195:351;;;;:::o;13552:332::-;13673:4;13711:2;13700:9;13696:18;13688:26;;13724:71;13792:1;13781:9;13777:17;13768:6;13724:71;:::i;:::-;13805:72;13873:2;13862:9;13858:18;13849:6;13805:72;:::i;:::-;13552:332;;;;;:::o;13890:85::-;13935:7;13964:5;13953:16;;13890:85;;;:::o;13981:158::-;14039:9;14072:61;14090:42;14099:32;14125:5;14099:32;:::i;:::-;14090:42;:::i;:::-;14072:61;:::i;:::-;14059:74;;13981:158;;;:::o;14145:147::-;14240:45;14279:5;14240:45;:::i;:::-;14235:3;14228:58;14145:147;;:::o;14298:807::-;14547:4;14585:3;14574:9;14570:19;14562:27;;14599:71;14667:1;14656:9;14652:17;14643:6;14599:71;:::i;:::-;14680:72;14748:2;14737:9;14733:18;14724:6;14680:72;:::i;:::-;14762:80;14838:2;14827:9;14823:18;14814:6;14762:80;:::i;:::-;14852;14928:2;14917:9;14913:18;14904:6;14852:80;:::i;:::-;14942:73;15010:3;14999:9;14995:19;14986:6;14942:73;:::i;:::-;15025;15093:3;15082:9;15078:19;15069:6;15025:73;:::i;:::-;14298:807;;;;;;;;;:::o;15111:143::-;15168:5;15199:6;15193:13;15184:22;;15215:33;15242:5;15215:33;:::i;:::-;15111:143;;;;:::o;15260:663::-;15348:6;15356;15364;15413:2;15401:9;15392:7;15388:23;15384:32;15381:119;;;15419:79;;:::i;:::-;15381:119;15539:1;15564:64;15620:7;15611:6;15600:9;15596:22;15564:64;:::i;:::-;15554:74;;15510:128;15677:2;15703:64;15759:7;15750:6;15739:9;15735:22;15703:64;:::i;:::-;15693:74;;15648:129;15816:2;15842:64;15898:7;15889:6;15878:9;15874:22;15842:64;:::i;:::-;15832:74;;15787:129;15260:663;;;;;:::o;15929:225::-;16069:34;16065:1;16057:6;16053:14;16046:58;16138:8;16133:2;16125:6;16121:15;16114:33;15929:225;:::o;16160:366::-;16302:3;16323:67;16387:2;16382:3;16323:67;:::i;:::-;16316:74;;16399:93;16488:3;16399:93;:::i;:::-;16517:2;16512:3;16508:12;16501:19;;16160:366;;;:::o;16532:419::-;16698:4;16736:2;16725:9;16721:18;16713:26;;16785:9;16779:4;16775:20;16771:1;16760:9;16756:17;16749:47;16813:131;16939:4;16813:131;:::i;:::-;16805:139;;16532:419;;;:::o;16957:223::-;17097:34;17093:1;17085:6;17081:14;17074:58;17166:6;17161:2;17153:6;17149:15;17142:31;16957:223;:::o;17186:366::-;17328:3;17349:67;17413:2;17408:3;17349:67;:::i;:::-;17342:74;;17425:93;17514:3;17425:93;:::i;:::-;17543:2;17538:3;17534:12;17527:19;;17186:366;;;:::o;17558:419::-;17724:4;17762:2;17751:9;17747:18;17739:26;;17811:9;17805:4;17801:20;17797:1;17786:9;17782:17;17775:47;17839:131;17965:4;17839:131;:::i;:::-;17831:139;;17558:419;;;:::o;17983:221::-;18123:34;18119:1;18111:6;18107:14;18100:58;18192:4;18187:2;18179:6;18175:15;18168:29;17983:221;:::o;18210:366::-;18352:3;18373:67;18437:2;18432:3;18373:67;:::i;:::-;18366:74;;18449:93;18538:3;18449:93;:::i;:::-;18567:2;18562:3;18558:12;18551:19;;18210:366;;;:::o;18582:419::-;18748:4;18786:2;18775:9;18771:18;18763:26;;18835:9;18829:4;18825:20;18821:1;18810:9;18806:17;18799:47;18863:131;18989:4;18863:131;:::i;:::-;18855:139;;18582:419;;;:::o;19007:224::-;19147:34;19143:1;19135:6;19131:14;19124:58;19216:7;19211:2;19203:6;19199:15;19192:32;19007:224;:::o;19237:366::-;19379:3;19400:67;19464:2;19459:3;19400:67;:::i;:::-;19393:74;;19476:93;19565:3;19476:93;:::i;:::-;19594:2;19589:3;19585:12;19578:19;;19237:366;;;:::o;19609:419::-;19775:4;19813:2;19802:9;19798:18;19790:26;;19862:9;19856:4;19852:20;19848:1;19837:9;19833:17;19826:47;19890:131;20016:4;19890:131;:::i;:::-;19882:139;;19609:419;;;:::o;20034:222::-;20174:34;20170:1;20162:6;20158:14;20151:58;20243:5;20238:2;20230:6;20226:15;20219:30;20034:222;:::o;20262:366::-;20404:3;20425:67;20489:2;20484:3;20425:67;:::i;:::-;20418:74;;20501:93;20590:3;20501:93;:::i;:::-;20619:2;20614:3;20610:12;20603:19;;20262:366;;;:::o;20634:419::-;20800:4;20838:2;20827:9;20823:18;20815:26;;20887:9;20881:4;20877:20;20873:1;20862:9;20858:17;20851:47;20915:131;21041:4;20915:131;:::i;:::-;20907:139;;20634:419;;;:::o;21059:228::-;21199:34;21195:1;21187:6;21183:14;21176:58;21268:11;21263:2;21255:6;21251:15;21244:36;21059:228;:::o;21293:366::-;21435:3;21456:67;21520:2;21515:3;21456:67;:::i;:::-;21449:74;;21532:93;21621:3;21532:93;:::i;:::-;21650:2;21645:3;21641:12;21634:19;;21293:366;;;:::o;21665:419::-;21831:4;21869:2;21858:9;21854:18;21846:26;;21918:9;21912:4;21908:20;21904:1;21893:9;21889:17;21882:47;21946:131;22072:4;21946:131;:::i;:::-;21938:139;;21665:419;;;:::o;22090:177::-;22230:29;22226:1;22218:6;22214:14;22207:53;22090:177;:::o;22273:366::-;22415:3;22436:67;22500:2;22495:3;22436:67;:::i;:::-;22429:74;;22512:93;22601:3;22512:93;:::i;:::-;22630:2;22625:3;22621:12;22614:19;;22273:366;;;:::o;22645:419::-;22811:4;22849:2;22838:9;22834:18;22826:26;;22898:9;22892:4;22888:20;22884:1;22873:9;22869:17;22862:47;22926:131;23052:4;22926:131;:::i;:::-;22918:139;;22645:419;;;:::o;23070:240::-;23210:34;23206:1;23198:6;23194:14;23187:58;23279:23;23274:2;23266:6;23262:15;23255:48;23070:240;:::o;23316:366::-;23458:3;23479:67;23543:2;23538:3;23479:67;:::i;:::-;23472:74;;23555:93;23644:3;23555:93;:::i;:::-;23673:2;23668:3;23664:12;23657:19;;23316:366;;;:::o;23688:419::-;23854:4;23892:2;23881:9;23877:18;23869:26;;23941:9;23935:4;23931:20;23927:1;23916:9;23912:17;23905:47;23969:131;24095:4;23969:131;:::i;:::-;23961:139;;23688:419;;;:::o;24113:169::-;24253:21;24249:1;24241:6;24237:14;24230:45;24113:169;:::o;24288:366::-;24430:3;24451:67;24515:2;24510:3;24451:67;:::i;:::-;24444:74;;24527:93;24616:3;24527:93;:::i;:::-;24645:2;24640:3;24636:12;24629:19;;24288:366;;;:::o;24660:419::-;24826:4;24864:2;24853:9;24849:18;24841:26;;24913:9;24907:4;24903:20;24899:1;24888:9;24884:17;24877:47;24941:131;25067:4;24941:131;:::i;:::-;24933:139;;24660:419;;;:::o;25085:241::-;25225:34;25221:1;25213:6;25209:14;25202:58;25294:24;25289:2;25281:6;25277:15;25270:49;25085:241;:::o;25332:366::-;25474:3;25495:67;25559:2;25554:3;25495:67;:::i;:::-;25488:74;;25571:93;25660:3;25571:93;:::i;:::-;25689:2;25684:3;25680:12;25673:19;;25332:366;;;:::o;25704:419::-;25870:4;25908:2;25897:9;25893:18;25885:26;;25957:9;25951:4;25947:20;25943:1;25932:9;25928:17;25921:47;25985:131;26111:4;25985:131;:::i;:::-;25977:139;;25704:419;;;:::o;26129:194::-;26169:4;26189:20;26207:1;26189:20;:::i;:::-;26184:25;;26223:20;26241:1;26223:20;:::i;:::-;26218:25;;26267:1;26264;26260:9;26252:17;;26291:1;26285:4;26282:11;26279:37;;;26296:18;;:::i;:::-;26279:37;26129:194;;;;:::o;26329:147::-;26430:11;26467:3;26452:18;;26329:147;;;;:::o;26482:114::-;;:::o;26602:398::-;26761:3;26782:83;26863:1;26858:3;26782:83;:::i;:::-;26775:90;;26874:93;26963:3;26874:93;:::i;:::-;26992:1;26987:3;26983:11;26976:18;;26602:398;;;:::o;27006:379::-;27190:3;27212:147;27355:3;27212:147;:::i;:::-;27205:154;;27376:3;27369:10;;27006:379;;;:::o;27391:430::-;27534:4;27572:2;27561:9;27557:18;27549:26;;27585:71;27653:1;27642:9;27638:17;27629:6;27585:71;:::i;:::-;27666:72;27734:2;27723:9;27719:18;27710:6;27666:72;:::i;:::-;27748:66;27810:2;27799:9;27795:18;27786:6;27748:66;:::i;:::-;27391:430;;;;;;:::o;27827:410::-;27867:7;27890:20;27908:1;27890:20;:::i;:::-;27885:25;;27924:20;27942:1;27924:20;:::i;:::-;27919:25;;27979:1;27976;27972:9;28001:30;28019:11;28001:30;:::i;:::-;27990:41;;28180:1;28171:7;28167:15;28164:1;28161:22;28141:1;28134:9;28114:83;28091:139;;28210:18;;:::i;:::-;28091:139;27875:362;27827:410;;;;:::o;28243:180::-;28291:77;28288:1;28281:88;28388:4;28385:1;28378:15;28412:4;28409:1;28402:15;28429:185;28469:1;28486:20;28504:1;28486:20;:::i;:::-;28481:25;;28520:20;28538:1;28520:20;:::i;:::-;28515:25;;28559:1;28549:35;;28564:18;;:::i;:::-;28549:35;28606:1;28603;28599:9;28594:14;;28429:185;;;;:::o;28620:225::-;28760:34;28756:1;28748:6;28744:14;28737:58;28829:8;28824:2;28816:6;28812:15;28805:33;28620:225;:::o;28851:366::-;28993:3;29014:67;29078:2;29073:3;29014:67;:::i;:::-;29007:74;;29090:93;29179:3;29090:93;:::i;:::-;29208:2;29203:3;29199:12;29192:19;;28851:366;;;:::o;29223:419::-;29389:4;29427:2;29416:9;29412:18;29404:26;;29476:9;29470:4;29466:20;29462:1;29451:9;29447:17;29440:47;29504:131;29630:4;29504:131;:::i;:::-;29496:139;;29223:419;;;:::o;29648:180::-;29696:77;29693:1;29686:88;29793:4;29790:1;29783:15;29817:4;29814:1;29807:15;29834:180;29882:77;29879:1;29872:88;29979:4;29976:1;29969:15;30003:4;30000:1;29993:15;30020:114;30087:6;30121:5;30115:12;30105:22;;30020:114;;;:::o;30140:184::-;30239:11;30273:6;30268:3;30261:19;30313:4;30308:3;30304:14;30289:29;;30140:184;;;;:::o;30330:132::-;30397:4;30420:3;30412:11;;30450:4;30445:3;30441:14;30433:22;;30330:132;;;:::o;30468:108::-;30545:24;30563:5;30545:24;:::i;:::-;30540:3;30533:37;30468:108;;:::o;30582:179::-;30651:10;30672:46;30714:3;30706:6;30672:46;:::i;:::-;30750:4;30745:3;30741:14;30727:28;;30582:179;;;;:::o;30767:113::-;30837:4;30869;30864:3;30860:14;30852:22;;30767:113;;;:::o;30916:732::-;31035:3;31064:54;31112:5;31064:54;:::i;:::-;31134:86;31213:6;31208:3;31134:86;:::i;:::-;31127:93;;31244:56;31294:5;31244:56;:::i;:::-;31323:7;31354:1;31339:284;31364:6;31361:1;31358:13;31339:284;;;31440:6;31434:13;31467:63;31526:3;31511:13;31467:63;:::i;:::-;31460:70;;31553:60;31606:6;31553:60;:::i;:::-;31543:70;;31399:224;31386:1;31383;31379:9;31374:14;;31339:284;;;31343:14;31639:3;31632:10;;31040:608;;;30916:732;;;;:::o;31654:831::-;31917:4;31955:3;31944:9;31940:19;31932:27;;31969:71;32037:1;32026:9;32022:17;32013:6;31969:71;:::i;:::-;32050:80;32126:2;32115:9;32111:18;32102:6;32050:80;:::i;:::-;32177:9;32171:4;32167:20;32162:2;32151:9;32147:18;32140:48;32205:108;32308:4;32299:6;32205:108;:::i;:::-;32197:116;;32323:72;32391:2;32380:9;32376:18;32367:6;32323:72;:::i;:::-;32405:73;32473:3;32462:9;32458:19;32449:6;32405:73;:::i;:::-;31654:831;;;;;;;;:::o

Swarm Source

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