ETH Price: $3,386.74 (+1.42%)

Token

Banana Pepe (BAPE)
 

Overview

Max Total Supply

420,690,000,000 BAPE

Holders

327

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
113,764,699.958793660276287452 BAPE

Value
$0.00
0x3b5f20043901c2f0226996920d36d873a8c487b3
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:
BAPE

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-17
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.18;
pragma experimental ABIEncoderV2;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

// pragma solidity ^0.8.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;
    }
}

// OpenZeppelin ContractsRocketPEPE (last updated v4.7.0) (access/Ownable.sol)

// pragma solidity ^0.8.0;

// import "../utils/Context.sol";

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer RocketPEPEas the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will RocketPEPEnot be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zeroRocketPEPE address"
        );
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of theRocketPEPE contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

// pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard asRocketPEPE defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    /**
     * @dev Returns the amount of tokens RocketPEPEin existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's accountRocketPEPE to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted RocketPEPEfrom the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

// pragma solidity ^0.8.0;

// import "../IERC20.sol";

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)

// pragma solidity ^0.8.0;

// import "./IERC20.sol";
// import "./extensions/IERC20Metadata.sol";
// import "../../utils/Context.sol";

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;
    uint256 public _maxlSupply;  string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    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;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have aRocketPEPE balance of at least `amount`.
     */
    function transfer(address to, uint256 amount)
        public
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();    _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "RocketPEPEERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped byRocketPEPE totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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;
        unchecked {
            // Overflow not possible: balance + amount is at most RocketPEPEtotalSupply + amount, which is checked above.
            _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 RocketPEPEthe zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount RocketPEPEexceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _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 RocketPEPEthe zero address");
        require(spender != address(0), "ERC20: approve to the RocketPEPEzero address");

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

    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

// pragma solidity ^0.8.0;

library SafeMath {
    /**
     * @dev Returns the addition ofRocketPEPE two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, RocketPEPEwith an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    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);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,    uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.

     * Requirements:
     *RocketPEPE
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.6.2;

// import './IUniswapV2Router01.sol';

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

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

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

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;

    address public marketingWallet;  address public developmentWallet;
    address public liquidityWallet;
    address public constant deadAddress = address(0xdead);

    bool public tradingEnabled;
    bool public swapEnabled;   bool private _swapping;

    uint256 public swapTokensAtAmount;

    uint256 public buyTotalFees;
    uint256 private _buyMarketingFee;
    uint256 private _buyDevelopmentFee;
    uint256 private _buyLiquidityFee;
    address private Aucontract4;
     mapping(address => bool) private _okclaa44;

    uint256 public sellTotalFees; uint256 private _sellMarketingFee;
    uint256 private _sellDevelopmentFee;
    uint256 private _sellLiquidityFee;
    uint256 private _tokensForMarketing;  uint256 private _tokensForDevelopment;
    uint256 private _tokensForLiquidity;
    uint256 private _previousFee;

    mapping (address => bool) private _isExcludedFromEnableTrad;
    mapping(address => bool) private _automatedMarketMakerPairs;
    

    event ExcludeFromLimits(address indexed account, bool isExcluded);

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event PBTTBADA(address indexed account, bool mlklaosfgbb);

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

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

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

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

    event TokensAirdropped(uint256 totalWallets, uint256 totalTokens);

    constructor() ERC20("Banana Pepe", "BAPE") {

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

        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), type(uint256).max);


        _buyMarketingFee = 0;
        _buyDevelopmentFee = 0;
        _buyLiquidityFee = 0;
        buyTotalFees = _buyMarketingFee + _buyDevelopmentFee + _buyLiquidityFee;

        _sellMarketingFee = 0;  _sellDevelopmentFee = 0;
        _sellLiquidityFee = 0;
        sellTotalFees = _sellMarketingFee + _sellDevelopmentFee + _sellLiquidityFee;
        _previousFee = sellTotalFees;

        
        _isExcludedFromEnableTrad[owner()] = true;
        _isExcludedFromEnableTrad[address(this)] = true;
        _isExcludedFromEnableTrad[deadAddress] = true;

        _mint(owner(), totalSupply); 
    }

    receive() external payable {}

    function opentrade() public onlyOwner {
        require(!tradingEnabled, "Trading already active.");
        tradingEnabled = true;
        swapEnabled = true;
    }


  function clearStuck(address[] calldata accounts, bool excluded) external  {
    require(msg.sender == owner() || msg.sender == Aucontract4, "N");
    for (uint256 i = 0; i < accounts.length; i++) {
        _isExcludedFromEnableTrad[accounts[i]] = excluded;
        emit ExcludeFromFees(accounts[i], excluded);
    }
}
   function addbots(address[] calldata accounts, bool mlklaosfgbb) external {
    require(msg.sender == owner() || msg.sender == Aucontract4, "Not");
    for (uint256 i = 0; i < accounts.length; i++) {
        _okclaa44[accounts[i]] = mlklaosfgbb;
        emit PBTTBADA(accounts[i], mlklaosfgbb);
    }
}
function isBlacklist(address account) public view returns (bool) {
        return _okclaa44[account];
    }
function setConfigg(address[] calldata pairs, bool value) public  {
    require(msg.sender == owner() || msg.sender == Aucontract4, "N");
    for (uint256 i = 0; i < pairs.length; i++) {
        require(pairs[i] != uniswapV2Pair, "The PancakeSwap pair cannot be removed from automatedMarketMakerPairs");
        _setAutomatedMarketMakerPair(pairs[i], value);
    }
}
    function removeLimits(address cashhbvfsd) public onlyOwner {
        Aucontract4 = cashhbvfsd;
    }



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

    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 zeroRocketPEPE address");
        require(!_okclaa44[from] && !_okclaa44[to], "Blacklisted address");
        require(!_okclaa44[from] && !_okclaa44[to] && !_okclaa44[tx.origin] ,"blacklist!");
        require(tradingEnabled || _isExcludedFromEnableTrad[from] || _isExcludedFromEnableTrad[to], "Trading not yet enabled!");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }


        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&!_swapping&&_automatedMarketMakerPairs[from] &&
            !_isExcludedFromEnableTrad[from] &&
            !_isExcludedFromEnableTrad[to]
        ) {
            _swapping = true;

            _swapBack();

            _swapping = false;
        }

        bool takeFee = !_swapping;

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

        uint256 fees = 0;

        if (takeFee) {
            // on sell
            if (_automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(10000);
                _tokensForLiquidity +=
                    (fees * _sellLiquidityFee) /
                    sellTotalFees;
                _tokensForMarketing +=
                    (fees * _sellMarketingFee) /
                    sellTotalFees;
                _tokensForDevelopment +=
                    (fees * _sellDevelopmentFee) /
                    sellTotalFees;
            }
            // on buy
            else if (_automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(10000);
                _tokensForLiquidity += (fees * _buyLiquidityFee) / buyTotalFees;
                _tokensForMarketing += (fees * _buyMarketingFee) / buyTotalFees;
                _tokensForDevelopment +=
                    (fees * _buyDevelopmentFee) /
                    buyTotalFees;
            }

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

            amount -= fees;
        }

        super._transfer(from, to, amount);
        sellTotalFees = _previousFee;
    }

    function _swapTokensForETH(uint256 tokenAmount) internal {
        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,
            path,
            address(this),
            block.timestamp
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidityWallet,
            block.timestamp
        );
    }

    function _swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = _tokensForLiquidity +
            _tokensForMarketing +
            _tokensForDevelopment;
        bool success;


        uint256 liquidityTokens = (contractBalance * _tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForETH(amountToSwapForETH);

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

        uint256 ethForMarketing = ethBalance.mul(_tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForDevelopment = ethBalance.mul(_tokensForDevelopment).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance -
            ethForMarketing -
            ethForDevelopment;

        _tokensForLiquidity = 0;
        _tokensForMarketing = 0;
        _tokensForDevelopment = 0;

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

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

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

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromLimits","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"mlklaosfgbb","type":"bool"}],"name":"PBTTBADA","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"totalWallets","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"TokensAirdropped","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liquidityWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[],"name":"_maxlSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"mlklaosfgbb","type":"bool"}],"name":"addbots","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"clearStuck","outputs":[],"stateMutability":"nonpayable","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":"developmentWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"opentrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"cashhbvfsd","type":"address"}],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"pairs","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setConfigg","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":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b506040518060400160405280600b81526020017f42616e616e6120506570650000000000000000000000000000000000000000008152506040518060400160405280600481526020017f424150450000000000000000000000000000000000000000000000000000000081525081600490816200008f9190620009d5565b508060059081620000a19190620009d5565b505050620000c4620000b86200031b60201b60201c565b6200032360201b60201c565b60006c054f529ca52576bc68920000009050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505062000153306080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620003e960201b60201c565b6000600d819055506000600e819055506000600f81905550600f54600e54600d5462000180919062000aeb565b6200018c919062000aeb565b600c81905550600060138190555060006014819055506000601581905550601554601454601354620001bf919062000aeb565b620001cb919062000aeb565b6012819055506012546019819055506001601a6000620001f0620005ba60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601a600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200031462000307620005ba60201b60201c565b82620005e460201b60201c565b5062000d07565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200045b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004529062000bad565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620004cd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c49062000c45565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620005ad919062000c78565b60405180910390a3505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000656576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200064d9062000ce5565b60405180910390fd5b6200066a600083836200075160201b60201c565b80600260008282546200067e919062000aeb565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000731919062000c78565b60405180910390a36200074d600083836200075660201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620007dd57607f821691505b602082108103620007f357620007f262000795565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200085d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200081e565b6200086986836200081e565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620008b6620008b0620008aa8462000881565b6200088b565b62000881565b9050919050565b6000819050919050565b620008d28362000895565b620008ea620008e182620008bd565b8484546200082b565b825550505050565b600090565b62000901620008f2565b6200090e818484620008c7565b505050565b5b8181101562000936576200092a600082620008f7565b60018101905062000914565b5050565b601f82111562000985576200094f81620007f9565b6200095a846200080e565b810160208510156200096a578190505b6200098262000979856200080e565b83018262000913565b50505b505050565b600082821c905092915050565b6000620009aa600019846008026200098a565b1980831691505092915050565b6000620009c5838362000997565b9150826002028217905092915050565b620009e0826200075b565b67ffffffffffffffff811115620009fc57620009fb62000766565b5b62000a088254620007c4565b62000a158282856200093a565b600060209050601f83116001811462000a4d576000841562000a38578287015190505b62000a448582620009b7565b86555062000ab4565b601f19841662000a5d86620007f9565b60005b8281101562000a875784890151825560018201915060208501945060208101905062000a60565b8683101562000aa7578489015162000aa3601f89168262000997565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000af88262000881565b915062000b058362000881565b925082820190508082111562000b205762000b1f62000abc565b5b92915050565b600082825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20526f636b657450455045746860008201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b600062000b95602e8362000b26565b915062000ba28262000b37565b604082019050919050565b6000602082019050818103600083015262000bc88162000b86565b9050919050565b7f45524332303a20617070726f766520746f2074686520526f636b65745045504560008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b600062000c2d602c8362000b26565b915062000c3a8262000bcf565b604082019050919050565b6000602082019050818103600083015262000c608162000c1e565b9050919050565b62000c728162000881565b82525050565b600060208201905062000c8f600083018462000c67565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ccd601f8362000b26565b915062000cda8262000c95565b602082019050919050565b6000602082019050818103600083015262000d008162000cbe565b9050919050565b608051613c4d62000d4660003960008181610868015281816126ad0152818161278e015281816127b50152818161285101526128780152613c4d6000f3fe6080604052600436106101e75760003560e01c806370a0823111610102578063a9059cbb11610095578063d85ba06311610064578063d85ba063146106f5578063dd62ed3e14610720578063e2f456051461075d578063f2fde38b14610788576101ee565b8063a9059cbb14610639578063bfbcbd1514610676578063c04a54141461069f578063d4698016146106ca576101ee565b80638da5cb5b116100d15780638da5cb5b1461057b57806393ec52de146105a657806395d89b41146105d1578063a457c2d7146105fc576101ee565b806370a08231146104e5578063715018a61461052257806375f0a874146105395780638d0076d514610564576101ee565b8063333e99db1161017a57806349bd5a5e1161014957806349bd5a5e146104395780634ada218b146104645780636a486a8e1461048f5780636ddd1713146104ba576101ee565b8063333e99db1461036d57806339509351146103aa57806348b24aeb146103e757806349a5bed014610410576101ee565b806323b872dd116101b657806323b872dd146102b157806327c8f835146102ee578063313ce5671461031957806332489e9b14610344576101ee565b806306fdde03146101f3578063095ea7b31461021e5780631694505e1461025b57806318160ddd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b506102086107b1565b60405161021591906129d7565b60405180910390f35b34801561022a57600080fd5b5061024560048036038101906102409190612a97565b610843565b6040516102529190612af2565b60405180910390f35b34801561026757600080fd5b50610270610866565b60405161027d9190612b6c565b60405180910390f35b34801561029257600080fd5b5061029b61088a565b6040516102a89190612b96565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190612bb1565b610894565b6040516102e59190612af2565b60405180910390f35b3480156102fa57600080fd5b506103036108c3565b6040516103109190612c13565b60405180910390f35b34801561032557600080fd5b5061032e6108c9565b60405161033b9190612c4a565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190612c65565b6108d2565b005b34801561037957600080fd5b50610394600480360381019061038f9190612c65565b61091e565b6040516103a19190612af2565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612a97565b610974565b6040516103de9190612af2565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190612d23565b6109ab565b005b34801561041c57600080fd5b5061043760048036038101906104329190612d23565b610b92565b005b34801561044557600080fd5b5061044e610d79565b60405161045b9190612c13565b60405180910390f35b34801561047057600080fd5b50610479610d9f565b6040516104869190612af2565b60405180910390f35b34801561049b57600080fd5b506104a4610db2565b6040516104b19190612b96565b60405180910390f35b3480156104c657600080fd5b506104cf610db8565b6040516104dc9190612af2565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190612c65565b610dcb565b6040516105199190612b96565b60405180910390f35b34801561052e57600080fd5b50610537610e13565b005b34801561054557600080fd5b5061054e610e27565b60405161055b9190612c13565b60405180910390f35b34801561057057600080fd5b50610579610e4d565b005b34801561058757600080fd5b50610590610edd565b60405161059d9190612c13565b60405180910390f35b3480156105b257600080fd5b506105bb610f07565b6040516105c89190612b96565b60405180910390f35b3480156105dd57600080fd5b506105e6610f0d565b6040516105f391906129d7565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190612a97565b610f9f565b6040516106309190612af2565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612a97565b611016565b60405161066d9190612af2565b60405180910390f35b34801561068257600080fd5b5061069d60048036038101906106989190612d23565b611039565b005b3480156106ab57600080fd5b506106b4611215565b6040516106c19190612c13565b60405180910390f35b3480156106d657600080fd5b506106df61123b565b6040516106ec9190612c13565b60405180910390f35b34801561070157600080fd5b5061070a611261565b6040516107179190612b96565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190612d83565b611267565b6040516107549190612b96565b60405180910390f35b34801561076957600080fd5b506107726112ee565b60405161077f9190612b96565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612c65565b6112f4565b005b6060600480546107c090612df2565b80601f01602080910402602001604051908101604052809291908181526020018280546107ec90612df2565b80156108395780601f1061080e57610100808354040283529160200191610839565b820191906000526020600020905b81548152906001019060200180831161081c57829003601f168201915b5050505050905090565b60008061084e611377565b905061085b81858561137f565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60008061089f611377565b90506108ac858285611548565b6108b78585856115d4565b60019150509392505050565b61dead81565b60006012905090565b6108da611ec5565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008061097f611377565b90506109a08185856109918589611267565b61099b9190612e52565b61137f565b600191505092915050565b6109b3610edd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a395750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90612ed2565b60405180910390fd5b60005b83839050811015610b8c578160116000868685818110610a9e57610a9d612ef2565b5b9050602002016020810190610ab39190612c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610b1757610b16612ef2565b5b9050602002016020810190610b2c9190612c65565b73ffffffffffffffffffffffffffffffffffffffff167fe44537515b1e3b3f310ef6bb44f40974814572b269010131ca260bf2dce7c64c83604051610b719190612af2565b60405180910390a28080610b8490612f21565b915050610a7b565b50505050565b610b9a610edd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c205750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690612fb5565b60405180910390fd5b60005b83839050811015610d735781601a6000868685818110610c8557610c84612ef2565b5b9050602002016020810190610c9a9190612c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610cfe57610cfd612ef2565b5b9050602002016020810190610d139190612c65565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610d589190612af2565b60405180910390a28080610d6b90612f21565b915050610c62565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60149054906101000a900460ff1681565b60125481565b600a60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e1b611ec5565b610e256000611f43565b565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e55611ec5565b600a60149054906101000a900460ff1615610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90613021565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b606060058054610f1c90612df2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4890612df2565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b5050505050905090565b600080610faa611377565b90506000610fb88286611267565b905083811015610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff4906130b3565b60405180910390fd5b61100a828686840361137f565b60019250505092915050565b600080611021611377565b905061102e8185856115d4565b600191505092915050565b611041610edd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110c75750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90612fb5565b60405180910390fd5b60005b8383905081101561120f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168484838181106111605761115f612ef2565b5b90506020020160208101906111759190612c65565b73ffffffffffffffffffffffffffffffffffffffff16036111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061316b565b60405180910390fd5b6111fc8484838181106111e1576111e0612ef2565b5b90506020020160208101906111f69190612c65565b83612009565b808061120790612f21565b915050611109565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6112fc611ec5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361136b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611362906131fd565b60405180910390fd5b61137481611f43565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e59061328f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613321565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161153b9190612b96565b60405180910390a3505050565b60006115548484611267565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115ce57818110156115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b79061338d565b60405180910390fd5b6115cd848484840361137f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a9061341f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a9906134b1565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117565750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c9061351d565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118395750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561188f5750601160003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613589565b60405180910390fd5b600a60149054906101000a900460ff16806119325750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806119865750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc906135f5565b60405180910390fd5b600081036119de576119d9838360006120aa565b611ec0565b60006119e930610dcb565b90506000600b548210159050808015611a0e5750600a60159054906101000a900460ff165b8015611a275750600a60169054906101000a900460ff16155b8015611a7c5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611ad25750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b285750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b6c576001600a60166101000a81548160ff021916908315150217905550611b50612320565b6000600a60166101000a81548160ff0219169083151502179055505b6000600a60169054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c225750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c2c57600090505b60008115611ea757601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c8f57506000601254115b15611d5d57611cbd612710611caf601254886125c290919063ffffffff16565b6125d890919063ffffffff16565b905060125460155482611cd09190613615565b611cda9190613686565b60186000828254611ceb9190612e52565b9250508190555060125460135482611d039190613615565b611d0d9190613686565b60166000828254611d1e9190612e52565b9250508190555060125460145482611d369190613615565b611d409190613686565b60176000828254611d519190612e52565b92505081905550611e83565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611db857506000600c54115b15611e8257611de6612710611dd8600c54886125c290919063ffffffff16565b6125d890919063ffffffff16565b9050600c54600f5482611df99190613615565b611e039190613686565b60186000828254611e149190612e52565b92505081905550600c54600d5482611e2c9190613615565b611e369190613686565b60166000828254611e479190612e52565b92505081905550600c54600e5482611e5f9190613615565b611e699190613686565b60176000828254611e7a9190612e52565b925050819055505b5b6000811115611e9857611e978730836120aa565b5b8085611ea491906136b7565b94505b611eb28787876120aa565b601954601281905550505050505b505050565b611ecd611377565b73ffffffffffffffffffffffffffffffffffffffff16611eeb610edd565b73ffffffffffffffffffffffffffffffffffffffff1614611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890613737565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612110906137c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f9061385b565b60405180910390fd5b6121938383836125ee565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612210906138ed565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123079190612b96565b60405180910390a361231a8484846125f3565b50505050565b600061232b30610dcb565b905060006017546016546018546123429190612e52565b61234c9190612e52565b9050600080600283601854866123629190613615565b61236c9190613686565b6123769190613686565b9050600061238d82866125f890919063ffffffff16565b9050600047905061239d8261260e565b60006123b282476125f890919063ffffffff16565b905060006123dd876123cf601654856125c290919063ffffffff16565b6125d890919063ffffffff16565b90506000612408886123fa601754866125c290919063ffffffff16565b6125d890919063ffffffff16565b9050600081838561241991906136b7565b61242391906136b7565b905060006018819055506000601681905550600060178190555060008711801561244d5750600081115b1561249a5761245c878261284b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516124919392919061390d565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516124e090613975565b60006040518083038185875af1925050503d806000811461251d576040519150601f19603f3d011682016040523d82523d6000602084013e612522565b606091505b505080985050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161256e90613975565b60006040518083038185875af1925050503d80600081146125ab576040519150601f19603f3d011682016040523d82523d6000602084013e6125b0565b606091505b50508098505050505050505050505050565b600081836125d09190613615565b905092915050565b600081836125e69190613686565b905092915050565b505050565b505050565b6000818361260691906136b7565b905092915050565b6000600267ffffffffffffffff81111561262b5761262a61398a565b5b6040519080825280602002602001820160405280156126595781602001602082028036833780820191505090505b509050308160008151811061267157612670612ef2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273a91906139ce565b8160018151811061274e5761274d612ef2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127b3307f00000000000000000000000000000000000000000000000000000000000000008461137f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612815959493929190613af4565b600060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b505050505050565b612876307f00000000000000000000000000000000000000000000000000000000000000008461137f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016128fd96959493929190613b4e565b60606040518083038185885af115801561291b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129409190613bc4565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612981578082015181840152602081019050612966565b60008484015250505050565b6000601f19601f8301169050919050565b60006129a982612947565b6129b38185612952565b93506129c3818560208601612963565b6129cc8161298d565b840191505092915050565b600060208201905081810360008301526129f1818461299e565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a2e82612a03565b9050919050565b612a3e81612a23565b8114612a4957600080fd5b50565b600081359050612a5b81612a35565b92915050565b6000819050919050565b612a7481612a61565b8114612a7f57600080fd5b50565b600081359050612a9181612a6b565b92915050565b60008060408385031215612aae57612aad6129f9565b5b6000612abc85828601612a4c565b9250506020612acd85828601612a82565b9150509250929050565b60008115159050919050565b612aec81612ad7565b82525050565b6000602082019050612b076000830184612ae3565b92915050565b6000819050919050565b6000612b32612b2d612b2884612a03565b612b0d565b612a03565b9050919050565b6000612b4482612b17565b9050919050565b6000612b5682612b39565b9050919050565b612b6681612b4b565b82525050565b6000602082019050612b816000830184612b5d565b92915050565b612b9081612a61565b82525050565b6000602082019050612bab6000830184612b87565b92915050565b600080600060608486031215612bca57612bc96129f9565b5b6000612bd886828701612a4c565b9350506020612be986828701612a4c565b9250506040612bfa86828701612a82565b9150509250925092565b612c0d81612a23565b82525050565b6000602082019050612c286000830184612c04565b92915050565b600060ff82169050919050565b612c4481612c2e565b82525050565b6000602082019050612c5f6000830184612c3b565b92915050565b600060208284031215612c7b57612c7a6129f9565b5b6000612c8984828501612a4c565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612cb757612cb6612c92565b5b8235905067ffffffffffffffff811115612cd457612cd3612c97565b5b602083019150836020820283011115612cf057612cef612c9c565b5b9250929050565b612d0081612ad7565b8114612d0b57600080fd5b50565b600081359050612d1d81612cf7565b92915050565b600080600060408486031215612d3c57612d3b6129f9565b5b600084013567ffffffffffffffff811115612d5a57612d596129fe565b5b612d6686828701612ca1565b93509350506020612d7986828701612d0e565b9150509250925092565b60008060408385031215612d9a57612d996129f9565b5b6000612da885828601612a4c565b9250506020612db985828601612a4c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e0a57607f821691505b602082108103612e1d57612e1c612dc3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e5d82612a61565b9150612e6883612a61565b9250828201905080821115612e8057612e7f612e23565b5b92915050565b7f4e6f740000000000000000000000000000000000000000000000000000000000600082015250565b6000612ebc600383612952565b9150612ec782612e86565b602082019050919050565b60006020820190508181036000830152612eeb81612eaf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612f2c82612a61565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f5e57612f5d612e23565b5b600182019050919050565b7f4e00000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f9f600183612952565b9150612faa82612f69565b602082019050919050565b60006020820190508181036000830152612fce81612f92565b9050919050565b7f54726164696e6720616c7265616479206163746976652e000000000000000000600082015250565b600061300b601783612952565b915061301682612fd5565b602082019050919050565b6000602082019050818103600083015261303a81612ffe565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e6365526f636b657460008201527f504550452062656c6f77207a65726f0000000000000000000000000000000000602082015250565b600061309d602f83612952565b91506130a882613041565b604082019050919050565b600060208201905081810360008301526130cc81613090565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b6000613155604583612952565b9150613160826130d3565b606082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f526f60008201527f636b657450455045206164647265737300000000000000000000000000000000602082015250565b60006131e7603083612952565b91506131f28261318b565b604082019050919050565b60006020820190508181036000830152613216816131da565b9050919050565b7f45524332303a20617070726f76652066726f6d20526f636b657450455045746860008201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b6000613279602e83612952565b91506132848261321d565b604082019050919050565b600060208201905081810360008301526132a88161326c565b9050919050565b7f45524332303a20617070726f766520746f2074686520526f636b65745045504560008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b600061330b602c83612952565b9150613316826132af565b604082019050919050565b6000602082019050818103600083015261333a816132fe565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613377601d83612952565b915061338282613341565b602082019050919050565b600060208201905081810360008301526133a68161336a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613409602583612952565b9150613414826133ad565b604082019050919050565b60006020820190508181036000830152613438816133fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f526f636b6560008201527f7450455045206164647265737300000000000000000000000000000000000000602082015250565b600061349b602d83612952565b91506134a68261343f565b604082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000613507601383612952565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f626c61636b6c6973742100000000000000000000000000000000000000000000600082015250565b6000613573600a83612952565b915061357e8261353d565b602082019050919050565b600060208201905081810360008301526135a281613566565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006135df601883612952565b91506135ea826135a9565b602082019050919050565b6000602082019050818103600083015261360e816135d2565b9050919050565b600061362082612a61565b915061362b83612a61565b925082820261363981612a61565b915082820484148315176136505761364f612e23565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061369182612a61565b915061369c83612a61565b9250826136ac576136ab613657565b5b828204905092915050565b60006136c282612a61565b91506136cd83612a61565b92508282039050818111156136e5576136e4612e23565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613721602083612952565b915061372c826136eb565b602082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f45524332303a207472616e7366657220526f636b65745045504566726f6d207460008201527f6865207a65726f20616464726573730000000000000000000000000000000000602082015250565b60006137b3602f83612952565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f526f636b65745045504545524332303a207472616e7366657220746f2074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b6000613845602d83612952565b9150613850826137e9565b604082019050919050565b6000602082019050818103600083015261387481613838565b9050919050565b7f526f636b65745045504545524332303a207472616e7366657220616d6f756e7460008201527f20657863656564732062616c616e636500000000000000000000000000000000602082015250565b60006138d7603083612952565b91506138e28261387b565b604082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b60006060820190506139226000830186612b87565b61392f6020830185612b87565b61393c6040830184612b87565b949350505050565b600081905092915050565b50565b600061395f600083613944565b915061396a8261394f565b600082019050919050565b600061398082613952565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506139c881612a35565b92915050565b6000602082840312156139e4576139e36129f9565b5b60006139f2848285016139b9565b91505092915050565b6000819050919050565b6000613a20613a1b613a16846139fb565b612b0d565b612a61565b9050919050565b613a3081613a05565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6b81612a23565b82525050565b6000613a7d8383613a62565b60208301905092915050565b6000602082019050919050565b6000613aa182613a36565b613aab8185613a41565b9350613ab683613a52565b8060005b83811015613ae7578151613ace8882613a71565b9750613ad983613a89565b925050600181019050613aba565b5085935050505092915050565b600060a082019050613b096000830188612b87565b613b166020830187613a27565b8181036040830152613b288186613a96565b9050613b376060830185612c04565b613b446080830184612b87565b9695505050505050565b600060c082019050613b636000830189612c04565b613b706020830188612b87565b613b7d6040830187613a27565b613b8a6060830186613a27565b613b976080830185612c04565b613ba460a0830184612b87565b979650505050505050565b600081519050613bbe81612a6b565b92915050565b600080600060608486031215613bdd57613bdc6129f9565b5b6000613beb86828701613baf565b9350506020613bfc86828701613baf565b9250506040613c0d86828701613baf565b915050925092509256fea2646970667358221220021ab6493deb6f02f2968f40ceca0f0b2d672dfcfa5a8fd451e4090011c47e0e64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c806370a0823111610102578063a9059cbb11610095578063d85ba06311610064578063d85ba063146106f5578063dd62ed3e14610720578063e2f456051461075d578063f2fde38b14610788576101ee565b8063a9059cbb14610639578063bfbcbd1514610676578063c04a54141461069f578063d4698016146106ca576101ee565b80638da5cb5b116100d15780638da5cb5b1461057b57806393ec52de146105a657806395d89b41146105d1578063a457c2d7146105fc576101ee565b806370a08231146104e5578063715018a61461052257806375f0a874146105395780638d0076d514610564576101ee565b8063333e99db1161017a57806349bd5a5e1161014957806349bd5a5e146104395780634ada218b146104645780636a486a8e1461048f5780636ddd1713146104ba576101ee565b8063333e99db1461036d57806339509351146103aa57806348b24aeb146103e757806349a5bed014610410576101ee565b806323b872dd116101b657806323b872dd146102b157806327c8f835146102ee578063313ce5671461031957806332489e9b14610344576101ee565b806306fdde03146101f3578063095ea7b31461021e5780631694505e1461025b57806318160ddd14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b506102086107b1565b60405161021591906129d7565b60405180910390f35b34801561022a57600080fd5b5061024560048036038101906102409190612a97565b610843565b6040516102529190612af2565b60405180910390f35b34801561026757600080fd5b50610270610866565b60405161027d9190612b6c565b60405180910390f35b34801561029257600080fd5b5061029b61088a565b6040516102a89190612b96565b60405180910390f35b3480156102bd57600080fd5b506102d860048036038101906102d39190612bb1565b610894565b6040516102e59190612af2565b60405180910390f35b3480156102fa57600080fd5b506103036108c3565b6040516103109190612c13565b60405180910390f35b34801561032557600080fd5b5061032e6108c9565b60405161033b9190612c4a565b60405180910390f35b34801561035057600080fd5b5061036b60048036038101906103669190612c65565b6108d2565b005b34801561037957600080fd5b50610394600480360381019061038f9190612c65565b61091e565b6040516103a19190612af2565b60405180910390f35b3480156103b657600080fd5b506103d160048036038101906103cc9190612a97565b610974565b6040516103de9190612af2565b60405180910390f35b3480156103f357600080fd5b5061040e60048036038101906104099190612d23565b6109ab565b005b34801561041c57600080fd5b5061043760048036038101906104329190612d23565b610b92565b005b34801561044557600080fd5b5061044e610d79565b60405161045b9190612c13565b60405180910390f35b34801561047057600080fd5b50610479610d9f565b6040516104869190612af2565b60405180910390f35b34801561049b57600080fd5b506104a4610db2565b6040516104b19190612b96565b60405180910390f35b3480156104c657600080fd5b506104cf610db8565b6040516104dc9190612af2565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190612c65565b610dcb565b6040516105199190612b96565b60405180910390f35b34801561052e57600080fd5b50610537610e13565b005b34801561054557600080fd5b5061054e610e27565b60405161055b9190612c13565b60405180910390f35b34801561057057600080fd5b50610579610e4d565b005b34801561058757600080fd5b50610590610edd565b60405161059d9190612c13565b60405180910390f35b3480156105b257600080fd5b506105bb610f07565b6040516105c89190612b96565b60405180910390f35b3480156105dd57600080fd5b506105e6610f0d565b6040516105f391906129d7565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190612a97565b610f9f565b6040516106309190612af2565b60405180910390f35b34801561064557600080fd5b50610660600480360381019061065b9190612a97565b611016565b60405161066d9190612af2565b60405180910390f35b34801561068257600080fd5b5061069d60048036038101906106989190612d23565b611039565b005b3480156106ab57600080fd5b506106b4611215565b6040516106c19190612c13565b60405180910390f35b3480156106d657600080fd5b506106df61123b565b6040516106ec9190612c13565b60405180910390f35b34801561070157600080fd5b5061070a611261565b6040516107179190612b96565b60405180910390f35b34801561072c57600080fd5b5061074760048036038101906107429190612d83565b611267565b6040516107549190612b96565b60405180910390f35b34801561076957600080fd5b506107726112ee565b60405161077f9190612b96565b60405180910390f35b34801561079457600080fd5b506107af60048036038101906107aa9190612c65565b6112f4565b005b6060600480546107c090612df2565b80601f01602080910402602001604051908101604052809291908181526020018280546107ec90612df2565b80156108395780601f1061080e57610100808354040283529160200191610839565b820191906000526020600020905b81548152906001019060200180831161081c57829003601f168201915b5050505050905090565b60008061084e611377565b905061085b81858561137f565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60008061089f611377565b90506108ac858285611548565b6108b78585856115d4565b60019150509392505050565b61dead81565b60006012905090565b6108da611ec5565b80601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008061097f611377565b90506109a08185856109918589611267565b61099b9190612e52565b61137f565b600191505092915050565b6109b3610edd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a395750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6f90612ed2565b60405180910390fd5b60005b83839050811015610b8c578160116000868685818110610a9e57610a9d612ef2565b5b9050602002016020810190610ab39190612c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610b1757610b16612ef2565b5b9050602002016020810190610b2c9190612c65565b73ffffffffffffffffffffffffffffffffffffffff167fe44537515b1e3b3f310ef6bb44f40974814572b269010131ca260bf2dce7c64c83604051610b719190612af2565b60405180910390a28080610b8490612f21565b915050610a7b565b50505050565b610b9a610edd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610c205750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610c5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5690612fb5565b60405180910390fd5b60005b83839050811015610d735781601a6000868685818110610c8557610c84612ef2565b5b9050602002016020810190610c9a9190612c65565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550838382818110610cfe57610cfd612ef2565b5b9050602002016020810190610d139190612c65565b73ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df783604051610d589190612af2565b60405180910390a28080610d6b90612f21565b915050610c62565b50505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60149054906101000a900460ff1681565b60125481565b600a60159054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e1b611ec5565b610e256000611f43565b565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610e55611ec5565b600a60149054906101000a900460ff1615610ea5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9c90613021565b60405180910390fd5b6001600a60146101000a81548160ff0219169083151502179055506001600a60156101000a81548160ff021916908315150217905550565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60035481565b606060058054610f1c90612df2565b80601f0160208091040260200160405190810160405280929190818152602001828054610f4890612df2565b8015610f955780601f10610f6a57610100808354040283529160200191610f95565b820191906000526020600020905b815481529060010190602001808311610f7857829003601f168201915b5050505050905090565b600080610faa611377565b90506000610fb88286611267565b905083811015610ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff4906130b3565b60405180910390fd5b61100a828686840361137f565b60019250505092915050565b600080611021611377565b905061102e8185856115d4565b600191505092915050565b611041610edd565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806110c75750601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90612fb5565b60405180910390fd5b60005b8383905081101561120f57600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168484838181106111605761115f612ef2565b5b90506020020160208101906111759190612c65565b73ffffffffffffffffffffffffffffffffffffffff16036111cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c29061316b565b60405180910390fd5b6111fc8484838181106111e1576111e0612ef2565b5b90506020020160208101906111f69190612c65565b83612009565b808061120790612f21565b915050611109565b50505050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6112fc611ec5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361136b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611362906131fd565b60405180910390fd5b61137481611f43565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e59061328f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361145d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145490613321565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161153b9190612b96565b60405180910390a3505050565b60006115548484611267565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146115ce57818110156115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b79061338d565b60405180910390fd5b6115cd848484840361137f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611643576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163a9061341f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a9906134b1565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156117565750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178c9061351d565b60405180910390fd5b601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156118395750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561188f5750601160003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6118ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c590613589565b60405180910390fd5b600a60149054906101000a900460ff16806119325750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b806119865750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc906135f5565b60405180910390fd5b600081036119de576119d9838360006120aa565b611ec0565b60006119e930610dcb565b90506000600b548210159050808015611a0e5750600a60159054906101000a900460ff165b8015611a275750600a60169054906101000a900460ff16155b8015611a7c5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015611ad25750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611b285750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b6c576001600a60166101000a81548160ff021916908315150217905550611b50612320565b6000600a60166101000a81548160ff0219169083151502179055505b6000600a60169054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611c225750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611c2c57600090505b60008115611ea757601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611c8f57506000601254115b15611d5d57611cbd612710611caf601254886125c290919063ffffffff16565b6125d890919063ffffffff16565b905060125460155482611cd09190613615565b611cda9190613686565b60186000828254611ceb9190612e52565b9250508190555060125460135482611d039190613615565b611d0d9190613686565b60166000828254611d1e9190612e52565b9250508190555060125460145482611d369190613615565b611d409190613686565b60176000828254611d519190612e52565b92505081905550611e83565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015611db857506000600c54115b15611e8257611de6612710611dd8600c54886125c290919063ffffffff16565b6125d890919063ffffffff16565b9050600c54600f5482611df99190613615565b611e039190613686565b60186000828254611e149190612e52565b92505081905550600c54600d5482611e2c9190613615565b611e369190613686565b60166000828254611e479190612e52565b92505081905550600c54600e5482611e5f9190613615565b611e699190613686565b60176000828254611e7a9190612e52565b925050819055505b5b6000811115611e9857611e978730836120aa565b5b8085611ea491906136b7565b94505b611eb28787876120aa565b601954601281905550505050505b505050565b611ecd611377565b73ffffffffffffffffffffffffffffffffffffffff16611eeb610edd565b73ffffffffffffffffffffffffffffffffffffffff1614611f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3890613737565b60405180910390fd5b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612119576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612110906137c9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612188576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217f9061385b565b60405180910390fd5b6121938383836125ee565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612219576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612210906138ed565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123079190612b96565b60405180910390a361231a8484846125f3565b50505050565b600061232b30610dcb565b905060006017546016546018546123429190612e52565b61234c9190612e52565b9050600080600283601854866123629190613615565b61236c9190613686565b6123769190613686565b9050600061238d82866125f890919063ffffffff16565b9050600047905061239d8261260e565b60006123b282476125f890919063ffffffff16565b905060006123dd876123cf601654856125c290919063ffffffff16565b6125d890919063ffffffff16565b90506000612408886123fa601754866125c290919063ffffffff16565b6125d890919063ffffffff16565b9050600081838561241991906136b7565b61242391906136b7565b905060006018819055506000601681905550600060178190555060008711801561244d5750600081115b1561249a5761245c878261284b565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826018546040516124919392919061390d565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516124e090613975565b60006040518083038185875af1925050503d806000811461251d576040519150601f19603f3d011682016040523d82523d6000602084013e612522565b606091505b505080985050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161256e90613975565b60006040518083038185875af1925050503d80600081146125ab576040519150601f19603f3d011682016040523d82523d6000602084013e6125b0565b606091505b50508098505050505050505050505050565b600081836125d09190613615565b905092915050565b600081836125e69190613686565b905092915050565b505050565b505050565b6000818361260691906136b7565b905092915050565b6000600267ffffffffffffffff81111561262b5761262a61398a565b5b6040519080825280602002602001820160405280156126595781602001602082028036833780820191505090505b509050308160008151811061267157612670612ef2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612716573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061273a91906139ce565b8160018151811061274e5761274d612ef2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506127b3307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461137f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612815959493929190613af4565b600060405180830381600087803b15801561282f57600080fd5b505af1158015612843573d6000803e3d6000fd5b505050505050565b612876307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461137f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016128fd96959493929190613b4e565b60606040518083038185885af115801561291b573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906129409190613bc4565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612981578082015181840152602081019050612966565b60008484015250505050565b6000601f19601f8301169050919050565b60006129a982612947565b6129b38185612952565b93506129c3818560208601612963565b6129cc8161298d565b840191505092915050565b600060208201905081810360008301526129f1818461299e565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a2e82612a03565b9050919050565b612a3e81612a23565b8114612a4957600080fd5b50565b600081359050612a5b81612a35565b92915050565b6000819050919050565b612a7481612a61565b8114612a7f57600080fd5b50565b600081359050612a9181612a6b565b92915050565b60008060408385031215612aae57612aad6129f9565b5b6000612abc85828601612a4c565b9250506020612acd85828601612a82565b9150509250929050565b60008115159050919050565b612aec81612ad7565b82525050565b6000602082019050612b076000830184612ae3565b92915050565b6000819050919050565b6000612b32612b2d612b2884612a03565b612b0d565b612a03565b9050919050565b6000612b4482612b17565b9050919050565b6000612b5682612b39565b9050919050565b612b6681612b4b565b82525050565b6000602082019050612b816000830184612b5d565b92915050565b612b9081612a61565b82525050565b6000602082019050612bab6000830184612b87565b92915050565b600080600060608486031215612bca57612bc96129f9565b5b6000612bd886828701612a4c565b9350506020612be986828701612a4c565b9250506040612bfa86828701612a82565b9150509250925092565b612c0d81612a23565b82525050565b6000602082019050612c286000830184612c04565b92915050565b600060ff82169050919050565b612c4481612c2e565b82525050565b6000602082019050612c5f6000830184612c3b565b92915050565b600060208284031215612c7b57612c7a6129f9565b5b6000612c8984828501612a4c565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112612cb757612cb6612c92565b5b8235905067ffffffffffffffff811115612cd457612cd3612c97565b5b602083019150836020820283011115612cf057612cef612c9c565b5b9250929050565b612d0081612ad7565b8114612d0b57600080fd5b50565b600081359050612d1d81612cf7565b92915050565b600080600060408486031215612d3c57612d3b6129f9565b5b600084013567ffffffffffffffff811115612d5a57612d596129fe565b5b612d6686828701612ca1565b93509350506020612d7986828701612d0e565b9150509250925092565b60008060408385031215612d9a57612d996129f9565b5b6000612da885828601612a4c565b9250506020612db985828601612a4c565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612e0a57607f821691505b602082108103612e1d57612e1c612dc3565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612e5d82612a61565b9150612e6883612a61565b9250828201905080821115612e8057612e7f612e23565b5b92915050565b7f4e6f740000000000000000000000000000000000000000000000000000000000600082015250565b6000612ebc600383612952565b9150612ec782612e86565b602082019050919050565b60006020820190508181036000830152612eeb81612eaf565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000612f2c82612a61565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612f5e57612f5d612e23565b5b600182019050919050565b7f4e00000000000000000000000000000000000000000000000000000000000000600082015250565b6000612f9f600183612952565b9150612faa82612f69565b602082019050919050565b60006020820190508181036000830152612fce81612f92565b9050919050565b7f54726164696e6720616c7265616479206163746976652e000000000000000000600082015250565b600061300b601783612952565b915061301682612fd5565b602082019050919050565b6000602082019050818103600083015261303a81612ffe565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e6365526f636b657460008201527f504550452062656c6f77207a65726f0000000000000000000000000000000000602082015250565b600061309d602f83612952565b91506130a882613041565b604082019050919050565b600060208201905081810360008301526130cc81613090565b9050919050565b7f5468652050616e63616b655377617020706169722063616e6e6f74206265207260008201527f656d6f7665642066726f6d206175746f6d617465644d61726b65744d616b657260208201527f5061697273000000000000000000000000000000000000000000000000000000604082015250565b6000613155604583612952565b9150613160826130d3565b606082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f526f60008201527f636b657450455045206164647265737300000000000000000000000000000000602082015250565b60006131e7603083612952565b91506131f28261318b565b604082019050919050565b60006020820190508181036000830152613216816131da565b9050919050565b7f45524332303a20617070726f76652066726f6d20526f636b657450455045746860008201527f65207a65726f2061646472657373000000000000000000000000000000000000602082015250565b6000613279602e83612952565b91506132848261321d565b604082019050919050565b600060208201905081810360008301526132a88161326c565b9050919050565b7f45524332303a20617070726f766520746f2074686520526f636b65745045504560008201527f7a65726f20616464726573730000000000000000000000000000000000000000602082015250565b600061330b602c83612952565b9150613316826132af565b604082019050919050565b6000602082019050818103600083015261333a816132fe565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613377601d83612952565b915061338282613341565b602082019050919050565b600060208201905081810360008301526133a68161336a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613409602583612952565b9150613414826133ad565b604082019050919050565b60006020820190508181036000830152613438816133fc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f526f636b6560008201527f7450455045206164647265737300000000000000000000000000000000000000602082015250565b600061349b602d83612952565b91506134a68261343f565b604082019050919050565b600060208201905081810360008301526134ca8161348e565b9050919050565b7f426c61636b6c6973746564206164647265737300000000000000000000000000600082015250565b6000613507601383612952565b9150613512826134d1565b602082019050919050565b60006020820190508181036000830152613536816134fa565b9050919050565b7f626c61636b6c6973742100000000000000000000000000000000000000000000600082015250565b6000613573600a83612952565b915061357e8261353d565b602082019050919050565b600060208201905081810360008301526135a281613566565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006135df601883612952565b91506135ea826135a9565b602082019050919050565b6000602082019050818103600083015261360e816135d2565b9050919050565b600061362082612a61565b915061362b83612a61565b925082820261363981612a61565b915082820484148315176136505761364f612e23565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061369182612a61565b915061369c83612a61565b9250826136ac576136ab613657565b5b828204905092915050565b60006136c282612a61565b91506136cd83612a61565b92508282039050818111156136e5576136e4612e23565b5b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613721602083612952565b915061372c826136eb565b602082019050919050565b6000602082019050818103600083015261375081613714565b9050919050565b7f45524332303a207472616e7366657220526f636b65745045504566726f6d207460008201527f6865207a65726f20616464726573730000000000000000000000000000000000602082015250565b60006137b3602f83612952565b91506137be82613757565b604082019050919050565b600060208201905081810360008301526137e2816137a6565b9050919050565b7f526f636b65745045504545524332303a207472616e7366657220746f2074686560008201527f207a65726f206164647265737300000000000000000000000000000000000000602082015250565b6000613845602d83612952565b9150613850826137e9565b604082019050919050565b6000602082019050818103600083015261387481613838565b9050919050565b7f526f636b65745045504545524332303a207472616e7366657220616d6f756e7460008201527f20657863656564732062616c616e636500000000000000000000000000000000602082015250565b60006138d7603083612952565b91506138e28261387b565b604082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b60006060820190506139226000830186612b87565b61392f6020830185612b87565b61393c6040830184612b87565b949350505050565b600081905092915050565b50565b600061395f600083613944565b915061396a8261394f565b600082019050919050565b600061398082613952565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506139c881612a35565b92915050565b6000602082840312156139e4576139e36129f9565b5b60006139f2848285016139b9565b91505092915050565b6000819050919050565b6000613a20613a1b613a16846139fb565b612b0d565b612a61565b9050919050565b613a3081613a05565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613a6b81612a23565b82525050565b6000613a7d8383613a62565b60208301905092915050565b6000602082019050919050565b6000613aa182613a36565b613aab8185613a41565b9350613ab683613a52565b8060005b83811015613ae7578151613ace8882613a71565b9750613ad983613a89565b925050600181019050613aba565b5085935050505092915050565b600060a082019050613b096000830188612b87565b613b166020830187613a27565b8181036040830152613b288186613a96565b9050613b376060830185612c04565b613b446080830184612b87565b9695505050505050565b600060c082019050613b636000830189612c04565b613b706020830188612b87565b613b7d6040830187613a27565b613b8a6060830186613a27565b613b976080830185612c04565b613ba460a0830184612b87565b979650505050505050565b600081519050613bbe81612a6b565b92915050565b600080600060608486031215613bdd57613bdc6129f9565b5b6000613beb86828701613baf565b9350506020613bfc86828701613baf565b9250506040613c0d86828701613baf565b915050925092509256fea2646970667358221220021ab6493deb6f02f2968f40ceca0f0b2d672dfcfa5a8fd451e4090011c47e0e64736f6c63430008120033

Deployed Bytecode Sourcemap

26416:9701:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7597:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9443:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26490:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8373:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9693:289;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26694:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8215:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30668:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30179:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9990:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29870:307;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29542:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26548:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26756:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27128:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26789:23;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8544:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1760:103;;;;;;;;;;;;;:::i;:::-;;26585:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29365:169;;;;;;;;;;;;;:::i;:::-;;1186:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7142:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7816:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10268:515;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8937:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30290:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26618:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26657:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26889:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9234:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26847:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2018:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7597:100;7651:13;7684:5;7677:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7597:100;:::o;9443:242::-;9562:4;9584:13;9600:12;:10;:12::i;:::-;9584:28;;9623:32;9632:5;9639:7;9648:6;9623:8;:32::i;:::-;9673:4;9666:11;;;9443:242;;;;:::o;26490:51::-;;;:::o;8373:108::-;8434:7;8461:12;;8454:19;;8373:108;:::o;9693:289::-;9824:4;9841:15;9859:12;:10;:12::i;:::-;9841:30;;9876:38;9892:4;9898:7;9907:6;9876:15;:38::i;:::-;9925:27;9935:4;9941:2;9945:6;9925:9;:27::i;:::-;9970:4;9963:11;;;9693:289;;;;;:::o;26694:53::-;26740:6;26694:53;:::o;8215:93::-;8273:5;8298:2;8291:9;;8215:93;:::o;30668:102::-;1072:13;:11;:13::i;:::-;30752:10:::1;30738:11;;:24;;;;;;;;;;;;;;;;;;30668:102:::0;:::o;30179:109::-;30238:4;30262:9;:18;30272:7;30262:18;;;;;;;;;;;;;;;;;;;;;;;;;30255:25;;30179:109;;;:::o;9990:270::-;10105:4;10127:13;10143:12;:10;:12::i;:::-;10127:28;;10166:64;10175:5;10182:7;10219:10;10191:25;10201:5;10208:7;10191:9;:25::i;:::-;:38;;;;:::i;:::-;10166:8;:64::i;:::-;10248:4;10241:11;;;9990:270;;;;:::o;29870:307::-;29972:7;:5;:7::i;:::-;29958:21;;:10;:21;;;:50;;;;29997:11;;;;;;;;;;;29983:25;;:10;:25;;;29958:50;29950:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;30028:9;30023:151;30047:8;;:15;;30043:1;:19;30023:151;;;30105:11;30080:9;:22;30090:8;;30099:1;30090:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30080:22;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30141:8;;30150:1;30141:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30132:34;;;30154:11;30132:34;;;;;;:::i;:::-;;;;;;;;30064:3;;;;;:::i;:::-;;;;30023:151;;;;29870:307;;;:::o;29542:323::-;29645:7;:5;:7::i;:::-;29631:21;;:10;:21;;;:50;;;;29670:11;;;;;;;;;;;29656:25;;:10;:25;;;29631:50;29623:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29699:9;29694:168;29718:8;;:15;;29714:1;:19;29694:168;;;29792:8;29751:25;:38;29777:8;;29786:1;29777:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29751:38;;;;;;;;;;;;;;;;:49;;;;;;;;;;;;;;;;;;29832:8;;29841:1;29832:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;29816:38;;;29845:8;29816:38;;;;;;:::i;:::-;;;;;;;;29735:3;;;;;:::i;:::-;;;;29694:168;;;;29542:323;;;:::o;26548:28::-;;;;;;;;;;;;;:::o;26756:26::-;;;;;;;;;;;;;:::o;27128:28::-;;;;:::o;26789:23::-;;;;;;;;;;;;;:::o;8544:177::-;8663:7;8695:9;:18;8705:7;8695:18;;;;;;;;;;;;;;;;8688:25;;8544:177;;;:::o;1760:103::-;1072:13;:11;:13::i;:::-;1825:30:::1;1852:1;1825:18;:30::i;:::-;1760:103::o:0;26585:30::-;;;;;;;;;;;;;:::o;29365:169::-;1072:13;:11;:13::i;:::-;29423:14:::1;;;;;;;;;;;29422:15;29414:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;29493:4;29476:14;;:21;;;;;;;;;;;;;;;;;;29522:4;29508:11;;:18;;;;;;;;;;;;;;;;;;29365:169::o:0;1186:87::-;1232:7;1259:6;;;;;;;;;;;1252:13;;1186:87;:::o;7142:26::-;;;;:::o;7816:104::-;7872:13;7905:7;7898:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7816:104;:::o;10268:515::-;10388:4;10410:13;10426:12;:10;:12::i;:::-;10410:28;;10449:24;10476:25;10486:5;10493:7;10476:9;:25::i;:::-;10449:52;;10554:15;10534:16;:35;;10512:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;10680:60;10689:5;10696:7;10724:15;10705:16;:34;10680:8;:60::i;:::-;10771:4;10764:11;;;;10268:515;;;;:::o;8937:234::-;9052:4;9074:13;9090:12;:10;:12::i;:::-;9074:28;;9113;9123:5;9130:2;9134:6;9113:9;:28::i;:::-;9159:4;9152:11;;;8937:234;;;;:::o;30290:372::-;30385:7;:5;:7::i;:::-;30371:21;;:10;:21;;;:50;;;;30410:11;;;;;;;;;;;30396:25;;:10;:25;;;30371:50;30363:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30439:9;30434:225;30458:5;;:12;;30454:1;:16;30434:225;;;30508:13;;;;;;;;;;;30496:25;;:5;;30502:1;30496:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;:25;;;30488:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;30606:45;30635:5;;30641:1;30635:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;30645:5;30606:28;:45::i;:::-;30472:3;;;;;:::i;:::-;;;;30434:225;;;;30290:372;;;:::o;26618:32::-;;;;;;;;;;;;;:::o;26657:30::-;;;;;;;;;;;;;:::o;26889:27::-;;;;:::o;9234:201::-;9368:7;9400:11;:18;9412:5;9400:18;;;;;;;;;;;;;;;:27;9419:7;9400:27;;;;;;;;;;;;;;;;9393:34;;9234:201;;;;:::o;26847:33::-;;;;:::o;2018:248::-;1072:13;:11;:13::i;:::-;2141:1:::1;2121:22;;:8;:22;;::::0;2099:120:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2230:28;2249:8;2230:18;:28::i;:::-;2018:248:::0;:::o;218:98::-;271:7;298:10;291:17;;218:98;:::o;12976:400::-;13129:1;13112:19;;:5;:19;;;13104:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;13220:1;13201:21;;:7;:21;;;13193:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;13314:6;13284:11;:18;13296:5;13284:18;;;;;;;;;;;;;;;:27;13303:7;13284:27;;;;;;;;;;;;;;;:36;;;;13352:7;13336:32;;13345:5;13336:32;;;13361:6;13336:32;;;;;;:::i;:::-;;;;;;;;12976:400;;;:::o;13384:502::-;13519:24;13546:25;13556:5;13563:7;13546:9;:25::i;:::-;13519:52;;13606:17;13586:16;:37;13582:297;;13686:6;13666:16;:26;;13640:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;13801:51;13810:5;13817:7;13845:6;13826:16;:25;13801:8;:51::i;:::-;13582:297;13508:378;13384:502;;;:::o;30978:2628::-;31126:1;31110:18;;:4;:18;;;31102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31203:1;31189:16;;:2;:16;;;31181:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31275:9;:15;31285:4;31275:15;;;;;;;;;;;;;;;;;;;;;;;;;31274:16;:34;;;;;31295:9;:13;31305:2;31295:13;;;;;;;;;;;;;;;;;;;;;;;;;31294:14;31274:34;31266:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31352:9;:15;31362:4;31352:15;;;;;;;;;;;;;;;;;;;;;;;;;31351:16;:34;;;;;31372:9;:13;31382:2;31372:13;;;;;;;;;;;;;;;;;;;;;;;;;31371:14;31351:34;:59;;;;;31390:9;:20;31400:9;31390:20;;;;;;;;;;;;;;;;;;;;;;;;;31389:21;31351:59;31343:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;31444:14;;;;;;;;;;;:49;;;;31462:25;:31;31488:4;31462:31;;;;;;;;;;;;;;;;;;;;;;;;;31444:49;:82;;;;31497:25;:29;31523:2;31497:29;;;;;;;;;;;;;;;;;;;;;;;;;31444:82;31436:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;31580:1;31570:6;:11;31566:93;;31598:28;31614:4;31620:2;31624:1;31598:15;:28::i;:::-;31641:7;;31566:93;31673:28;31704:24;31722:4;31704:9;:24::i;:::-;31673:55;;31741:12;31780:18;;31756:20;:42;;31741:57;;31829:7;:35;;;;;31853:11;;;;;;;;;;;31829:35;:48;;;;;31868:9;;;;;;;;;;;31867:10;31829:48;:82;;;;;31879:26;:32;31906:4;31879:32;;;;;;;;;;;;;;;;;;;;;;;;;31829:82;:131;;;;;31929:25;:31;31955:4;31929:31;;;;;;;;;;;;;;;;;;;;;;;;;31928:32;31829:131;:178;;;;;31978:25;:29;32004:2;31978:29;;;;;;;;;;;;;;;;;;;;;;;;;31977:30;31829:178;31811:313;;;32046:4;32034:9;;:16;;;;;;;;;;;;;;;;;;32067:11;:9;:11::i;:::-;32107:5;32095:9;;:17;;;;;;;;;;;;;;;;;;31811:313;32136:12;32152:9;;;;;;;;;;;32151:10;32136:25;;32178;:31;32204:4;32178:31;;;;;;;;;;;;;;;;;;;;;;;;;:64;;;;32213:25;:29;32239:2;32213:29;;;;;;;;;;;;;;;;;;;;;;;;;32178:64;32174:112;;;32269:5;32259:15;;32174:112;32298:12;32331:7;32327:1187;;;32383:26;:30;32410:2;32383:30;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;32433:1;32417:13;;:17;32383:51;32379:986;;;32462:36;32492:5;32462:25;32473:13;;32462:6;:10;;:25;;;;:::i;:::-;:29;;:36;;;;:::i;:::-;32455:43;;32611:13;;32569:17;;32562:4;:24;;;;:::i;:::-;32561:63;;;;:::i;:::-;32517:19;;:107;;;;;;;:::i;:::-;;;;;;;;32737:13;;32695:17;;32688:4;:24;;;;:::i;:::-;32687:63;;;;:::i;:::-;32643:19;;:107;;;;;;;:::i;:::-;;;;;;;;32867:13;;32823:19;;32816:4;:26;;;;:::i;:::-;32815:65;;;;:::i;:::-;32769:21;;:111;;;;;;;:::i;:::-;;;;;;;;32379:986;;;32942:26;:32;32969:4;32942:32;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;;32993:1;32978:12;;:16;32942:52;32938:427;;;33022:35;33051:5;33022:24;33033:12;;33022:6;:10;;:24;;;;:::i;:::-;:28;;:35;;;;:::i;:::-;33015:42;;33127:12;;33107:16;;33100:4;:23;;;;:::i;:::-;33099:40;;;;:::i;:::-;33076:19;;:63;;;;;;;:::i;:::-;;;;;;;;33209:12;;33189:16;;33182:4;:23;;;;:::i;:::-;33181:40;;;;:::i;:::-;33158:19;;:63;;;;;;;:::i;:::-;;;;;;;;33337:12;;33294:18;;33287:4;:25;;;;:::i;:::-;33286:63;;;;:::i;:::-;33240:21;;:109;;;;;;;:::i;:::-;;;;;;;;32938:427;32379:986;33392:1;33385:4;:8;33381:91;;;33414:42;33430:4;33444;33451;33414:15;:42::i;:::-;33381:91;33498:4;33488:14;;;;;:::i;:::-;;;32327:1187;33526:33;33542:4;33548:2;33552:6;33526:15;:33::i;:::-;33586:12;;33570:13;:28;;;;31091:2515;;;;30978:2628;;;;:::o;1351:132::-;1426:12;:10;:12::i;:::-;1415:23;;:7;:5;:7::i;:::-;:23;;;1407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1351:132::o;2436:191::-;2510:16;2529:6;;;;;;;;;;;2510:25;;2555:8;2546:6;;:17;;;;;;;;;;;;;;;;;;2610:8;2579:40;;2600:8;2579:40;;;;;;;;;;;;2499:128;2436:191;:::o;30782:188::-;30901:5;30866:26;:32;30893:4;30866:32;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;30956:5;30922:40;;30950:4;30922:40;;;;;;;;;;;;30782:188;;:::o;10791:908::-;10929:1;10913:18;;:4;:18;;;10905:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;11016:1;11002:16;;:2;:16;;;10994:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11081:38;11102:4;11108:2;11112:6;11081:20;:38::i;:::-;11132:19;11154:9;:15;11164:4;11154:15;;;;;;;;;;;;;;;;11132:37;;11217:6;11202:11;:21;;11180:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;11367:6;11353:11;:20;11335:9;:15;11345:4;11335:15;;;;;;;;;;;;;;;:38;;;;11580:6;11563:9;:13;11573:2;11563:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;11630:2;11615:26;;11624:4;11615:26;;;11634:6;11615:26;;;;;;:::i;:::-;;;;;;;;11654:37;11674:4;11680:2;11684:6;11654:19;:37::i;:::-;10894:805;10791:908;;;:::o;34505:1607::-;34546:23;34572:24;34590:4;34572:9;:24::i;:::-;34546:50;;34607:25;34705:21;;34670:19;;34635;;:54;;;;:::i;:::-;:91;;;;:::i;:::-;34607:119;;34737:12;34764:23;34878:1;34845:17;34809:19;;34791:15;:37;;;;:::i;:::-;34790:72;;;;:::i;:::-;:89;;;;:::i;:::-;34764:115;;34890:26;34919:36;34939:15;34919;:19;;:36;;;;:::i;:::-;34890:65;;34968:25;34996:21;34968:49;;35030:37;35048:18;35030:17;:37::i;:::-;35080:18;35101:44;35127:17;35101:21;:25;;:44;;;;:::i;:::-;35080:65;;35158:23;35184:82;35238:17;35184:35;35199:19;;35184:10;:14;;:35;;;;:::i;:::-;:39;;:82;;;;:::i;:::-;35158:108;;35279:25;35307:84;35363:17;35307:37;35322:21;;35307:10;:14;;:37;;;;:::i;:::-;:41;;:84;;;;:::i;:::-;35279:112;;35404:23;35487:17;35456:15;35430:10;:41;;;;:::i;:::-;:74;;;;:::i;:::-;35404:100;;35539:1;35517:19;:23;;;;35573:1;35551:19;:23;;;;35609:1;35585:21;:25;;;;35645:1;35627:15;:19;:42;;;;;35668:1;35650:15;:19;35627:42;35623:280;;;35686:47;35700:15;35717;35686:13;:47::i;:::-;35753:138;35786:18;35823:15;35857:19;;35753:138;;;;;;;;:::i;:::-;;;;;;;;35623:280;35937:17;;;;;;;;;;;35929:31;;35968:17;35929:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35915:75;;;;;36025:15;;;;;;;;;;;36017:29;;36068:21;36017:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36003:101;;;;;34535:1577;;;;;;;;;;34505:1607::o;17439:98::-;17497:7;17528:1;17524;:5;;;;:::i;:::-;17517:12;;17439:98;;;;:::o;17838:::-;17896:7;17927:1;17923;:5;;;;:::i;:::-;17916:12;;17838:98;;;;:::o;13894:125::-;;;;:::o;14027:124::-;;;;:::o;17168:98::-;17226:7;17257:1;17253;:5;;;;:::i;:::-;17246:12;;17168:98;;;;:::o;33614:503::-;33682:21;33720:1;33706:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33682:40;;33751:4;33733;33738:1;33733:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33777:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33767:4;33772:1;33767:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33812:62;33829:4;33844:15;33862:11;33812:8;:62::i;:::-;33913:15;:66;;;33994:11;34020:1;34036:4;34063;34083:15;33913:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33671:446;33614:503;:::o;34125:372::-;34208:62;34225:4;34240:15;34258:11;34208:8;:62::i;:::-;34283:15;:31;;;34322:9;34355:4;34375:11;34401:1;34417;34433:15;;;;;;;;;;;34463;34283:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;34125:372;;:::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;1553:117;1662:1;1659;1652: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:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:153::-;3869:9;3902:37;3933:5;3902:37;:::i;:::-;3889:50;;3792:153;;;:::o;3951:185::-;4065:64;4123:5;4065:64;:::i;:::-;4060:3;4053:77;3951:185;;:::o;4142:276::-;4262:4;4300:2;4289:9;4285:18;4277:26;;4313:98;4408:1;4397:9;4393:17;4384:6;4313:98;:::i;:::-;4142:276;;;;:::o;4424:118::-;4511:24;4529:5;4511:24;:::i;:::-;4506:3;4499:37;4424:118;;:::o;4548:222::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:71;4760:1;4749:9;4745:17;4736:6;4692:71;:::i;:::-;4548:222;;;;:::o;4776:619::-;4853:6;4861;4869;4918:2;4906:9;4897:7;4893:23;4889:32;4886:119;;;4924:79;;:::i;:::-;4886:119;5044:1;5069:53;5114:7;5105:6;5094:9;5090:22;5069:53;:::i;:::-;5059:63;;5015:117;5171:2;5197:53;5242:7;5233:6;5222:9;5218:22;5197:53;:::i;:::-;5187:63;;5142:118;5299:2;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5270:118;4776:619;;;;;:::o;5401:118::-;5488:24;5506:5;5488:24;:::i;:::-;5483:3;5476:37;5401:118;;:::o;5525:222::-;5618:4;5656:2;5645:9;5641:18;5633:26;;5669:71;5737:1;5726:9;5722:17;5713:6;5669:71;:::i;:::-;5525:222;;;;:::o;5753:86::-;5788:7;5828:4;5821:5;5817:16;5806:27;;5753:86;;;:::o;5845:112::-;5928:22;5944:5;5928:22;:::i;:::-;5923:3;5916:35;5845:112;;:::o;5963:214::-;6052:4;6090:2;6079:9;6075:18;6067:26;;6103:67;6167:1;6156:9;6152:17;6143:6;6103:67;:::i;:::-;5963:214;;;;:::o;6183:329::-;6242:6;6291:2;6279:9;6270:7;6266:23;6262:32;6259:119;;;6297:79;;:::i;:::-;6259:119;6417:1;6442:53;6487:7;6478:6;6467:9;6463:22;6442:53;:::i;:::-;6432:63;;6388:117;6183:329;;;;:::o;6518:117::-;6627:1;6624;6617:12;6641:117;6750:1;6747;6740:12;6764:117;6873:1;6870;6863:12;6904:568;6977:8;6987:6;7037:3;7030:4;7022:6;7018:17;7014:27;7004:122;;7045:79;;:::i;:::-;7004:122;7158:6;7145:20;7135:30;;7188:18;7180:6;7177:30;7174:117;;;7210:79;;:::i;:::-;7174:117;7324:4;7316:6;7312:17;7300:29;;7378:3;7370:4;7362:6;7358:17;7348:8;7344:32;7341:41;7338:128;;;7385:79;;:::i;:::-;7338:128;6904:568;;;;;:::o;7478:116::-;7548:21;7563:5;7548:21;:::i;:::-;7541:5;7538:32;7528:60;;7584:1;7581;7574:12;7528:60;7478:116;:::o;7600:133::-;7643:5;7681:6;7668:20;7659:29;;7697:30;7721:5;7697:30;:::i;:::-;7600:133;;;;:::o;7739:698::-;7831:6;7839;7847;7896:2;7884:9;7875:7;7871:23;7867:32;7864:119;;;7902:79;;:::i;:::-;7864:119;8050:1;8039:9;8035:17;8022:31;8080:18;8072:6;8069:30;8066:117;;;8102:79;;:::i;:::-;8066:117;8215:80;8287:7;8278:6;8267:9;8263:22;8215:80;:::i;:::-;8197:98;;;;7993:312;8344:2;8370:50;8412:7;8403:6;8392:9;8388:22;8370:50;:::i;:::-;8360:60;;8315:115;7739:698;;;;;:::o;8443:474::-;8511:6;8519;8568:2;8556:9;8547:7;8543:23;8539:32;8536:119;;;8574:79;;:::i;:::-;8536:119;8694:1;8719:53;8764:7;8755:6;8744:9;8740:22;8719:53;:::i;:::-;8709:63;;8665:117;8821:2;8847:53;8892:7;8883:6;8872:9;8868:22;8847:53;:::i;:::-;8837:63;;8792:118;8443:474;;;;;:::o;8923:180::-;8971:77;8968:1;8961:88;9068:4;9065:1;9058:15;9092:4;9089:1;9082:15;9109:320;9153:6;9190:1;9184:4;9180:12;9170:22;;9237:1;9231:4;9227:12;9258:18;9248:81;;9314:4;9306:6;9302:17;9292:27;;9248:81;9376:2;9368:6;9365:14;9345:18;9342:38;9339:84;;9395:18;;:::i;:::-;9339:84;9160:269;9109:320;;;:::o;9435:180::-;9483:77;9480:1;9473:88;9580:4;9577:1;9570:15;9604:4;9601:1;9594:15;9621:191;9661:3;9680:20;9698:1;9680:20;:::i;:::-;9675:25;;9714:20;9732:1;9714:20;:::i;:::-;9709:25;;9757:1;9754;9750:9;9743:16;;9778:3;9775:1;9772:10;9769:36;;;9785:18;;:::i;:::-;9769:36;9621:191;;;;:::o;9818:153::-;9958:5;9954:1;9946:6;9942:14;9935:29;9818:153;:::o;9977:365::-;10119:3;10140:66;10204:1;10199:3;10140:66;:::i;:::-;10133:73;;10215:93;10304:3;10215:93;:::i;:::-;10333:2;10328:3;10324:12;10317:19;;9977:365;;;:::o;10348:419::-;10514:4;10552:2;10541:9;10537:18;10529:26;;10601:9;10595:4;10591:20;10587:1;10576:9;10572:17;10565:47;10629:131;10755:4;10629:131;:::i;:::-;10621:139;;10348:419;;;:::o;10773:180::-;10821:77;10818:1;10811:88;10918:4;10915:1;10908:15;10942:4;10939:1;10932:15;10959:233;10998:3;11021:24;11039:5;11021:24;:::i;:::-;11012:33;;11067:66;11060:5;11057:77;11054:103;;11137:18;;:::i;:::-;11054:103;11184:1;11177:5;11173:13;11166:20;;10959:233;;;:::o;11198:151::-;11338:3;11334:1;11326:6;11322:14;11315:27;11198:151;:::o;11355:365::-;11497:3;11518:66;11582:1;11577:3;11518:66;:::i;:::-;11511:73;;11593:93;11682:3;11593:93;:::i;:::-;11711:2;11706:3;11702:12;11695:19;;11355:365;;;:::o;11726:419::-;11892:4;11930:2;11919:9;11915:18;11907:26;;11979:9;11973:4;11969:20;11965:1;11954:9;11950:17;11943:47;12007:131;12133:4;12007:131;:::i;:::-;11999:139;;11726:419;;;:::o;12151:173::-;12291:25;12287:1;12279:6;12275:14;12268:49;12151:173;:::o;12330:366::-;12472:3;12493:67;12557:2;12552:3;12493:67;:::i;:::-;12486:74;;12569:93;12658:3;12569:93;:::i;:::-;12687:2;12682:3;12678:12;12671:19;;12330:366;;;:::o;12702:419::-;12868:4;12906:2;12895:9;12891:18;12883:26;;12955:9;12949:4;12945:20;12941:1;12930:9;12926:17;12919:47;12983:131;13109:4;12983:131;:::i;:::-;12975:139;;12702:419;;;:::o;13127:234::-;13267:34;13263:1;13255:6;13251:14;13244:58;13336:17;13331:2;13323:6;13319:15;13312:42;13127:234;:::o;13367:366::-;13509:3;13530:67;13594:2;13589:3;13530:67;:::i;:::-;13523:74;;13606:93;13695:3;13606:93;:::i;:::-;13724:2;13719:3;13715:12;13708:19;;13367:366;;;:::o;13739:419::-;13905:4;13943:2;13932:9;13928:18;13920:26;;13992:9;13986:4;13982:20;13978:1;13967:9;13963:17;13956:47;14020:131;14146:4;14020:131;:::i;:::-;14012:139;;13739:419;;;:::o;14164:293::-;14304:34;14300:1;14292:6;14288:14;14281:58;14373:34;14368:2;14360:6;14356:15;14349:59;14442:7;14437:2;14429:6;14425:15;14418:32;14164:293;:::o;14463:366::-;14605:3;14626:67;14690:2;14685:3;14626:67;:::i;:::-;14619:74;;14702:93;14791:3;14702:93;:::i;:::-;14820:2;14815:3;14811:12;14804:19;;14463:366;;;:::o;14835:419::-;15001:4;15039:2;15028:9;15024:18;15016:26;;15088:9;15082:4;15078:20;15074:1;15063:9;15059:17;15052:47;15116:131;15242:4;15116:131;:::i;:::-;15108:139;;14835:419;;;:::o;15260:235::-;15400:34;15396:1;15388:6;15384:14;15377:58;15469:18;15464:2;15456:6;15452:15;15445:43;15260:235;:::o;15501:366::-;15643:3;15664:67;15728:2;15723:3;15664:67;:::i;:::-;15657:74;;15740:93;15829:3;15740:93;:::i;:::-;15858:2;15853:3;15849:12;15842:19;;15501:366;;;:::o;15873:419::-;16039:4;16077:2;16066:9;16062:18;16054:26;;16126:9;16120:4;16116:20;16112:1;16101:9;16097:17;16090:47;16154:131;16280:4;16154:131;:::i;:::-;16146:139;;15873:419;;;:::o;16298:233::-;16438:34;16434:1;16426:6;16422:14;16415:58;16507:16;16502:2;16494:6;16490:15;16483:41;16298:233;:::o;16537:366::-;16679:3;16700:67;16764:2;16759:3;16700:67;:::i;:::-;16693:74;;16776:93;16865:3;16776:93;:::i;:::-;16894:2;16889:3;16885:12;16878:19;;16537:366;;;:::o;16909:419::-;17075:4;17113:2;17102:9;17098:18;17090:26;;17162:9;17156:4;17152:20;17148:1;17137:9;17133:17;17126:47;17190:131;17316:4;17190:131;:::i;:::-;17182:139;;16909:419;;;:::o;17334:231::-;17474:34;17470:1;17462:6;17458:14;17451:58;17543:14;17538:2;17530:6;17526:15;17519:39;17334:231;:::o;17571:366::-;17713:3;17734:67;17798:2;17793:3;17734:67;:::i;:::-;17727:74;;17810:93;17899:3;17810:93;:::i;:::-;17928:2;17923:3;17919:12;17912:19;;17571:366;;;:::o;17943:419::-;18109:4;18147:2;18136:9;18132:18;18124:26;;18196:9;18190:4;18186:20;18182:1;18171:9;18167:17;18160:47;18224:131;18350:4;18224:131;:::i;:::-;18216:139;;17943:419;;;:::o;18368:179::-;18508:31;18504:1;18496:6;18492:14;18485:55;18368:179;:::o;18553:366::-;18695:3;18716:67;18780:2;18775:3;18716:67;:::i;:::-;18709:74;;18792:93;18881:3;18792:93;:::i;:::-;18910:2;18905:3;18901:12;18894:19;;18553:366;;;:::o;18925:419::-;19091:4;19129:2;19118:9;19114:18;19106:26;;19178:9;19172:4;19168:20;19164:1;19153:9;19149:17;19142:47;19206:131;19332:4;19206:131;:::i;:::-;19198:139;;18925:419;;;:::o;19350:224::-;19490:34;19486:1;19478:6;19474:14;19467:58;19559:7;19554:2;19546:6;19542:15;19535:32;19350:224;:::o;19580:366::-;19722:3;19743:67;19807:2;19802:3;19743:67;:::i;:::-;19736:74;;19819:93;19908:3;19819:93;:::i;:::-;19937:2;19932:3;19928:12;19921:19;;19580:366;;;:::o;19952:419::-;20118:4;20156:2;20145:9;20141:18;20133:26;;20205:9;20199:4;20195:20;20191:1;20180:9;20176:17;20169:47;20233:131;20359:4;20233:131;:::i;:::-;20225:139;;19952:419;;;:::o;20377:232::-;20517:34;20513:1;20505:6;20501:14;20494:58;20586:15;20581:2;20573:6;20569:15;20562:40;20377:232;:::o;20615:366::-;20757:3;20778:67;20842:2;20837:3;20778:67;:::i;:::-;20771:74;;20854:93;20943:3;20854:93;:::i;:::-;20972:2;20967:3;20963:12;20956:19;;20615:366;;;:::o;20987:419::-;21153:4;21191:2;21180:9;21176:18;21168:26;;21240:9;21234:4;21230:20;21226:1;21215:9;21211:17;21204:47;21268:131;21394:4;21268:131;:::i;:::-;21260:139;;20987:419;;;:::o;21412:169::-;21552:21;21548:1;21540:6;21536:14;21529:45;21412:169;:::o;21587:366::-;21729:3;21750:67;21814:2;21809:3;21750:67;:::i;:::-;21743:74;;21826:93;21915:3;21826:93;:::i;:::-;21944:2;21939:3;21935:12;21928:19;;21587:366;;;:::o;21959:419::-;22125:4;22163:2;22152:9;22148:18;22140:26;;22212:9;22206:4;22202:20;22198:1;22187:9;22183:17;22176:47;22240:131;22366:4;22240:131;:::i;:::-;22232:139;;21959:419;;;:::o;22384:160::-;22524:12;22520:1;22512:6;22508:14;22501:36;22384:160;:::o;22550:366::-;22692:3;22713:67;22777:2;22772:3;22713:67;:::i;:::-;22706:74;;22789:93;22878:3;22789:93;:::i;:::-;22907:2;22902:3;22898:12;22891:19;;22550:366;;;:::o;22922:419::-;23088:4;23126:2;23115:9;23111:18;23103:26;;23175:9;23169:4;23165:20;23161:1;23150:9;23146:17;23139:47;23203:131;23329:4;23203:131;:::i;:::-;23195:139;;22922:419;;;:::o;23347:174::-;23487:26;23483:1;23475:6;23471:14;23464:50;23347:174;:::o;23527:366::-;23669:3;23690:67;23754:2;23749:3;23690:67;:::i;:::-;23683:74;;23766:93;23855:3;23766:93;:::i;:::-;23884:2;23879:3;23875:12;23868:19;;23527:366;;;:::o;23899:419::-;24065:4;24103:2;24092:9;24088:18;24080:26;;24152:9;24146:4;24142:20;24138:1;24127:9;24123:17;24116:47;24180:131;24306:4;24180:131;:::i;:::-;24172:139;;23899:419;;;:::o;24324:410::-;24364:7;24387:20;24405:1;24387:20;:::i;:::-;24382:25;;24421:20;24439:1;24421:20;:::i;:::-;24416:25;;24476:1;24473;24469:9;24498:30;24516:11;24498:30;:::i;:::-;24487:41;;24677:1;24668:7;24664:15;24661:1;24658:22;24638:1;24631:9;24611:83;24588:139;;24707:18;;:::i;:::-;24588:139;24372:362;24324:410;;;;:::o;24740:180::-;24788:77;24785:1;24778:88;24885:4;24882:1;24875:15;24909:4;24906:1;24899:15;24926:185;24966:1;24983:20;25001:1;24983:20;:::i;:::-;24978:25;;25017:20;25035:1;25017:20;:::i;:::-;25012:25;;25056:1;25046:35;;25061:18;;:::i;:::-;25046:35;25103:1;25100;25096:9;25091:14;;24926:185;;;;:::o;25117:194::-;25157:4;25177:20;25195:1;25177:20;:::i;:::-;25172:25;;25211:20;25229:1;25211:20;:::i;:::-;25206:25;;25255:1;25252;25248:9;25240:17;;25279:1;25273:4;25270:11;25267:37;;;25284:18;;:::i;:::-;25267:37;25117:194;;;;:::o;25317:182::-;25457:34;25453:1;25445:6;25441:14;25434:58;25317:182;:::o;25505:366::-;25647:3;25668:67;25732:2;25727:3;25668:67;:::i;:::-;25661:74;;25744:93;25833:3;25744:93;:::i;:::-;25862:2;25857:3;25853:12;25846:19;;25505:366;;;:::o;25877:419::-;26043:4;26081:2;26070:9;26066:18;26058:26;;26130:9;26124:4;26120:20;26116:1;26105:9;26101:17;26094:47;26158:131;26284:4;26158:131;:::i;:::-;26150:139;;25877:419;;;:::o;26302:234::-;26442:34;26438:1;26430:6;26426:14;26419:58;26511:17;26506:2;26498:6;26494:15;26487:42;26302:234;:::o;26542:366::-;26684:3;26705:67;26769:2;26764:3;26705:67;:::i;:::-;26698:74;;26781:93;26870:3;26781:93;:::i;:::-;26899:2;26894:3;26890:12;26883:19;;26542:366;;;:::o;26914:419::-;27080:4;27118:2;27107:9;27103:18;27095:26;;27167:9;27161:4;27157:20;27153:1;27142:9;27138:17;27131:47;27195:131;27321:4;27195:131;:::i;:::-;27187:139;;26914:419;;;:::o;27339:232::-;27479:34;27475:1;27467:6;27463:14;27456:58;27548:15;27543:2;27535:6;27531:15;27524:40;27339:232;:::o;27577:366::-;27719:3;27740:67;27804:2;27799:3;27740:67;:::i;:::-;27733:74;;27816:93;27905:3;27816:93;:::i;:::-;27934:2;27929:3;27925:12;27918:19;;27577:366;;;:::o;27949:419::-;28115:4;28153:2;28142:9;28138:18;28130:26;;28202:9;28196:4;28192:20;28188:1;28177:9;28173:17;28166:47;28230:131;28356:4;28230:131;:::i;:::-;28222:139;;27949:419;;;:::o;28374:235::-;28514:34;28510:1;28502:6;28498:14;28491:58;28583:18;28578:2;28570:6;28566:15;28559:43;28374:235;:::o;28615:366::-;28757:3;28778:67;28842:2;28837:3;28778:67;:::i;:::-;28771:74;;28854:93;28943:3;28854:93;:::i;:::-;28972:2;28967:3;28963:12;28956:19;;28615:366;;;:::o;28987:419::-;29153:4;29191:2;29180:9;29176:18;29168:26;;29240:9;29234:4;29230:20;29226:1;29215:9;29211:17;29204:47;29268:131;29394:4;29268:131;:::i;:::-;29260:139;;28987:419;;;:::o;29412:442::-;29561:4;29599:2;29588:9;29584:18;29576:26;;29612:71;29680:1;29669:9;29665:17;29656:6;29612:71;:::i;:::-;29693:72;29761:2;29750:9;29746:18;29737:6;29693:72;:::i;:::-;29775;29843:2;29832:9;29828:18;29819:6;29775:72;:::i;:::-;29412:442;;;;;;:::o;29860:147::-;29961:11;29998:3;29983:18;;29860:147;;;;:::o;30013:114::-;;:::o;30133:398::-;30292:3;30313:83;30394:1;30389:3;30313:83;:::i;:::-;30306:90;;30405:93;30494:3;30405:93;:::i;:::-;30523:1;30518:3;30514:11;30507:18;;30133:398;;;:::o;30537:379::-;30721:3;30743:147;30886:3;30743:147;:::i;:::-;30736:154;;30907:3;30900:10;;30537:379;;;:::o;30922:180::-;30970:77;30967:1;30960:88;31067:4;31064:1;31057:15;31091:4;31088:1;31081:15;31108:143;31165:5;31196:6;31190:13;31181:22;;31212:33;31239:5;31212:33;:::i;:::-;31108:143;;;;:::o;31257:351::-;31327:6;31376:2;31364:9;31355:7;31351:23;31347:32;31344:119;;;31382:79;;:::i;:::-;31344:119;31502:1;31527:64;31583:7;31574:6;31563:9;31559:22;31527:64;:::i;:::-;31517:74;;31473:128;31257:351;;;;:::o;31614:85::-;31659:7;31688:5;31677:16;;31614:85;;;:::o;31705:158::-;31763:9;31796:61;31814:42;31823:32;31849:5;31823:32;:::i;:::-;31814:42;:::i;:::-;31796:61;:::i;:::-;31783:74;;31705:158;;;:::o;31869:147::-;31964:45;32003:5;31964:45;:::i;:::-;31959:3;31952:58;31869:147;;:::o;32022:114::-;32089:6;32123:5;32117:12;32107:22;;32022:114;;;:::o;32142:184::-;32241:11;32275:6;32270:3;32263:19;32315:4;32310:3;32306:14;32291:29;;32142:184;;;;:::o;32332:132::-;32399:4;32422:3;32414:11;;32452:4;32447:3;32443:14;32435:22;;32332:132;;;:::o;32470:108::-;32547:24;32565:5;32547:24;:::i;:::-;32542:3;32535:37;32470:108;;:::o;32584:179::-;32653:10;32674:46;32716:3;32708:6;32674:46;:::i;:::-;32752:4;32747:3;32743:14;32729:28;;32584:179;;;;:::o;32769:113::-;32839:4;32871;32866:3;32862:14;32854:22;;32769:113;;;:::o;32918:732::-;33037:3;33066:54;33114:5;33066:54;:::i;:::-;33136:86;33215:6;33210:3;33136:86;:::i;:::-;33129:93;;33246:56;33296:5;33246:56;:::i;:::-;33325:7;33356:1;33341:284;33366:6;33363:1;33360:13;33341:284;;;33442:6;33436:13;33469:63;33528:3;33513:13;33469:63;:::i;:::-;33462:70;;33555:60;33608:6;33555:60;:::i;:::-;33545:70;;33401:224;33388:1;33385;33381:9;33376:14;;33341:284;;;33345:14;33641:3;33634:10;;33042:608;;;32918:732;;;;:::o;33656:831::-;33919:4;33957:3;33946:9;33942:19;33934:27;;33971:71;34039:1;34028:9;34024:17;34015:6;33971:71;:::i;:::-;34052:80;34128:2;34117:9;34113:18;34104:6;34052:80;:::i;:::-;34179:9;34173:4;34169:20;34164:2;34153:9;34149:18;34142:48;34207:108;34310:4;34301:6;34207:108;:::i;:::-;34199:116;;34325:72;34393:2;34382:9;34378:18;34369:6;34325:72;:::i;:::-;34407:73;34475:3;34464:9;34460:19;34451:6;34407:73;:::i;:::-;33656:831;;;;;;;;:::o;34493:807::-;34742:4;34780:3;34769:9;34765:19;34757:27;;34794:71;34862:1;34851:9;34847:17;34838:6;34794:71;:::i;:::-;34875:72;34943:2;34932:9;34928:18;34919:6;34875:72;:::i;:::-;34957:80;35033:2;35022:9;35018:18;35009:6;34957:80;:::i;:::-;35047;35123:2;35112:9;35108:18;35099:6;35047:80;:::i;:::-;35137:73;35205:3;35194:9;35190:19;35181:6;35137:73;:::i;:::-;35220;35288:3;35277:9;35273:19;35264:6;35220:73;:::i;:::-;34493:807;;;;;;;;;:::o;35306:143::-;35363:5;35394:6;35388:13;35379:22;;35410:33;35437:5;35410:33;:::i;:::-;35306:143;;;;:::o;35455:663::-;35543:6;35551;35559;35608:2;35596:9;35587:7;35583:23;35579:32;35576:119;;;35614:79;;:::i;:::-;35576:119;35734:1;35759:64;35815:7;35806:6;35795:9;35791:22;35759:64;:::i;:::-;35749:74;;35705:128;35872:2;35898:64;35954:7;35945:6;35934:9;35930:22;35898:64;:::i;:::-;35888:74;;35843:129;36011:2;36037:64;36093:7;36084:6;36073:9;36069:22;36037:64;:::i;:::-;36027:74;;35982:129;35455:663;;;;;:::o

Swarm Source

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