ETH Price: $3,427.54 (-1.40%)
Gas: 9 Gwei

Token

Sam Bankman-Jail (SBJ)
 

Overview

Max Total Supply

100,000,000 SBJ

Holders

43

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Uniswap V2: USDC-SBJ
Balance
914,835.491434347566775569 SBJ

Value
$0.00
0x3eeBE4B8AAD935416d01441bF88C6522dC9Eb9b7
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:
SamBankmanJail

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-11-09
*/

/**
 *Submitted for verification at Etherscan.io on 2022-09-28
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.10;
pragma experimental ABIEncoderV2;

////// lib/openzeppelin-contracts/contracts/utils/Context.sol
// OpenZeppelin Contracts v4.4.0 (utils/Context.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * 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://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

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

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

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * 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;
    }

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

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

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

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

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

    /**
     * @dev 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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


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

    /**
     * @dev 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 {}

    /**
     * @dev 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 {}
}

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

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

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

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

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

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

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

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

    bool private swapping;

    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    uint256 public buyTotalFees;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellDevFee;

    /******************/

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


    event ExcludeFromFees(address indexed account, bool isExcluded);

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

    constructor() ERC20("Sam Bankman-Jail", "SBJ") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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


        uint256 _buyDevFee = 4;
        uint256 _sellDevFee = 15;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransactionAmount =  totalSupply * 2 / 100; // 2% from total supply maxTransactionAmountTxn
        maxWallet = totalSupply * 2 / 100; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

        buyDevFee = _buyDevFee;
        buyTotalFees = buyDevFee;

        sellDevFee = _sellDevFee;
        sellTotalFees = sellDevFee;

        devWallet = address(0xFe5a82DbEBa136E48fAE1D8bae385B0AAFFF9e0e); // set as dev wallet

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

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

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

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

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

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

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

    function updateBuyFees(
        uint256 _devFee
    ) external onlyOwner {
        buyDevFee = _devFee;
        buyTotalFees = buyDevFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _devFee
    ) external onlyOwner {
        sellDevFee = _devFee;
        sellTotalFees = sellDevFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }

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

    function updateDevWallet(address newDevWallet)
        external
        onlyOwner
    {
        emit devWalletUpdated(newDevWallet, devWallet);
        devWallet = newDevWallet;
    }


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

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

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        uint256 tokensForDev = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (to == uniswapV2Pair && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForDev = (fees * sellDevFee) / sellTotalFees;
            }
            // on buy
            else if (from == uniswapV2Pair && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForDev = (fees * buyDevFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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

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

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

        // make the swap
        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of USDC
            path,
            devWallet,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) {
            return;
        }

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

        swapTokensForUSDC(contractBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDevWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405273a0b86991c6218b36c1d19d4a2e9eb0ce3606eb48600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff021916908315150217905550348015620000b757600080fd5b506040518060400160405280601081526020017f53616d2042616e6b6d616e2d4a61696c000000000000000000000000000000008152506040518060400160405280600381526020017f53424a000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200013c92919062000980565b5080600490805190602001906200015592919062000980565b505050620001786200016c620004e160201b60201c565b620004e960201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001a4816001620005af60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000224573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200024a919062000a9a565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b8152600401620002a892919062000add565b6020604051808303816000875af1158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000a9a565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033660a0516001620005af60201b60201c565b6000600490506000600f905060006a52b7d2dcc80cd2e40000009050606460028262000363919062000b43565b6200036f919062000bd3565b600881905550606460028262000386919062000b43565b62000392919062000bd3565b600a81905550612710600a82620003aa919062000b43565b620003b6919062000bd3565b60098190555082600d81905550600d54600c8190555081600f81905550600f54600e8190555073fe5a82dbeba136e48fae1d8bae385b0aafff9e0e600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000453620004456200069960201b60201c565b6001620006c360201b60201c565b62000466306001620006c360201b60201c565b6200047b61dead6001620006c360201b60201c565b6200049d6200048f6200069960201b60201c565b6001620005af60201b60201c565b620004b0306001620005af60201b60201c565b620004c561dead6001620005af60201b60201c565b620004d73382620007fd60201b60201c565b5050505062000e2a565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620005bf620004e160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005e56200069960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200063e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006359062000c6c565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620006d3620004e160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006f96200069960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000752576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007499062000c6c565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620007f1919062000cab565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000870576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008679062000d18565b60405180910390fd5b62000884600083836200097660201b60201c565b806002600082825462000898919062000d3a565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620008ef919062000d3a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000956919062000da8565b60405180910390a362000972600083836200097b60201b60201c565b5050565b505050565b505050565b8280546200098e9062000df4565b90600052602060002090601f016020900481019282620009b25760008555620009fe565b82601f10620009cd57805160ff1916838001178555620009fe565b82800160010185558215620009fe579182015b82811115620009fd578251825591602001919060010190620009e0565b5b50905062000a0d919062000a11565b5090565b5b8082111562000a2c57600081600090555060010162000a12565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a628262000a35565b9050919050565b62000a748162000a55565b811462000a8057600080fd5b50565b60008151905062000a948162000a69565b92915050565b60006020828403121562000ab35762000ab262000a30565b5b600062000ac38482850162000a83565b91505092915050565b62000ad78162000a55565b82525050565b600060408201905062000af4600083018562000acc565b62000b03602083018462000acc565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000b508262000b0a565b915062000b5d8362000b0a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000b995762000b9862000b14565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000be08262000b0a565b915062000bed8362000b0a565b92508262000c005762000bff62000ba4565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000c5460208362000c0b565b915062000c618262000c1c565b602082019050919050565b6000602082019050818103600083015262000c878162000c45565b9050919050565b60008115159050919050565b62000ca58162000c8e565b82525050565b600060208201905062000cc2600083018462000c9a565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000d00601f8362000c0b565b915062000d0d8262000cc8565b602082019050919050565b6000602082019050818103600083015262000d338162000cf1565b9050919050565b600062000d478262000b0a565b915062000d548362000b0a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d8c5762000d8b62000b14565b5b828201905092915050565b62000da28162000b0a565b82525050565b600060208201905062000dbf600083018462000d97565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000e0d57607f821691505b6020821081141562000e245762000e2362000dc5565b5b50919050565b60805160a051613b0e62000e7a60003960008181610dab01528181611ed20152818161211b0152818161232401526123d2015260008181610a2b0152818161299701526129be0152613b0e6000f3fe60806040526004361061023f5760003560e01c806389a302711161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610874578063e2f45605146108b1578063eba4c333146108dc578063f2fde38b14610905578063f8b45b051461092e57610246565b8063c02466681461078f578063c18bc195146107b8578063c8c8ebe4146107e1578063d257b34f1461080c578063d85ba0631461084957610246565b806395d89b41116100f257806395d89b41146106a65780639c3b4fdc146106d1578063a0d82dc5146106fc578063a9059cbb14610727578063bbc0c7421461076457610246565b806389a30271146105e55780638a8c523c146106105780638da5cb5b146106275780638ea5220f14610652578063924de9b71461067d57610246565b806349bd5a5e116101bc57806370a082311161018057806370a0823114610514578063715018a61461055157806371fc468814610568578063751039fc146105915780637571336a146105bc57610246565b806349bd5a5e1461042b5780634a62bb65146104565780634fbee193146104815780636a486a8e146104be5780636ddd1713146104e957610246565b80631816467f116102035780631816467f14610346578063203e727e1461036f57806323b872dd1461039857806327c8f835146103d5578063313ce5671461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b35780631694505e146102f057806318160ddd1461031b57610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610959565b60405161026d9190612b0f565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612bca565b6109eb565b6040516102aa9190612c25565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612c40565b610a09565b6040516102e79190612c25565b60405180910390f35b3480156102fc57600080fd5b50610305610a29565b6040516103129190612ccc565b60405180910390f35b34801561032757600080fd5b50610330610a4d565b60405161033d9190612cf6565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612c40565b610a57565b005b34801561037b57600080fd5b5061039660048036038101906103919190612d11565b610b93565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d3e565b610ca2565b6040516103cc9190612c25565b60405180910390f35b3480156103e157600080fd5b506103ea610d9a565b6040516103f79190612da0565b60405180910390f35b34801561040c57600080fd5b50610415610da0565b6040516104229190612dd7565b60405180910390f35b34801561043757600080fd5b50610440610da9565b60405161044d9190612da0565b60405180910390f35b34801561046257600080fd5b5061046b610dcd565b6040516104789190612c25565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190612c40565b610de0565b6040516104b59190612c25565b60405180910390f35b3480156104ca57600080fd5b506104d3610e36565b6040516104e09190612cf6565b60405180910390f35b3480156104f557600080fd5b506104fe610e3c565b60405161050b9190612c25565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190612c40565b610e4f565b6040516105489190612cf6565b60405180910390f35b34801561055d57600080fd5b50610566610e97565b005b34801561057457600080fd5b5061058f600480360381019061058a9190612d11565b610f1f565b005b34801561059d57600080fd5b506105a6610ff4565b6040516105b39190612c25565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de9190612e1e565b611094565b005b3480156105f157600080fd5b506105fa61116b565b6040516106079190612da0565b60405180910390f35b34801561061c57600080fd5b50610625611191565b005b34801561063357600080fd5b5061063c611245565b6040516106499190612da0565b60405180910390f35b34801561065e57600080fd5b5061066761126f565b6040516106749190612da0565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612e5e565b611295565b005b3480156106b257600080fd5b506106bb61132e565b6040516106c89190612b0f565b60405180910390f35b3480156106dd57600080fd5b506106e66113c0565b6040516106f39190612cf6565b60405180910390f35b34801561070857600080fd5b506107116113c6565b60405161071e9190612cf6565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612bca565b6113cc565b60405161075b9190612c25565b60405180910390f35b34801561077057600080fd5b506107796113ea565b6040516107869190612c25565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190612e1e565b6113fd565b005b3480156107c457600080fd5b506107df60048036038101906107da9190612d11565b611522565b005b3480156107ed57600080fd5b506107f6611631565b6040516108039190612cf6565b60405180910390f35b34801561081857600080fd5b50610833600480360381019061082e9190612d11565b611637565b6040516108409190612c25565b60405180910390f35b34801561085557600080fd5b5061085e61178c565b60405161086b9190612cf6565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190612e8b565b611792565b6040516108a89190612cf6565b60405180910390f35b3480156108bd57600080fd5b506108c6611819565b6040516108d39190612cf6565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612d11565b61181f565b005b34801561091157600080fd5b5061092c60048036038101906109279190612c40565b6118f4565b005b34801561093a57600080fd5b506109436119ec565b6040516109509190612cf6565b60405180910390f35b60606003805461096890612efa565b80601f016020809104026020016040519081016040528092919081815260200182805461099490612efa565b80156109e15780601f106109b6576101008083540402835291602001916109e1565b820191906000526020600020905b8154815290600101906020018083116109c457829003601f168201915b5050505050905090565b60006109ff6109f86119f2565b84846119fa565b6001905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610a5f6119f2565b73ffffffffffffffffffffffffffffffffffffffff16610a7d611245565b73ffffffffffffffffffffffffffffffffffffffff1614610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90612f78565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b9b6119f2565b73ffffffffffffffffffffffffffffffffffffffff16610bb9611245565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690612f78565b60405180910390fd5b670de0b6b3a76400006103e86001610c25610a4d565b610c2f9190612fc7565b610c399190613050565b610c439190613050565b811015610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906130f3565b60405180910390fd5b670de0b6b3a764000081610c999190612fc7565b60088190555050565b6000610caf848484611bc5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cfa6119f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613185565b60405180910390fd5b610d8e85610d866119f2565b8584036119fa565b60019150509392505050565b61dead81565b60006012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e9f6119f2565b73ffffffffffffffffffffffffffffffffffffffff16610ebd611245565b73ffffffffffffffffffffffffffffffffffffffff1614610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a90612f78565b60405180910390fd5b610f1d60006124b5565b565b610f276119f2565b73ffffffffffffffffffffffffffffffffffffffff16610f45611245565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290612f78565b60405180910390fd5b80600d81905550600d54600c81905550600a600c541115610ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe8906131f1565b60405180910390fd5b50565b6000610ffe6119f2565b73ffffffffffffffffffffffffffffffffffffffff1661101c611245565b73ffffffffffffffffffffffffffffffffffffffff1614611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990612f78565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61109c6119f2565b73ffffffffffffffffffffffffffffffffffffffff166110ba611245565b73ffffffffffffffffffffffffffffffffffffffff1614611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790612f78565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111996119f2565b73ffffffffffffffffffffffffffffffffffffffff166111b7611245565b73ffffffffffffffffffffffffffffffffffffffff161461120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490612f78565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61129d6119f2565b73ffffffffffffffffffffffffffffffffffffffff166112bb611245565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890612f78565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461133d90612efa565b80601f016020809104026020016040519081016040528092919081815260200182805461136990612efa565b80156113b65780601f1061138b576101008083540402835291602001916113b6565b820191906000526020600020905b81548152906001019060200180831161139957829003601f168201915b5050505050905090565b600d5481565b600f5481565b60006113e06113d96119f2565b8484611bc5565b6001905092915050565b600b60019054906101000a900460ff1681565b6114056119f2565b73ffffffffffffffffffffffffffffffffffffffff16611423611245565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090612f78565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115169190612c25565b60405180910390a25050565b61152a6119f2565b73ffffffffffffffffffffffffffffffffffffffff16611548611245565b73ffffffffffffffffffffffffffffffffffffffff161461159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590612f78565b60405180910390fd5b670de0b6b3a76400006103e860056115b4610a4d565b6115be9190612fc7565b6115c89190613050565b6115d29190613050565b811015611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90613283565b60405180910390fd5b670de0b6b3a7640000816116289190612fc7565b600a8190555050565b60085481565b60006116416119f2565b73ffffffffffffffffffffffffffffffffffffffff1661165f611245565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90612f78565b60405180910390fd5b620186a060016116c3610a4d565b6116cd9190612fc7565b6116d79190613050565b821015611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613315565b60405180910390fd5b6103e86005611726610a4d565b6117309190612fc7565b61173a9190613050565b82111561177c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611773906133a7565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6118276119f2565b73ffffffffffffffffffffffffffffffffffffffff16611845611245565b73ffffffffffffffffffffffffffffffffffffffff161461189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290612f78565b60405180910390fd5b80600f81905550600f54600e81905550600a600e5411156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e8906131f1565b60405180910390fd5b50565b6118fc6119f2565b73ffffffffffffffffffffffffffffffffffffffff1661191a611245565b73ffffffffffffffffffffffffffffffffffffffff1614611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790612f78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790613439565b60405180910390fd5b6119e9816124b5565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a61906134cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad19061355d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bb89190612cf6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c906135ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613681565b60405180910390fd5b6000811415611cbf57611cba8383600061257b565b6124b0565b600b60009054906101000a900460ff16156120c957611cdc611245565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d4a5750611d1a611245565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d835750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dbd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd65750600660149054906101000a900460ff16155b156120c857600b60019054906101000a900460ff16611ed057601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e905750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec6906136ed565b60405180910390fd5b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f755750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561201c57600854811115611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb69061377f565b60405180910390fd5b600a54611fcb83610e4f565b82611fd6919061379f565b1115612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e90613841565b60405180910390fd5b6120c7565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120c657600a5461207983610e4f565b82612084919061379f565b11156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90613841565b60405180910390fd5b5b5b5b5b60006120d430610e4f565b9050600060095482101590508080156120f95750600b60029054906101000a900460ff165b80156121125750600660149054906101000a900460ff16155b801561216957507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121bf5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122155750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612259576001600660146101000a81548160ff02191690831515021790555061223d6127fc565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061230f5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561231957600090505b600080821561249f577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561237f57506000600e54115b156123d0576123ac606461239e600e548961284d90919063ffffffff16565b61286390919063ffffffff16565b9150600e54600f54836123bf9190612fc7565b6123c99190613050565b905061247b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561242d57506000600c54115b1561247a5761245a606461244c600c548961284d90919063ffffffff16565b61286390919063ffffffff16565b9150600c54600d548361246d9190612fc7565b6124779190613050565b90505b5b60008211156124905761248f88308461257b565b5b818661249c9190613861565b95505b6124aa88888861257b565b50505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e2906135ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290613681565b60405180910390fd5b612666838383612879565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e390613907565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461277f919061379f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127e39190612cf6565b60405180910390a36127f684848461287e565b50505050565b600061280730610e4f565b90506000811415612818575061284b565b60146009546128279190612fc7565b81111561284057601460095461283d9190612fc7565b90505b61284981612883565b505b565b6000818361285b9190612fc7565b905092915050565b600081836128719190613050565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128a05761289f613927565b5b6040519080825280602002602001820160405280156128ce5781602001602082028036833780820191505090505b50905030816000815181106128e6576128e5613956565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061295757612956613956565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129bc307f0000000000000000000000000000000000000000000000000000000000000000846119fa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a40959493929190613a7e565b600060405180830381600087803b158015612a5a57600080fd5b505af1158015612a6e573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ab0578082015181840152602081019050612a95565b83811115612abf576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ae182612a76565b612aeb8185612a81565b9350612afb818560208601612a92565b612b0481612ac5565b840191505092915050565b60006020820190508181036000830152612b298184612ad6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b6182612b36565b9050919050565b612b7181612b56565b8114612b7c57600080fd5b50565b600081359050612b8e81612b68565b92915050565b6000819050919050565b612ba781612b94565b8114612bb257600080fd5b50565b600081359050612bc481612b9e565b92915050565b60008060408385031215612be157612be0612b31565b5b6000612bef85828601612b7f565b9250506020612c0085828601612bb5565b9150509250929050565b60008115159050919050565b612c1f81612c0a565b82525050565b6000602082019050612c3a6000830184612c16565b92915050565b600060208284031215612c5657612c55612b31565b5b6000612c6484828501612b7f565b91505092915050565b6000819050919050565b6000612c92612c8d612c8884612b36565b612c6d565b612b36565b9050919050565b6000612ca482612c77565b9050919050565b6000612cb682612c99565b9050919050565b612cc681612cab565b82525050565b6000602082019050612ce16000830184612cbd565b92915050565b612cf081612b94565b82525050565b6000602082019050612d0b6000830184612ce7565b92915050565b600060208284031215612d2757612d26612b31565b5b6000612d3584828501612bb5565b91505092915050565b600080600060608486031215612d5757612d56612b31565b5b6000612d6586828701612b7f565b9350506020612d7686828701612b7f565b9250506040612d8786828701612bb5565b9150509250925092565b612d9a81612b56565b82525050565b6000602082019050612db56000830184612d91565b92915050565b600060ff82169050919050565b612dd181612dbb565b82525050565b6000602082019050612dec6000830184612dc8565b92915050565b612dfb81612c0a565b8114612e0657600080fd5b50565b600081359050612e1881612df2565b92915050565b60008060408385031215612e3557612e34612b31565b5b6000612e4385828601612b7f565b9250506020612e5485828601612e09565b9150509250929050565b600060208284031215612e7457612e73612b31565b5b6000612e8284828501612e09565b91505092915050565b60008060408385031215612ea257612ea1612b31565b5b6000612eb085828601612b7f565b9250506020612ec185828601612b7f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f1257607f821691505b60208210811415612f2657612f25612ecb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f62602083612a81565b9150612f6d82612f2c565b602082019050919050565b60006020820190508181036000830152612f9181612f55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fd282612b94565b9150612fdd83612b94565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561301657613015612f98565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061305b82612b94565b915061306683612b94565b92508261307657613075613021565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006130dd602f83612a81565b91506130e882613081565b604082019050919050565b6000602082019050818103600083015261310c816130d0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061316f602883612a81565b915061317a82613113565b604082019050919050565b6000602082019050818103600083015261319e81613162565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006131db601d83612a81565b91506131e6826131a5565b602082019050919050565b6000602082019050818103600083015261320a816131ce565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061326d602483612a81565b915061327882613211565b604082019050919050565b6000602082019050818103600083015261329c81613260565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006132ff603583612a81565b915061330a826132a3565b604082019050919050565b6000602082019050818103600083015261332e816132f2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613391603483612a81565b915061339c82613335565b604082019050919050565b600060208201905081810360008301526133c081613384565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613423602683612a81565b915061342e826133c7565b604082019050919050565b6000602082019050818103600083015261345281613416565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134b5602483612a81565b91506134c082613459565b604082019050919050565b600060208201905081810360008301526134e4816134a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613547602283612a81565b9150613552826134eb565b604082019050919050565b600060208201905081810360008301526135768161353a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135d9602583612a81565b91506135e48261357d565b604082019050919050565b60006020820190508181036000830152613608816135cc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061366b602383612a81565b91506136768261360f565b604082019050919050565b6000602082019050818103600083015261369a8161365e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006136d7601683612a81565b91506136e2826136a1565b602082019050919050565b60006020820190508181036000830152613706816136ca565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613769603583612a81565b91506137748261370d565b604082019050919050565b600060208201905081810360008301526137988161375c565b9050919050565b60006137aa82612b94565b91506137b583612b94565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ea576137e9612f98565b5b828201905092915050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061382b601383612a81565b9150613836826137f5565b602082019050919050565b6000602082019050818103600083015261385a8161381e565b9050919050565b600061386c82612b94565b915061387783612b94565b92508282101561388a57613889612f98565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138f1602683612a81565b91506138fc82613895565b604082019050919050565b60006020820190508181036000830152613920816138e4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006139aa6139a56139a084613985565b612c6d565b612b94565b9050919050565b6139ba8161398f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139f581612b56565b82525050565b6000613a0783836139ec565b60208301905092915050565b6000602082019050919050565b6000613a2b826139c0565b613a3581856139cb565b9350613a40836139dc565b8060005b83811015613a71578151613a5888826139fb565b9750613a6383613a13565b925050600181019050613a44565b5085935050505092915050565b600060a082019050613a936000830188612ce7565b613aa060208301876139b1565b8181036040830152613ab28186613a20565b9050613ac16060830185612d91565b613ace6080830184612ce7565b969550505050505056fea2646970667358221220442005df7157e26281860086b2f952dc782b1081896289bc5dd23d1b1f32752064736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c806389a302711161012e578063c0246668116100ab578063dd62ed3e1161006f578063dd62ed3e14610874578063e2f45605146108b1578063eba4c333146108dc578063f2fde38b14610905578063f8b45b051461092e57610246565b8063c02466681461078f578063c18bc195146107b8578063c8c8ebe4146107e1578063d257b34f1461080c578063d85ba0631461084957610246565b806395d89b41116100f257806395d89b41146106a65780639c3b4fdc146106d1578063a0d82dc5146106fc578063a9059cbb14610727578063bbc0c7421461076457610246565b806389a30271146105e55780638a8c523c146106105780638da5cb5b146106275780638ea5220f14610652578063924de9b71461067d57610246565b806349bd5a5e116101bc57806370a082311161018057806370a0823114610514578063715018a61461055157806371fc468814610568578063751039fc146105915780637571336a146105bc57610246565b806349bd5a5e1461042b5780634a62bb65146104565780634fbee193146104815780636a486a8e146104be5780636ddd1713146104e957610246565b80631816467f116102035780631816467f14610346578063203e727e1461036f57806323b872dd1461039857806327c8f835146103d5578063313ce5671461040057610246565b806306fdde031461024b578063095ea7b31461027657806310d5de53146102b35780631694505e146102f057806318160ddd1461031b57610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610959565b60405161026d9190612b0f565b60405180910390f35b34801561028257600080fd5b5061029d60048036038101906102989190612bca565b6109eb565b6040516102aa9190612c25565b60405180910390f35b3480156102bf57600080fd5b506102da60048036038101906102d59190612c40565b610a09565b6040516102e79190612c25565b60405180910390f35b3480156102fc57600080fd5b50610305610a29565b6040516103129190612ccc565b60405180910390f35b34801561032757600080fd5b50610330610a4d565b60405161033d9190612cf6565b60405180910390f35b34801561035257600080fd5b5061036d60048036038101906103689190612c40565b610a57565b005b34801561037b57600080fd5b5061039660048036038101906103919190612d11565b610b93565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612d3e565b610ca2565b6040516103cc9190612c25565b60405180910390f35b3480156103e157600080fd5b506103ea610d9a565b6040516103f79190612da0565b60405180910390f35b34801561040c57600080fd5b50610415610da0565b6040516104229190612dd7565b60405180910390f35b34801561043757600080fd5b50610440610da9565b60405161044d9190612da0565b60405180910390f35b34801561046257600080fd5b5061046b610dcd565b6040516104789190612c25565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a39190612c40565b610de0565b6040516104b59190612c25565b60405180910390f35b3480156104ca57600080fd5b506104d3610e36565b6040516104e09190612cf6565b60405180910390f35b3480156104f557600080fd5b506104fe610e3c565b60405161050b9190612c25565b60405180910390f35b34801561052057600080fd5b5061053b60048036038101906105369190612c40565b610e4f565b6040516105489190612cf6565b60405180910390f35b34801561055d57600080fd5b50610566610e97565b005b34801561057457600080fd5b5061058f600480360381019061058a9190612d11565b610f1f565b005b34801561059d57600080fd5b506105a6610ff4565b6040516105b39190612c25565b60405180910390f35b3480156105c857600080fd5b506105e360048036038101906105de9190612e1e565b611094565b005b3480156105f157600080fd5b506105fa61116b565b6040516106079190612da0565b60405180910390f35b34801561061c57600080fd5b50610625611191565b005b34801561063357600080fd5b5061063c611245565b6040516106499190612da0565b60405180910390f35b34801561065e57600080fd5b5061066761126f565b6040516106749190612da0565b60405180910390f35b34801561068957600080fd5b506106a4600480360381019061069f9190612e5e565b611295565b005b3480156106b257600080fd5b506106bb61132e565b6040516106c89190612b0f565b60405180910390f35b3480156106dd57600080fd5b506106e66113c0565b6040516106f39190612cf6565b60405180910390f35b34801561070857600080fd5b506107116113c6565b60405161071e9190612cf6565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612bca565b6113cc565b60405161075b9190612c25565b60405180910390f35b34801561077057600080fd5b506107796113ea565b6040516107869190612c25565b60405180910390f35b34801561079b57600080fd5b506107b660048036038101906107b19190612e1e565b6113fd565b005b3480156107c457600080fd5b506107df60048036038101906107da9190612d11565b611522565b005b3480156107ed57600080fd5b506107f6611631565b6040516108039190612cf6565b60405180910390f35b34801561081857600080fd5b50610833600480360381019061082e9190612d11565b611637565b6040516108409190612c25565b60405180910390f35b34801561085557600080fd5b5061085e61178c565b60405161086b9190612cf6565b60405180910390f35b34801561088057600080fd5b5061089b60048036038101906108969190612e8b565b611792565b6040516108a89190612cf6565b60405180910390f35b3480156108bd57600080fd5b506108c6611819565b6040516108d39190612cf6565b60405180910390f35b3480156108e857600080fd5b5061090360048036038101906108fe9190612d11565b61181f565b005b34801561091157600080fd5b5061092c60048036038101906109279190612c40565b6118f4565b005b34801561093a57600080fd5b506109436119ec565b6040516109509190612cf6565b60405180910390f35b60606003805461096890612efa565b80601f016020809104026020016040519081016040528092919081815260200182805461099490612efa565b80156109e15780601f106109b6576101008083540402835291602001916109e1565b820191906000526020600020905b8154815290600101906020018083116109c457829003601f168201915b5050505050905090565b60006109ff6109f86119f2565b84846119fa565b6001905092915050565b60116020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610a5f6119f2565b73ffffffffffffffffffffffffffffffffffffffff16610a7d611245565b73ffffffffffffffffffffffffffffffffffffffff1614610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca90612f78565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610b9b6119f2565b73ffffffffffffffffffffffffffffffffffffffff16610bb9611245565b73ffffffffffffffffffffffffffffffffffffffff1614610c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c0690612f78565b60405180910390fd5b670de0b6b3a76400006103e86001610c25610a4d565b610c2f9190612fc7565b610c399190613050565b610c439190613050565b811015610c85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7c906130f3565b60405180910390fd5b670de0b6b3a764000081610c999190612fc7565b60088190555050565b6000610caf848484611bc5565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cfa6119f2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613185565b60405180910390fd5b610d8e85610d866119f2565b8584036119fa565b60019150509392505050565b61dead81565b60006012905090565b7f0000000000000000000000003eebe4b8aad935416d01441bf88c6522dc9eb9b781565b600b60009054906101000a900460ff1681565b6000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600e5481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e9f6119f2565b73ffffffffffffffffffffffffffffffffffffffff16610ebd611245565b73ffffffffffffffffffffffffffffffffffffffff1614610f13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f0a90612f78565b60405180910390fd5b610f1d60006124b5565b565b610f276119f2565b73ffffffffffffffffffffffffffffffffffffffff16610f45611245565b73ffffffffffffffffffffffffffffffffffffffff1614610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290612f78565b60405180910390fd5b80600d81905550600d54600c81905550600a600c541115610ff1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe8906131f1565b60405180910390fd5b50565b6000610ffe6119f2565b73ffffffffffffffffffffffffffffffffffffffff1661101c611245565b73ffffffffffffffffffffffffffffffffffffffff1614611072576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106990612f78565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b61109c6119f2565b73ffffffffffffffffffffffffffffffffffffffff166110ba611245565b73ffffffffffffffffffffffffffffffffffffffff1614611110576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110790612f78565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111996119f2565b73ffffffffffffffffffffffffffffffffffffffff166111b7611245565b73ffffffffffffffffffffffffffffffffffffffff161461120d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120490612f78565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61129d6119f2565b73ffffffffffffffffffffffffffffffffffffffff166112bb611245565b73ffffffffffffffffffffffffffffffffffffffff1614611311576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130890612f78565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b60606004805461133d90612efa565b80601f016020809104026020016040519081016040528092919081815260200182805461136990612efa565b80156113b65780601f1061138b576101008083540402835291602001916113b6565b820191906000526020600020905b81548152906001019060200180831161139957829003601f168201915b5050505050905090565b600d5481565b600f5481565b60006113e06113d96119f2565b8484611bc5565b6001905092915050565b600b60019054906101000a900460ff1681565b6114056119f2565b73ffffffffffffffffffffffffffffffffffffffff16611423611245565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090612f78565b60405180910390fd5b80601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516115169190612c25565b60405180910390a25050565b61152a6119f2565b73ffffffffffffffffffffffffffffffffffffffff16611548611245565b73ffffffffffffffffffffffffffffffffffffffff161461159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590612f78565b60405180910390fd5b670de0b6b3a76400006103e860056115b4610a4d565b6115be9190612fc7565b6115c89190613050565b6115d29190613050565b811015611614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160b90613283565b60405180910390fd5b670de0b6b3a7640000816116289190612fc7565b600a8190555050565b60085481565b60006116416119f2565b73ffffffffffffffffffffffffffffffffffffffff1661165f611245565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac90612f78565b60405180910390fd5b620186a060016116c3610a4d565b6116cd9190612fc7565b6116d79190613050565b821015611719576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171090613315565b60405180910390fd5b6103e86005611726610a4d565b6117309190612fc7565b61173a9190613050565b82111561177c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611773906133a7565b60405180910390fd5b8160098190555060019050919050565b600c5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6118276119f2565b73ffffffffffffffffffffffffffffffffffffffff16611845611245565b73ffffffffffffffffffffffffffffffffffffffff161461189b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189290612f78565b60405180910390fd5b80600f81905550600f54600e81905550600a600e5411156118f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e8906131f1565b60405180910390fd5b50565b6118fc6119f2565b73ffffffffffffffffffffffffffffffffffffffff1661191a611245565b73ffffffffffffffffffffffffffffffffffffffff1614611970576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196790612f78565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d790613439565b60405180910390fd5b6119e9816124b5565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a61906134cb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad19061355d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611bb89190612cf6565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2c906135ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ca5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9c90613681565b60405180910390fd5b6000811415611cbf57611cba8383600061257b565b6124b0565b600b60009054906101000a900460ff16156120c957611cdc611245565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611d4a5750611d1a611245565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611d835750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dbd575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015611dd65750600660149054906101000a900460ff16155b156120c857600b60019054906101000a900460ff16611ed057601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611e905750601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec6906136ed565b60405180910390fd5b5b7f0000000000000000000000003eebe4b8aad935416d01441bf88c6522dc9eb9b773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611f755750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561201c57600854811115611fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb69061377f565b60405180910390fd5b600a54611fcb83610e4f565b82611fd6919061379f565b1115612017576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200e90613841565b60405180910390fd5b6120c7565b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166120c657600a5461207983610e4f565b82612084919061379f565b11156120c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120bc90613841565b60405180910390fd5b5b5b5b5b60006120d430610e4f565b9050600060095482101590508080156120f95750600b60029054906101000a900460ff165b80156121125750600660149054906101000a900460ff16155b801561216957507f0000000000000000000000003eebe4b8aad935416d01441bf88c6522dc9eb9b773ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156121bf5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156122155750601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612259576001600660146101000a81548160ff02191690831515021790555061223d6127fc565b6000600660146101000a81548160ff0219169083151502179055505b6000600660149054906101000a900460ff16159050601060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061230f5750601060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561231957600090505b600080821561249f577f0000000000000000000000003eebe4b8aad935416d01441bf88c6522dc9eb9b773ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1614801561237f57506000600e54115b156123d0576123ac606461239e600e548961284d90919063ffffffff16565b61286390919063ffffffff16565b9150600e54600f54836123bf9190612fc7565b6123c99190613050565b905061247b565b7f0000000000000000000000003eebe4b8aad935416d01441bf88c6522dc9eb9b773ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614801561242d57506000600c54115b1561247a5761245a606461244c600c548961284d90919063ffffffff16565b61286390919063ffffffff16565b9150600c54600d548361246d9190612fc7565b6124779190613050565b90505b5b60008211156124905761248f88308461257b565b5b818661249c9190613861565b95505b6124aa88888861257b565b50505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e2906135ef565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561265b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265290613681565b60405180910390fd5b612666838383612879565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156126ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126e390613907565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461277f919061379f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516127e39190612cf6565b60405180910390a36127f684848461287e565b50505050565b600061280730610e4f565b90506000811415612818575061284b565b60146009546128279190612fc7565b81111561284057601460095461283d9190612fc7565b90505b61284981612883565b505b565b6000818361285b9190612fc7565b905092915050565b600081836128719190613050565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156128a05761289f613927565b5b6040519080825280602002602001820160405280156128ce5781602001602082028036833780820191505090505b50905030816000815181106128e6576128e5613956565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061295757612956613956565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506129bc307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846119fa565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612a40959493929190613a7e565b600060405180830381600087803b158015612a5a57600080fd5b505af1158015612a6e573d6000803e3d6000fd5b505050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ab0578082015181840152602081019050612a95565b83811115612abf576000848401525b50505050565b6000601f19601f8301169050919050565b6000612ae182612a76565b612aeb8185612a81565b9350612afb818560208601612a92565b612b0481612ac5565b840191505092915050565b60006020820190508181036000830152612b298184612ad6565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612b6182612b36565b9050919050565b612b7181612b56565b8114612b7c57600080fd5b50565b600081359050612b8e81612b68565b92915050565b6000819050919050565b612ba781612b94565b8114612bb257600080fd5b50565b600081359050612bc481612b9e565b92915050565b60008060408385031215612be157612be0612b31565b5b6000612bef85828601612b7f565b9250506020612c0085828601612bb5565b9150509250929050565b60008115159050919050565b612c1f81612c0a565b82525050565b6000602082019050612c3a6000830184612c16565b92915050565b600060208284031215612c5657612c55612b31565b5b6000612c6484828501612b7f565b91505092915050565b6000819050919050565b6000612c92612c8d612c8884612b36565b612c6d565b612b36565b9050919050565b6000612ca482612c77565b9050919050565b6000612cb682612c99565b9050919050565b612cc681612cab565b82525050565b6000602082019050612ce16000830184612cbd565b92915050565b612cf081612b94565b82525050565b6000602082019050612d0b6000830184612ce7565b92915050565b600060208284031215612d2757612d26612b31565b5b6000612d3584828501612bb5565b91505092915050565b600080600060608486031215612d5757612d56612b31565b5b6000612d6586828701612b7f565b9350506020612d7686828701612b7f565b9250506040612d8786828701612bb5565b9150509250925092565b612d9a81612b56565b82525050565b6000602082019050612db56000830184612d91565b92915050565b600060ff82169050919050565b612dd181612dbb565b82525050565b6000602082019050612dec6000830184612dc8565b92915050565b612dfb81612c0a565b8114612e0657600080fd5b50565b600081359050612e1881612df2565b92915050565b60008060408385031215612e3557612e34612b31565b5b6000612e4385828601612b7f565b9250506020612e5485828601612e09565b9150509250929050565b600060208284031215612e7457612e73612b31565b5b6000612e8284828501612e09565b91505092915050565b60008060408385031215612ea257612ea1612b31565b5b6000612eb085828601612b7f565b9250506020612ec185828601612b7f565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f1257607f821691505b60208210811415612f2657612f25612ecb565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f62602083612a81565b9150612f6d82612f2c565b602082019050919050565b60006020820190508181036000830152612f9181612f55565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fd282612b94565b9150612fdd83612b94565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561301657613015612f98565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061305b82612b94565b915061306683612b94565b92508261307657613075613021565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006130dd602f83612a81565b91506130e882613081565b604082019050919050565b6000602082019050818103600083015261310c816130d0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b600061316f602883612a81565b915061317a82613113565b604082019050919050565b6000602082019050818103600083015261319e81613162565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006131db601d83612a81565b91506131e6826131a5565b602082019050919050565b6000602082019050818103600083015261320a816131ce565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b600061326d602483612a81565b915061327882613211565b604082019050919050565b6000602082019050818103600083015261329c81613260565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006132ff603583612a81565b915061330a826132a3565b604082019050919050565b6000602082019050818103600083015261332e816132f2565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000613391603483612a81565b915061339c82613335565b604082019050919050565b600060208201905081810360008301526133c081613384565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613423602683612a81565b915061342e826133c7565b604082019050919050565b6000602082019050818103600083015261345281613416565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006134b5602483612a81565b91506134c082613459565b604082019050919050565b600060208201905081810360008301526134e4816134a8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613547602283612a81565b9150613552826134eb565b604082019050919050565b600060208201905081810360008301526135768161353a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006135d9602583612a81565b91506135e48261357d565b604082019050919050565b60006020820190508181036000830152613608816135cc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061366b602383612a81565b91506136768261360f565b604082019050919050565b6000602082019050818103600083015261369a8161365e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006136d7601683612a81565b91506136e2826136a1565b602082019050919050565b60006020820190508181036000830152613706816136ca565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613769603583612a81565b91506137748261370d565b604082019050919050565b600060208201905081810360008301526137988161375c565b9050919050565b60006137aa82612b94565b91506137b583612b94565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ea576137e9612f98565b5b828201905092915050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061382b601383612a81565b9150613836826137f5565b602082019050919050565b6000602082019050818103600083015261385a8161381e565b9050919050565b600061386c82612b94565b915061387783612b94565b92508282101561388a57613889612f98565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006138f1602683612a81565b91506138fc82613895565b604082019050919050565b60006020820190508181036000830152613920816138e4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006139aa6139a56139a084613985565b612c6d565b612b94565b9050919050565b6139ba8161398f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6139f581612b56565b82525050565b6000613a0783836139ec565b60208301905092915050565b6000602082019050919050565b6000613a2b826139c0565b613a3581856139cb565b9350613a40836139dc565b8060005b83811015613a71578151613a5888826139fb565b9750613a6383613a13565b925050600181019050613a44565b5085935050505092915050565b600060a082019050613a936000830188612ce7565b613aa060208301876139b1565b8181036040830152613ab28186613a20565b9050613ac16060830185612d91565b613ace6080830184612ce7565b969550505050505056fea2646970667358221220442005df7157e26281860086b2f952dc782b1081896289bc5dd23d1b1f32752064736f6c634300080a0033

Deployed Bytecode Sourcemap

24746:9829:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9602:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11769:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25640:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24830:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10722:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30106:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28539:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12420:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24933:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10564:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24888:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25244:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30305:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25431:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25324:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10893:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2837:103;;;;;;;;;;;;;:::i;:::-;;29457:219;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27843:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29086:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24993:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27679:112;;;;;;;;;;;;;:::i;:::-;;2186:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25096:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29349:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9821:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25398:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25466:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11233:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25284:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29916:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28822:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25129:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28034:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25364:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11471:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25171:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29684:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3095:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25211:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9602:100;9656:13;9689:5;9682:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9602:100;:::o;11769:169::-;11852:4;11869:39;11878:12;:10;:12::i;:::-;11892:7;11901:6;11869:8;:39::i;:::-;11926:4;11919:11;;11769:169;;;;:::o;25640:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;24830:51::-;;;:::o;10722:108::-;10783:7;10810:12;;10803:19;;10722:108;:::o;30106:189::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30242:9:::1;;;;;;;;;;;30211:41;;30228:12;30211:41;;;;;;;;;;;;30275:12;30263:9;;:24;;;;;;;;;;;;;;;;;;30106:189:::0;:::o;28539:275::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28676:4:::1;28668;28663:1;28647:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28646:26;;;;:::i;:::-;28645:35;;;;:::i;:::-;28635:6;:45;;28613:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;28799:6;28789;:17;;;;:::i;:::-;28766:20;:40;;;;28539:275:::0;:::o;12420:492::-;12560:4;12577:36;12587:6;12595:9;12606:6;12577:9;:36::i;:::-;12626:24;12653:11;:19;12665:6;12653:19;;;;;;;;;;;;;;;:33;12673:12;:10;:12::i;:::-;12653:33;;;;;;;;;;;;;;;;12626:60;;12725:6;12705:16;:26;;12697:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12812:57;12821:6;12829:12;:10;:12::i;:::-;12862:6;12843:16;:25;12812:8;:57::i;:::-;12900:4;12893:11;;;12420:492;;;;;:::o;24933:53::-;24979:6;24933:53;:::o;10564:93::-;10622:5;10647:2;10640:9;;10564:93;:::o;24888:38::-;;;:::o;25244:33::-;;;;;;;;;;;;;:::o;30305:126::-;30371:4;30395:19;:28;30415:7;30395:28;;;;;;;;;;;;;;;;;;;;;;;;;30388:35;;30305:126;;;:::o;25431:28::-;;;;:::o;25324:31::-;;;;;;;;;;;;;:::o;10893:127::-;10967:7;10994:9;:18;11004:7;10994:18;;;;;;;;;;;;;;;;10987:25;;10893:127;;;:::o;2837:103::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2902:30:::1;2929:1;2902:18;:30::i;:::-;2837:103::o:0;29457:219::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29555:7:::1;29543:9;:19;;;;29588:9;;29573:12;:24;;;;29632:2;29616:12;;:18;;29608:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29457:219:::0;:::o;27843:121::-;27895:4;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27929:5:::1;27912:14;;:22;;;;;;;;;;;;;;;;;;27952:4;27945:11;;27843:121:::0;:::o;29086:167::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29241:4:::1;29199:31;:39;29231:6;29199:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;29086:167:::0;;:::o;24993:64::-;;;;;;;;;;;;;:::o;27679:112::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27750:4:::1;27734:13;;:20;;;;;;;;;;;;;;;;;;27779:4;27765:11;;:18;;;;;;;;;;;;;;;;;;27679:112::o:0;2186:87::-;2232:7;2259:6;;;;;;;;;;;2252:13;;2186:87;:::o;25096:24::-;;;;;;;;;;;;;:::o;29349:100::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29434:7:::1;29420:11;;:21;;;;;;;;;;;;;;;;;;29349:100:::0;:::o;9821:104::-;9877:13;9910:7;9903:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9821:104;:::o;25398:24::-;;;;:::o;25466:25::-;;;;:::o;11233:175::-;11319:4;11336:42;11346:12;:10;:12::i;:::-;11360:9;11371:6;11336:9;:42::i;:::-;11396:4;11389:11;;11233:175;;;;:::o;25284:33::-;;;;;;;;;;;;;:::o;29916:182::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30032:8:::1;30001:19;:28;30021:7;30001:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;30072:7;30056:34;;;30081:8;30056:34;;;;;;:::i;:::-;;;;;;;;29916:182:::0;;:::o;28822:256::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28962:4:::1;28954;28949:1;28933:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28932:26;;;;:::i;:::-;28931:35;;;;:::i;:::-;28921:6;:45;;28899:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;29063:6;29053;:17;;;;:::i;:::-;29041:9;:29;;;;28822:256:::0;:::o;25129:35::-;;;;:::o;28034:497::-;28142:4;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28221:6:::1;28216:1;28200:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28199:28;;;;:::i;:::-;28186:9;:41;;28164:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;28376:4;28371:1;28355:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28354:26;;;;:::i;:::-;28341:9;:39;;28319:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;28492:9;28471:18;:30;;;;28519:4;28512:11;;28034:497:::0;;;:::o;25364:27::-;;;;:::o;11471:151::-;11560:7;11587:11;:18;11599:5;11587:18;;;;;;;;;;;;;;;:27;11606:7;11587:27;;;;;;;;;;;;;;;;11580:34;;11471:151;;;;:::o;25171:33::-;;;;:::o;29684:224::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29784:7:::1;29771:10;:20;;;;29818:10;;29802:13;:26;;;;29864:2;29847:13;;:19;;29839:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29684:224:::0;:::o;3095:201::-;2417:12;:10;:12::i;:::-;2406:23;;:7;:5;:7::i;:::-;:23;;;2398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3204:1:::1;3184:22;;:8;:22;;;;3176:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3260:28;3279:8;3260:18;:28::i;:::-;3095:201:::0;:::o;25211:24::-;;;;:::o;859:98::-;912:7;939:10;932:17;;859:98;:::o;15261:380::-;15414:1;15397:19;;:5;:19;;;;15389:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15495:1;15476:21;;:7;:21;;;;15468:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15579:6;15549:11;:18;15561:5;15549:18;;;;;;;;;;;;;;;:27;15568:7;15549:27;;;;;;;;;;;;;;;:36;;;;15617:7;15601:32;;15610:5;15601:32;;;15626:6;15601:32;;;;;;:::i;:::-;;;;;;;;15261:380;;;:::o;30439:3203::-;30587:1;30571:18;;:4;:18;;;;30563:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30664:1;30650:16;;:2;:16;;;;30642:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30733:1;30723:6;:11;30719:93;;;30751:28;30767:4;30773:2;30777:1;30751:15;:28::i;:::-;30794:7;;30719:93;30828:14;;;;;;;;;;;30824:1298;;;30889:7;:5;:7::i;:::-;30881:15;;:4;:15;;;;:49;;;;;30923:7;:5;:7::i;:::-;30917:13;;:2;:13;;;;30881:49;:86;;;;;30965:1;30951:16;;:2;:16;;;;30881:86;:128;;;;;31002:6;30988:21;;:2;:21;;;;30881:128;:158;;;;;31031:8;;;;;;;;;;;31030:9;30881:158;30859:1252;;;31079:13;;;;;;;;;;;31074:223;;31151:19;:25;31171:4;31151:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;31180:19;:23;31200:2;31180:23;;;;;;;;;;;;;;;;;;;;;;;;;31151:52;31117:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;31074:223;31379:13;31371:21;;:4;:21;;;:82;;;;;31418:31;:35;31450:2;31418:35;;;;;;;;;;;;;;;;;;;;;;;;;31417:36;31371:82;31345:751;;;31540:20;;31530:6;:30;;31496:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;31748:9;;31731:13;31741:2;31731:9;:13::i;:::-;31722:6;:22;;;;:::i;:::-;:35;;31688:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31345:751;;;31876:31;:35;31908:2;31876:35;;;;;;;;;;;;;;;;;;;;;;;;;31871:225;;31996:9;;31979:13;31989:2;31979:9;:13::i;:::-;31970:6;:22;;;;:::i;:::-;:35;;31936:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;31871:225;31345:751;30859:1252;30824:1298;32134:28;32165:24;32183:4;32165:9;:24::i;:::-;32134:55;;32202:12;32241:18;;32217:20;:42;;32202:57;;32290:7;:35;;;;;32314:11;;;;;;;;;;;32290:35;:61;;;;;32343:8;;;;;;;;;;;32342:9;32290:61;:97;;;;;32374:13;32368:19;;:2;:19;;;32290:97;:140;;;;;32405:19;:25;32425:4;32405:25;;;;;;;;;;;;;;;;;;;;;;;;;32404:26;32290:140;:181;;;;;32448:19;:23;32468:2;32448:23;;;;;;;;;;;;;;;;;;;;;;;;;32447:24;32290:181;32272:313;;;32509:4;32498:8;;:15;;;;;;;;;;;;;;;;;;32530:10;:8;:10::i;:::-;32568:5;32557:8;;:16;;;;;;;;;;;;;;;;;;32272:313;32597:12;32613:8;;;;;;;;;;;32612:9;32597:24;;32723:19;:25;32743:4;32723:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;32752:19;:23;32772:2;32752:23;;;;;;;;;;;;;;;;;;;;;;;;;32723:52;32719:100;;;32802:5;32792:15;;32719:100;32831:12;32858:20;32971:7;32967:622;;;33029:13;33023:19;;:2;:19;;;:40;;;;;33062:1;33046:13;;:17;33023:40;33019:422;;;33091:34;33121:3;33091:25;33102:13;;33091:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;33084:41;;33181:13;;33167:10;;33160:4;:17;;;;:::i;:::-;33159:35;;;;:::i;:::-;33144:50;;33019:422;;;33264:13;33256:21;;:4;:21;;;:41;;;;;33296:1;33281:12;;:16;33256:41;33252:189;;;33325:33;33354:3;33325:24;33336:12;;33325:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;33318:40;;33413:12;;33400:9;;33393:4;:16;;;;:::i;:::-;33392:33;;;;:::i;:::-;33377:48;;33252:189;33019:422;33467:1;33461:4;:7;33457:90;;;33489:42;33505:4;33519;33526;33489:15;:42::i;:::-;33457:90;33573:4;33563:14;;;;;:::i;:::-;;;32967:622;33601:33;33617:4;33623:2;33627:6;33601:15;:33::i;:::-;30552:3090;;;;;30439:3203;;;;:::o;3456:191::-;3530:16;3549:6;;;;;;;;;;;3530:25;;3575:8;3566:6;;:17;;;;;;;;;;;;;;;;;;3630:8;3599:40;;3620:8;3599:40;;;;;;;;;;;;3519:128;3456:191;:::o;13402:733::-;13560:1;13542:20;;:6;:20;;;;13534:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13644:1;13623:23;;:9;:23;;;;13615:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13699:47;13720:6;13728:9;13739:6;13699:20;:47::i;:::-;13759:21;13783:9;:17;13793:6;13783:17;;;;;;;;;;;;;;;;13759:41;;13836:6;13819:13;:23;;13811:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13957:6;13941:13;:22;13921:9;:17;13931:6;13921:17;;;;;;;;;;;;;;;:42;;;;14009:6;13985:9;:20;13995:9;13985:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14050:9;14033:35;;14042:6;14033:35;;;14061:6;14033:35;;;;;;:::i;:::-;;;;;;;;14081:46;14101:6;14109:9;14120:6;14081:19;:46::i;:::-;13523:612;13402:733;;;:::o;34230:340::-;34269:23;34295:24;34313:4;34295:9;:24::i;:::-;34269:50;;34353:1;34334:15;:20;34330:59;;;34371:7;;;34330:59;34444:2;34423:18;;:23;;;;:::i;:::-;34405:15;:41;34401:115;;;34502:2;34481:18;;:23;;;;:::i;:::-;34463:41;;34401:115;34528:34;34546:15;34528:17;:34::i;:::-;34258:312;34230:340;:::o;20714:98::-;20772:7;20803:1;20799;:5;;;;:::i;:::-;20792:12;;20714:98;;;;:::o;21113:::-;21171:7;21202:1;21198;:5;;;;:::i;:::-;21191:12;;21113:98;;;;:::o;16241:125::-;;;;:::o;16970:124::-;;;;:::o;33650:572::-;33777:21;33815:1;33801:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33777:40;;33846:4;33828;33833:1;33828:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33872:4;;;;;;;;;;;33862;33867:1;33862:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33889:62;33906:4;33921:15;33939:11;33889:8;:62::i;:::-;33990:15;:69;;;34074:11;34100:1;34145:4;34164:9;;;;;;;;;;;34188:15;33990:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33706:516;33650:572;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:152::-;4251:9;4284:37;4315:5;4284:37;:::i;:::-;4271:50;;4175:152;;;:::o;4333:183::-;4446:63;4503:5;4446:63;:::i;:::-;4441:3;4434:76;4333:183;;:::o;4522:274::-;4641:4;4679:2;4668:9;4664:18;4656:26;;4692:97;4786:1;4775:9;4771:17;4762:6;4692:97;:::i;:::-;4522:274;;;;:::o;4802:118::-;4889:24;4907:5;4889:24;:::i;:::-;4884:3;4877:37;4802:118;;:::o;4926:222::-;5019:4;5057:2;5046:9;5042:18;5034:26;;5070:71;5138:1;5127:9;5123:17;5114:6;5070:71;:::i;:::-;4926:222;;;;:::o;5154:329::-;5213:6;5262:2;5250:9;5241:7;5237:23;5233:32;5230:119;;;5268:79;;:::i;:::-;5230:119;5388:1;5413:53;5458:7;5449:6;5438:9;5434:22;5413:53;:::i;:::-;5403:63;;5359:117;5154:329;;;;:::o;5489:619::-;5566:6;5574;5582;5631:2;5619:9;5610:7;5606:23;5602:32;5599:119;;;5637:79;;:::i;:::-;5599:119;5757:1;5782:53;5827:7;5818:6;5807:9;5803:22;5782:53;:::i;:::-;5772:63;;5728:117;5884:2;5910:53;5955:7;5946:6;5935:9;5931:22;5910:53;:::i;:::-;5900:63;;5855:118;6012:2;6038:53;6083:7;6074:6;6063:9;6059:22;6038:53;:::i;:::-;6028:63;;5983:118;5489:619;;;;;:::o;6114:118::-;6201:24;6219:5;6201:24;:::i;:::-;6196:3;6189:37;6114:118;;:::o;6238:222::-;6331:4;6369:2;6358:9;6354:18;6346:26;;6382:71;6450:1;6439:9;6435:17;6426:6;6382:71;:::i;:::-;6238:222;;;;:::o;6466:86::-;6501:7;6541:4;6534:5;6530:16;6519:27;;6466:86;;;:::o;6558:112::-;6641:22;6657:5;6641:22;:::i;:::-;6636:3;6629:35;6558:112;;:::o;6676:214::-;6765:4;6803:2;6792:9;6788:18;6780:26;;6816:67;6880:1;6869:9;6865:17;6856:6;6816:67;:::i;:::-;6676:214;;;;:::o;6896:116::-;6966:21;6981:5;6966:21;:::i;:::-;6959:5;6956:32;6946:60;;7002:1;6999;6992:12;6946:60;6896:116;:::o;7018:133::-;7061:5;7099:6;7086:20;7077:29;;7115:30;7139:5;7115:30;:::i;:::-;7018:133;;;;:::o;7157:468::-;7222:6;7230;7279:2;7267:9;7258:7;7254:23;7250:32;7247:119;;;7285:79;;:::i;:::-;7247:119;7405:1;7430:53;7475:7;7466:6;7455:9;7451:22;7430:53;:::i;:::-;7420:63;;7376:117;7532:2;7558:50;7600:7;7591:6;7580:9;7576:22;7558:50;:::i;:::-;7548:60;;7503:115;7157:468;;;;;:::o;7631:323::-;7687:6;7736:2;7724:9;7715:7;7711:23;7707:32;7704:119;;;7742:79;;:::i;:::-;7704:119;7862:1;7887:50;7929:7;7920:6;7909:9;7905:22;7887:50;:::i;:::-;7877:60;;7833:114;7631:323;;;;:::o;7960:474::-;8028:6;8036;8085:2;8073:9;8064:7;8060:23;8056:32;8053:119;;;8091:79;;:::i;:::-;8053:119;8211:1;8236:53;8281:7;8272:6;8261:9;8257:22;8236:53;:::i;:::-;8226:63;;8182:117;8338:2;8364:53;8409:7;8400:6;8389:9;8385:22;8364:53;:::i;:::-;8354:63;;8309:118;7960:474;;;;;:::o;8440:180::-;8488:77;8485:1;8478:88;8585:4;8582:1;8575:15;8609:4;8606:1;8599:15;8626:320;8670:6;8707:1;8701:4;8697:12;8687:22;;8754:1;8748:4;8744:12;8775:18;8765:81;;8831:4;8823:6;8819:17;8809:27;;8765:81;8893:2;8885:6;8882:14;8862:18;8859:38;8856:84;;;8912:18;;:::i;:::-;8856:84;8677:269;8626:320;;;:::o;8952:182::-;9092:34;9088:1;9080:6;9076:14;9069:58;8952:182;:::o;9140:366::-;9282:3;9303:67;9367:2;9362:3;9303:67;:::i;:::-;9296:74;;9379:93;9468:3;9379:93;:::i;:::-;9497:2;9492:3;9488:12;9481:19;;9140:366;;;:::o;9512:419::-;9678:4;9716:2;9705:9;9701:18;9693:26;;9765:9;9759:4;9755:20;9751:1;9740:9;9736:17;9729:47;9793:131;9919:4;9793:131;:::i;:::-;9785:139;;9512:419;;;:::o;9937:180::-;9985:77;9982:1;9975:88;10082:4;10079:1;10072:15;10106:4;10103:1;10096:15;10123:348;10163:7;10186:20;10204:1;10186:20;:::i;:::-;10181:25;;10220:20;10238:1;10220:20;:::i;:::-;10215:25;;10408:1;10340:66;10336:74;10333:1;10330:81;10325:1;10318:9;10311:17;10307:105;10304:131;;;10415:18;;:::i;:::-;10304:131;10463:1;10460;10456:9;10445:20;;10123:348;;;;:::o;10477:180::-;10525:77;10522:1;10515:88;10622:4;10619:1;10612:15;10646:4;10643:1;10636:15;10663:185;10703:1;10720:20;10738:1;10720:20;:::i;:::-;10715:25;;10754:20;10772:1;10754:20;:::i;:::-;10749:25;;10793:1;10783:35;;10798:18;;:::i;:::-;10783:35;10840:1;10837;10833:9;10828:14;;10663:185;;;;:::o;10854:234::-;10994:34;10990:1;10982:6;10978:14;10971:58;11063:17;11058:2;11050:6;11046:15;11039:42;10854:234;:::o;11094:366::-;11236:3;11257:67;11321:2;11316:3;11257:67;:::i;:::-;11250:74;;11333:93;11422:3;11333:93;:::i;:::-;11451:2;11446:3;11442:12;11435:19;;11094:366;;;:::o;11466:419::-;11632:4;11670:2;11659:9;11655:18;11647:26;;11719:9;11713:4;11709:20;11705:1;11694:9;11690:17;11683:47;11747:131;11873:4;11747:131;:::i;:::-;11739:139;;11466:419;;;:::o;11891:227::-;12031:34;12027:1;12019:6;12015:14;12008:58;12100:10;12095:2;12087:6;12083:15;12076:35;11891:227;:::o;12124:366::-;12266:3;12287:67;12351:2;12346:3;12287:67;:::i;:::-;12280:74;;12363:93;12452:3;12363:93;:::i;:::-;12481:2;12476:3;12472:12;12465:19;;12124:366;;;:::o;12496:419::-;12662:4;12700:2;12689:9;12685:18;12677:26;;12749:9;12743:4;12739:20;12735:1;12724:9;12720:17;12713:47;12777:131;12903:4;12777:131;:::i;:::-;12769:139;;12496:419;;;:::o;12921:179::-;13061:31;13057:1;13049:6;13045:14;13038:55;12921:179;:::o;13106:366::-;13248:3;13269:67;13333:2;13328:3;13269:67;:::i;:::-;13262:74;;13345:93;13434:3;13345:93;:::i;:::-;13463:2;13458:3;13454:12;13447:19;;13106:366;;;:::o;13478:419::-;13644:4;13682:2;13671:9;13667:18;13659:26;;13731:9;13725:4;13721:20;13717:1;13706:9;13702:17;13695:47;13759:131;13885:4;13759:131;:::i;:::-;13751:139;;13478:419;;;:::o;13903:223::-;14043:34;14039:1;14031:6;14027:14;14020:58;14112:6;14107:2;14099:6;14095:15;14088:31;13903:223;:::o;14132:366::-;14274:3;14295:67;14359:2;14354:3;14295:67;:::i;:::-;14288:74;;14371:93;14460:3;14371:93;:::i;:::-;14489:2;14484:3;14480:12;14473:19;;14132:366;;;:::o;14504:419::-;14670:4;14708:2;14697:9;14693:18;14685:26;;14757:9;14751:4;14747:20;14743:1;14732:9;14728:17;14721:47;14785:131;14911:4;14785:131;:::i;:::-;14777:139;;14504:419;;;:::o;14929:240::-;15069:34;15065:1;15057:6;15053:14;15046:58;15138:23;15133:2;15125:6;15121:15;15114:48;14929:240;:::o;15175:366::-;15317:3;15338:67;15402:2;15397:3;15338:67;:::i;:::-;15331:74;;15414:93;15503:3;15414:93;:::i;:::-;15532:2;15527:3;15523:12;15516:19;;15175:366;;;:::o;15547:419::-;15713:4;15751:2;15740:9;15736:18;15728:26;;15800:9;15794:4;15790:20;15786:1;15775:9;15771:17;15764:47;15828:131;15954:4;15828:131;:::i;:::-;15820:139;;15547:419;;;:::o;15972:239::-;16112:34;16108:1;16100:6;16096:14;16089:58;16181:22;16176:2;16168:6;16164:15;16157:47;15972:239;:::o;16217:366::-;16359:3;16380:67;16444:2;16439:3;16380:67;:::i;:::-;16373:74;;16456:93;16545:3;16456:93;:::i;:::-;16574:2;16569:3;16565:12;16558:19;;16217:366;;;:::o;16589:419::-;16755:4;16793:2;16782:9;16778:18;16770:26;;16842:9;16836:4;16832:20;16828:1;16817:9;16813:17;16806:47;16870:131;16996:4;16870:131;:::i;:::-;16862:139;;16589:419;;;:::o;17014:225::-;17154:34;17150:1;17142:6;17138:14;17131:58;17223:8;17218:2;17210:6;17206:15;17199:33;17014:225;:::o;17245:366::-;17387:3;17408:67;17472:2;17467:3;17408:67;:::i;:::-;17401:74;;17484:93;17573:3;17484:93;:::i;:::-;17602:2;17597:3;17593:12;17586:19;;17245:366;;;:::o;17617:419::-;17783:4;17821:2;17810:9;17806:18;17798:26;;17870:9;17864:4;17860:20;17856:1;17845:9;17841:17;17834:47;17898:131;18024:4;17898:131;:::i;:::-;17890:139;;17617:419;;;:::o;18042:223::-;18182:34;18178:1;18170:6;18166:14;18159:58;18251:6;18246:2;18238:6;18234:15;18227:31;18042:223;:::o;18271:366::-;18413:3;18434:67;18498:2;18493:3;18434:67;:::i;:::-;18427:74;;18510:93;18599:3;18510:93;:::i;:::-;18628:2;18623:3;18619:12;18612:19;;18271:366;;;:::o;18643:419::-;18809:4;18847:2;18836:9;18832:18;18824:26;;18896:9;18890:4;18886:20;18882:1;18871:9;18867:17;18860:47;18924:131;19050:4;18924:131;:::i;:::-;18916:139;;18643:419;;;:::o;19068:221::-;19208:34;19204:1;19196:6;19192:14;19185:58;19277:4;19272:2;19264:6;19260:15;19253:29;19068:221;:::o;19295:366::-;19437:3;19458:67;19522:2;19517:3;19458:67;:::i;:::-;19451:74;;19534:93;19623:3;19534:93;:::i;:::-;19652:2;19647:3;19643:12;19636:19;;19295:366;;;:::o;19667:419::-;19833:4;19871:2;19860:9;19856:18;19848:26;;19920:9;19914:4;19910:20;19906:1;19895:9;19891:17;19884:47;19948:131;20074:4;19948:131;:::i;:::-;19940:139;;19667:419;;;:::o;20092:224::-;20232:34;20228:1;20220:6;20216:14;20209:58;20301:7;20296:2;20288:6;20284:15;20277:32;20092:224;:::o;20322:366::-;20464:3;20485:67;20549:2;20544:3;20485:67;:::i;:::-;20478:74;;20561:93;20650:3;20561:93;:::i;:::-;20679:2;20674:3;20670:12;20663:19;;20322:366;;;:::o;20694:419::-;20860:4;20898:2;20887:9;20883:18;20875:26;;20947:9;20941:4;20937:20;20933:1;20922:9;20918:17;20911:47;20975:131;21101:4;20975:131;:::i;:::-;20967:139;;20694:419;;;:::o;21119:222::-;21259:34;21255:1;21247:6;21243:14;21236:58;21328:5;21323:2;21315:6;21311:15;21304:30;21119:222;:::o;21347:366::-;21489:3;21510:67;21574:2;21569:3;21510:67;:::i;:::-;21503:74;;21586:93;21675:3;21586:93;:::i;:::-;21704:2;21699:3;21695:12;21688:19;;21347:366;;;:::o;21719:419::-;21885:4;21923:2;21912:9;21908:18;21900:26;;21972:9;21966:4;21962:20;21958:1;21947:9;21943:17;21936:47;22000:131;22126:4;22000:131;:::i;:::-;21992:139;;21719:419;;;:::o;22144:172::-;22284:24;22280:1;22272:6;22268:14;22261:48;22144:172;:::o;22322:366::-;22464:3;22485:67;22549:2;22544:3;22485:67;:::i;:::-;22478:74;;22561:93;22650:3;22561:93;:::i;:::-;22679:2;22674:3;22670:12;22663:19;;22322:366;;;:::o;22694:419::-;22860:4;22898:2;22887:9;22883:18;22875:26;;22947:9;22941:4;22937:20;22933:1;22922:9;22918:17;22911:47;22975:131;23101:4;22975:131;:::i;:::-;22967:139;;22694:419;;;:::o;23119:240::-;23259:34;23255:1;23247:6;23243:14;23236:58;23328:23;23323:2;23315:6;23311:15;23304:48;23119:240;:::o;23365:366::-;23507:3;23528:67;23592:2;23587:3;23528:67;:::i;:::-;23521:74;;23604:93;23693:3;23604:93;:::i;:::-;23722:2;23717:3;23713:12;23706:19;;23365:366;;;:::o;23737:419::-;23903:4;23941:2;23930:9;23926:18;23918:26;;23990:9;23984:4;23980:20;23976:1;23965:9;23961:17;23954:47;24018:131;24144:4;24018:131;:::i;:::-;24010:139;;23737:419;;;:::o;24162:305::-;24202:3;24221:20;24239:1;24221:20;:::i;:::-;24216:25;;24255:20;24273:1;24255:20;:::i;:::-;24250:25;;24409:1;24341:66;24337:74;24334:1;24331:81;24328:107;;;24415:18;;:::i;:::-;24328:107;24459:1;24456;24452:9;24445:16;;24162:305;;;;:::o;24473:169::-;24613:21;24609:1;24601:6;24597:14;24590:45;24473:169;:::o;24648:366::-;24790:3;24811:67;24875:2;24870:3;24811:67;:::i;:::-;24804:74;;24887:93;24976:3;24887:93;:::i;:::-;25005:2;25000:3;24996:12;24989:19;;24648:366;;;:::o;25020:419::-;25186:4;25224:2;25213:9;25209:18;25201:26;;25273:9;25267:4;25263:20;25259:1;25248:9;25244:17;25237:47;25301:131;25427:4;25301:131;:::i;:::-;25293:139;;25020:419;;;:::o;25445:191::-;25485:4;25505:20;25523:1;25505:20;:::i;:::-;25500:25;;25539:20;25557:1;25539:20;:::i;:::-;25534:25;;25578:1;25575;25572:8;25569:34;;;25583:18;;:::i;:::-;25569:34;25628:1;25625;25621:9;25613:17;;25445:191;;;;:::o;25642:225::-;25782:34;25778:1;25770:6;25766:14;25759:58;25851:8;25846:2;25838:6;25834:15;25827:33;25642:225;:::o;25873:366::-;26015:3;26036:67;26100:2;26095:3;26036:67;:::i;:::-;26029:74;;26112:93;26201:3;26112:93;:::i;:::-;26230:2;26225:3;26221:12;26214:19;;25873:366;;;:::o;26245:419::-;26411:4;26449:2;26438:9;26434:18;26426:26;;26498:9;26492:4;26488:20;26484:1;26473:9;26469:17;26462:47;26526:131;26652:4;26526:131;:::i;:::-;26518:139;;26245:419;;;:::o;26670:180::-;26718:77;26715:1;26708:88;26815:4;26812:1;26805:15;26839:4;26836:1;26829:15;26856:180;26904:77;26901:1;26894:88;27001:4;26998:1;26991:15;27025:4;27022:1;27015:15;27042:85;27087:7;27116:5;27105:16;;27042:85;;;:::o;27133:158::-;27191:9;27224:61;27242:42;27251:32;27277:5;27251:32;:::i;:::-;27242:42;:::i;:::-;27224:61;:::i;:::-;27211:74;;27133:158;;;:::o;27297:147::-;27392:45;27431:5;27392:45;:::i;:::-;27387:3;27380:58;27297:147;;:::o;27450:114::-;27517:6;27551:5;27545:12;27535:22;;27450:114;;;:::o;27570:184::-;27669:11;27703:6;27698:3;27691:19;27743:4;27738:3;27734:14;27719:29;;27570:184;;;;:::o;27760:132::-;27827:4;27850:3;27842:11;;27880:4;27875:3;27871:14;27863:22;;27760:132;;;:::o;27898:108::-;27975:24;27993:5;27975:24;:::i;:::-;27970:3;27963:37;27898:108;;:::o;28012:179::-;28081:10;28102:46;28144:3;28136:6;28102:46;:::i;:::-;28180:4;28175:3;28171:14;28157:28;;28012:179;;;;:::o;28197:113::-;28267:4;28299;28294:3;28290:14;28282:22;;28197:113;;;:::o;28346:732::-;28465:3;28494:54;28542:5;28494:54;:::i;:::-;28564:86;28643:6;28638:3;28564:86;:::i;:::-;28557:93;;28674:56;28724:5;28674:56;:::i;:::-;28753:7;28784:1;28769:284;28794:6;28791:1;28788:13;28769:284;;;28870:6;28864:13;28897:63;28956:3;28941:13;28897:63;:::i;:::-;28890:70;;28983:60;29036:6;28983:60;:::i;:::-;28973:70;;28829:224;28816:1;28813;28809:9;28804:14;;28769:284;;;28773:14;29069:3;29062:10;;28470:608;;;28346:732;;;;:::o;29084:831::-;29347:4;29385:3;29374:9;29370:19;29362:27;;29399:71;29467:1;29456:9;29452:17;29443:6;29399:71;:::i;:::-;29480:80;29556:2;29545:9;29541:18;29532:6;29480:80;:::i;:::-;29607:9;29601:4;29597:20;29592:2;29581:9;29577:18;29570:48;29635:108;29738:4;29729:6;29635:108;:::i;:::-;29627:116;;29753:72;29821:2;29810:9;29806:18;29797:6;29753:72;:::i;:::-;29835:73;29903:3;29892:9;29888:19;29879:6;29835:73;:::i;:::-;29084:831;;;;;;;;:::o

Swarm Source

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