ETH Price: $2,512.49 (+0.49%)

Token

PTSD (PTSD)
 

Overview

Max Total Supply

100,000,000,000 PTSD

Holders

176

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.78643494970703125 PTSD

Value
$0.00
0x9ee6f99c8a6adcb225f89ed8afee16f5b9c3d598
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:
PTSD

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

pragma solidity 0.8.0;
// SPDX-License-Identifier: MIT

interface IERC20 {
    /**
     /* 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);

    /**
     /* 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);

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

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

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

    /**
     /* 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);

    /**
     /* Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * 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:
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     /* Moves `amount` tokens from `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from 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);
}

 /* Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     /* Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    /**
     /* Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: 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;
    }

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

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

    /**
     /* See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a 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;
    }

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

    /**
     /* See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     /* See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    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;
    }

    /**
     /* Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     /* Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     /* Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /*/* Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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

    /**
     /* Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

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

    /**
     /* Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     /* Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    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);
            }
        }
    }

    /**
     /* Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     /* Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

 /* Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     /* Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     /* Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        _spendAllowance(account, _msgSender(), amount);
        _burn(account, amount);
    }
}

 /* Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

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

    /**
     /* Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     /* 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 zero address");
        _transferOwnership(newOwner);
    }

    /**
     /* Transfers ownership of the 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);
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    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(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
    external
    returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
    external
    payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01{
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

interface IUniswapV2ERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
}

contract PTSD is ERC20Burnable, Ownable {
    uint256 private constant TOTAL_SUPPLY = 100_000_000_000e18;
    address public marketingWallet;
    uint256 public maxPercentToSwap = 5;
    IUniswapV2Router02 public uniswapV2Router;
    address public  uniswapV2Pair;

    address private constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address private constant ZERO = 0x0000000000000000000000000000000000000000;

    bool private swapping;
    uint256 public swapTokensAtAmount;
    bool public isTradingEnabled;

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

    event ExcludeFromFees(address indexed account);
    event FeesUpdated(uint256 sellFee, uint256 buyFee);
    event MarketingWalletChanged(address marketingWallet);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event SwapAndSendMarketing(uint256 tokensSwapped, uint256 bnbSend);
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    uint256 public sellFee;
    uint256 public buyFee;
    
    bool public isBotProtectionDisabledPermanently;
    uint256 public maxTxAmount;
    uint256 public maxHolding;
    bool public buyCooldownEnabled = true;
    uint256 public buyCooldown = 30;
    mapping(address => bool) public isExempt;
    mapping(address => uint256) public lastBuy;

    constructor (address operator) ERC20("PTSD", "PTSD")
    {
        _mint(owner(), TOTAL_SUPPLY);

        swapTokensAtAmount = TOTAL_SUPPLY / 1000;
        maxHolding = TOTAL_SUPPLY / 100;
        maxTxAmount = TOTAL_SUPPLY / 100;
        marketingWallet = operator;

        sellFee = 25;
        buyFee = 10;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;

        _approve(address(this), address(uniswapV2Router), type(uint256).max);

        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(uniswapV2Router)] = true;

        
        isExempt[address(uniswapV2Router)] = true;
        isExempt[owner()] = true;
    }

    receive() external payable {
    }

    function relive() public onlyOwner {
        require(isTradingEnabled == false, "Trading is already open!");
        isTradingEnabled = true;
    }

    function claimStuckTokens(address token) external onlyOwner {
        require(token != address(this), "Owner cannot claim native tokens");
        if (token == address(0x0)) {
            payable(msg.sender).transfer(address(this).balance);
            return;
        }
        IERC20 ERC20token = IERC20(token);
        uint256 balance = ERC20token.balanceOf(address(this));
        ERC20token.transfer(msg.sender, balance);
    }

    function sendETH(address payable recipient, uint256 amount) internal {
        recipient.call{gas : 2300, value : amount}("");
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(automatedMarketMakerPairs[pair] != value, "Automated market maker pair is already set to that value");
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    
    function excludeFromFees(address account) external onlyOwner {
        require(!_isExcludedFromFees[account], "Account is already the value of true");
        _isExcludedFromFees[account] = true;

        emit ExcludeFromFees(account);
    }

    function includeInFees(address account) external onlyOwner {
        require(_isExcludedFromFees[account], "Account already included");
        _isExcludedFromFees[account] = false;
    }

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

    function updateFees(uint256 _sellFee, uint256 _buyFee) external onlyOwner {
        require(_sellFee <= 18, "Fees must be less than 10%");
        require(_buyFee <= 18, "Fees must be less than 10%");
        sellFee = _sellFee;
        buyFee = _buyFee;

        emit FeesUpdated(sellFee, buyFee);
    }

    function changeMarketingWallet(address _marketingWallet) external onlyOwner {
        require(_marketingWallet != marketingWallet, "same wallet");
        marketingWallet = _marketingWallet;
        emit MarketingWalletChanged(marketingWallet);
    }

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

        if (!swapping) {
            _check(from, to, amount);
        }

        uint _buyFee = buyFee;
        uint _sellFee = sellFee;

        if (!isExempt[from] && !isExempt[to]) {
            require(isTradingEnabled, "Trade is not open");
        }

        if (amount == 0) {
            return;
        }

        bool takeFee = !swapping;

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

        uint256 toSwap = balanceOf(address(this));

        bool canSwap = toSwap >= swapTokensAtAmount && toSwap > 0 && !automatedMarketMakerPairs[from] && takeFee;
        if (canSwap &&
            !swapping) {
            swapping = true;
            uint256 pairBalance = balanceOf(uniswapV2Pair);
            if (toSwap > pairBalance * maxPercentToSwap / 100) {
                toSwap = pairBalance * maxPercentToSwap / 100;
            }
            swapAndSendMarketing(toSwap);
            swapping = false;
        }

        if (takeFee && to == uniswapV2Pair && _sellFee > 0) {
            uint256 fees = (amount * _sellFee) / 100;
            amount = amount - fees;

            super._transfer(from, address(this), fees);
        }
        else if (takeFee && from == uniswapV2Pair && _buyFee > 0) {
            uint256 fees = (amount * _buyFee) / 100;
            amount = amount - fees;

            super._transfer(from, address(this), fees);
        }

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

    function swapAndSendMarketing(uint256 tokenAmount) private {

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        try uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, 
            path,
            address(this),
            block.timestamp) {}
        catch {
        }

        uint256 newBalance = address(this).balance;
        sendETH(payable(marketingWallet), newBalance);

        emit SwapAndSendMarketing(tokenAmount, newBalance);
    }

    function setSwapTokensAtAmount(uint256 newAmount) external onlyOwner {
        require(newAmount > 0);
        swapTokensAtAmount = newAmount;
    }

    function setMaxPercentToSwap(uint256 newAmount) external onlyOwner {
        require(newAmount > 1, "too low");
        require(newAmount <= 10, "too high");
        maxPercentToSwap = newAmount;
    }

    function _check(
        address from,
        address to,
        uint256 amount
    ) internal {
        
        if (!isBotProtectionDisabledPermanently) {
            
            if (!isSpecialAddresses(from, to) && !isExempt[to]) {

                _checkBuyCooldown(from, to);
                _checkMaxTxAmount(to, amount);
                
                _checkMaxHoldingLimit(to, amount);
            }
        }

    }

    function _checkBuyCooldown(address from, address to) internal {
        if (buyCooldownEnabled && from == uniswapV2Pair) {
            require(block.timestamp - lastBuy[tx.origin] >= buyCooldown, "buy cooldown");
            lastBuy[tx.origin] = block.timestamp;
        }

    }

    function _checkMaxTxAmount(address to, uint256 amount) internal view {
        require(amount <= maxTxAmount, "Amount exceeds max");

    }

    function _checkMaxHoldingLimit(address to, uint256 amount) internal view {
        if (to == uniswapV2Pair) {
            return;
        }

        require(balanceOf(to) + amount <= maxHolding, "Max holding exceeded max");

    }

    function isSpecialAddresses(address from, address to) view public returns (bool){
        
        return (from == owner() || to == owner() || from == address(this) || to == address(this));
    }

    function disableBotProtectionPermanently() external onlyOwner {
        isBotProtectionDisabledPermanently = true;
    }

    function setMaxTxAmount(uint256 maxTxAmount_) external onlyOwner {
        maxTxAmount = maxTxAmount_;
    }


    function setMaxHolding(uint256 maxHolding_) external onlyOwner {
        maxHolding = maxHolding_;
    }

    function setExempt(address who, bool status) public onlyOwner {
        isExempt[who] = status;
    }

    function setBuyCooldownStatus(bool status) external onlyOwner {
        buyCooldownEnabled = status;
    }

    function setBuyCooldown(uint256 buyCooldown_) external onlyOwner {
        buyCooldown = buyCooldown_;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"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"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"sellFee","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"buyFee","type":"uint256"}],"name":"FeesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"marketingWallet","type":"address"}],"name":"MarketingWalletChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbSend","type":"uint256"}],"name":"SwapAndSendMarketing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"buyCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableBotProtectionPermanently","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isBotProtectionDisabledPermanently","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"isSpecialAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPercentToSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"relive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyCooldown_","type":"uint256"}],"name":"setBuyCooldown","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setBuyCooldownStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxHolding_","type":"uint256"}],"name":"setMaxHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setMaxPercentToSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount_","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","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":[{"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"},{"inputs":[{"internalType":"uint256","name":"_sellFee","type":"uint256"},{"internalType":"uint256","name":"_buyFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405260056007556001601360006101000a81548160ff021916908315150217905550601e6014553480156200003657600080fd5b50604051620056193803806200561983398181016040528101906200005c919062000d67565b6040518060400160405280600481526020017f50545344000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f50545344000000000000000000000000000000000000000000000000000000008152508160039080519060200190620000e092919062000ca0565b508060049080519060200190620000f992919062000ca0565b5050506200011c620001106200071b60201b60201c565b6200072360201b60201c565b6200014a62000130620007e960201b60201c565b6c01431e0fae6d7217caa00000006200081360201b60201c565b6103e86c01431e0fae6d7217caa00000006200016791906200106f565b600a8190555060646c01431e0fae6d7217caa00000006200018991906200106f565b60128190555060646c01431e0fae6d7217caa0000000620001ab91906200106f565b60118190555080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506019600e81905550600a600f819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026457600080fd5b505afa15801562000279573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029f919062000d67565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200030257600080fd5b505afa15801562000317573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033d919062000d67565b6040518363ffffffff1660e01b81526004016200035c92919062000f2f565b602060405180830381600087803b1580156200037757600080fd5b505af11580156200038c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b2919062000d67565b905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200048b30600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200098c60201b60201c565b6200049e81600162000b5f60201b60201c565b6001600c6000620004b4620007e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160156000620006c1620007e960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550505050620011c2565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000886576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200087d9062000fc2565b60405180910390fd5b6200089a6000838362000c9660201b60201c565b8060026000828254620008ae919062001012565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000905919062001012565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200096c919062000fe4565b60405180910390a3620009886000838362000c9b60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620009ff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f69062000fa0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a699062000f5c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b52919062000fe4565b60405180910390a3505050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515141562000bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bec9062000f7e565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b505050565b505050565b82805462000cae90620010e5565b90600052602060002090601f01602090048101928262000cd2576000855562000d1e565b82601f1062000ced57805160ff191683800117855562000d1e565b8280016001018555821562000d1e579182015b8281111562000d1d57825182559160200191906001019062000d00565b5b50905062000d2d919062000d31565b5090565b5b8082111562000d4c57600081600090555060010162000d32565b5090565b60008151905062000d6181620011a8565b92915050565b60006020828403121562000d7a57600080fd5b600062000d8a8482850162000d50565b91505092915050565b62000d9e81620010a7565b82525050565b600062000db360228362001001565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000e1b60388362001001565b91507f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008301527f6c72656164792073657420746f20746861742076616c756500000000000000006020830152604082019050919050565b600062000e8360248362001001565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600062000eeb601f8362001001565b91507f45524332303a206d696e7420746f20746865207a65726f2061646472657373006000830152602082019050919050565b62000f2981620010db565b82525050565b600060408201905062000f46600083018562000d93565b62000f55602083018462000d93565b9392505050565b6000602082019050818103600083015262000f778162000da4565b9050919050565b6000602082019050818103600083015262000f998162000e0c565b9050919050565b6000602082019050818103600083015262000fbb8162000e74565b9050919050565b6000602082019050818103600083015262000fdd8162000edc565b9050919050565b600060208201905062000ffb600083018462000f1e565b92915050565b600082825260208201905092915050565b60006200101f82620010db565b91506200102c83620010db565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200106457620010636200111b565b5b828201905092915050565b60006200107c82620010db565b91506200108983620010db565b9250826200109c576200109b6200114a565b5b828204905092915050565b6000620010b482620010bb565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620010fe57607f821691505b6020821081141562001115576200111462001179565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b620011b381620010a7565b8114620011bf57600080fd5b50565b61444780620011d26000396000f3fe6080604052600436106102b25760003560e01c806379cc679011610175578063b62496f5116100dc578063e2f4560511610095578063ec11ba341161006f578063ec11ba3414610ae3578063ec28438a14610afa578063f2fde38b14610b23578063f9d0831a14610b4c576102b9565b8063e2f4560514610a52578063e3084d9e14610a7d578063e57f14e114610aba576102b9565b8063b62496f514610932578063bb85c6d11461096f578063c1adf7bc14610998578063c29632bd146109d5578063c48664e0146109fe578063dd62ed3e14610a15576102b9565b80639c7d15a21161012e5780639c7d15a2146107fe5780639fde54f514610829578063a457c2d714610852578063a9059cbb1461088f578063ad5dff73146108cc578063afa4f3b214610909576102b9565b806379cc6790146107025780638c0b5e221461072b5780638da5cb5b1461075657806395d89b41146107815780639a7a23d6146107ac5780639bc7c8c0146107d5576102b9565b806342966c68116102195780636457c4c3116101d25780636457c4c3146106065780636db794371461062f578063704fbfe51461065857806370a0823114610683578063715018a6146106c057806375f0a874146106d7576102b9565b806342966c68146104f45780634589aaea1461051d578063470624021461054857806349bd5a5e146105735780634fbee1931461059e578063617fe0ed146105db576102b9565b8063205187581161026b57806320518758146103d057806323b872dd146103f95780632b14ca5614610436578063313ce56714610461578063333e6f061461048c57806339509351146104b7576102b9565b8063064a59d0146102be57806306fdde03146102e9578063095ea7b3146103145780631694505e1461035157806316a2f82a1461037c57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b75565b6040516102e09190613c98565b60405180910390f35b3480156102f557600080fd5b506102fe610b88565b60405161030b9190613cce565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906131c3565b610c1a565b6040516103489190613c98565b60405180910390f35b34801561035d57600080fd5b50610366610c3d565b6040516103739190613cb3565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906130aa565b610c63565b005b3480156103b157600080fd5b506103ba610d52565b6040516103c79190614010565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190613251565b610d5c565b005b34801561040557600080fd5b50610420600480360381019061041b9190613138565b610df5565b60405161042d9190613c98565b60405180910390f35b34801561044257600080fd5b5061044b610e24565b6040516104589190614010565b60405180910390f35b34801561046d57600080fd5b50610476610e2a565b60405161048391906140ae565b60405180910390f35b34801561049857600080fd5b506104a1610e33565b6040516104ae9190614010565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906131c3565b610e39565b6040516104eb9190613c98565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613251565b610e70565b005b34801561052957600080fd5b50610532610e84565b60405161053f9190613c98565b60405180910390f35b34801561055457600080fd5b5061055d610e97565b60405161056a9190614010565b60405180910390f35b34801561057f57600080fd5b50610588610e9d565b6040516105959190613c54565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c091906130aa565b610ec3565b6040516105d29190613c98565b60405180910390f35b3480156105e757600080fd5b506105f0610f19565b6040516105fd9190613c98565b60405180910390f35b34801561061257600080fd5b5061062d600480360381019061062891906131ff565b610f2c565b005b34801561063b57600080fd5b50610656600480360381019061065191906132a3565b610f51565b005b34801561066457600080fd5b5061066d611030565b60405161067a9190614010565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a591906130aa565b611036565b6040516106b79190614010565b60405180910390f35b3480156106cc57600080fd5b506106d561107e565b005b3480156106e357600080fd5b506106ec611092565b6040516106f99190613c54565b60405180910390f35b34801561070e57600080fd5b50610729600480360381019061072491906131c3565b6110b8565b005b34801561073757600080fd5b506107406110d8565b60405161074d9190614010565b60405180910390f35b34801561076257600080fd5b5061076b6110de565b6040516107789190613c54565b60405180910390f35b34801561078d57600080fd5b50610796611108565b6040516107a39190613cce565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190613187565b61119a565b005b3480156107e157600080fd5b506107fc60048036038101906107f79190613251565b611241565b005b34801561080a57600080fd5b50610813611253565b6040516108209190614010565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613187565b611259565b005b34801561085e57600080fd5b50610879600480360381019061087491906131c3565b6112bc565b6040516108869190613c98565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b191906131c3565b611333565b6040516108c39190613c98565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee91906130aa565b611356565b6040516109009190613c98565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190613251565b611376565b005b34801561093e57600080fd5b50610959600480360381019061095491906130aa565b611395565b6040516109669190613c98565b60405180910390f35b34801561097b57600080fd5b50610996600480360381019061099191906130aa565b6113b5565b005b3480156109a457600080fd5b506109bf60048036038101906109ba91906130aa565b6114eb565b6040516109cc9190614010565b60405180910390f35b3480156109e157600080fd5b506109fc60048036038101906109f79190613251565b611503565b005b348015610a0a57600080fd5b50610a13611515565b005b348015610a2157600080fd5b50610a3c6004803603810190610a3791906130fc565b611590565b604051610a499190614010565b60405180910390f35b348015610a5e57600080fd5b50610a67611617565b604051610a749190614010565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f91906130fc565b61161d565b604051610ab19190613c98565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906130aa565b611706565b005b348015610aef57600080fd5b50610af8611839565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190613251565b61185e565b005b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906130aa565b611870565b005b348015610b5857600080fd5b50610b736004803603810190610b6e91906130aa565b6118f4565b005b600b60009054906101000a900460ff1681565b606060038054610b97906142fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc3906142fc565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b5050505050905090565b600080610c25611b12565b9050610c32818585611b1a565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c6b611ce5565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613ed0565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b610d64611ce5565b60018111610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90613f50565b60405180910390fd5b600a811115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290613e70565b60405180910390fd5b8060078190555050565b600080610e00611b12565b9050610e0d858285611d63565b610e18858585611def565b60019150509392505050565b600e5481565b60006012905090565b60125481565b600080610e44611b12565b9050610e65818585610e568589611590565b610e609190614129565b611b1a565b600191505092915050565b610e81610e7b611b12565b82612374565b50565b601060009054906101000a900460ff1681565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601360009054906101000a900460ff1681565b610f34611ce5565b80601360006101000a81548160ff02191690831515021790555050565b610f59611ce5565b6012821115610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490613ff0565b60405180910390fd5b6012811115610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613ff0565b60405180910390fd5b81600e8190555080600f819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a1600e54600f54604051611024929190614085565b60405180910390a15050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611086611ce5565b611090600061254b565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ca826110c4611b12565b83611d63565b6110d48282612374565b5050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611117906142fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611143906142fc565b80156111905780601f1061116557610100808354040283529160200191611190565b820191906000526020600020905b81548152906001019060200180831161117357829003601f168201915b5050505050905090565b6111a2611ce5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90613e10565b60405180910390fd5b61123d8282612611565b5050565b611249611ce5565b8060128190555050565b60075481565b611261611ce5565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806112c7611b12565b905060006112d58286611590565b90508381101561131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613fd0565b60405180910390fd5b6113278286868403611b1a565b60019250505092915050565b60008061133e611b12565b905061134b818585611def565b600191505092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b61137e611ce5565b6000811161138b57600080fd5b80600a8190555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6113bd611ce5565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590613fb0565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516114e09190613c54565b60405180910390a150565b60166020528060005260406000206000915090505481565b61150b611ce5565b8060148190555050565b61151d611ce5565b60001515600b60009054906101000a900460ff16151514611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90613df0565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006116276110de565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061169257506116636110de565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116c857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806116fe57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b61170e611ce5565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290613e30565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b611841611ce5565b6001601060006101000a81548160ff021916908315150217905550565b611866611ce5565b8060118190555050565b611878611ce5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613d50565b60405180910390fd5b6118f18161254b565b50565b6118fc611ce5565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290613f70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ec573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156119e6573d6000803e3d6000fd5b50611b0f565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a2c9190613c54565b60206040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7c919061327a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611ab9929190613c6f565b602060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613228565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190613f90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613d70565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cd89190614010565b60405180910390a3505050565b611ced611b12565b73ffffffffffffffffffffffffffffffffffffffff16611d0b6110de565b73ffffffffffffffffffffffffffffffffffffffff1614611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613eb0565b60405180910390fd5b565b6000611d6f8484611590565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611de95781811015611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290613db0565b60405180910390fd5b611de88484848403611b1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613f30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613d10565b60405180910390fd5b600960149054906101000a900460ff16611eef57611eee838383612745565b5b6000600f5490506000600e549050601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fa15750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ff657600b60009054906101000a900460ff16611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613cf0565b60405180910390fd5b5b600083141561200657505061236f565b6000600960149054906101000a900460ff16159050600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120bc5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120c657600090505b60006120d130611036565b90506000600a5482101580156120e75750600082115b801561213d5750600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121465750825b90508080156121625750600960149054906101000a900460ff16155b15612215576001600960146101000a81548160ff02191690831515021790555060006121af600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611036565b90506064600754826121c191906141b0565b6121cb919061417f565b8311156121ef576064600754826121e291906141b0565b6121ec919061417f565b92505b6121f8836127e4565b6000600960146101000a81548160ff021916908315150217905550505b82801561226f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b801561227b5750600084115b156122bb5760006064858861229091906141b0565b61229a919061417f565b905080876122a8919061420a565b96506122b5893083612ae9565b5061235e565b8280156123155750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b80156123215750600085115b1561235d5760006064868861233691906141b0565b612340919061417f565b9050808761234e919061420a565b965061235b893083612ae9565b505b5b612369888888612ae9565b50505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db90613ef0565b60405180910390fd5b6123f082600083612d6a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90613d30565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546124cd919061420a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125329190614010565b60405180910390a361254683600084612d6f565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90613d90565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601060009054906101000a900460ff166127df57612763838361161d565b1580156127ba5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127de576127c98383612d74565b6127d38282612eba565b6127dd8282612f03565b5b5b505050565b6000600267ffffffffffffffff811115612827577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128555781602001602082028036833780820191505090505b5090503081600081518110612893577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293557600080fd5b505afa158015612949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296d91906130d3565b816001815181106129a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a4595949392919061402b565b600060405180830381600087803b158015612a5f57600080fd5b505af1925050508015612a70575060015b612a7957612a7a565b5b6000479050612aab600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612fbb565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998382604051612adc929190614085565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090613f30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc090613d10565b60405180910390fd5b612bd4838383612d6a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190613dd0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ced9190614129565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d519190614010565b60405180910390a3612d64848484612d6f565b50505050565b505050565b505050565b601360009054906101000a900460ff168015612ddd5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612eb657601454601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442612e30919061420a565b1015612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6890613f10565b60405180910390fd5b42601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b601154811115612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613e90565b60405180910390fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f5e57612fb7565b60125481612f6b84611036565b612f759190614129565b1115612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad90613e50565b60405180910390fd5b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc82604051612fe290613c3f565b600060405180830381858888f193505050503d8060008114613020576040519150601f19603f3d011682016040523d82523d6000602084013e613025565b606091505b5050505050565b60008135905061303b816143cc565b92915050565b600081519050613050816143cc565b92915050565b600081359050613065816143e3565b92915050565b60008151905061307a816143e3565b92915050565b60008135905061308f816143fa565b92915050565b6000815190506130a4816143fa565b92915050565b6000602082840312156130bc57600080fd5b60006130ca8482850161302c565b91505092915050565b6000602082840312156130e557600080fd5b60006130f384828501613041565b91505092915050565b6000806040838503121561310f57600080fd5b600061311d8582860161302c565b925050602061312e8582860161302c565b9150509250929050565b60008060006060848603121561314d57600080fd5b600061315b8682870161302c565b935050602061316c8682870161302c565b925050604061317d86828701613080565b9150509250925092565b6000806040838503121561319a57600080fd5b60006131a88582860161302c565b92505060206131b985828601613056565b9150509250929050565b600080604083850312156131d657600080fd5b60006131e48582860161302c565b92505060206131f585828601613080565b9150509250929050565b60006020828403121561321157600080fd5b600061321f84828501613056565b91505092915050565b60006020828403121561323a57600080fd5b60006132488482850161306b565b91505092915050565b60006020828403121561326357600080fd5b600061327184828501613080565b91505092915050565b60006020828403121561328c57600080fd5b600061329a84828501613095565b91505092915050565b600080604083850312156132b657600080fd5b60006132c485828601613080565b92505060206132d585828601613080565b9150509250929050565b60006132eb83836132f7565b60208301905092915050565b6133008161423e565b82525050565b61330f8161423e565b82525050565b6000613320826140d9565b61332a81856140fc565b9350613335836140c9565b8060005b8381101561336657815161334d88826132df565b9750613358836140ef565b925050600181019050613339565b5085935050505092915050565b61337c81614250565b82525050565b61338b81614293565b82525050565b61339a816142b7565b82525050565b60006133ab826140e4565b6133b58185614118565b93506133c58185602086016142c9565b6133ce816143bb565b840191505092915050565b60006133e6601183614118565b91507f5472616465206973206e6f74206f70656e0000000000000000000000000000006000830152602082019050919050565b6000613426602383614118565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061348c602283614118565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134f2602683614118565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613558602283614118565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135be603883614118565b91507f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008301527f6c72656164792073657420746f20746861742076616c756500000000000000006020830152604082019050919050565b6000613624601d83614118565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000613664602683614118565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136ca601883614118565b91507f54726164696e6720697320616c7265616479206f70656e2100000000000000006000830152602082019050919050565b600061370a604183614118565b91507f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008301527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208301527f73000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000613796602483614118565b91507f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008301527f74727565000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137fc601883614118565b91507f4d617820686f6c64696e67206578636565646564206d617800000000000000006000830152602082019050919050565b600061383c600883614118565b91507f746f6f20686967680000000000000000000000000000000000000000000000006000830152602082019050919050565b600061387c601283614118565b91507f416d6f756e742065786365656473206d617800000000000000000000000000006000830152602082019050919050565b60006138bc602083614118565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006138fc601883614118565b91507f4163636f756e7420616c726561647920696e636c7564656400000000000000006000830152602082019050919050565b600061393c602183614118565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139a2600c83614118565b91507f62757920636f6f6c646f776e00000000000000000000000000000000000000006000830152602082019050919050565b60006139e2602583614118565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a48600783614118565b91507f746f6f206c6f77000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613a88602083614118565b91507f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736000830152602082019050919050565b6000613ac860008361410d565b9150600082019050919050565b6000613ae2602483614118565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b48600b83614118565b91507f73616d652077616c6c65740000000000000000000000000000000000000000006000830152602082019050919050565b6000613b88602583614118565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bee601a83614118565b91507f46656573206d757374206265206c657373207468616e203130250000000000006000830152602082019050919050565b613c2a8161427c565b82525050565b613c3981614286565b82525050565b6000613c4a82613abb565b9150819050919050565b6000602082019050613c696000830184613306565b92915050565b6000604082019050613c846000830185613306565b613c916020830184613c21565b9392505050565b6000602082019050613cad6000830184613373565b92915050565b6000602082019050613cc86000830184613382565b92915050565b60006020820190508181036000830152613ce881846133a0565b905092915050565b60006020820190508181036000830152613d09816133d9565b9050919050565b60006020820190508181036000830152613d2981613419565b9050919050565b60006020820190508181036000830152613d498161347f565b9050919050565b60006020820190508181036000830152613d69816134e5565b9050919050565b60006020820190508181036000830152613d898161354b565b9050919050565b60006020820190508181036000830152613da9816135b1565b9050919050565b60006020820190508181036000830152613dc981613617565b9050919050565b60006020820190508181036000830152613de981613657565b9050919050565b60006020820190508181036000830152613e09816136bd565b9050919050565b60006020820190508181036000830152613e29816136fd565b9050919050565b60006020820190508181036000830152613e4981613789565b9050919050565b60006020820190508181036000830152613e69816137ef565b9050919050565b60006020820190508181036000830152613e898161382f565b9050919050565b60006020820190508181036000830152613ea98161386f565b9050919050565b60006020820190508181036000830152613ec9816138af565b9050919050565b60006020820190508181036000830152613ee9816138ef565b9050919050565b60006020820190508181036000830152613f098161392f565b9050919050565b60006020820190508181036000830152613f2981613995565b9050919050565b60006020820190508181036000830152613f49816139d5565b9050919050565b60006020820190508181036000830152613f6981613a3b565b9050919050565b60006020820190508181036000830152613f8981613a7b565b9050919050565b60006020820190508181036000830152613fa981613ad5565b9050919050565b60006020820190508181036000830152613fc981613b3b565b9050919050565b60006020820190508181036000830152613fe981613b7b565b9050919050565b6000602082019050818103600083015261400981613be1565b9050919050565b60006020820190506140256000830184613c21565b92915050565b600060a0820190506140406000830188613c21565b61404d6020830187613391565b818103604083015261405f8186613315565b905061406e6060830185613306565b61407b6080830184613c21565b9695505050505050565b600060408201905061409a6000830185613c21565b6140a76020830184613c21565b9392505050565b60006020820190506140c36000830184613c30565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006141348261427c565b915061413f8361427c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141745761417361432e565b5b828201905092915050565b600061418a8261427c565b91506141958361427c565b9250826141a5576141a461435d565b5b828204905092915050565b60006141bb8261427c565b91506141c68361427c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141ff576141fe61432e565b5b828202905092915050565b60006142158261427c565b91506142208361427c565b9250828210156142335761423261432e565b5b828203905092915050565b60006142498261425c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061429e826142a5565b9050919050565b60006142b08261425c565b9050919050565b60006142c28261427c565b9050919050565b60005b838110156142e75780820151818401526020810190506142cc565b838111156142f6576000848401525b50505050565b6000600282049050600182168061431457607f821691505b602082108114156143285761432761438c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6143d58161423e565b81146143e057600080fd5b50565b6143ec81614250565b81146143f757600080fd5b50565b6144038161427c565b811461440e57600080fd5b5056fea2646970667358221220946115f29c43b5e97c758c0d9124bfe4d266b341d8777451851453e0140fae9664736f6c634300080000330000000000000000000000006adc33eb9b39594b84e4248f5123c4f6d533d283

Deployed Bytecode

0x6080604052600436106102b25760003560e01c806379cc679011610175578063b62496f5116100dc578063e2f4560511610095578063ec11ba341161006f578063ec11ba3414610ae3578063ec28438a14610afa578063f2fde38b14610b23578063f9d0831a14610b4c576102b9565b8063e2f4560514610a52578063e3084d9e14610a7d578063e57f14e114610aba576102b9565b8063b62496f514610932578063bb85c6d11461096f578063c1adf7bc14610998578063c29632bd146109d5578063c48664e0146109fe578063dd62ed3e14610a15576102b9565b80639c7d15a21161012e5780639c7d15a2146107fe5780639fde54f514610829578063a457c2d714610852578063a9059cbb1461088f578063ad5dff73146108cc578063afa4f3b214610909576102b9565b806379cc6790146107025780638c0b5e221461072b5780638da5cb5b1461075657806395d89b41146107815780639a7a23d6146107ac5780639bc7c8c0146107d5576102b9565b806342966c68116102195780636457c4c3116101d25780636457c4c3146106065780636db794371461062f578063704fbfe51461065857806370a0823114610683578063715018a6146106c057806375f0a874146106d7576102b9565b806342966c68146104f45780634589aaea1461051d578063470624021461054857806349bd5a5e146105735780634fbee1931461059e578063617fe0ed146105db576102b9565b8063205187581161026b57806320518758146103d057806323b872dd146103f95780632b14ca5614610436578063313ce56714610461578063333e6f061461048c57806339509351146104b7576102b9565b8063064a59d0146102be57806306fdde03146102e9578063095ea7b3146103145780631694505e1461035157806316a2f82a1461037c57806318160ddd146103a5576102b9565b366102b957005b600080fd5b3480156102ca57600080fd5b506102d3610b75565b6040516102e09190613c98565b60405180910390f35b3480156102f557600080fd5b506102fe610b88565b60405161030b9190613cce565b60405180910390f35b34801561032057600080fd5b5061033b600480360381019061033691906131c3565b610c1a565b6040516103489190613c98565b60405180910390f35b34801561035d57600080fd5b50610366610c3d565b6040516103739190613cb3565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e91906130aa565b610c63565b005b3480156103b157600080fd5b506103ba610d52565b6040516103c79190614010565b60405180910390f35b3480156103dc57600080fd5b506103f760048036038101906103f29190613251565b610d5c565b005b34801561040557600080fd5b50610420600480360381019061041b9190613138565b610df5565b60405161042d9190613c98565b60405180910390f35b34801561044257600080fd5b5061044b610e24565b6040516104589190614010565b60405180910390f35b34801561046d57600080fd5b50610476610e2a565b60405161048391906140ae565b60405180910390f35b34801561049857600080fd5b506104a1610e33565b6040516104ae9190614010565b60405180910390f35b3480156104c357600080fd5b506104de60048036038101906104d991906131c3565b610e39565b6040516104eb9190613c98565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613251565b610e70565b005b34801561052957600080fd5b50610532610e84565b60405161053f9190613c98565b60405180910390f35b34801561055457600080fd5b5061055d610e97565b60405161056a9190614010565b60405180910390f35b34801561057f57600080fd5b50610588610e9d565b6040516105959190613c54565b60405180910390f35b3480156105aa57600080fd5b506105c560048036038101906105c091906130aa565b610ec3565b6040516105d29190613c98565b60405180910390f35b3480156105e757600080fd5b506105f0610f19565b6040516105fd9190613c98565b60405180910390f35b34801561061257600080fd5b5061062d600480360381019061062891906131ff565b610f2c565b005b34801561063b57600080fd5b50610656600480360381019061065191906132a3565b610f51565b005b34801561066457600080fd5b5061066d611030565b60405161067a9190614010565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a591906130aa565b611036565b6040516106b79190614010565b60405180910390f35b3480156106cc57600080fd5b506106d561107e565b005b3480156106e357600080fd5b506106ec611092565b6040516106f99190613c54565b60405180910390f35b34801561070e57600080fd5b50610729600480360381019061072491906131c3565b6110b8565b005b34801561073757600080fd5b506107406110d8565b60405161074d9190614010565b60405180910390f35b34801561076257600080fd5b5061076b6110de565b6040516107789190613c54565b60405180910390f35b34801561078d57600080fd5b50610796611108565b6040516107a39190613cce565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190613187565b61119a565b005b3480156107e157600080fd5b506107fc60048036038101906107f79190613251565b611241565b005b34801561080a57600080fd5b50610813611253565b6040516108209190614010565b60405180910390f35b34801561083557600080fd5b50610850600480360381019061084b9190613187565b611259565b005b34801561085e57600080fd5b50610879600480360381019061087491906131c3565b6112bc565b6040516108869190613c98565b60405180910390f35b34801561089b57600080fd5b506108b660048036038101906108b191906131c3565b611333565b6040516108c39190613c98565b60405180910390f35b3480156108d857600080fd5b506108f360048036038101906108ee91906130aa565b611356565b6040516109009190613c98565b60405180910390f35b34801561091557600080fd5b50610930600480360381019061092b9190613251565b611376565b005b34801561093e57600080fd5b50610959600480360381019061095491906130aa565b611395565b6040516109669190613c98565b60405180910390f35b34801561097b57600080fd5b50610996600480360381019061099191906130aa565b6113b5565b005b3480156109a457600080fd5b506109bf60048036038101906109ba91906130aa565b6114eb565b6040516109cc9190614010565b60405180910390f35b3480156109e157600080fd5b506109fc60048036038101906109f79190613251565b611503565b005b348015610a0a57600080fd5b50610a13611515565b005b348015610a2157600080fd5b50610a3c6004803603810190610a3791906130fc565b611590565b604051610a499190614010565b60405180910390f35b348015610a5e57600080fd5b50610a67611617565b604051610a749190614010565b60405180910390f35b348015610a8957600080fd5b50610aa46004803603810190610a9f91906130fc565b61161d565b604051610ab19190613c98565b60405180910390f35b348015610ac657600080fd5b50610ae16004803603810190610adc91906130aa565b611706565b005b348015610aef57600080fd5b50610af8611839565b005b348015610b0657600080fd5b50610b216004803603810190610b1c9190613251565b61185e565b005b348015610b2f57600080fd5b50610b4a6004803603810190610b4591906130aa565b611870565b005b348015610b5857600080fd5b50610b736004803603810190610b6e91906130aa565b6118f4565b005b600b60009054906101000a900460ff1681565b606060038054610b97906142fc565b80601f0160208091040260200160405190810160405280929190818152602001828054610bc3906142fc565b8015610c105780601f10610be557610100808354040283529160200191610c10565b820191906000526020600020905b815481529060010190602001808311610bf357829003601f168201915b5050505050905090565b600080610c25611b12565b9050610c32818585611b1a565b600191505092915050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c6b611ce5565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee90613ed0565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600254905090565b610d64611ce5565b60018111610da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9e90613f50565b60405180910390fd5b600a811115610deb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de290613e70565b60405180910390fd5b8060078190555050565b600080610e00611b12565b9050610e0d858285611d63565b610e18858585611def565b60019150509392505050565b600e5481565b60006012905090565b60125481565b600080610e44611b12565b9050610e65818585610e568589611590565b610e609190614129565b611b1a565b600191505092915050565b610e81610e7b611b12565b82612374565b50565b601060009054906101000a900460ff1681565b600f5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b601360009054906101000a900460ff1681565b610f34611ce5565b80601360006101000a81548160ff02191690831515021790555050565b610f59611ce5565b6012821115610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490613ff0565b60405180910390fd5b6012811115610fe1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd890613ff0565b60405180910390fd5b81600e8190555080600f819055507f5c6323bf1c2d7aaea2c091a4751c1c87af7f2864650c336507a77d0557af37a1600e54600f54604051611024929190614085565b60405180910390a15050565b60145481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611086611ce5565b611090600061254b565b565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110ca826110c4611b12565b83611d63565b6110d48282612374565b5050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611117906142fc565b80601f0160208091040260200160405190810160405280929190818152602001828054611143906142fc565b80156111905780601f1061116557610100808354040283529160200191611190565b820191906000526020600020905b81548152906001019060200180831161117357829003601f168201915b5050505050905090565b6111a2611ce5565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611233576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122a90613e10565b60405180910390fd5b61123d8282612611565b5050565b611249611ce5565b8060128190555050565b60075481565b611261611ce5565b80601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000806112c7611b12565b905060006112d58286611590565b90508381101561131a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131190613fd0565b60405180910390fd5b6113278286868403611b1a565b60019250505092915050565b60008061133e611b12565b905061134b818585611def565b600191505092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b61137e611ce5565b6000811161138b57600080fd5b80600a8190555050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6113bd611ce5565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590613fb0565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fa964ba5c52d7e7bfcae4fb1ae4db9f211756d0e618e85fac5283b882a39e7a0b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516114e09190613c54565b60405180910390a150565b60166020528060005260406000206000915090505481565b61150b611ce5565b8060148190555050565b61151d611ce5565b60001515600b60009054906101000a900460ff16151514611573576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156a90613df0565b60405180910390fd5b6001600b60006101000a81548160ff021916908315150217905550565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600a5481565b60006116276110de565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061169257506116636110de565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116c857503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b806116fe57503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b905092915050565b61170e611ce5565b600c60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561179b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179290613e30565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508073ffffffffffffffffffffffffffffffffffffffff167f57a00f76b5f242fb1e04b0b514a6974665a5b07bce45e39f36dabff4a042d93660405160405180910390a250565b611841611ce5565b6001601060006101000a81548160ff021916908315150217905550565b611866611ce5565b8060118190555050565b611878611ce5565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118df90613d50565b60405180910390fd5b6118f18161254b565b50565b6118fc611ce5565b3073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561196b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196290613f70565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119ec573373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156119e6573d6000803e3d6000fd5b50611b0f565b600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611a2c9190613c54565b60206040518083038186803b158015611a4457600080fd5b505afa158015611a58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7c919061327a565b90508173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611ab9929190613c6f565b602060405180830381600087803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0b9190613228565b5050505b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8190613f90565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf190613d70565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611cd89190614010565b60405180910390a3505050565b611ced611b12565b73ffffffffffffffffffffffffffffffffffffffff16611d0b6110de565b73ffffffffffffffffffffffffffffffffffffffff1614611d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5890613eb0565b60405180910390fd5b565b6000611d6f8484611590565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611de95781811015611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290613db0565b60405180910390fd5b611de88484848403611b1a565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611e5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5690613f30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec690613d10565b60405180910390fd5b600960149054906101000a900460ff16611eef57611eee838383612745565b5b6000600f5490506000600e549050601560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611fa15750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611ff657600b60009054906101000a900460ff16611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90613cf0565b60405180910390fd5b5b600083141561200657505061236f565b6000600960149054906101000a900460ff16159050600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806120bc5750600c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156120c657600090505b60006120d130611036565b90506000600a5482101580156120e75750600082115b801561213d5750600d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156121465750825b90508080156121625750600960149054906101000a900460ff16155b15612215576001600960146101000a81548160ff02191690831515021790555060006121af600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611036565b90506064600754826121c191906141b0565b6121cb919061417f565b8311156121ef576064600754826121e291906141b0565b6121ec919061417f565b92505b6121f8836127e4565b6000600960146101000a81548160ff021916908315150217905550505b82801561226f5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b801561227b5750600084115b156122bb5760006064858861229091906141b0565b61229a919061417f565b905080876122a8919061420a565b96506122b5893083612ae9565b5061235e565b8280156123155750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16145b80156123215750600085115b1561235d5760006064868861233691906141b0565b612340919061417f565b9050808761234e919061420a565b965061235b893083612ae9565b505b5b612369888888612ae9565b50505050505b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156123e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123db90613ef0565b60405180910390fd5b6123f082600083612d6a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d90613d30565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546124cd919061420a565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516125329190614010565b60405180910390a361254683600084612d6f565b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b801515600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156126a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161269b90613d90565b60405180910390fd5b80600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b601060009054906101000a900460ff166127df57612763838361161d565b1580156127ba5750601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156127de576127c98383612d74565b6127d38282612eba565b6127dd8282612f03565b5b5b505050565b6000600267ffffffffffffffff811115612827577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280602002602001820160405280156128555781602001602082028036833780820191505090505b5090503081600081518110612893577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561293557600080fd5b505afa158015612949573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061296d91906130d3565b816001815181106129a7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612a4595949392919061402b565b600060405180830381600087803b158015612a5f57600080fd5b505af1925050508015612a70575060015b612a7957612a7a565b5b6000479050612aab600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612fbb565b7f957ad1fc6d4d41da6d1a8d37303289ef3c4b78e0285ff5df1e12070ef0e629998382604051612adc929190614085565b60405180910390a1505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5090613f30565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612bc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc090613d10565b60405180910390fd5b612bd4838383612d6a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c5190613dd0565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ced9190614129565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612d519190614010565b60405180910390a3612d64848484612d6f565b50505050565b505050565b505050565b601360009054906101000a900460ff168015612ddd5750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612eb657601454601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205442612e30919061420a565b1015612e71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6890613f10565b60405180910390fd5b42601660003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b601154811115612eff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ef690613e90565b60405180910390fd5b5050565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f5e57612fb7565b60125481612f6b84611036565b612f759190614129565b1115612fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fad90613e50565b60405180910390fd5b5b5050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc82604051612fe290613c3f565b600060405180830381858888f193505050503d8060008114613020576040519150601f19603f3d011682016040523d82523d6000602084013e613025565b606091505b5050505050565b60008135905061303b816143cc565b92915050565b600081519050613050816143cc565b92915050565b600081359050613065816143e3565b92915050565b60008151905061307a816143e3565b92915050565b60008135905061308f816143fa565b92915050565b6000815190506130a4816143fa565b92915050565b6000602082840312156130bc57600080fd5b60006130ca8482850161302c565b91505092915050565b6000602082840312156130e557600080fd5b60006130f384828501613041565b91505092915050565b6000806040838503121561310f57600080fd5b600061311d8582860161302c565b925050602061312e8582860161302c565b9150509250929050565b60008060006060848603121561314d57600080fd5b600061315b8682870161302c565b935050602061316c8682870161302c565b925050604061317d86828701613080565b9150509250925092565b6000806040838503121561319a57600080fd5b60006131a88582860161302c565b92505060206131b985828601613056565b9150509250929050565b600080604083850312156131d657600080fd5b60006131e48582860161302c565b92505060206131f585828601613080565b9150509250929050565b60006020828403121561321157600080fd5b600061321f84828501613056565b91505092915050565b60006020828403121561323a57600080fd5b60006132488482850161306b565b91505092915050565b60006020828403121561326357600080fd5b600061327184828501613080565b91505092915050565b60006020828403121561328c57600080fd5b600061329a84828501613095565b91505092915050565b600080604083850312156132b657600080fd5b60006132c485828601613080565b92505060206132d585828601613080565b9150509250929050565b60006132eb83836132f7565b60208301905092915050565b6133008161423e565b82525050565b61330f8161423e565b82525050565b6000613320826140d9565b61332a81856140fc565b9350613335836140c9565b8060005b8381101561336657815161334d88826132df565b9750613358836140ef565b925050600181019050613339565b5085935050505092915050565b61337c81614250565b82525050565b61338b81614293565b82525050565b61339a816142b7565b82525050565b60006133ab826140e4565b6133b58185614118565b93506133c58185602086016142c9565b6133ce816143bb565b840191505092915050565b60006133e6601183614118565b91507f5472616465206973206e6f74206f70656e0000000000000000000000000000006000830152602082019050919050565b6000613426602383614118565b91507f45524332303a207472616e7366657220746f20746865207a65726f206164647260008301527f65737300000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b600061348c602283614118565b91507f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008301527f63650000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006134f2602683614118565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613558602283614118565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006135be603883614118565b91507f4175746f6d61746564206d61726b6574206d616b65722070616972206973206160008301527f6c72656164792073657420746f20746861742076616c756500000000000000006020830152604082019050919050565b6000613624601d83614118565b91507f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006000830152602082019050919050565b6000613664602683614118565b91507f45524332303a207472616e7366657220616d6f756e742065786365656473206260008301527f616c616e636500000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006136ca601883614118565b91507f54726164696e6720697320616c7265616479206f70656e2100000000000000006000830152602082019050919050565b600061370a604183614118565b91507f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660008301527f65642066726f6d206175746f6d617465644d61726b65744d616b65725061697260208301527f73000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000613796602483614118565b91507f4163636f756e7420697320616c7265616479207468652076616c7565206f662060008301527f74727565000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006137fc601883614118565b91507f4d617820686f6c64696e67206578636565646564206d617800000000000000006000830152602082019050919050565b600061383c600883614118565b91507f746f6f20686967680000000000000000000000000000000000000000000000006000830152602082019050919050565b600061387c601283614118565b91507f416d6f756e742065786365656473206d617800000000000000000000000000006000830152602082019050919050565b60006138bc602083614118565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b60006138fc601883614118565b91507f4163636f756e7420616c726561647920696e636c7564656400000000000000006000830152602082019050919050565b600061393c602183614118565b91507f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008301527f73000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006139a2600c83614118565b91507f62757920636f6f6c646f776e00000000000000000000000000000000000000006000830152602082019050919050565b60006139e2602583614118565b91507f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008301527f64726573730000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613a48600783614118565b91507f746f6f206c6f77000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000613a88602083614118565b91507f4f776e65722063616e6e6f7420636c61696d206e617469766520746f6b656e736000830152602082019050919050565b6000613ac860008361410d565b9150600082019050919050565b6000613ae2602483614118565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613b48600b83614118565b91507f73616d652077616c6c65740000000000000000000000000000000000000000006000830152602082019050919050565b6000613b88602583614118565b91507f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008301527f207a65726f0000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000613bee601a83614118565b91507f46656573206d757374206265206c657373207468616e203130250000000000006000830152602082019050919050565b613c2a8161427c565b82525050565b613c3981614286565b82525050565b6000613c4a82613abb565b9150819050919050565b6000602082019050613c696000830184613306565b92915050565b6000604082019050613c846000830185613306565b613c916020830184613c21565b9392505050565b6000602082019050613cad6000830184613373565b92915050565b6000602082019050613cc86000830184613382565b92915050565b60006020820190508181036000830152613ce881846133a0565b905092915050565b60006020820190508181036000830152613d09816133d9565b9050919050565b60006020820190508181036000830152613d2981613419565b9050919050565b60006020820190508181036000830152613d498161347f565b9050919050565b60006020820190508181036000830152613d69816134e5565b9050919050565b60006020820190508181036000830152613d898161354b565b9050919050565b60006020820190508181036000830152613da9816135b1565b9050919050565b60006020820190508181036000830152613dc981613617565b9050919050565b60006020820190508181036000830152613de981613657565b9050919050565b60006020820190508181036000830152613e09816136bd565b9050919050565b60006020820190508181036000830152613e29816136fd565b9050919050565b60006020820190508181036000830152613e4981613789565b9050919050565b60006020820190508181036000830152613e69816137ef565b9050919050565b60006020820190508181036000830152613e898161382f565b9050919050565b60006020820190508181036000830152613ea98161386f565b9050919050565b60006020820190508181036000830152613ec9816138af565b9050919050565b60006020820190508181036000830152613ee9816138ef565b9050919050565b60006020820190508181036000830152613f098161392f565b9050919050565b60006020820190508181036000830152613f2981613995565b9050919050565b60006020820190508181036000830152613f49816139d5565b9050919050565b60006020820190508181036000830152613f6981613a3b565b9050919050565b60006020820190508181036000830152613f8981613a7b565b9050919050565b60006020820190508181036000830152613fa981613ad5565b9050919050565b60006020820190508181036000830152613fc981613b3b565b9050919050565b60006020820190508181036000830152613fe981613b7b565b9050919050565b6000602082019050818103600083015261400981613be1565b9050919050565b60006020820190506140256000830184613c21565b92915050565b600060a0820190506140406000830188613c21565b61404d6020830187613391565b818103604083015261405f8186613315565b905061406e6060830185613306565b61407b6080830184613c21565b9695505050505050565b600060408201905061409a6000830185613c21565b6140a76020830184613c21565b9392505050565b60006020820190506140c36000830184613c30565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006141348261427c565b915061413f8361427c565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141745761417361432e565b5b828201905092915050565b600061418a8261427c565b91506141958361427c565b9250826141a5576141a461435d565b5b828204905092915050565b60006141bb8261427c565b91506141c68361427c565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156141ff576141fe61432e565b5b828202905092915050565b60006142158261427c565b91506142208361427c565b9250828210156142335761423261432e565b5b828203905092915050565b60006142498261425c565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061429e826142a5565b9050919050565b60006142b08261425c565b9050919050565b60006142c28261427c565b9050919050565b60005b838110156142e75780820151818401526020810190506142cc565b838111156142f6576000848401525b50505050565b6000600282049050600182168061431457607f821691505b602082108114156143285761432761438c565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b6143d58161423e565b81146143e057600080fd5b50565b6143ec81614250565b81146143f757600080fd5b50565b6144038161427c565b811461440e57600080fd5b5056fea2646970667358221220946115f29c43b5e97c758c0d9124bfe4d266b341d8777451851453e0140fae9664736f6c63430008000033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000006adc33eb9b39594b84e4248f5123c4f6d533d283

-----Decoded View---------------
Arg [0] : operator (address): 0x6ADc33EB9b39594B84E4248f5123C4F6D533D283

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000006adc33eb9b39594b84e4248f5123c4f6d533d283


Deployed Bytecode Sourcemap

27255:9962:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27764:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3845:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6168:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27446:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31459:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4953:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34952:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6945:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28343:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4799:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28492:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7645:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14929:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28406:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28372:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27494:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31657:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28524:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36988:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31791:311;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28568:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5120:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17202:103;;;;;;;;;;;;;:::i;:::-;;27367:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15335:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28459:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16562:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4060:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30623:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36763:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27404:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36877:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8382:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5449:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28606:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34793:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27860:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32110:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28653:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37104:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29874:150;;;;;;;;;;;;;:::i;:::-;;5701:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27724:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36307:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31205:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36513:122;;;;;;;;;;;;;:::i;:::-;;36643:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17456:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30032:441;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27764:28;;;;;;;;;;;;;:::o;3845:100::-;3899:13;3932:5;3925:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3845:100;:::o;6168:201::-;6251:4;6268:13;6284:12;:10;:12::i;:::-;6268:28;;6307:32;6316:5;6323:7;6332:6;6307:8;:32::i;:::-;6357:4;6350:11;;;6168:201;;;;:::o;27446:41::-;;;;;;;;;;;;;:::o;31459:190::-;16452:13;:11;:13::i;:::-;31537:19:::1;:28;31557:7;31537:28;;;;;;;;;;;;;;;;;;;;;;;;;31529:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31636:5;31605:19;:28;31625:7;31605:28;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31459:190:::0;:::o;4953:108::-;5014:7;5041:12;;5034:19;;4953:108;:::o;34952:205::-;16452:13;:11;:13::i;:::-;35050:1:::1;35038:9;:13;35030:33;;;;;;;;;;;;:::i;:::-;;;;;;;;;35095:2;35082:9;:15;;35074:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;35140:9;35121:16;:28;;;;34952:205:::0;:::o;6945:295::-;7076:4;7093:15;7111:12;:10;:12::i;:::-;7093:30;;7134:38;7150:4;7156:7;7165:6;7134:15;:38::i;:::-;7183:27;7193:4;7199:2;7203:6;7183:9;:27::i;:::-;7228:4;7221:11;;;6945:295;;;;;:::o;28343:22::-;;;;:::o;4799:93::-;4857:5;4882:2;4875:9;;4799:93;:::o;28492:25::-;;;;:::o;7645:238::-;7733:4;7750:13;7766:12;:10;:12::i;:::-;7750:28;;7789:64;7798:5;7805:7;7842:10;7814:25;7824:5;7831:7;7814:9;:25::i;:::-;:38;;;;:::i;:::-;7789:8;:64::i;:::-;7871:4;7864:11;;;7645:238;;;;:::o;14929:91::-;14985:27;14991:12;:10;:12::i;:::-;15005:6;14985:5;:27::i;:::-;14929:91;:::o;28406:46::-;;;;;;;;;;;;;:::o;28372:21::-;;;;:::o;27494:29::-;;;;;;;;;;;;;:::o;31657:126::-;31723:4;31747:19;:28;31767:7;31747:28;;;;;;;;;;;;;;;;;;;;;;;;;31740:35;;31657:126;;;:::o;28524:37::-;;;;;;;;;;;;;:::o;36988:108::-;16452:13;:11;:13::i;:::-;37082:6:::1;37061:18;;:27;;;;;;;;;;;;;;;;;;36988:108:::0;:::o;31791:311::-;16452:13;:11;:13::i;:::-;31896:2:::1;31884:8;:14;;31876:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;31959:2;31948:7;:13;;31940:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;32013:8;32003:7;:18;;;;32041:7;32032:6;:16;;;;32066:28;32078:7;;32087:6;;32066:28;;;;;;;:::i;:::-;;;;;;;;31791:311:::0;;:::o;28568:31::-;;;;:::o;5120:127::-;5194:7;5221:9;:18;5231:7;5221:18;;;;;;;;;;;;;;;;5214:25;;5120:127;;;:::o;17202:103::-;16452:13;:11;:13::i;:::-;17267:30:::1;17294:1;17267:18;:30::i;:::-;17202:103::o:0;27367:30::-;;;;;;;;;;;;;:::o;15335:164::-;15412:46;15428:7;15437:12;:10;:12::i;:::-;15451:6;15412:15;:46::i;:::-;15469:22;15475:7;15484:6;15469:5;:22::i;:::-;15335:164;;:::o;28459:26::-;;;;:::o;16562:87::-;16608:7;16635:6;;;;;;;;;;;16628:13;;16562:87;:::o;4060:104::-;4116:13;4149:7;4142:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4060:104;:::o;30623:252::-;16452:13;:11;:13::i;:::-;30730::::1;;;;;;;;;;;30722:21;;:4;:21;;;;30714:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;30826:41;30855:4;30861:5;30826:28;:41::i;:::-;30623:252:::0;;:::o;36763:106::-;16452:13;:11;:13::i;:::-;36850:11:::1;36837:10;:24;;;;36763:106:::0;:::o;27404:35::-;;;;:::o;36877:103::-;16452:13;:11;:13::i;:::-;36966:6:::1;36950:8;:13;36959:3;36950:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;36877:103:::0;;:::o;8382:436::-;8475:4;8492:13;8508:12;:10;:12::i;:::-;8492:28;;8531:24;8558:25;8568:5;8575:7;8558:9;:25::i;:::-;8531:52;;8622:15;8602:16;:35;;8594:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8715:60;8724:5;8731:7;8759:15;8740:16;:34;8715:8;:60::i;:::-;8806:4;8799:11;;;;8382:436;;;;:::o;5449:193::-;5528:4;5545:13;5561:12;:10;:12::i;:::-;5545:28;;5584;5594:5;5601:2;5605:6;5584:9;:28::i;:::-;5630:4;5623:11;;;5449:193;;;;:::o;28606:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;34793:151::-;16452:13;:11;:13::i;:::-;34893:1:::1;34881:9;:13;34873:22;;;::::0;::::1;;34927:9;34906:18;:30;;;;34793:151:::0;:::o;27860:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32110:254::-;16452:13;:11;:13::i;:::-;32225:15:::1;;;;;;;;;;;32205:35;;:16;:35;;;;32197:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;32285:16;32267:15;;:34;;;;;;;;;;;;;;;;;;32317:39;32340:15;;;;;;;;;;;32317:39;;;;;;:::i;:::-;;;;;;;;32110:254:::0;:::o;28653:42::-;;;;;;;;;;;;;;;;;:::o;37104:110::-;16452:13;:11;:13::i;:::-;37194:12:::1;37180:11;:26;;;;37104:110:::0;:::o;29874:150::-;16452:13;:11;:13::i;:::-;29948:5:::1;29928:25;;:16;;;;;;;;;;;:25;;;29920:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;30012:4;29993:16;;:23;;;;;;;;;;;;;;;;;;29874:150::o:0;5701:151::-;5790:7;5817:11;:18;5829:5;5817:18;;;;;;;;;;;;;;;:27;5836:7;5817:27;;;;;;;;;;;;;;;;5810:34;;5701:151;;;;:::o;27724:33::-;;;;:::o;36307:198::-;36382:4;36424:7;:5;:7::i;:::-;36416:15;;:4;:15;;;:32;;;;36441:7;:5;:7::i;:::-;36435:13;;:2;:13;;;36416:32;:57;;;;36468:4;36452:21;;:4;:21;;;36416:57;:80;;;;36491:4;36477:19;;:2;:19;;;36416:80;36408:89;;36307:198;;;;:::o;31205:246::-;16452:13;:11;:13::i;:::-;31286:19:::1;:28;31306:7;31286:28;;;;;;;;;;;;;;;;;;;;;;;;;31285:29;31277:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;31397:4;31366:19;:28;31386:7;31366:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31435:7;31419:24;;;;;;;;;;;;31205:246:::0;:::o;36513:122::-;16452:13;:11;:13::i;:::-;36623:4:::1;36586:34;;:41;;;;;;;;;;;;;;;;;;36513:122::o:0;36643:110::-;16452:13;:11;:13::i;:::-;36733:12:::1;36719:11;:26;;;;36643:110:::0;:::o;17456:201::-;16452:13;:11;:13::i;:::-;17565:1:::1;17545:22;;:8;:22;;;;17537:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;17621:28;17640:8;17621:18;:28::i;:::-;17456:201:::0;:::o;30032:441::-;16452:13;:11;:13::i;:::-;30128:4:::1;30111:22;;:5;:22;;;;30103:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30202:3;30185:21;;:5;:21;;;30181:126;;;30231:10;30223:28;;:51;30252:21;30223:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;30289:7;;30181:126;30317:17;30344:5;30317:33;;30361:15;30379:10;:20;;;30408:4;30379:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30361:53;;30425:10;:19;;;30445:10;30457:7;30425:40;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16476:1;;;30032:441:::0;:::o;3167:98::-;3220:7;3247:10;3240:17;;3167:98;:::o;11991:380::-;12144:1;12127:19;;:5;:19;;;;12119:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12225:1;12206:21;;:7;:21;;;;12198:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12309:6;12279:11;:18;12291:5;12279:18;;;;;;;;;;;;;;;:27;12298:7;12279:27;;;;;;;;;;;;;;;:36;;;;12347:7;12331:32;;12340:5;12331:32;;;12356:6;12331:32;;;;;;:::i;:::-;;;;;;;;11991:380;;;:::o;16723:132::-;16798:12;:10;:12::i;:::-;16787:23;;:7;:5;:7::i;:::-;:23;;;16779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16723:132::o;12658:453::-;12793:24;12820:25;12830:5;12837:7;12820:9;:25::i;:::-;12793:52;;12880:17;12860:16;:37;12856:248;;12942:6;12922:16;:26;;12914:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13026:51;13035:5;13042:7;13070:6;13051:16;:25;13026:8;:51::i;:::-;12856:248;12658:453;;;;:::o;32372:1800::-;32520:1;32504:18;;:4;:18;;;;32496:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32597:1;32583:16;;:2;:16;;;;32575:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32657:8;;;;;;;;;;;32652:66;;32682:24;32689:4;32695:2;32699:6;32682;:24::i;:::-;32652:66;32730:12;32745:6;;32730:21;;32762:13;32778:7;;32762:23;;32803:8;:14;32812:4;32803:14;;;;;;;;;;;;;;;;;;;;;;;;;32802:15;:32;;;;;32822:8;:12;32831:2;32822:12;;;;;;;;;;;;;;;;;;;;;;;;;32821:13;32802:32;32798:111;;;32859:16;;;;;;;;;;;32851:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;32798:111;32935:1;32925:6;:11;32921:50;;;32953:7;;;;32921:50;32983:12;32999:8;;;;;;;;;;;32998:9;32983:24;;33024:19;:25;33044:4;33024:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33053:19;:23;33073:2;33053:23;;;;;;;;;;;;;;;;;;;;;;;;;33024:52;33020:100;;;33103:5;33093:15;;33020:100;33132:14;33149:24;33167:4;33149:9;:24::i;:::-;33132:41;;33186:12;33211:18;;33201:6;:28;;:42;;;;;33242:1;33233:6;:10;33201:42;:78;;;;;33248:25;:31;33274:4;33248:31;;;;;;;;;;;;;;;;;;;;;;;;;33247:32;33201:78;:89;;;;;33283:7;33201:89;33186:104;;33305:7;:33;;;;;33330:8;;;;;;;;;;;33329:9;33305:33;33301:361;;;33366:4;33355:8;;:15;;;;;;;;;;;;;;;;;;33385:19;33407:24;33417:13;;;;;;;;;;;33407:9;:24::i;:::-;33385:46;;33492:3;33473:16;;33459:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;33450:6;:45;33446:131;;;33558:3;33539:16;;33525:11;:30;;;;:::i;:::-;:36;;;;:::i;:::-;33516:45;;33446:131;33591:28;33612:6;33591:20;:28::i;:::-;33645:5;33634:8;;:16;;;;;;;;;;;;;;;;;;33301:361;;33678:7;:30;;;;;33695:13;;;;;;;;;;;33689:19;;:2;:19;;;33678:30;:46;;;;;33723:1;33712:8;:12;33678:46;33674:445;;;33741:12;33778:3;33766:8;33757:6;:17;;;;:::i;:::-;33756:25;;;;:::i;:::-;33741:40;;33814:4;33805:6;:13;;;;:::i;:::-;33796:22;;33835:42;33851:4;33865;33872;33835:15;:42::i;:::-;33674:445;;;;33908:7;:32;;;;;33927:13;;;;;;;;;;;33919:21;;:4;:21;;;33908:32;:47;;;;;33954:1;33944:7;:11;33908:47;33904:215;;;33972:12;34008:3;33997:7;33988:6;:16;;;;:::i;:::-;33987:24;;;;:::i;:::-;33972:39;;34044:4;34035:6;:13;;;;:::i;:::-;34026:22;;34065:42;34081:4;34095;34102;34065:15;:42::i;:::-;33904:215;;33674:445;34131:33;34147:4;34153:2;34157:6;34131:15;:33::i;:::-;32372:1800;;;;;;;;;:::o;10966:591::-;11069:1;11050:21;;:7;:21;;;;11042:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;11122:49;11143:7;11160:1;11164:6;11122:20;:49::i;:::-;11184:22;11209:9;:18;11219:7;11209:18;;;;;;;;;;;;;;;;11184:43;;11264:6;11246:14;:24;;11238:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11383:6;11366:14;:23;11345:9;:18;11355:7;11345:18;;;;;;;;;;;;;;;:44;;;;11427:6;11411:12;;:22;;;;;;;:::i;:::-;;;;;;;;11477:1;11451:37;;11460:7;11451:37;;;11481:6;11451:37;;;;;;:::i;:::-;;;;;;;;11501:48;11521:7;11538:1;11542:6;11501:19;:48::i;:::-;10966:591;;;:::o;17813:191::-;17887:16;17906:6;;;;;;;;;;;17887:25;;17932:8;17923:6;;:17;;;;;;;;;;;;;;;;;;17987:8;17956:40;;17977:8;17956:40;;;;;;;;;;;;17813:191;;:::o;30883:308::-;31009:5;30974:40;;:25;:31;31000:4;30974:31;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;30966:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;31120:5;31086:25;:31;31112:4;31086:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;31177:5;31143:40;;31171:4;31143:40;;;;;;;;;;;;30883:308;;:::o;35165:446::-;35292:34;;;;;;;;;;;35287:315;;35362:28;35381:4;35387:2;35362:18;:28::i;:::-;35361:29;:46;;;;;35395:8;:12;35404:2;35395:12;;;;;;;;;;;;;;;;;;;;;;;;;35394:13;35361:46;35357:234;;;35430:27;35448:4;35454:2;35430:17;:27::i;:::-;35476:29;35494:2;35498:6;35476:17;:29::i;:::-;35542:33;35564:2;35568:6;35542:21;:33::i;:::-;35357:234;35287:315;35165:446;;;:::o;34180:605::-;34252:21;34290:1;34276:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34252:40;;34321:4;34303;34308:1;34303:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;34347:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34337:4;34342:1;34337:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;34386:15;;;;;;;;;;;:66;;;34467:11;34493:1;34510:4;34537;34557:15;34386:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34382:222;;;;;;34616:18;34637:21;34616:42;;34669:45;34685:15;;;;;;;;;;;34703:10;34669:7;:45::i;:::-;34732;34753:11;34766:10;34732:45;;;;;;;:::i;:::-;;;;;;;;34180:605;;;:::o;9284:671::-;9431:1;9415:18;;:4;:18;;;;9407:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9508:1;9494:16;;:2;:16;;;;9486:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;9563:38;9584:4;9590:2;9594:6;9563:20;:38::i;:::-;9614:19;9636:9;:15;9646:4;9636:15;;;;;;;;;;;;;;;;9614:37;;9685:6;9670:11;:21;;9662:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;9802:6;9788:11;:20;9770:9;:15;9780:4;9770:15;;;;;;;;;;;;;;;:38;;;;9847:6;9830:9;:13;9840:2;9830:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;9886:2;9871:26;;9880:4;9871:26;;;9890:6;9871:26;;;;;;:::i;:::-;;;;;;;;9910:37;9930:4;9936:2;9940:6;9910:19;:37::i;:::-;9284:671;;;;:::o;13707:125::-;;;;:::o;14432:124::-;;;;:::o;35619:285::-;35696:18;;;;;;;;;;;:43;;;;;35726:13;;;;;;;;;;;35718:21;;:4;:21;;;35696:43;35692:203;;;35804:11;;35782:7;:18;35790:9;35782:18;;;;;;;;;;;;;;;;35764:15;:36;;;;:::i;:::-;:51;;35756:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35868:15;35847:7;:18;35855:9;35847:18;;;;;;;;;;;;;;;:36;;;;35692:203;35619:285;;:::o;35912:142::-;36010:11;;36000:6;:21;;35992:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;35912:142;;:::o;36062:237::-;36156:13;;;;;;;;;;;36150:19;;:2;:19;;;36146:58;;;36186:7;;36146:58;36250:10;;36240:6;36224:13;36234:2;36224:9;:13::i;:::-;:22;;;;:::i;:::-;:36;;36216:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36062:237;;;:::o;30481:134::-;30561:9;:14;;30582:4;30596:6;30561:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30481:134;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:137::-;;525:6;519:13;510:22;;541:30;565:5;541:30;:::i;:::-;500:77;;;;:::o;583:139::-;;667:6;654:20;645:29;;683:33;710:5;683:33;:::i;:::-;635:87;;;;:::o;728:143::-;;816:6;810:13;801:22;;832:33;859:5;832:33;:::i;:::-;791:80;;;;:::o;877:262::-;;985:2;973:9;964:7;960:23;956:32;953:2;;;1001:1;998;991:12;953:2;1044:1;1069:53;1114:7;1105:6;1094:9;1090:22;1069:53;:::i;:::-;1059:63;;1015:117;943:196;;;;:::o;1145:284::-;;1264:2;1252:9;1243:7;1239:23;1235:32;1232:2;;;1280:1;1277;1270:12;1232:2;1323:1;1348:64;1404:7;1395:6;1384:9;1380:22;1348:64;:::i;:::-;1338:74;;1294:128;1222:207;;;;:::o;1435:407::-;;;1560:2;1548:9;1539:7;1535:23;1531:32;1528:2;;;1576:1;1573;1566:12;1528:2;1619:1;1644:53;1689:7;1680:6;1669:9;1665:22;1644:53;:::i;:::-;1634:63;;1590:117;1746:2;1772:53;1817:7;1808:6;1797:9;1793:22;1772:53;:::i;:::-;1762:63;;1717:118;1518:324;;;;;:::o;1848:552::-;;;;1990:2;1978:9;1969:7;1965:23;1961:32;1958:2;;;2006:1;2003;1996:12;1958:2;2049:1;2074:53;2119:7;2110:6;2099:9;2095:22;2074:53;:::i;:::-;2064:63;;2020:117;2176:2;2202:53;2247:7;2238:6;2227:9;2223:22;2202:53;:::i;:::-;2192:63;;2147:118;2304:2;2330:53;2375:7;2366:6;2355:9;2351:22;2330:53;:::i;:::-;2320:63;;2275:118;1948:452;;;;;:::o;2406:401::-;;;2528:2;2516:9;2507:7;2503:23;2499:32;2496:2;;;2544:1;2541;2534:12;2496:2;2587:1;2612:53;2657:7;2648:6;2637:9;2633:22;2612:53;:::i;:::-;2602:63;;2558:117;2714:2;2740:50;2782:7;2773:6;2762:9;2758:22;2740:50;:::i;:::-;2730:60;;2685:115;2486:321;;;;;:::o;2813:407::-;;;2938:2;2926:9;2917:7;2913:23;2909:32;2906:2;;;2954:1;2951;2944:12;2906:2;2997:1;3022:53;3067:7;3058:6;3047:9;3043:22;3022:53;:::i;:::-;3012:63;;2968:117;3124:2;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3095:118;2896:324;;;;;:::o;3226:256::-;;3331:2;3319:9;3310:7;3306:23;3302:32;3299:2;;;3347:1;3344;3337:12;3299:2;3390:1;3415:50;3457:7;3448:6;3437:9;3433:22;3415:50;:::i;:::-;3405:60;;3361:114;3289:193;;;;:::o;3488:278::-;;3604:2;3592:9;3583:7;3579:23;3575:32;3572:2;;;3620:1;3617;3610:12;3572:2;3663:1;3688:61;3741:7;3732:6;3721:9;3717:22;3688:61;:::i;:::-;3678:71;;3634:125;3562:204;;;;:::o;3772:262::-;;3880:2;3868:9;3859:7;3855:23;3851:32;3848:2;;;3896:1;3893;3886:12;3848:2;3939:1;3964:53;4009:7;4000:6;3989:9;3985:22;3964:53;:::i;:::-;3954:63;;3910:117;3838:196;;;;:::o;4040:284::-;;4159:2;4147:9;4138:7;4134:23;4130:32;4127:2;;;4175:1;4172;4165:12;4127:2;4218:1;4243:64;4299:7;4290:6;4279:9;4275:22;4243:64;:::i;:::-;4233:74;;4189:128;4117:207;;;;:::o;4330:407::-;;;4455:2;4443:9;4434:7;4430:23;4426:32;4423:2;;;4471:1;4468;4461:12;4423:2;4514:1;4539:53;4584:7;4575:6;4564:9;4560:22;4539:53;:::i;:::-;4529:63;;4485:117;4641:2;4667:53;4712:7;4703:6;4692:9;4688:22;4667:53;:::i;:::-;4657:63;;4612:118;4413:324;;;;;:::o;4743:179::-;;4833:46;4875:3;4867:6;4833:46;:::i;:::-;4911:4;4906:3;4902:14;4888:28;;4823:99;;;;:::o;4928:108::-;5005:24;5023:5;5005:24;:::i;:::-;5000:3;4993:37;4983:53;;:::o;5042:118::-;5129:24;5147:5;5129:24;:::i;:::-;5124:3;5117:37;5107:53;;:::o;5196:732::-;;5344:54;5392:5;5344:54;:::i;:::-;5414:86;5493:6;5488:3;5414:86;:::i;:::-;5407:93;;5524:56;5574:5;5524:56;:::i;:::-;5603:7;5634:1;5619:284;5644:6;5641:1;5638:13;5619:284;;;5720:6;5714:13;5747:63;5806:3;5791:13;5747:63;:::i;:::-;5740:70;;5833:60;5886:6;5833:60;:::i;:::-;5823:70;;5679:224;5666:1;5663;5659:9;5654:14;;5619:284;;;5623:14;5919:3;5912:10;;5320:608;;;;;;;:::o;5934:109::-;6015:21;6030:5;6015:21;:::i;:::-;6010:3;6003:34;5993:50;;:::o;6049:185::-;6163:64;6221:5;6163:64;:::i;:::-;6158:3;6151:77;6141:93;;:::o;6240:147::-;6335:45;6374:5;6335:45;:::i;:::-;6330:3;6323:58;6313:74;;:::o;6393:364::-;;6509:39;6542:5;6509:39;:::i;:::-;6564:71;6628:6;6623:3;6564:71;:::i;:::-;6557:78;;6644:52;6689:6;6684:3;6677:4;6670:5;6666:16;6644:52;:::i;:::-;6721:29;6743:6;6721:29;:::i;:::-;6716:3;6712:39;6705:46;;6485:272;;;;;:::o;6763:315::-;;6926:67;6990:2;6985:3;6926:67;:::i;:::-;6919:74;;7023:19;7019:1;7014:3;7010:11;7003:40;7069:2;7064:3;7060:12;7053:19;;6909:169;;;:::o;7084:367::-;;7247:67;7311:2;7306:3;7247:67;:::i;:::-;7240:74;;7344:34;7340:1;7335:3;7331:11;7324:55;7410:5;7405:2;7400:3;7396:12;7389:27;7442:2;7437:3;7433:12;7426:19;;7230:221;;;:::o;7457:366::-;;7620:67;7684:2;7679:3;7620:67;:::i;:::-;7613:74;;7717:34;7713:1;7708:3;7704:11;7697:55;7783:4;7778:2;7773:3;7769:12;7762:26;7814:2;7809:3;7805:12;7798:19;;7603:220;;;:::o;7829:370::-;;7992:67;8056:2;8051:3;7992:67;:::i;:::-;7985:74;;8089:34;8085:1;8080:3;8076:11;8069:55;8155:8;8150:2;8145:3;8141:12;8134:30;8190:2;8185:3;8181:12;8174:19;;7975:224;;;:::o;8205:366::-;;8368:67;8432:2;8427:3;8368:67;:::i;:::-;8361:74;;8465:34;8461:1;8456:3;8452:11;8445:55;8531:4;8526:2;8521:3;8517:12;8510:26;8562:2;8557:3;8553:12;8546:19;;8351:220;;;:::o;8577:388::-;;8740:67;8804:2;8799:3;8740:67;:::i;:::-;8733:74;;8837:34;8833:1;8828:3;8824:11;8817:55;8903:26;8898:2;8893:3;8889:12;8882:48;8956:2;8951:3;8947:12;8940:19;;8723:242;;;:::o;8971:327::-;;9134:67;9198:2;9193:3;9134:67;:::i;:::-;9127:74;;9231:31;9227:1;9222:3;9218:11;9211:52;9289:2;9284:3;9280:12;9273:19;;9117:181;;;:::o;9304:370::-;;9467:67;9531:2;9526:3;9467:67;:::i;:::-;9460:74;;9564:34;9560:1;9555:3;9551:11;9544:55;9630:8;9625:2;9620:3;9616:12;9609:30;9665:2;9660:3;9656:12;9649:19;;9450:224;;;:::o;9680:322::-;;9843:67;9907:2;9902:3;9843:67;:::i;:::-;9836:74;;9940:26;9936:1;9931:3;9927:11;9920:47;9993:2;9988:3;9984:12;9977:19;;9826:176;;;:::o;10008:431::-;;10171:67;10235:2;10230:3;10171:67;:::i;:::-;10164:74;;10268:34;10264:1;10259:3;10255:11;10248:55;10334:34;10329:2;10324:3;10320:12;10313:56;10400:3;10395:2;10390:3;10386:12;10379:25;10430:2;10425:3;10421:12;10414:19;;10154:285;;;:::o;10445:368::-;;10608:67;10672:2;10667:3;10608:67;:::i;:::-;10601:74;;10705:34;10701:1;10696:3;10692:11;10685:55;10771:6;10766:2;10761:3;10757:12;10750:28;10804:2;10799:3;10795:12;10788:19;;10591:222;;;:::o;10819:322::-;;10982:67;11046:2;11041:3;10982:67;:::i;:::-;10975:74;;11079:26;11075:1;11070:3;11066:11;11059:47;11132:2;11127:3;11123:12;11116:19;;10965:176;;;:::o;11147:305::-;;11310:66;11374:1;11369:3;11310:66;:::i;:::-;11303:73;;11406:10;11402:1;11397:3;11393:11;11386:31;11443:2;11438:3;11434:12;11427:19;;11293:159;;;:::o;11458:316::-;;11621:67;11685:2;11680:3;11621:67;:::i;:::-;11614:74;;11718:20;11714:1;11709:3;11705:11;11698:41;11765:2;11760:3;11756:12;11749:19;;11604:170;;;:::o;11780:330::-;;11943:67;12007:2;12002:3;11943:67;:::i;:::-;11936:74;;12040:34;12036:1;12031:3;12027:11;12020:55;12101:2;12096:3;12092:12;12085:19;;11926:184;;;:::o;12116:322::-;;12279:67;12343:2;12338:3;12279:67;:::i;:::-;12272:74;;12376:26;12372:1;12367:3;12363:11;12356:47;12429:2;12424:3;12420:12;12413:19;;12262:176;;;:::o;12444:365::-;;12607:67;12671:2;12666:3;12607:67;:::i;:::-;12600:74;;12704:34;12700:1;12695:3;12691:11;12684:55;12770:3;12765:2;12760:3;12756:12;12749:25;12800:2;12795:3;12791:12;12784:19;;12590:219;;;:::o;12815:310::-;;12978:67;13042:2;13037:3;12978:67;:::i;:::-;12971:74;;13075:14;13071:1;13066:3;13062:11;13055:35;13116:2;13111:3;13107:12;13100:19;;12961:164;;;:::o;13131:369::-;;13294:67;13358:2;13353:3;13294:67;:::i;:::-;13287:74;;13391:34;13387:1;13382:3;13378:11;13371:55;13457:7;13452:2;13447:3;13443:12;13436:29;13491:2;13486:3;13482:12;13475:19;;13277:223;;;:::o;13506:304::-;;13669:66;13733:1;13728:3;13669:66;:::i;:::-;13662:73;;13765:9;13761:1;13756:3;13752:11;13745:30;13801:2;13796:3;13792:12;13785:19;;13652:158;;;:::o;13816:330::-;;13979:67;14043:2;14038:3;13979:67;:::i;:::-;13972:74;;14076:34;14072:1;14067:3;14063:11;14056:55;14137:2;14132:3;14128:12;14121:19;;13962:184;;;:::o;14152:297::-;;14332:83;14413:1;14408:3;14332:83;:::i;:::-;14325:90;;14441:1;14436:3;14432:11;14425:18;;14315:134;;;:::o;14455:368::-;;14618:67;14682:2;14677:3;14618:67;:::i;:::-;14611:74;;14715:34;14711:1;14706:3;14702:11;14695:55;14781:6;14776:2;14771:3;14767:12;14760:28;14814:2;14809:3;14805:12;14798:19;;14601:222;;;:::o;14829:309::-;;14992:67;15056:2;15051:3;14992:67;:::i;:::-;14985:74;;15089:13;15085:1;15080:3;15076:11;15069:34;15129:2;15124:3;15120:12;15113:19;;14975:163;;;:::o;15144:369::-;;15307:67;15371:2;15366:3;15307:67;:::i;:::-;15300:74;;15404:34;15400:1;15395:3;15391:11;15384:55;15470:7;15465:2;15460:3;15456:12;15449:29;15504:2;15499:3;15495:12;15488:19;;15290:223;;;:::o;15519:324::-;;15682:67;15746:2;15741:3;15682:67;:::i;:::-;15675:74;;15779:28;15775:1;15770:3;15766:11;15759:49;15834:2;15829:3;15825:12;15818:19;;15665:178;;;:::o;15849:118::-;15936:24;15954:5;15936:24;:::i;:::-;15931:3;15924:37;15914:53;;:::o;15973:112::-;16056:22;16072:5;16056:22;:::i;:::-;16051:3;16044:35;16034:51;;:::o;16091:379::-;;16297:147;16440:3;16297:147;:::i;:::-;16290:154;;16461:3;16454:10;;16279:191;;;:::o;16476:222::-;;16607:2;16596:9;16592:18;16584:26;;16620:71;16688:1;16677:9;16673:17;16664:6;16620:71;:::i;:::-;16574:124;;;;:::o;16704:332::-;;16863:2;16852:9;16848:18;16840:26;;16876:71;16944:1;16933:9;16929:17;16920:6;16876:71;:::i;:::-;16957:72;17025:2;17014:9;17010:18;17001:6;16957:72;:::i;:::-;16830:206;;;;;:::o;17042:210::-;;17167:2;17156:9;17152:18;17144:26;;17180:65;17242:1;17231:9;17227:17;17218:6;17180:65;:::i;:::-;17134:118;;;;:::o;17258:276::-;;17416:2;17405:9;17401:18;17393:26;;17429:98;17524:1;17513:9;17509:17;17500:6;17429:98;:::i;:::-;17383:151;;;;:::o;17540:313::-;;17691:2;17680:9;17676:18;17668:26;;17740:9;17734:4;17730:20;17726:1;17715:9;17711:17;17704:47;17768:78;17841:4;17832:6;17768:78;:::i;:::-;17760:86;;17658:195;;;;:::o;17859:419::-;;18063:2;18052:9;18048:18;18040:26;;18112:9;18106:4;18102:20;18098:1;18087:9;18083:17;18076:47;18140:131;18266:4;18140:131;:::i;:::-;18132:139;;18030:248;;;:::o;18284:419::-;;18488:2;18477:9;18473:18;18465:26;;18537:9;18531:4;18527:20;18523:1;18512:9;18508:17;18501:47;18565:131;18691:4;18565:131;:::i;:::-;18557:139;;18455:248;;;:::o;18709:419::-;;18913:2;18902:9;18898:18;18890:26;;18962:9;18956:4;18952:20;18948:1;18937:9;18933:17;18926:47;18990:131;19116:4;18990:131;:::i;:::-;18982:139;;18880:248;;;:::o;19134:419::-;;19338:2;19327:9;19323:18;19315:26;;19387:9;19381:4;19377:20;19373:1;19362:9;19358:17;19351:47;19415:131;19541:4;19415:131;:::i;:::-;19407:139;;19305:248;;;:::o;19559:419::-;;19763:2;19752:9;19748:18;19740:26;;19812:9;19806:4;19802:20;19798:1;19787:9;19783:17;19776:47;19840:131;19966:4;19840:131;:::i;:::-;19832:139;;19730:248;;;:::o;19984:419::-;;20188:2;20177:9;20173:18;20165:26;;20237:9;20231:4;20227:20;20223:1;20212:9;20208:17;20201:47;20265:131;20391:4;20265:131;:::i;:::-;20257:139;;20155:248;;;:::o;20409:419::-;;20613:2;20602:9;20598:18;20590:26;;20662:9;20656:4;20652:20;20648:1;20637:9;20633:17;20626:47;20690:131;20816:4;20690:131;:::i;:::-;20682:139;;20580:248;;;:::o;20834:419::-;;21038:2;21027:9;21023:18;21015:26;;21087:9;21081:4;21077:20;21073:1;21062:9;21058:17;21051:47;21115:131;21241:4;21115:131;:::i;:::-;21107:139;;21005:248;;;:::o;21259:419::-;;21463:2;21452:9;21448:18;21440:26;;21512:9;21506:4;21502:20;21498:1;21487:9;21483:17;21476:47;21540:131;21666:4;21540:131;:::i;:::-;21532:139;;21430:248;;;:::o;21684:419::-;;21888:2;21877:9;21873:18;21865:26;;21937:9;21931:4;21927:20;21923:1;21912:9;21908:17;21901:47;21965:131;22091:4;21965:131;:::i;:::-;21957:139;;21855:248;;;:::o;22109:419::-;;22313:2;22302:9;22298:18;22290:26;;22362:9;22356:4;22352:20;22348:1;22337:9;22333:17;22326:47;22390:131;22516:4;22390:131;:::i;:::-;22382:139;;22280:248;;;:::o;22534:419::-;;22738:2;22727:9;22723:18;22715:26;;22787:9;22781:4;22777:20;22773:1;22762:9;22758:17;22751:47;22815:131;22941:4;22815:131;:::i;:::-;22807:139;;22705:248;;;:::o;22959:419::-;;23163:2;23152:9;23148:18;23140:26;;23212:9;23206:4;23202:20;23198:1;23187:9;23183:17;23176:47;23240:131;23366:4;23240:131;:::i;:::-;23232:139;;23130:248;;;:::o;23384:419::-;;23588:2;23577:9;23573:18;23565:26;;23637:9;23631:4;23627:20;23623:1;23612:9;23608:17;23601:47;23665:131;23791:4;23665:131;:::i;:::-;23657:139;;23555:248;;;:::o;23809:419::-;;24013:2;24002:9;23998:18;23990:26;;24062:9;24056:4;24052:20;24048:1;24037:9;24033:17;24026:47;24090:131;24216:4;24090:131;:::i;:::-;24082:139;;23980:248;;;:::o;24234:419::-;;24438:2;24427:9;24423:18;24415:26;;24487:9;24481:4;24477:20;24473:1;24462:9;24458:17;24451:47;24515:131;24641:4;24515:131;:::i;:::-;24507:139;;24405:248;;;:::o;24659:419::-;;24863:2;24852:9;24848:18;24840:26;;24912:9;24906:4;24902:20;24898:1;24887:9;24883:17;24876:47;24940:131;25066:4;24940:131;:::i;:::-;24932:139;;24830:248;;;:::o;25084:419::-;;25288:2;25277:9;25273:18;25265:26;;25337:9;25331:4;25327:20;25323:1;25312:9;25308:17;25301:47;25365:131;25491:4;25365:131;:::i;:::-;25357:139;;25255:248;;;:::o;25509:419::-;;25713:2;25702:9;25698:18;25690:26;;25762:9;25756:4;25752:20;25748:1;25737:9;25733:17;25726:47;25790:131;25916:4;25790:131;:::i;:::-;25782:139;;25680:248;;;:::o;25934:419::-;;26138:2;26127:9;26123:18;26115:26;;26187:9;26181:4;26177:20;26173:1;26162:9;26158:17;26151:47;26215:131;26341:4;26215:131;:::i;:::-;26207:139;;26105:248;;;:::o;26359:419::-;;26563:2;26552:9;26548:18;26540:26;;26612:9;26606:4;26602:20;26598:1;26587:9;26583:17;26576:47;26640:131;26766:4;26640:131;:::i;:::-;26632:139;;26530:248;;;:::o;26784:419::-;;26988:2;26977:9;26973:18;26965:26;;27037:9;27031:4;27027:20;27023:1;27012:9;27008:17;27001:47;27065:131;27191:4;27065:131;:::i;:::-;27057:139;;26955:248;;;:::o;27209:419::-;;27413:2;27402:9;27398:18;27390:26;;27462:9;27456:4;27452:20;27448:1;27437:9;27433:17;27426:47;27490:131;27616:4;27490:131;:::i;:::-;27482:139;;27380:248;;;:::o;27634:419::-;;27838:2;27827:9;27823:18;27815:26;;27887:9;27881:4;27877:20;27873:1;27862:9;27858:17;27851:47;27915:131;28041:4;27915:131;:::i;:::-;27907:139;;27805:248;;;:::o;28059:419::-;;28263:2;28252:9;28248:18;28240:26;;28312:9;28306:4;28302:20;28298:1;28287:9;28283:17;28276:47;28340:131;28466:4;28340:131;:::i;:::-;28332:139;;28230:248;;;:::o;28484:222::-;;28615:2;28604:9;28600:18;28592:26;;28628:71;28696:1;28685:9;28681:17;28672:6;28628:71;:::i;:::-;28582:124;;;;:::o;28712:831::-;;29013:3;29002:9;28998:19;28990:27;;29027:71;29095:1;29084:9;29080:17;29071:6;29027:71;:::i;:::-;29108:80;29184:2;29173:9;29169:18;29160:6;29108:80;:::i;:::-;29235:9;29229:4;29225:20;29220:2;29209:9;29205:18;29198:48;29263:108;29366:4;29357:6;29263:108;:::i;:::-;29255:116;;29381:72;29449:2;29438:9;29434:18;29425:6;29381:72;:::i;:::-;29463:73;29531:3;29520:9;29516:19;29507:6;29463:73;:::i;:::-;28980:563;;;;;;;;:::o;29549:332::-;;29708:2;29697:9;29693:18;29685:26;;29721:71;29789:1;29778:9;29774:17;29765:6;29721:71;:::i;:::-;29802:72;29870:2;29859:9;29855:18;29846:6;29802:72;:::i;:::-;29675:206;;;;;:::o;29887:214::-;;30014:2;30003:9;29999:18;29991:26;;30027:67;30091:1;30080:9;30076:17;30067:6;30027:67;:::i;:::-;29981:120;;;;:::o;30107:132::-;;30197:3;30189:11;;30227:4;30222:3;30218:14;30210:22;;30179:60;;;:::o;30245:114::-;;30346:5;30340:12;30330:22;;30319:40;;;:::o;30365:99::-;;30451:5;30445:12;30435:22;;30424:40;;;:::o;30470:113::-;;30572:4;30567:3;30563:14;30555:22;;30545:38;;;:::o;30589:184::-;;30722:6;30717:3;30710:19;30762:4;30757:3;30753:14;30738:29;;30700:73;;;;:::o;30779:147::-;;30917:3;30902:18;;30892:34;;;;:::o;30932:169::-;;31050:6;31045:3;31038:19;31090:4;31085:3;31081:14;31066:29;;31028:73;;;;:::o;31107:305::-;;31166:20;31184:1;31166:20;:::i;:::-;31161:25;;31200:20;31218:1;31200:20;:::i;:::-;31195:25;;31354:1;31286:66;31282:74;31279:1;31276:81;31273:2;;;31360:18;;:::i;:::-;31273:2;31404:1;31401;31397:9;31390:16;;31151:261;;;;:::o;31418:185::-;;31475:20;31493:1;31475:20;:::i;:::-;31470:25;;31509:20;31527:1;31509:20;:::i;:::-;31504:25;;31548:1;31538:2;;31553:18;;:::i;:::-;31538:2;31595:1;31592;31588:9;31583:14;;31460:143;;;;:::o;31609:348::-;;31672:20;31690:1;31672:20;:::i;:::-;31667:25;;31706:20;31724:1;31706:20;:::i;:::-;31701:25;;31894:1;31826:66;31822:74;31819:1;31816:81;31811:1;31804:9;31797:17;31793:105;31790:2;;;31901:18;;:::i;:::-;31790:2;31949:1;31946;31942:9;31931:20;;31657:300;;;;:::o;31963:191::-;;32023:20;32041:1;32023:20;:::i;:::-;32018:25;;32057:20;32075:1;32057:20;:::i;:::-;32052:25;;32096:1;32093;32090:8;32087:2;;;32101:18;;:::i;:::-;32087:2;32146:1;32143;32139:9;32131:17;;32008:146;;;;:::o;32160:96::-;;32226:24;32244:5;32226:24;:::i;:::-;32215:35;;32205:51;;;:::o;32262:90::-;;32339:5;32332:13;32325:21;32314:32;;32304:48;;;:::o;32358:126::-;;32435:42;32428:5;32424:54;32413:65;;32403:81;;;:::o;32490:77::-;;32556:5;32545:16;;32535:32;;;:::o;32573:86::-;;32648:4;32641:5;32637:16;32626:27;;32616:43;;;:::o;32665:180::-;;32775:64;32833:5;32775:64;:::i;:::-;32762:77;;32752:93;;;:::o;32851:140::-;;32961:24;32979:5;32961:24;:::i;:::-;32948:37;;32938:53;;;:::o;32997:121::-;;33088:24;33106:5;33088:24;:::i;:::-;33075:37;;33065:53;;;:::o;33124:307::-;33192:1;33202:113;33216:6;33213:1;33210:13;33202:113;;;33301:1;33296:3;33292:11;33286:18;33282:1;33277:3;33273:11;33266:39;33238:2;33235:1;33231:10;33226:15;;33202:113;;;33333:6;33330:1;33327:13;33324:2;;;33413:1;33404:6;33399:3;33395:16;33388:27;33324:2;33173:258;;;;:::o;33437:320::-;;33518:1;33512:4;33508:12;33498:22;;33565:1;33559:4;33555:12;33586:18;33576:2;;33642:4;33634:6;33630:17;33620:27;;33576:2;33704;33696:6;33693:14;33673:18;33670:38;33667:2;;;33723:18;;:::i;:::-;33667:2;33488:269;;;;:::o;33763:180::-;33811:77;33808:1;33801:88;33908:4;33905:1;33898:15;33932:4;33929:1;33922:15;33949:180;33997:77;33994:1;33987:88;34094:4;34091:1;34084:15;34118:4;34115:1;34108:15;34135:180;34183:77;34180:1;34173:88;34280:4;34277:1;34270:15;34304:4;34301:1;34294:15;34321:102;;34413:2;34409:7;34404:2;34397:5;34393:14;34389:28;34379:38;;34369:54;;;:::o;34429:122::-;34502:24;34520:5;34502:24;:::i;:::-;34495:5;34492:35;34482:2;;34541:1;34538;34531:12;34482:2;34472:79;:::o;34557:116::-;34627:21;34642:5;34627:21;:::i;:::-;34620:5;34617:32;34607:2;;34663:1;34660;34653:12;34607:2;34597:76;:::o;34679:122::-;34752:24;34770:5;34752:24;:::i;:::-;34745:5;34742:35;34732:2;;34791:1;34788;34781:12;34732:2;34722:79;:::o

Swarm Source

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