Token

SuperSonic1 (SUPERSONIC1)

Overview

Max Total Supply

1,000,000,000 SUPERSONIC1

Holders

4

Market

Price

-

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
999,999,331.273661531786669603 SUPERSONIC1

Value
$0.00
0x30ecc3cf7a0742880066fc085978d7dffcd46236
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
SuperSonic1

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
paris EvmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2024-12-20
*/

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

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

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

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

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

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

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

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

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

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

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

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


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

    address public constant deadAddress = address(0xdead);
    bool private swapping;
    address public revShareWallet;
    address public teamWallet;
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

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

    bool public blacklistRenounced = false;

    mapping(address => bool) blacklisted;

    uint256 public buyTotalFees;
    uint256 public buyRevShareFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTeamFee;

    uint256 public sellTotalFees;
    uint256 public sellRevShareFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTeamFee;

    uint256 public tokensForRevShare;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTeam;

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

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    bool public preMigrationPhase = true;
    mapping(address => bool) public preMigrationTransferrable;



    event ExcludeFromFees(address indexed account, bool isExcluded);



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

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

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

    constructor() ERC20("SuperSonic1", "SUPERSONIC1") {


    


        uint256 _buyRevShareFee = 2;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyTeamFee = 2;

        uint256 _sellRevShareFee = 2;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellTeamFee = 2;

        uint256 totalSupply = 1_000_000_000 * 1e18;

        maxTransactionAmount = 10_000_000 * 1e18; // 1%
        maxWallet = 10_000_000 * 1e18; // 1% 
        swapTokensAtAmount = (totalSupply * 5) / 10000000; // 0.05% 

        buyRevShareFee = _buyRevShareFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTeamFee = _buyTeamFee;
        buyTotalFees = buyRevShareFee + buyLiquidityFee + buyTeamFee;

        sellRevShareFee = _sellRevShareFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTeamFee = _sellTeamFee;
        sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee;

        revShareWallet = address(0x30eCc3cF7A0742880066fc085978D7DFFcd46236); // set as revShare wallet
        teamWallet = owner(); // set as team 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);

        preMigrationTransferrable[owner()] = 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;
        preMigrationPhase = false;
    }

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


    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 5) / 1000000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 10) / 1000) / 1e18,
            "Cannot set maxWallet lower than 1.0%"
        );
        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 _revShareFee,
        uint256 _liquidityFee,
        uint256 _teamFee
    ) external onlyOwner {
        buyRevShareFee = _revShareFee;
        buyLiquidityFee = _liquidityFee;
        buyTeamFee = _teamFee;
        buyTotalFees = buyRevShareFee + buyLiquidityFee + buyTeamFee;
        require(buyTotalFees <= 10, "Buy fees must be <= 10.");
    }

    function updateSellFees(
        uint256 _revShareFee,
        uint256 _liquidityFee,
        uint256 _teamFee
    ) external onlyOwner {
        sellRevShareFee = _revShareFee;
        sellLiquidityFee = _liquidityFee;
        sellTeamFee = _teamFee;
        sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee;
        require(sellTotalFees <= 10, "Sell fees must be <= 10.");
    }

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





    function updateRevShareWallet(address newRevShareWallet) external onlyOwner {
        emit revShareWalletUpdated(newRevShareWallet, revShareWallet);
        revShareWallet = newRevShareWallet;
    }

    function updateTeamWallet(address newWallet) external onlyOwner {
        emit teamWalletUpdated(newWallet, teamWallet);
        teamWallet = newWallet;
    }

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

    function isBlacklisted(address account) public view returns (bool) {
        return blacklisted[account];
    }

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

        if (preMigrationPhase) {
            require(preMigrationTransferrable[from], "Not authorized to transfer pre-migration.");
        }

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

     
        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForTeam += (fees * sellTeamFee) / sellTotalFees;
                tokensForRevShare += (fees * sellRevShareFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForTeam += (fees * buyTeamFee) / buyTotalFees;
                tokensForRevShare += (fees * buyRevShareFee) / buyTotalFees;
            }

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

            amount -= fees;
        }

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


    function withdrawStuckSuperSonic1() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawStuckToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

    function withdrawStuckEth(address toAddr) external onlyOwner {
        (bool success, ) = toAddr.call{
            value: address(this).balance
        } ("");
        require(success);
    }


    function renounceBlacklist() public onlyOwner {
        blacklistRenounced = true;
    }

    function blacklist(address _addr) public onlyOwner {
        require(!blacklistRenounced, "Team has revoked blacklist rights");

        blacklisted[_addr] = true;
    }


    function blacklistLiquidityPool(address lpAddress) public onlyOwner {
        require(!blacklistRenounced, "Team has revoked blacklist rights");
 
        blacklisted[lpAddress] = true;
    }


    function unblacklist(address _addr) public onlyOwner {
        blacklisted[_addr] = false;
    }

    function setPreMigrationTransferable(address _addr, bool isAuthorized) public onlyOwner {
        preMigrationTransferrable[_addr] = isAuthorized;
        excludeFromFees(_addr, isAuthorized);
        excludeFromMaxTransaction(_addr, isAuthorized);
    }
}

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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"revShareWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWalletUpdated","type":"event"},{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"}],"name":"blacklistLiquidityPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blacklistRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"preMigrationPhase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preMigrationTransferrable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revShareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"isAuthorized","type":"bool"}],"name":"setPreMigrationTransferable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":[{"internalType":"address","name":"_addr","type":"address"}],"name":"unblacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revShareFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateBuyFees","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":"address","name":"newRevShareWallet","type":"address"}],"name":"updateRevShareWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revShareFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","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"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckSuperSonic1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506000600b60036101000a81548160ff0219169083151502179055506001601b60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600b81526020017f5375706572536f6e6963310000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f5355504552534f4e494331000000000000000000000000000000000000000000815250816003908162000116919062000b18565b50806004908162000128919062000b18565b5050506200014b6200013f6200040060201b60201c565b6200040860201b60201c565b60006002905060006001905060006002905060006002905060006001905060006002905060006b033b2e3c9fd0803ce800000090506a084595161401484a0000006008819055506a084595161401484a000000600a8190555062989680600582620001b7919062000c2e565b620001c3919062000ca8565b60098190555086600e8190555085600f8190555084601081905550601054600f54600e54620001f3919062000ce0565b620001ff919062000ce0565b600d819055508360128190555082601381905550816014819055506014546013546012546200022f919062000ce0565b6200023b919062000ce0565b6011819055507330ecc3cf7a0742880066fc085978d7dffcd46236600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002a6620004ce60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000308620002fa620004ce60201b60201c565b6001620004f860201b60201c565b6200031b306001620004f860201b60201c565b6200033061dead6001620004f860201b60201c565b6200035262000344620004ce60201b60201c565b60016200063260201b60201c565b620003653060016200063260201b60201c565b6200037a61dead60016200063260201b60201c565b6001601c600062000390620004ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003f333826200071c60201b60201c565b5050505050505062000e78565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620005086200040060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200052e620004ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000587576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200057e9062000d7c565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000626919062000dbb565b60405180910390a25050565b620006426200040060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000668620004ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620006c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006b89062000d7c565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200078e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007859062000e28565b60405180910390fd5b620007a2600083836200089460201b60201c565b8060026000828254620007b6919062000ce0565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200080d919062000ce0565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000874919062000e5b565b60405180910390a362000890600083836200089960201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200092057607f821691505b602082108103620009365762000935620008d8565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000961565b620009ac868362000961565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620009f9620009f3620009ed84620009c4565b620009ce565b620009c4565b9050919050565b6000819050919050565b62000a1583620009d8565b62000a2d62000a248262000a00565b8484546200096e565b825550505050565b600090565b62000a4462000a35565b62000a5181848462000a0a565b505050565b5b8181101562000a795762000a6d60008262000a3a565b60018101905062000a57565b5050565b601f82111562000ac85762000a92816200093c565b62000a9d8462000951565b8101602085101562000aad578190505b62000ac562000abc8562000951565b83018262000a56565b50505b505050565b600082821c905092915050565b600062000aed6000198460080262000acd565b1980831691505092915050565b600062000b08838362000ada565b9150826002028217905092915050565b62000b23826200089e565b67ffffffffffffffff81111562000b3f5762000b3e620008a9565b5b62000b4b825462000907565b62000b5882828562000a7d565b600060209050601f83116001811462000b90576000841562000b7b578287015190505b62000b87858262000afa565b86555062000bf7565b601f19841662000ba0866200093c565b60005b8281101562000bca5784890151825560018201915060208501945060208101905062000ba3565b8683101562000bea578489015162000be6601f89168262000ada565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c3b82620009c4565b915062000c4883620009c4565b925082820262000c5881620009c4565b9150828204841483151762000c725762000c7162000bff565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000cb582620009c4565b915062000cc283620009c4565b92508262000cd55762000cd462000c79565b5b828204905092915050565b600062000ced82620009c4565b915062000cfa83620009c4565b925082820190508082111562000d155762000d1462000bff565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d6460208362000d1b565b915062000d718262000d2c565b602082019050919050565b6000602082019050818103600083015262000d978162000d55565b9050919050565b60008115159050919050565b62000db58162000d9e565b82525050565b600060208201905062000dd2600083018462000daa565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e10601f8362000d1b565b915062000e1d8262000dd8565b602082019050919050565b6000602082019050818103600083015262000e438162000e01565b9050919050565b62000e5581620009c4565b82525050565b600060208201905062000e72600083018462000e4a565b92915050565b6150df8062000e886000396000f3fe6080604052600436106103a65760003560e01c80637cb332bb116101e7578063c17b5b8c1161010d578063e2f45605116100a0578063f8b45b051161006f578063f8b45b0514610daf578063f9f92be414610dda578063fde83a3414610e03578063fe575a8714610e2e576103ad565b8063e2f4560514610d05578063f11a24d314610d30578063f2fde38b14610d5b578063f637434214610d84576103ad565b8063d729715f116100dc578063d729715f14610c49578063d85ba06314610c74578063dd62ed3e14610c9f578063e19b282314610cdc576103ad565b8063c17b5b8c14610b8f578063c18bc19514610bb8578063c8c8ebe414610be1578063d257b34f14610c0c576103ad565b8063a457c2d711610185578063b62496f511610154578063b62496f514610ad5578063bbc0c74214610b12578063bc205ad314610b3d578063c024666814610b66576103ad565b8063a457c2d714610a09578063a9059cbb14610a46578063aa0e438814610a83578063adee28ff14610aac576103ad565b80638da5cb5b116101c15780638da5cb5b1461095f578063924de9b71461098a57806395d89b41146109b35780639c2e4ac6146109de576103ad565b80637cb332bb146108f65780638095d5641461091f5780638a8c523c14610948576103ad565b80633dc599ff116102cc5780636ddd17131161026a5780637571336a116102395780637571336a1461085057806375e3661e14610879578063782c4e99146108a25780637ca8448a146108cd576103ad565b80636ddd1713146107a657806370a08231146107d1578063715018a61461080e578063751039fc14610825576103ad565b80634fbee193116102a65780634fbee193146106fc57806359927044146107395780635f189361146107645780636a486a8e1461077b576103ad565b80633dc599ff146106695780634a62bb65146106945780634e29e523146106bf576103ad565b806319eab0421161034457806324b9f3c11161031357806324b9f3c1146105ab57806327c8f835146105d6578063313ce56714610601578063395093511461062c576103ad565b806319eab042146104ef5780631a8145bb1461051a578063203e727e1461054557806323b872dd1461056e576103ad565b806310d5de531161038057806310d5de5314610445578063156c2f351461048257806318160ddd146104ad578063185bb341146104d8576103ad565b806306fdde03146103b2578063095ea7b3146103dd5780630e922ca71461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e6b565b6040516103d49190613d0a565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190613dc5565b610efd565b6040516104119190613e20565b60405180910390f35b34801561042657600080fd5b5061042f610f1b565b60405161043c9190613e20565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613e3b565b610f2e565b6040516104799190613e20565b60405180910390f35b34801561048e57600080fd5b50610497610f4e565b6040516104a49190613e77565b60405180910390f35b3480156104b957600080fd5b506104c2610f54565b6040516104cf9190613e77565b60405180910390f35b3480156104e457600080fd5b506104ed610f5e565b005b3480156104fb57600080fd5b50610504611121565b6040516105119190613e77565b60405180910390f35b34801561052657600080fd5b5061052f611127565b60405161053c9190613e77565b60405180910390f35b34801561055157600080fd5b5061056c60048036038101906105679190613e92565b61112d565b005b34801561057a57600080fd5b5061059560048036038101906105909190613ebf565b61123c565b6040516105a29190613e20565b60405180910390f35b3480156105b757600080fd5b506105c0611334565b6040516105cd9190613e77565b60405180910390f35b3480156105e257600080fd5b506105eb61133a565b6040516105f89190613f21565b60405180910390f35b34801561060d57600080fd5b50610616611340565b6040516106239190613f58565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190613dc5565b611349565b6040516106609190613e20565b60405180910390f35b34801561067557600080fd5b5061067e6113f5565b60405161068b9190613e20565b60405180910390f35b3480156106a057600080fd5b506106a9611408565b6040516106b69190613e20565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613e3b565b61141b565b6040516106f39190613e20565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613e3b565b61143b565b6040516107309190613e20565b60405180910390f35b34801561074557600080fd5b5061074e611491565b60405161075b9190613f21565b60405180910390f35b34801561077057600080fd5b506107796114b7565b005b34801561078757600080fd5b50610790611550565b60405161079d9190613e77565b60405180910390f35b3480156107b257600080fd5b506107bb611556565b6040516107c89190613e20565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613e3b565b611569565b6040516108059190613e77565b60405180910390f35b34801561081a57600080fd5b506108236115b1565b005b34801561083157600080fd5b5061083a611639565b6040516108479190613e20565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613f9f565b6116d9565b005b34801561088557600080fd5b506108a0600480360381019061089b9190613e3b565b6117b0565b005b3480156108ae57600080fd5b506108b7611887565b6040516108c49190613f21565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef9190613e3b565b6118ad565b005b34801561090257600080fd5b5061091d60048036038101906109189190613e3b565b6119a3565b005b34801561092b57600080fd5b5061094660048036038101906109419190613fdf565b611adf565b005b34801561095457600080fd5b5061095d611bde565b005b34801561096b57600080fd5b50610974611cad565b6040516109819190613f21565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac9190614032565b611cd7565b005b3480156109bf57600080fd5b506109c8611d70565b6040516109d59190613d0a565b60405180910390f35b3480156109ea57600080fd5b506109f3611e02565b604051610a009190613e77565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190613dc5565b611e08565b604051610a3d9190613e20565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613dc5565b611ef3565b604051610a7a9190613e20565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613f9f565b611f11565b005b348015610ab857600080fd5b50610ad36004803603810190610ace9190613e3b565b611ffc565b005b348015610ae157600080fd5b50610afc6004803603810190610af79190613e3b565b612138565b604051610b099190613e20565b60405180910390f35b348015610b1e57600080fd5b50610b27612158565b604051610b349190613e20565b60405180910390f35b348015610b4957600080fd5b50610b646004803603810190610b5f919061405f565b61216b565b005b348015610b7257600080fd5b50610b8d6004803603810190610b889190613f9f565b612358565b005b348015610b9b57600080fd5b50610bb66004803603810190610bb19190613fdf565b61247d565b005b348015610bc457600080fd5b50610bdf6004803603810190610bda9190613e92565b61257c565b005b348015610bed57600080fd5b50610bf661268b565b604051610c039190613e77565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190613e92565b612691565b604051610c409190613e20565b60405180910390f35b348015610c5557600080fd5b50610c5e6127e8565b604051610c6b9190613e77565b60405180910390f35b348015610c8057600080fd5b50610c896127ee565b604051610c969190613e77565b60405180910390f35b348015610cab57600080fd5b50610cc66004803603810190610cc1919061405f565b6127f4565b604051610cd39190613e77565b60405180910390f35b348015610ce857600080fd5b50610d036004803603810190610cfe9190613e3b565b61287b565b005b348015610d1157600080fd5b50610d1a6129a2565b604051610d279190613e77565b60405180910390f35b348015610d3c57600080fd5b50610d456129a8565b604051610d529190613e77565b60405180910390f35b348015610d6757600080fd5b50610d826004803603810190610d7d9190613e3b565b6129ae565b005b348015610d9057600080fd5b50610d99612aa5565b604051610da69190613e77565b60405180910390f35b348015610dbb57600080fd5b50610dc4612aab565b604051610dd19190613e77565b60405180910390f35b348015610de657600080fd5b50610e016004803603810190610dfc9190613e3b565b612ab1565b005b348015610e0f57600080fd5b50610e18612bd8565b604051610e259190613e77565b60405180910390f35b348015610e3a57600080fd5b50610e556004803603810190610e509190613e3b565b612bde565b604051610e629190613e20565b60405180910390f35b606060038054610e7a906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea6906140ce565b8015610ef35780601f10610ec857610100808354040283529160200191610ef3565b820191906000526020600020905b815481529060010190602001808311610ed657829003601f168201915b5050505050905090565b6000610f11610f0a612c34565b8484612c3c565b6001905092915050565b601b60009054906101000a900460ff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b600e5481565b6000600254905090565b610f66612c34565b73ffffffffffffffffffffffffffffffffffffffff16610f84611cad565b73ffffffffffffffffffffffffffffffffffffffff1614610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd19061414b565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110159190613f21565b602060405180830381865afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110569190614180565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016110939291906141ad565b6020604051808303816000875af11580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d691906141eb565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561111d573d6000803e3d6000fd5b5050565b60125481565b60165481565b611135612c34565b73ffffffffffffffffffffffffffffffffffffffff16611153611cad565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061414b565b60405180910390fd5b670de0b6b3a76400006103e860056111bf610f54565b6111c99190614247565b6111d391906142b8565b6111dd91906142b8565b81101561121f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112169061435b565b60405180910390fd5b670de0b6b3a7640000816112339190614247565b60088190555050565b6000611249848484612e05565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611294612c34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b906143ed565b60405180910390fd5b61132885611320612c34565b858403612c3c565b60019150509392505050565b60155481565b61dead81565b60006012905090565b60006113eb611356612c34565b848460016000611364612c34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113e6919061440d565b612c3c565b6001905092915050565b600b60039054906101000a900460ff1681565b600b60009054906101000a900460ff1681565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114bf612c34565b73ffffffffffffffffffffffffffffffffffffffff166114dd611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a9061414b565b60405180910390fd5b6001600b60036101000a81548160ff021916908315150217905550565b60115481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b9612c34565b73ffffffffffffffffffffffffffffffffffffffff166115d7611cad565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116249061414b565b60405180910390fd5b61163760006138ff565b565b6000611643612c34565b73ffffffffffffffffffffffffffffffffffffffff16611661611cad565b73ffffffffffffffffffffffffffffffffffffffff16146116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae9061414b565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6116e1612c34565b73ffffffffffffffffffffffffffffffffffffffff166116ff611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c9061414b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117b8612c34565b73ffffffffffffffffffffffffffffffffffffffff166117d6611cad565b73ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061414b565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118b5612c34565b73ffffffffffffffffffffffffffffffffffffffff166118d3611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611929576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119209061414b565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff164760405161194f90614472565b60006040518083038185875af1925050503d806000811461198c576040519150601f19603f3d011682016040523d82523d6000602084013e611991565b606091505b505090508061199f57600080fd5b5050565b6119ab612c34565b73ffffffffffffffffffffffffffffffffffffffff166119c9611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a169061414b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ae7612c34565b73ffffffffffffffffffffffffffffffffffffffff16611b05611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b529061414b565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611b83919061440d565b611b8d919061440d565b600d81905550600a600d541115611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd0906144d3565b60405180910390fd5b505050565b611be6612c34565b73ffffffffffffffffffffffffffffffffffffffff16611c04611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c519061414b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cdf612c34565b73ffffffffffffffffffffffffffffffffffffffff16611cfd611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a9061414b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611d7f906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611dab906140ce565b8015611df85780601f10611dcd57610100808354040283529160200191611df8565b820191906000526020600020905b815481529060010190602001808311611ddb57829003601f168201915b5050505050905090565b60105481565b60008060016000611e17612c34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90614565565b60405180910390fd5b611ee8611edf612c34565b85858403612c3c565b600191505092915050565b6000611f07611f00612c34565b8484612e05565b6001905092915050565b611f19612c34565b73ffffffffffffffffffffffffffffffffffffffff16611f37611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f849061414b565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611fee8282612358565b611ff882826116d9565b5050565b612004612c34565b73ffffffffffffffffffffffffffffffffffffffff16612022611cad565b73ffffffffffffffffffffffffffffffffffffffff1614612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f9061414b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612173612c34565b73ffffffffffffffffffffffffffffffffffffffff16612191611cad565b73ffffffffffffffffffffffffffffffffffffffff16146121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de9061414b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d906145d1565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122919190613f21565b602060405180830381865afa1580156122ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d29190614180565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161230f9291906141ad565b6020604051808303816000875af115801561232e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235291906141eb565b50505050565b612360612c34565b73ffffffffffffffffffffffffffffffffffffffff1661237e611cad565b73ffffffffffffffffffffffffffffffffffffffff16146123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb9061414b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516124719190613e20565b60405180910390a25050565b612485612c34565b73ffffffffffffffffffffffffffffffffffffffff166124a3611cad565b73ffffffffffffffffffffffffffffffffffffffff16146124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f09061414b565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254612521919061440d565b61252b919061440d565b601181905550600a6011541115612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e9061463d565b60405180910390fd5b505050565b612584612c34565b73ffffffffffffffffffffffffffffffffffffffff166125a2611cad565b73ffffffffffffffffffffffffffffffffffffffff16146125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef9061414b565b60405180910390fd5b670de0b6b3a76400006103e8600a61260e610f54565b6126189190614247565b61262291906142b8565b61262c91906142b8565b81101561266e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612665906146cf565b60405180910390fd5b670de0b6b3a7640000816126829190614247565b600a8190555050565b60085481565b600061269b612c34565b73ffffffffffffffffffffffffffffffffffffffff166126b9611cad565b73ffffffffffffffffffffffffffffffffffffffff161461270f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127069061414b565b60405180910390fd5b6305f5e100600161271e610f54565b6127289190614247565b61273291906142b8565b821015612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90614761565b60405180910390fd5b620f42406005612782610f54565b61278c9190614247565b61279691906142b8565b8211156127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906147f3565b60405180910390fd5b8160098190555060019050919050565b60145481565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612883612c34565b73ffffffffffffffffffffffffffffffffffffffff166128a1611cad565b73ffffffffffffffffffffffffffffffffffffffff16146128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee9061414b565b60405180910390fd5b600b60039054906101000a900460ff1615612947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293e90614885565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60095481565b600f5481565b6129b6612c34565b73ffffffffffffffffffffffffffffffffffffffff166129d4611cad565b73ffffffffffffffffffffffffffffffffffffffff1614612a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a219061414b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9090614917565b60405180910390fd5b612aa2816138ff565b50565b60135481565b600a5481565b612ab9612c34565b73ffffffffffffffffffffffffffffffffffffffff16612ad7611cad565b73ffffffffffffffffffffffffffffffffffffffff1614612b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b249061414b565b60405180910390fd5b600b60039054906101000a900460ff1615612b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7490614885565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60175481565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca2906149a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190614a3b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612df89190613e77565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6b90614acd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda90614b39565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6790614ba5565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff490614c11565b60405180910390fd5b601b60009054906101000a900460ff161561309f57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614ca3565b60405180910390fd5b5b600081036130b8576130b3838360006139c5565b6138fa565b600b60009054906101000a900460ff16156135b3576130d5611cad565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131435750613113611cad565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561317c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131b6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131cf5750600560149054906101000a900460ff16155b156135b257600b60019054906101000a900460ff166132c957601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132895750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6132c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bf90614d0f565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561336c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613413576008548111156133b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ad90614da1565b60405180910390fd5b600a546133c283611569565b826133cd919061440d565b111561340e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340590614e0d565b60405180910390fd5b6135b1565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134b65750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561350557600854811115613500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f790614e9f565b60405180910390fd5b6135b0565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135af57600a5461356283611569565b8261356d919061440d565b11156135ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a590614e0d565b60405180910390fd5b5b5b5b5b5b6000600560149054906101000a900460ff16159050601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136695750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561367357600090505b600081156138ec57601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136d657506000601154115b156137a35761370360646136f560115486613c4490919063ffffffff16565b613c5a90919063ffffffff16565b9050601154601354826137169190614247565b61372091906142b8565b60166000828254613731919061440d565b92505081905550601154601454826137499190614247565b61375391906142b8565b60176000828254613764919061440d565b925050819055506011546012548261377c9190614247565b61378691906142b8565b60156000828254613797919061440d565b925050819055506138c8565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137fe57506000600d54115b156138c75761382b606461381d600d5486613c4490919063ffffffff16565b613c5a90919063ffffffff16565b9050600d54600f548261383e9190614247565b61384891906142b8565b60166000828254613859919061440d565b92505081905550600d54601054826138719190614247565b61387b91906142b8565b6017600082825461388c919061440d565b92505081905550600d54600e54826138a49190614247565b6138ae91906142b8565b601560008282546138bf919061440d565b925050819055505b5b60008111156138dd576138dc8530836139c5565b5b80836138e99190614ebf565b92505b6138f78585856139c5565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2b90614f65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9a90614ff7565b60405180910390fd5b613aae838383613c70565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b2b90615089565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bc7919061440d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c2b9190613e77565b60405180910390a3613c3e848484613c75565b50505050565b60008183613c529190614247565b905092915050565b60008183613c6891906142b8565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cb4578082015181840152602081019050613c99565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cdc82613c7a565b613ce68185613c85565b9350613cf6818560208601613c96565b613cff81613cc0565b840191505092915050565b60006020820190508181036000830152613d248184613cd1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d5c82613d31565b9050919050565b613d6c81613d51565b8114613d7757600080fd5b50565b600081359050613d8981613d63565b92915050565b6000819050919050565b613da281613d8f565b8114613dad57600080fd5b50565b600081359050613dbf81613d99565b92915050565b60008060408385031215613ddc57613ddb613d2c565b5b6000613dea85828601613d7a565b9250506020613dfb85828601613db0565b9150509250929050565b60008115159050919050565b613e1a81613e05565b82525050565b6000602082019050613e356000830184613e11565b92915050565b600060208284031215613e5157613e50613d2c565b5b6000613e5f84828501613d7a565b91505092915050565b613e7181613d8f565b82525050565b6000602082019050613e8c6000830184613e68565b92915050565b600060208284031215613ea857613ea7613d2c565b5b6000613eb684828501613db0565b91505092915050565b600080600060608486031215613ed857613ed7613d2c565b5b6000613ee686828701613d7a565b9350506020613ef786828701613d7a565b9250506040613f0886828701613db0565b9150509250925092565b613f1b81613d51565b82525050565b6000602082019050613f366000830184613f12565b92915050565b600060ff82169050919050565b613f5281613f3c565b82525050565b6000602082019050613f6d6000830184613f49565b92915050565b613f7c81613e05565b8114613f8757600080fd5b50565b600081359050613f9981613f73565b92915050565b60008060408385031215613fb657613fb5613d2c565b5b6000613fc485828601613d7a565b9250506020613fd585828601613f8a565b9150509250929050565b600080600060608486031215613ff857613ff7613d2c565b5b600061400686828701613db0565b935050602061401786828701613db0565b925050604061402886828701613db0565b9150509250925092565b60006020828403121561404857614047613d2c565b5b600061405684828501613f8a565b91505092915050565b6000806040838503121561407657614075613d2c565b5b600061408485828601613d7a565b925050602061409585828601613d7a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140e657607f821691505b6020821081036140f9576140f861409f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614135602083613c85565b9150614140826140ff565b602082019050919050565b6000602082019050818103600083015261416481614128565b9050919050565b60008151905061417a81613d99565b92915050565b60006020828403121561419657614195613d2c565b5b60006141a48482850161416b565b91505092915050565b60006040820190506141c26000830185613f12565b6141cf6020830184613e68565b9392505050565b6000815190506141e581613f73565b92915050565b60006020828403121561420157614200613d2c565b5b600061420f848285016141d6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061425282613d8f565b915061425d83613d8f565b925082820261426b81613d8f565b9150828204841483151761428257614281614218565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142c382613d8f565b91506142ce83613d8f565b9250826142de576142dd614289565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614345602f83613c85565b9150614350826142e9565b604082019050919050565b6000602082019050818103600083015261437481614338565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006143d7602883613c85565b91506143e28261437b565b604082019050919050565b60006020820190508181036000830152614406816143ca565b9050919050565b600061441882613d8f565b915061442383613d8f565b925082820190508082111561443b5761443a614218565b5b92915050565b600081905092915050565b50565b600061445c600083614441565b91506144678261444c565b600082019050919050565b600061447d8261444f565b9150819050919050565b7f4275792066656573206d757374206265203c3d2031302e000000000000000000600082015250565b60006144bd601783613c85565b91506144c882614487565b602082019050919050565b600060208201905081810360008301526144ec816144b0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061454f602583613c85565b915061455a826144f3565b604082019050919050565b6000602082019050818103600083015261457e81614542565b9050919050565b7f746f6b656e20616464726573732063616e6e6f74206265203000000000000000600082015250565b60006145bb601983613c85565b91506145c682614585565b602082019050919050565b600060208201905081810360008301526145ea816145ae565b9050919050565b7f53656c6c2066656573206d757374206265203c3d2031302e0000000000000000600082015250565b6000614627601883613c85565b9150614632826145f1565b602082019050919050565b600060208201905081810360008301526146568161461a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b60006146b9602483613c85565b91506146c48261465d565b604082019050919050565b600060208201905081810360008301526146e8816146ac565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061474b603583613c85565b9150614756826146ef565b604082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006147dd603483613c85565b91506147e882614781565b604082019050919050565b6000602082019050818103600083015261480c816147d0565b9050919050565b7f5465616d20686173207265766f6b656420626c61636b6c69737420726967687460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061486f602183613c85565b915061487a82614813565b604082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614901602683613c85565b915061490c826148a5565b604082019050919050565b60006020820190508181036000830152614930816148f4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614993602483613c85565b915061499e82614937565b604082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a25602283613c85565b9150614a30826149c9565b604082019050919050565b60006020820190508181036000830152614a5481614a18565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ab7602283613c85565b9150614ac282614a5b565b604082019050919050565b60006020820190508181036000830152614ae681614aaa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f2061646472600082015250565b6000614b23602083613c85565b9150614b2e82614aed565b602082019050919050565b60006020820190508181036000830152614b5281614b16565b9050919050565b7f53656e64657220626c61636b6c69737465640000000000000000000000000000600082015250565b6000614b8f601283613c85565b9150614b9a82614b59565b602082019050919050565b60006020820190508181036000830152614bbe81614b82565b9050919050565b7f526563656976657220626c61636b6c6973746564000000000000000000000000600082015250565b6000614bfb601483613c85565b9150614c0682614bc5565b602082019050919050565b60006020820190508181036000830152614c2a81614bee565b9050919050565b7f4e6f7420617574686f72697a656420746f207472616e73666572207072652d6d60008201527f6967726174696f6e2e0000000000000000000000000000000000000000000000602082015250565b6000614c8d602983613c85565b9150614c9882614c31565b604082019050919050565b60006020820190508181036000830152614cbc81614c80565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614cf9601683613c85565b9150614d0482614cc3565b602082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d8b603583613c85565b9150614d9682614d2f565b604082019050919050565b60006020820190508181036000830152614dba81614d7e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614df7601383613c85565b9150614e0282614dc1565b602082019050919050565b60006020820190508181036000830152614e2681614dea565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e89603683613c85565b9150614e9482614e2d565b604082019050919050565b60006020820190508181036000830152614eb881614e7c565b9050919050565b6000614eca82613d8f565b9150614ed583613d8f565b9250828203905081811115614eed57614eec614218565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f4f602583613c85565b9150614f5a82614ef3565b604082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe1602383613c85565b9150614fec82614f85565b604082019050919050565b6000602082019050818103600083015261501081614fd4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615073602683613c85565b915061507e82615017565b604082019050919050565b600060208201905081810360008301526150a281615066565b905091905056fea26469706673582212208e7d706dbab4c6dad31e11c49738313a6e844c4fd11a63f25d0b010f6da9d73b64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80637cb332bb116101e7578063c17b5b8c1161010d578063e2f45605116100a0578063f8b45b051161006f578063f8b45b0514610daf578063f9f92be414610dda578063fde83a3414610e03578063fe575a8714610e2e576103ad565b8063e2f4560514610d05578063f11a24d314610d30578063f2fde38b14610d5b578063f637434214610d84576103ad565b8063d729715f116100dc578063d729715f14610c49578063d85ba06314610c74578063dd62ed3e14610c9f578063e19b282314610cdc576103ad565b8063c17b5b8c14610b8f578063c18bc19514610bb8578063c8c8ebe414610be1578063d257b34f14610c0c576103ad565b8063a457c2d711610185578063b62496f511610154578063b62496f514610ad5578063bbc0c74214610b12578063bc205ad314610b3d578063c024666814610b66576103ad565b8063a457c2d714610a09578063a9059cbb14610a46578063aa0e438814610a83578063adee28ff14610aac576103ad565b80638da5cb5b116101c15780638da5cb5b1461095f578063924de9b71461098a57806395d89b41146109b35780639c2e4ac6146109de576103ad565b80637cb332bb146108f65780638095d5641461091f5780638a8c523c14610948576103ad565b80633dc599ff116102cc5780636ddd17131161026a5780637571336a116102395780637571336a1461085057806375e3661e14610879578063782c4e99146108a25780637ca8448a146108cd576103ad565b80636ddd1713146107a657806370a08231146107d1578063715018a61461080e578063751039fc14610825576103ad565b80634fbee193116102a65780634fbee193146106fc57806359927044146107395780635f189361146107645780636a486a8e1461077b576103ad565b80633dc599ff146106695780634a62bb65146106945780634e29e523146106bf576103ad565b806319eab0421161034457806324b9f3c11161031357806324b9f3c1146105ab57806327c8f835146105d6578063313ce56714610601578063395093511461062c576103ad565b806319eab042146104ef5780631a8145bb1461051a578063203e727e1461054557806323b872dd1461056e576103ad565b806310d5de531161038057806310d5de5314610445578063156c2f351461048257806318160ddd146104ad578063185bb341146104d8576103ad565b806306fdde03146103b2578063095ea7b3146103dd5780630e922ca71461041a576103ad565b366103ad57005b600080fd5b3480156103be57600080fd5b506103c7610e6b565b6040516103d49190613d0a565b60405180910390f35b3480156103e957600080fd5b5061040460048036038101906103ff9190613dc5565b610efd565b6040516104119190613e20565b60405180910390f35b34801561042657600080fd5b5061042f610f1b565b60405161043c9190613e20565b60405180910390f35b34801561045157600080fd5b5061046c60048036038101906104679190613e3b565b610f2e565b6040516104799190613e20565b60405180910390f35b34801561048e57600080fd5b50610497610f4e565b6040516104a49190613e77565b60405180910390f35b3480156104b957600080fd5b506104c2610f54565b6040516104cf9190613e77565b60405180910390f35b3480156104e457600080fd5b506104ed610f5e565b005b3480156104fb57600080fd5b50610504611121565b6040516105119190613e77565b60405180910390f35b34801561052657600080fd5b5061052f611127565b60405161053c9190613e77565b60405180910390f35b34801561055157600080fd5b5061056c60048036038101906105679190613e92565b61112d565b005b34801561057a57600080fd5b5061059560048036038101906105909190613ebf565b61123c565b6040516105a29190613e20565b60405180910390f35b3480156105b757600080fd5b506105c0611334565b6040516105cd9190613e77565b60405180910390f35b3480156105e257600080fd5b506105eb61133a565b6040516105f89190613f21565b60405180910390f35b34801561060d57600080fd5b50610616611340565b6040516106239190613f58565b60405180910390f35b34801561063857600080fd5b50610653600480360381019061064e9190613dc5565b611349565b6040516106609190613e20565b60405180910390f35b34801561067557600080fd5b5061067e6113f5565b60405161068b9190613e20565b60405180910390f35b3480156106a057600080fd5b506106a9611408565b6040516106b69190613e20565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613e3b565b61141b565b6040516106f39190613e20565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613e3b565b61143b565b6040516107309190613e20565b60405180910390f35b34801561074557600080fd5b5061074e611491565b60405161075b9190613f21565b60405180910390f35b34801561077057600080fd5b506107796114b7565b005b34801561078757600080fd5b50610790611550565b60405161079d9190613e77565b60405180910390f35b3480156107b257600080fd5b506107bb611556565b6040516107c89190613e20565b60405180910390f35b3480156107dd57600080fd5b506107f860048036038101906107f39190613e3b565b611569565b6040516108059190613e77565b60405180910390f35b34801561081a57600080fd5b506108236115b1565b005b34801561083157600080fd5b5061083a611639565b6040516108479190613e20565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190613f9f565b6116d9565b005b34801561088557600080fd5b506108a0600480360381019061089b9190613e3b565b6117b0565b005b3480156108ae57600080fd5b506108b7611887565b6040516108c49190613f21565b60405180910390f35b3480156108d957600080fd5b506108f460048036038101906108ef9190613e3b565b6118ad565b005b34801561090257600080fd5b5061091d60048036038101906109189190613e3b565b6119a3565b005b34801561092b57600080fd5b5061094660048036038101906109419190613fdf565b611adf565b005b34801561095457600080fd5b5061095d611bde565b005b34801561096b57600080fd5b50610974611cad565b6040516109819190613f21565b60405180910390f35b34801561099657600080fd5b506109b160048036038101906109ac9190614032565b611cd7565b005b3480156109bf57600080fd5b506109c8611d70565b6040516109d59190613d0a565b60405180910390f35b3480156109ea57600080fd5b506109f3611e02565b604051610a009190613e77565b60405180910390f35b348015610a1557600080fd5b50610a306004803603810190610a2b9190613dc5565b611e08565b604051610a3d9190613e20565b60405180910390f35b348015610a5257600080fd5b50610a6d6004803603810190610a689190613dc5565b611ef3565b604051610a7a9190613e20565b60405180910390f35b348015610a8f57600080fd5b50610aaa6004803603810190610aa59190613f9f565b611f11565b005b348015610ab857600080fd5b50610ad36004803603810190610ace9190613e3b565b611ffc565b005b348015610ae157600080fd5b50610afc6004803603810190610af79190613e3b565b612138565b604051610b099190613e20565b60405180910390f35b348015610b1e57600080fd5b50610b27612158565b604051610b349190613e20565b60405180910390f35b348015610b4957600080fd5b50610b646004803603810190610b5f919061405f565b61216b565b005b348015610b7257600080fd5b50610b8d6004803603810190610b889190613f9f565b612358565b005b348015610b9b57600080fd5b50610bb66004803603810190610bb19190613fdf565b61247d565b005b348015610bc457600080fd5b50610bdf6004803603810190610bda9190613e92565b61257c565b005b348015610bed57600080fd5b50610bf661268b565b604051610c039190613e77565b60405180910390f35b348015610c1857600080fd5b50610c336004803603810190610c2e9190613e92565b612691565b604051610c409190613e20565b60405180910390f35b348015610c5557600080fd5b50610c5e6127e8565b604051610c6b9190613e77565b60405180910390f35b348015610c8057600080fd5b50610c896127ee565b604051610c969190613e77565b60405180910390f35b348015610cab57600080fd5b50610cc66004803603810190610cc1919061405f565b6127f4565b604051610cd39190613e77565b60405180910390f35b348015610ce857600080fd5b50610d036004803603810190610cfe9190613e3b565b61287b565b005b348015610d1157600080fd5b50610d1a6129a2565b604051610d279190613e77565b60405180910390f35b348015610d3c57600080fd5b50610d456129a8565b604051610d529190613e77565b60405180910390f35b348015610d6757600080fd5b50610d826004803603810190610d7d9190613e3b565b6129ae565b005b348015610d9057600080fd5b50610d99612aa5565b604051610da69190613e77565b60405180910390f35b348015610dbb57600080fd5b50610dc4612aab565b604051610dd19190613e77565b60405180910390f35b348015610de657600080fd5b50610e016004803603810190610dfc9190613e3b565b612ab1565b005b348015610e0f57600080fd5b50610e18612bd8565b604051610e259190613e77565b60405180910390f35b348015610e3a57600080fd5b50610e556004803603810190610e509190613e3b565b612bde565b604051610e629190613e20565b60405180910390f35b606060038054610e7a906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea6906140ce565b8015610ef35780601f10610ec857610100808354040283529160200191610ef3565b820191906000526020600020905b815481529060010190602001808311610ed657829003601f168201915b5050505050905090565b6000610f11610f0a612c34565b8484612c3c565b6001905092915050565b601b60009054906101000a900460ff1681565b60196020528060005260406000206000915054906101000a900460ff1681565b600e5481565b6000600254905090565b610f66612c34565b73ffffffffffffffffffffffffffffffffffffffff16610f84611cad565b73ffffffffffffffffffffffffffffffffffffffff1614610fda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd19061414b565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016110159190613f21565b602060405180830381865afa158015611032573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110569190614180565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016110939291906141ad565b6020604051808303816000875af11580156110b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d691906141eb565b503373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f1935050505015801561111d573d6000803e3d6000fd5b5050565b60125481565b60165481565b611135612c34565b73ffffffffffffffffffffffffffffffffffffffff16611153611cad565b73ffffffffffffffffffffffffffffffffffffffff16146111a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111a09061414b565b60405180910390fd5b670de0b6b3a76400006103e860056111bf610f54565b6111c99190614247565b6111d391906142b8565b6111dd91906142b8565b81101561121f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112169061435b565b60405180910390fd5b670de0b6b3a7640000816112339190614247565b60088190555050565b6000611249848484612e05565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611294612c34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b906143ed565b60405180910390fd5b61132885611320612c34565b858403612c3c565b60019150509392505050565b60155481565b61dead81565b60006012905090565b60006113eb611356612c34565b848460016000611364612c34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546113e6919061440d565b612c3c565b6001905092915050565b600b60039054906101000a900460ff1681565b600b60009054906101000a900460ff1681565b601c6020528060005260406000206000915054906101000a900460ff1681565b6000601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114bf612c34565b73ffffffffffffffffffffffffffffffffffffffff166114dd611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a9061414b565b60405180910390fd5b6001600b60036101000a81548160ff021916908315150217905550565b60115481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6115b9612c34565b73ffffffffffffffffffffffffffffffffffffffff166115d7611cad565b73ffffffffffffffffffffffffffffffffffffffff161461162d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116249061414b565b60405180910390fd5b61163760006138ff565b565b6000611643612c34565b73ffffffffffffffffffffffffffffffffffffffff16611661611cad565b73ffffffffffffffffffffffffffffffffffffffff16146116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae9061414b565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6116e1612c34565b73ffffffffffffffffffffffffffffffffffffffff166116ff611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611755576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174c9061414b565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6117b8612c34565b73ffffffffffffffffffffffffffffffffffffffff166117d6611cad565b73ffffffffffffffffffffffffffffffffffffffff161461182c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118239061414b565b60405180910390fd5b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6118b5612c34565b73ffffffffffffffffffffffffffffffffffffffff166118d3611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611929576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119209061414b565b60405180910390fd5b60008173ffffffffffffffffffffffffffffffffffffffff164760405161194f90614472565b60006040518083038185875af1925050503d806000811461198c576040519150601f19603f3d011682016040523d82523d6000602084013e611991565b606091505b505090508061199f57600080fd5b5050565b6119ab612c34565b73ffffffffffffffffffffffffffffffffffffffff166119c9611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611a1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a169061414b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ae7612c34565b73ffffffffffffffffffffffffffffffffffffffff16611b05611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b529061414b565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611b83919061440d565b611b8d919061440d565b600d81905550600a600d541115611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd0906144d3565b60405180910390fd5b505050565b611be6612c34565b73ffffffffffffffffffffffffffffffffffffffff16611c04611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611c5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c519061414b565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506000601b60006101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611cdf612c34565b73ffffffffffffffffffffffffffffffffffffffff16611cfd611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611d53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4a9061414b565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611d7f906140ce565b80601f0160208091040260200160405190810160405280929190818152602001828054611dab906140ce565b8015611df85780601f10611dcd57610100808354040283529160200191611df8565b820191906000526020600020905b815481529060010190602001808311611ddb57829003601f168201915b5050505050905090565b60105481565b60008060016000611e17612c34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611ed4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ecb90614565565b60405180910390fd5b611ee8611edf612c34565b85858403612c3c565b600191505092915050565b6000611f07611f00612c34565b8484612e05565b6001905092915050565b611f19612c34565b73ffffffffffffffffffffffffffffffffffffffff16611f37611cad565b73ffffffffffffffffffffffffffffffffffffffff1614611f8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f849061414b565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611fee8282612358565b611ff882826116d9565b5050565b612004612c34565b73ffffffffffffffffffffffffffffffffffffffff16612022611cad565b73ffffffffffffffffffffffffffffffffffffffff1614612078576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206f9061414b565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612173612c34565b73ffffffffffffffffffffffffffffffffffffffff16612191611cad565b73ffffffffffffffffffffffffffffffffffffffff16146121e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121de9061414b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612256576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224d906145d1565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016122919190613f21565b602060405180830381865afa1580156122ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d29190614180565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161230f9291906141ad565b6020604051808303816000875af115801561232e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061235291906141eb565b50505050565b612360612c34565b73ffffffffffffffffffffffffffffffffffffffff1661237e611cad565b73ffffffffffffffffffffffffffffffffffffffff16146123d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123cb9061414b565b60405180910390fd5b80601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516124719190613e20565b60405180910390a25050565b612485612c34565b73ffffffffffffffffffffffffffffffffffffffff166124a3611cad565b73ffffffffffffffffffffffffffffffffffffffff16146124f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124f09061414b565b60405180910390fd5b826012819055508160138190555080601481905550601454601354601254612521919061440d565b61252b919061440d565b601181905550600a6011541115612577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256e9061463d565b60405180910390fd5b505050565b612584612c34565b73ffffffffffffffffffffffffffffffffffffffff166125a2611cad565b73ffffffffffffffffffffffffffffffffffffffff16146125f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ef9061414b565b60405180910390fd5b670de0b6b3a76400006103e8600a61260e610f54565b6126189190614247565b61262291906142b8565b61262c91906142b8565b81101561266e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612665906146cf565b60405180910390fd5b670de0b6b3a7640000816126829190614247565b600a8190555050565b60085481565b600061269b612c34565b73ffffffffffffffffffffffffffffffffffffffff166126b9611cad565b73ffffffffffffffffffffffffffffffffffffffff161461270f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127069061414b565b60405180910390fd5b6305f5e100600161271e610f54565b6127289190614247565b61273291906142b8565b821015612774576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276b90614761565b60405180910390fd5b620f42406005612782610f54565b61278c9190614247565b61279691906142b8565b8211156127d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cf906147f3565b60405180910390fd5b8160098190555060019050919050565b60145481565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612883612c34565b73ffffffffffffffffffffffffffffffffffffffff166128a1611cad565b73ffffffffffffffffffffffffffffffffffffffff16146128f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ee9061414b565b60405180910390fd5b600b60039054906101000a900460ff1615612947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293e90614885565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60095481565b600f5481565b6129b6612c34565b73ffffffffffffffffffffffffffffffffffffffff166129d4611cad565b73ffffffffffffffffffffffffffffffffffffffff1614612a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a219061414b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9090614917565b60405180910390fd5b612aa2816138ff565b50565b60135481565b600a5481565b612ab9612c34565b73ffffffffffffffffffffffffffffffffffffffff16612ad7611cad565b73ffffffffffffffffffffffffffffffffffffffff1614612b2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b249061414b565b60405180910390fd5b600b60039054906101000a900460ff1615612b7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7490614885565b60405180910390fd5b6001600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60175481565b6000600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca2906149a9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1190614a3b565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612df89190613e77565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612e74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6b90614acd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eda90614b39565b60405180910390fd5b600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f6790614ba5565b60405180910390fd5b600c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ffd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff490614c11565b60405180910390fd5b601b60009054906101000a900460ff161561309f57601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614ca3565b60405180910390fd5b5b600081036130b8576130b3838360006139c5565b6138fa565b600b60009054906101000a900460ff16156135b3576130d5611cad565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131435750613113611cad565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561317c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131b6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131cf5750600560149054906101000a900460ff16155b156135b257600b60019054906101000a900460ff166132c957601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132895750601860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6132c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132bf90614d0f565b60405180910390fd5b5b601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561336c5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613413576008548111156133b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ad90614da1565b60405180910390fd5b600a546133c283611569565b826133cd919061440d565b111561340e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161340590614e0d565b60405180910390fd5b6135b1565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134b65750601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561350557600854811115613500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134f790614e9f565b60405180910390fd5b6135b0565b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166135af57600a5461356283611569565b8261356d919061440d565b11156135ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135a590614e0d565b60405180910390fd5b5b5b5b5b5b6000600560149054906101000a900460ff16159050601860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806136695750601860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561367357600090505b600081156138ec57601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136d657506000601154115b156137a35761370360646136f560115486613c4490919063ffffffff16565b613c5a90919063ffffffff16565b9050601154601354826137169190614247565b61372091906142b8565b60166000828254613731919061440d565b92505081905550601154601454826137499190614247565b61375391906142b8565b60176000828254613764919061440d565b925050819055506011546012548261377c9190614247565b61378691906142b8565b60156000828254613797919061440d565b925050819055506138c8565b601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137fe57506000600d54115b156138c75761382b606461381d600d5486613c4490919063ffffffff16565b613c5a90919063ffffffff16565b9050600d54600f548261383e9190614247565b61384891906142b8565b60166000828254613859919061440d565b92505081905550600d54601054826138719190614247565b61387b91906142b8565b6017600082825461388c919061440d565b92505081905550600d54600e54826138a49190614247565b6138ae91906142b8565b601560008282546138bf919061440d565b925050819055505b5b60008111156138dd576138dc8530836139c5565b5b80836138e99190614ebf565b92505b6138f78585856139c5565b50505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a2b90614f65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613aa3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a9a90614ff7565b60405180910390fd5b613aae838383613c70565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b2b90615089565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bc7919061440d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c2b9190613e77565b60405180910390a3613c3e848484613c75565b50505050565b60008183613c529190614247565b905092915050565b60008183613c6891906142b8565b905092915050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cb4578082015181840152602081019050613c99565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cdc82613c7a565b613ce68185613c85565b9350613cf6818560208601613c96565b613cff81613cc0565b840191505092915050565b60006020820190508181036000830152613d248184613cd1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613d5c82613d31565b9050919050565b613d6c81613d51565b8114613d7757600080fd5b50565b600081359050613d8981613d63565b92915050565b6000819050919050565b613da281613d8f565b8114613dad57600080fd5b50565b600081359050613dbf81613d99565b92915050565b60008060408385031215613ddc57613ddb613d2c565b5b6000613dea85828601613d7a565b9250506020613dfb85828601613db0565b9150509250929050565b60008115159050919050565b613e1a81613e05565b82525050565b6000602082019050613e356000830184613e11565b92915050565b600060208284031215613e5157613e50613d2c565b5b6000613e5f84828501613d7a565b91505092915050565b613e7181613d8f565b82525050565b6000602082019050613e8c6000830184613e68565b92915050565b600060208284031215613ea857613ea7613d2c565b5b6000613eb684828501613db0565b91505092915050565b600080600060608486031215613ed857613ed7613d2c565b5b6000613ee686828701613d7a565b9350506020613ef786828701613d7a565b9250506040613f0886828701613db0565b9150509250925092565b613f1b81613d51565b82525050565b6000602082019050613f366000830184613f12565b92915050565b600060ff82169050919050565b613f5281613f3c565b82525050565b6000602082019050613f6d6000830184613f49565b92915050565b613f7c81613e05565b8114613f8757600080fd5b50565b600081359050613f9981613f73565b92915050565b60008060408385031215613fb657613fb5613d2c565b5b6000613fc485828601613d7a565b9250506020613fd585828601613f8a565b9150509250929050565b600080600060608486031215613ff857613ff7613d2c565b5b600061400686828701613db0565b935050602061401786828701613db0565b925050604061402886828701613db0565b9150509250925092565b60006020828403121561404857614047613d2c565b5b600061405684828501613f8a565b91505092915050565b6000806040838503121561407657614075613d2c565b5b600061408485828601613d7a565b925050602061409585828601613d7a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806140e657607f821691505b6020821081036140f9576140f861409f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614135602083613c85565b9150614140826140ff565b602082019050919050565b6000602082019050818103600083015261416481614128565b9050919050565b60008151905061417a81613d99565b92915050565b60006020828403121561419657614195613d2c565b5b60006141a48482850161416b565b91505092915050565b60006040820190506141c26000830185613f12565b6141cf6020830184613e68565b9392505050565b6000815190506141e581613f73565b92915050565b60006020828403121561420157614200613d2c565b5b600061420f848285016141d6565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061425282613d8f565b915061425d83613d8f565b925082820261426b81613d8f565b9150828204841483151761428257614281614218565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006142c382613d8f565b91506142ce83613d8f565b9250826142de576142dd614289565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b6000614345602f83613c85565b9150614350826142e9565b604082019050919050565b6000602082019050818103600083015261437481614338565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006143d7602883613c85565b91506143e28261437b565b604082019050919050565b60006020820190508181036000830152614406816143ca565b9050919050565b600061441882613d8f565b915061442383613d8f565b925082820190508082111561443b5761443a614218565b5b92915050565b600081905092915050565b50565b600061445c600083614441565b91506144678261444c565b600082019050919050565b600061447d8261444f565b9150819050919050565b7f4275792066656573206d757374206265203c3d2031302e000000000000000000600082015250565b60006144bd601783613c85565b91506144c882614487565b602082019050919050565b600060208201905081810360008301526144ec816144b0565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061454f602583613c85565b915061455a826144f3565b604082019050919050565b6000602082019050818103600083015261457e81614542565b9050919050565b7f746f6b656e20616464726573732063616e6e6f74206265203000000000000000600082015250565b60006145bb601983613c85565b91506145c682614585565b602082019050919050565b600060208201905081810360008301526145ea816145ae565b9050919050565b7f53656c6c2066656573206d757374206265203c3d2031302e0000000000000000600082015250565b6000614627601883613c85565b9150614632826145f1565b602082019050919050565b600060208201905081810360008301526146568161461a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b60006146b9602483613c85565b91506146c48261465d565b604082019050919050565b600060208201905081810360008301526146e8816146ac565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b600061474b603583613c85565b9150614756826146ef565b604082019050919050565b6000602082019050818103600083015261477a8161473e565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006147dd603483613c85565b91506147e882614781565b604082019050919050565b6000602082019050818103600083015261480c816147d0565b9050919050565b7f5465616d20686173207265766f6b656420626c61636b6c69737420726967687460008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061486f602183613c85565b915061487a82614813565b604082019050919050565b6000602082019050818103600083015261489e81614862565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614901602683613c85565b915061490c826148a5565b604082019050919050565b60006020820190508181036000830152614930816148f4565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614993602483613c85565b915061499e82614937565b604082019050919050565b600060208201905081810360008301526149c281614986565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a25602283613c85565b9150614a30826149c9565b604082019050919050565b60006020820190508181036000830152614a5481614a18565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ab7602283613c85565b9150614ac282614a5b565b604082019050919050565b60006020820190508181036000830152614ae681614aaa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f2061646472600082015250565b6000614b23602083613c85565b9150614b2e82614aed565b602082019050919050565b60006020820190508181036000830152614b5281614b16565b9050919050565b7f53656e64657220626c61636b6c69737465640000000000000000000000000000600082015250565b6000614b8f601283613c85565b9150614b9a82614b59565b602082019050919050565b60006020820190508181036000830152614bbe81614b82565b9050919050565b7f526563656976657220626c61636b6c6973746564000000000000000000000000600082015250565b6000614bfb601483613c85565b9150614c0682614bc5565b602082019050919050565b60006020820190508181036000830152614c2a81614bee565b9050919050565b7f4e6f7420617574686f72697a656420746f207472616e73666572207072652d6d60008201527f6967726174696f6e2e0000000000000000000000000000000000000000000000602082015250565b6000614c8d602983613c85565b9150614c9882614c31565b604082019050919050565b60006020820190508181036000830152614cbc81614c80565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614cf9601683613c85565b9150614d0482614cc3565b602082019050919050565b60006020820190508181036000830152614d2881614cec565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d8b603583613c85565b9150614d9682614d2f565b604082019050919050565b60006020820190508181036000830152614dba81614d7e565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614df7601383613c85565b9150614e0282614dc1565b602082019050919050565b60006020820190508181036000830152614e2681614dea565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e89603683613c85565b9150614e9482614e2d565b604082019050919050565b60006020820190508181036000830152614eb881614e7c565b9050919050565b6000614eca82613d8f565b9150614ed583613d8f565b9250828203905081811115614eed57614eec614218565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614f4f602583613c85565b9150614f5a82614ef3565b604082019050919050565b60006020820190508181036000830152614f7e81614f42565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614fe1602383613c85565b9150614fec82614f85565b604082019050919050565b6000602082019050818103600083015261501081614fd4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615073602683613c85565b915061507e82615017565b604082019050919050565b600060208201905081810360008301526150a281615066565b905091905056fea26469706673582212208e7d706dbab4c6dad31e11c49738313a6e844c4fd11a63f25d0b010f6da9d73b64736f6c63430008120033

Deployed Bytecode Sourcemap

25584:12485:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8902:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11069:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26949:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26662:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26182:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10022:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36445:262;;;;;;;;;;;;;:::i;:::-;;26324:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26473:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30151:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11720:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26434:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25665:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9864:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12621:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26056:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25936:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26992:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32466:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25789:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37216:90;;;;;;;;;;;;;:::i;:::-;;26289:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26016:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10193:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2419:103;;;;;;;;;;;;;:::i;:::-;;29509:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30699:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37702:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25753:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37010:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32297:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31070:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29309:148;;;;;;;;;;;;;:::i;:::-;;1768:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30962:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9121:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26255:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13339:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10533:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37808:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32088:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26883:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25976:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36715:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31890:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31475:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30434:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25821:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29640:503;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26399:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26148:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10771:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37497:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25863:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26218:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2677:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26361:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25903:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37314:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26513:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32600:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8902:100;8956:13;8989:5;8982:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8902:100;:::o;11069:169::-;11152:4;11169:39;11178:12;:10;:12::i;:::-;11192:7;11201:6;11169:8;:39::i;:::-;11226:4;11219:11;;11069:169;;;;:::o;26949:36::-;;;;;;;;;;;;;:::o;26662:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;26182:29::-;;;;:::o;10022:108::-;10083:7;10110:12;;10103:19;;10022:108;:::o;36445:262::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36511:15:::1;36544:4;36529:31;;;36569:4;36529:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36511:64;;36601:4;36586:30;;;36617:10;36629:7;36586:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36656:10;36648:28;;:51;36677:21;36648:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;36500:207;36445:262::o:0;26324:30::-;;;;:::o;26473:33::-;;;;:::o;30151:275::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30288:4:::1;30280;30275:1;30259:13;:11;:13::i;:::-;:17;;;;:::i;:::-;30258:26;;;;:::i;:::-;30257:35;;;;:::i;:::-;30247:6;:45;;30225:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;30411:6;30401;:17;;;;:::i;:::-;30378:20;:40;;;;30151:275:::0;:::o;11720:492::-;11860:4;11877:36;11887:6;11895:9;11906:6;11877:9;:36::i;:::-;11926:24;11953:11;:19;11965:6;11953:19;;;;;;;;;;;;;;;:33;11973:12;:10;:12::i;:::-;11953:33;;;;;;;;;;;;;;;;11926:60;;12025:6;12005:16;:26;;11997:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12112:57;12121:6;12129:12;:10;:12::i;:::-;12162:6;12143:16;:25;12112:8;:57::i;:::-;12200:4;12193:11;;;11720:492;;;;;:::o;26434:32::-;;;;:::o;25665:53::-;25711:6;25665:53;:::o;9864:93::-;9922:5;9947:2;9940:9;;9864:93;:::o;12621:215::-;12709:4;12726:80;12735:12;:10;:12::i;:::-;12749:7;12795:10;12758:11;:25;12770:12;:10;:12::i;:::-;12758:25;;;;;;;;;;;;;;;:34;12784:7;12758:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12726:8;:80::i;:::-;12824:4;12817:11;;12621:215;;;;:::o;26056:38::-;;;;;;;;;;;;;:::o;25936:33::-;;;;;;;;;;;;;:::o;26992:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;32466:126::-;32532:4;32556:19;:28;32576:7;32556:28;;;;;;;;;;;;;;;;;;;;;;;;;32549:35;;32466:126;;;:::o;25789:25::-;;;;;;;;;;;;;:::o;37216:90::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37294:4:::1;37273:18;;:25;;;;;;;;;;;;;;;;;;37216:90::o:0;26289:28::-;;;;:::o;26016:31::-;;;;;;;;;;;;;:::o;10193:127::-;10267:7;10294:9;:18;10304:7;10294:18;;;;;;;;;;;;;;;;10287:25;;10193:127;;;:::o;2419:103::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2484:30:::1;2511:1;2484:18;:30::i;:::-;2419:103::o:0;29509:121::-;29561:4;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29595:5:::1;29578:14;;:22;;;;;;;;;;;;;;;;;;29618:4;29611:11;;29509:121:::0;:::o;30699:167::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30854:4:::1;30812:31;:39;30844:6;30812:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;30699:167:::0;;:::o;37702:98::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37787:5:::1;37766:11;:18;37778:5;37766:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;37702:98:::0;:::o;25753:29::-;;;;;;;;;;;;;:::o;37010:196::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37083:12:::1;37101:6;:11;;37134:21;37101:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37082:89;;;37190:7;37182:16;;;::::0;::::1;;37071:135;37010:196:::0;:::o;32297:161::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32406:10:::1;;;;;;;;;;;32377:40;;32395:9;32377:40;;;;;;;;;;;;32441:9;32428:10;;:22;;;;;;;;;;;;;;;;;;32297:161:::0;:::o;31070:397::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31237:12:::1;31220:14;:29;;;;31278:13;31260:15;:31;;;;31315:8;31302:10;:21;;;;31384:10;;31366:15;;31349:14;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;31334:12;:60;;;;31429:2;31413:12;;:18;;31405:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;31070:397:::0;;;:::o;29309:148::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29380:4:::1;29364:13;;:20;;;;;;;;;;;;;;;;;;29409:4;29395:11;;:18;;;;;;;;;;;;;;;;;;29444:5;29424:17;;:25;;;;;;;;;;;;;;;;;;29309:148::o:0;1768:87::-;1814:7;1841:6;;;;;;;;;;;1834:13;;1768:87;:::o;30962:100::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31047:7:::1;31033:11;;:21;;;;;;;;;;;;;;;;;;30962:100:::0;:::o;9121:104::-;9177:13;9210:7;9203:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9121:104;:::o;26255:25::-;;;;:::o;13339:413::-;13432:4;13449:24;13476:11;:25;13488:12;:10;:12::i;:::-;13476:25;;;;;;;;;;;;;;;:34;13502:7;13476:34;;;;;;;;;;;;;;;;13449:61;;13549:15;13529:16;:35;;13521:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13642:67;13651:12;:10;:12::i;:::-;13665:7;13693:15;13674:16;:34;13642:8;:67::i;:::-;13740:4;13733:11;;;13339:413;;;;:::o;10533:175::-;10619:4;10636:42;10646:12;:10;:12::i;:::-;10660:9;10671:6;10636:9;:42::i;:::-;10696:4;10689:11;;10533:175;;;;:::o;37808:258::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37942:12:::1;37907:25;:32;37933:5;37907:32;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;37965:36;37981:5;37988:12;37965:15;:36::i;:::-;38012:46;38038:5;38045:12;38012:25;:46::i;:::-;37808:258:::0;;:::o;32088:201::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32221:14:::1;;;;;;;;;;;32180:56;;32202:17;32180:56;;;;;;;;;;;;32264:17;32247:14;;:34;;;;;;;;;;;;;;;;;;32088:201:::0;:::o;26883:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;25976:33::-;;;;;;;;;;;;;:::o;36715:287::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36828:1:::1;36810:20;;:6;:20;;::::0;36802:58:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36871:24;36905:6;36898:24;;;36931:4;36898:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36871:66;;36955:6;36948:23;;;36972:3;36977:16;36948:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36791:211;36715:287:::0;;:::o;31890:182::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32006:8:::1;31975:19;:28;31995:7;31975:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32046:7;32030:34;;;32055:8;32030:34;;;;;;:::i;:::-;;;;;;;;31890:182:::0;;:::o;31475:407::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31644:12:::1;31626:15;:30;;;;31686:13;31667:16;:32;;;;31724:8;31710:11;:22;;;;31796:11;;31777:16;;31759:15;;:34;;;;:::i;:::-;:48;;;;:::i;:::-;31743:13;:64;;;;31843:2;31826:13;;:19;;31818:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;31475:407:::0;;;:::o;30434:257::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30575:4:::1;30567;30561:2;30545:13;:11;:13::i;:::-;:18;;;;:::i;:::-;30544:27;;;;:::i;:::-;30543:36;;;;:::i;:::-;30533:6;:46;;30511:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;30676:6;30666;:17;;;;:::i;:::-;30654:9;:29;;;;30434:257:::0;:::o;25821:35::-;;;;:::o;29640:503::-;29748:4;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29827:9:::1;29822:1;29806:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29805:31;;;;:::i;:::-;29792:9;:44;;29770:147;;;;;;;;;;;;:::i;:::-;;;;;;;;;29985:7;29980:1;29964:13;:11;:13::i;:::-;:17;;;;:::i;:::-;29963:29;;;;:::i;:::-;29950:9;:42;;29928:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;30104:9;30083:18;:30;;;;30131:4;30124:11;;29640:503:::0;;;:::o;26399:26::-;;;;:::o;26148:27::-;;;;:::o;10771:151::-;10860:7;10887:11;:18;10899:5;10887:18;;;;;;;;;;;;;;;:27;10906:7;10887:27;;;;;;;;;;;;;;;;10880:34;;10771:151;;;;:::o;37497:195::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37585:18:::1;;;;;;;;;;;37584:19;37576:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37680:4;37655:11;:22;37667:9;37655:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;37497:195:::0;:::o;25863:33::-;;;;:::o;26218:30::-;;;;:::o;2677:201::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2786:1:::1;2766:22;;:8;:22;;::::0;2758:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2842:28;2861:8;2842:18;:28::i;:::-;2677:201:::0;:::o;26361:31::-;;;;:::o;25903:24::-;;;;:::o;37314:173::-;1999:12;:10;:12::i;:::-;1988:23;;:7;:5;:7::i;:::-;:23;;;1980:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37385:18:::1;;;;;;;;;;;37384:19;37376:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37475:4;37454:11;:18;37466:5;37454:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;37314:173:::0;:::o;26513:28::-;;;;:::o;32600:113::-;32661:4;32685:11;:20;32697:7;32685:20;;;;;;;;;;;;;;;;;;;;;;;;;32678:27;;32600:113;;;:::o;635:98::-;688:7;715:10;708:17;;635:98;:::o;17023:380::-;17176:1;17159:19;;:5;:19;;;17151:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17257:1;17238:21;;:7;:21;;;17230:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17341:6;17311:11;:18;17323:5;17311:18;;;;;;;;;;;;;;;:27;17330:7;17311:27;;;;;;;;;;;;;;;:36;;;;17379:7;17363:32;;17372:5;17363:32;;;17388:6;17363:32;;;;;;:::i;:::-;;;;;;;;17023:380;;;:::o;32721:3714::-;32869:1;32853:18;;:4;:18;;;32845:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32943:1;32929:16;;:2;:16;;;32921:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33002:11;:17;33014:4;33002:17;;;;;;;;;;;;;;;;;;;;;;;;;33001:18;32993:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;33061:11;:15;33073:2;33061:15;;;;;;;;;;;;;;;;;;;;;;;;;33060:16;33052:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;33117:17;;;;;;;;;;;33113:135;;;33159:25;:31;33185:4;33159:31;;;;;;;;;;;;;;;;;;;;;;;;;33151:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;33113:135;33274:1;33264:6;:11;33260:93;;33292:28;33308:4;33314:2;33318:1;33292:15;:28::i;:::-;33335:7;;33260:93;33369:14;;;;;;;;;;;33365:1694;;;33430:7;:5;:7::i;:::-;33422:15;;:4;:15;;;;:49;;;;;33464:7;:5;:7::i;:::-;33458:13;;:2;:13;;;;33422:49;:86;;;;;33506:1;33492:16;;:2;:16;;;;33422:86;:128;;;;;33543:6;33529:21;;:2;:21;;;;33422:128;:158;;;;;33572:8;;;;;;;;;;;33571:9;33422:158;33400:1648;;;33620:13;;;;;;;;;;;33615:223;;33692:19;:25;33712:4;33692:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;33721:19;:23;33741:2;33721:23;;;;;;;;;;;;;;;;;;;;;;;;;33692:52;33658:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;33615:223;33912:25;:31;33938:4;33912:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;33969:31;:35;34001:2;33969:35;;;;;;;;;;;;;;;;;;;;;;;;;33968:36;33912:92;33886:1147;;;34091:20;;34081:6;:30;;34047:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;34299:9;;34282:13;34292:2;34282:9;:13::i;:::-;34273:6;:22;;;;:::i;:::-;:35;;34239:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;33886:1147;;;34477:25;:29;34503:2;34477:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;34532:31;:37;34564:4;34532:37;;;;;;;;;;;;;;;;;;;;;;;;;34531:38;34477:92;34451:582;;;34656:20;;34646:6;:30;;34612:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;34451:582;;;34813:31;:35;34845:2;34813:35;;;;;;;;;;;;;;;;;;;;;;;;;34808:225;;34933:9;;34916:13;34926:2;34916:9;:13::i;:::-;34907:6;:22;;;;:::i;:::-;:35;;34873:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;34808:225;34451:582;33886:1147;33400:1648;33365:1694;35078:12;35094:8;;;;;;;;;;;35093:9;35078:24;;35204:19;:25;35224:4;35204:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35233:19;:23;35253:2;35233:23;;;;;;;;;;;;;;;;;;;;;;;;;35204:52;35200:100;;;35283:5;35273:15;;35200:100;35312:12;35417:7;35413:969;;;35469:25;:29;35495:2;35469:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;35518:1;35502:13;;:17;35469:50;35465:768;;;35547:34;35577:3;35547:25;35558:13;;35547:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;35540:41;;35650:13;;35630:16;;35623:4;:23;;;;:::i;:::-;35622:41;;;;:::i;:::-;35600:18;;:63;;;;;;;:::i;:::-;;;;;;;;35722:13;;35707:11;;35700:4;:18;;;;:::i;:::-;35699:36;;;;:::i;:::-;35682:13;;:53;;;;;;;:::i;:::-;;;;;;;;35802:13;;35783:15;;35776:4;:22;;;;:::i;:::-;35775:40;;;;:::i;:::-;35754:17;;:61;;;;;;;:::i;:::-;;;;;;;;35465:768;;;35877:25;:31;35903:4;35877:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;35927:1;35912:12;;:16;35877:51;35873:360;;;35956:33;35985:3;35956:24;35967:12;;35956:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;35949:40;;36057:12;;36038:15;;36031:4;:22;;;;:::i;:::-;36030:39;;;;:::i;:::-;36008:18;;:61;;;;;;;:::i;:::-;;;;;;;;36127:12;;36113:10;;36106:4;:17;;;;:::i;:::-;36105:34;;;;:::i;:::-;36088:13;;:51;;;;;;;:::i;:::-;;;;;;;;36205:12;;36187:14;;36180:4;:21;;;;:::i;:::-;36179:38;;;;:::i;:::-;36158:17;;:59;;;;;;;:::i;:::-;;;;;;;;35873:360;35465:768;36260:1;36253:4;:8;36249:91;;;36282:42;36298:4;36312;36319;36282:15;:42::i;:::-;36249:91;36366:4;36356:14;;;;;:::i;:::-;;;35413:969;36394:33;36410:4;36416:2;36420:6;36394:15;:33::i;:::-;32834:3601;;32721:3714;;;;:::o;3038:191::-;3112:16;3131:6;;;;;;;;;;;3112:25;;3157:8;3148:6;;:17;;;;;;;;;;;;;;;;;;3212:8;3181:40;;3202:8;3181:40;;;;;;;;;;;;3101:128;3038:191;:::o;14242:733::-;14400:1;14382:20;;:6;:20;;;14374:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14484:1;14463:23;;:9;:23;;;14455:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14539:47;14560:6;14568:9;14579:6;14539:20;:47::i;:::-;14599:21;14623:9;:17;14633:6;14623:17;;;;;;;;;;;;;;;;14599:41;;14676:6;14659:13;:23;;14651:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14797:6;14781:13;:22;14761:9;:17;14771:6;14761:17;;;;;;;;;;;;;;;:42;;;;14849:6;14825:9;:20;14835:9;14825:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14890:9;14873:35;;14882:6;14873:35;;;14901:6;14873:35;;;;;;:::i;:::-;;;;;;;;14921:46;14941:6;14949:9;14960:6;14921:19;:46::i;:::-;14363:612;14242:733;;;:::o;22155:98::-;22213:7;22244:1;22240;:5;;;;:::i;:::-;22233:12;;22155:98;;;;:::o;22554:::-;22612:7;22643:1;22639;:5;;;;:::i;:::-;22632:12;;22554:98;;;;:::o;18003:125::-;;;;:::o;18732:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:619::-;4545:6;4553;4561;4610:2;4598:9;4589:7;4585:23;4581:32;4578:119;;;4616:79;;:::i;:::-;4578:119;4736:1;4761:53;4806:7;4797:6;4786:9;4782:22;4761:53;:::i;:::-;4751:63;;4707:117;4863:2;4889:53;4934:7;4925:6;4914:9;4910:22;4889:53;:::i;:::-;4879:63;;4834:118;4991:2;5017:53;5062:7;5053:6;5042:9;5038:22;5017:53;:::i;:::-;5007:63;;4962:118;4468:619;;;;;:::o;5093:118::-;5180:24;5198:5;5180:24;:::i;:::-;5175:3;5168:37;5093:118;;:::o;5217:222::-;5310:4;5348:2;5337:9;5333:18;5325:26;;5361:71;5429:1;5418:9;5414:17;5405:6;5361:71;:::i;:::-;5217:222;;;;:::o;5445:86::-;5480:7;5520:4;5513:5;5509:16;5498:27;;5445:86;;;:::o;5537:112::-;5620:22;5636:5;5620:22;:::i;:::-;5615:3;5608:35;5537:112;;:::o;5655:214::-;5744:4;5782:2;5771:9;5767:18;5759:26;;5795:67;5859:1;5848:9;5844:17;5835:6;5795:67;:::i;:::-;5655:214;;;;:::o;5875:116::-;5945:21;5960:5;5945:21;:::i;:::-;5938:5;5935:32;5925:60;;5981:1;5978;5971:12;5925:60;5875:116;:::o;5997:133::-;6040:5;6078:6;6065:20;6056:29;;6094:30;6118:5;6094:30;:::i;:::-;5997:133;;;;:::o;6136:468::-;6201:6;6209;6258:2;6246:9;6237:7;6233:23;6229:32;6226:119;;;6264:79;;:::i;:::-;6226:119;6384:1;6409:53;6454:7;6445:6;6434:9;6430:22;6409:53;:::i;:::-;6399:63;;6355:117;6511:2;6537:50;6579:7;6570:6;6559:9;6555:22;6537:50;:::i;:::-;6527:60;;6482:115;6136:468;;;;;:::o;6610:619::-;6687:6;6695;6703;6752:2;6740:9;6731:7;6727:23;6723:32;6720:119;;;6758:79;;:::i;:::-;6720:119;6878:1;6903:53;6948:7;6939:6;6928:9;6924:22;6903:53;:::i;:::-;6893:63;;6849:117;7005:2;7031:53;7076:7;7067:6;7056:9;7052:22;7031:53;:::i;:::-;7021:63;;6976:118;7133:2;7159:53;7204:7;7195:6;7184:9;7180:22;7159:53;:::i;:::-;7149:63;;7104:118;6610:619;;;;;:::o;7235:323::-;7291:6;7340:2;7328:9;7319:7;7315:23;7311:32;7308:119;;;7346:79;;:::i;:::-;7308:119;7466:1;7491:50;7533:7;7524:6;7513:9;7509:22;7491:50;:::i;:::-;7481:60;;7437:114;7235:323;;;;:::o;7564:474::-;7632:6;7640;7689:2;7677:9;7668:7;7664:23;7660:32;7657:119;;;7695:79;;:::i;:::-;7657:119;7815:1;7840:53;7885:7;7876:6;7865:9;7861:22;7840:53;:::i;:::-;7830:63;;7786:117;7942:2;7968:53;8013:7;8004:6;7993:9;7989:22;7968:53;:::i;:::-;7958:63;;7913:118;7564:474;;;;;:::o;8044:180::-;8092:77;8089:1;8082:88;8189:4;8186:1;8179:15;8213:4;8210:1;8203:15;8230:320;8274:6;8311:1;8305:4;8301:12;8291:22;;8358:1;8352:4;8348:12;8379:18;8369:81;;8435:4;8427:6;8423:17;8413:27;;8369:81;8497:2;8489:6;8486:14;8466:18;8463:38;8460:84;;8516:18;;:::i;:::-;8460:84;8281:269;8230:320;;;:::o;8556:182::-;8696:34;8692:1;8684:6;8680:14;8673:58;8556:182;:::o;8744:366::-;8886:3;8907:67;8971:2;8966:3;8907:67;:::i;:::-;8900:74;;8983:93;9072:3;8983:93;:::i;:::-;9101:2;9096:3;9092:12;9085:19;;8744:366;;;:::o;9116:419::-;9282:4;9320:2;9309:9;9305:18;9297:26;;9369:9;9363:4;9359:20;9355:1;9344:9;9340:17;9333:47;9397:131;9523:4;9397:131;:::i;:::-;9389:139;;9116:419;;;:::o;9541:143::-;9598:5;9629:6;9623:13;9614:22;;9645:33;9672:5;9645:33;:::i;:::-;9541:143;;;;:::o;9690:351::-;9760:6;9809:2;9797:9;9788:7;9784:23;9780:32;9777:119;;;9815:79;;:::i;:::-;9777:119;9935:1;9960:64;10016:7;10007:6;9996:9;9992:22;9960:64;:::i;:::-;9950:74;;9906:128;9690:351;;;;:::o;10047:332::-;10168:4;10206:2;10195:9;10191:18;10183:26;;10219:71;10287:1;10276:9;10272:17;10263:6;10219:71;:::i;:::-;10300:72;10368:2;10357:9;10353:18;10344:6;10300:72;:::i;:::-;10047:332;;;;;:::o;10385:137::-;10439:5;10470:6;10464:13;10455:22;;10486:30;10510:5;10486:30;:::i;:::-;10385:137;;;;:::o;10528:345::-;10595:6;10644:2;10632:9;10623:7;10619:23;10615:32;10612:119;;;10650:79;;:::i;:::-;10612:119;10770:1;10795:61;10848:7;10839:6;10828:9;10824:22;10795:61;:::i;:::-;10785:71;;10741:125;10528:345;;;;:::o;10879:180::-;10927:77;10924:1;10917:88;11024:4;11021:1;11014:15;11048:4;11045:1;11038:15;11065:410;11105:7;11128:20;11146:1;11128:20;:::i;:::-;11123:25;;11162:20;11180:1;11162:20;:::i;:::-;11157:25;;11217:1;11214;11210:9;11239:30;11257:11;11239:30;:::i;:::-;11228:41;;11418:1;11409:7;11405:15;11402:1;11399:22;11379:1;11372:9;11352:83;11329:139;;11448:18;;:::i;:::-;11329:139;11113:362;11065:410;;;;:::o;11481:180::-;11529:77;11526:1;11519:88;11626:4;11623:1;11616:15;11650:4;11647:1;11640:15;11667:185;11707:1;11724:20;11742:1;11724:20;:::i;:::-;11719:25;;11758:20;11776:1;11758:20;:::i;:::-;11753:25;;11797:1;11787:35;;11802:18;;:::i;:::-;11787:35;11844:1;11841;11837:9;11832:14;;11667:185;;;;:::o;11858:234::-;11998:34;11994:1;11986:6;11982:14;11975:58;12067:17;12062:2;12054:6;12050:15;12043:42;11858:234;:::o;12098:366::-;12240:3;12261:67;12325:2;12320:3;12261:67;:::i;:::-;12254:74;;12337:93;12426:3;12337:93;:::i;:::-;12455:2;12450:3;12446:12;12439:19;;12098:366;;;:::o;12470:419::-;12636:4;12674:2;12663:9;12659:18;12651:26;;12723:9;12717:4;12713:20;12709:1;12698:9;12694:17;12687:47;12751:131;12877:4;12751:131;:::i;:::-;12743:139;;12470:419;;;:::o;12895:227::-;13035:34;13031:1;13023:6;13019:14;13012:58;13104:10;13099:2;13091:6;13087:15;13080:35;12895:227;:::o;13128:366::-;13270:3;13291:67;13355:2;13350:3;13291:67;:::i;:::-;13284:74;;13367:93;13456:3;13367:93;:::i;:::-;13485:2;13480:3;13476:12;13469:19;;13128:366;;;:::o;13500:419::-;13666:4;13704:2;13693:9;13689:18;13681:26;;13753:9;13747:4;13743:20;13739:1;13728:9;13724:17;13717:47;13781:131;13907:4;13781:131;:::i;:::-;13773:139;;13500:419;;;:::o;13925:191::-;13965:3;13984:20;14002:1;13984:20;:::i;:::-;13979:25;;14018:20;14036:1;14018:20;:::i;:::-;14013:25;;14061:1;14058;14054:9;14047:16;;14082:3;14079:1;14076:10;14073:36;;;14089:18;;:::i;:::-;14073:36;13925:191;;;;:::o;14122:147::-;14223:11;14260:3;14245:18;;14122:147;;;;:::o;14275:114::-;;:::o;14395:398::-;14554:3;14575:83;14656:1;14651:3;14575:83;:::i;:::-;14568:90;;14667:93;14756:3;14667:93;:::i;:::-;14785:1;14780:3;14776:11;14769:18;;14395:398;;;:::o;14799:379::-;14983:3;15005:147;15148:3;15005:147;:::i;:::-;14998:154;;15169:3;15162:10;;14799:379;;;:::o;15184:173::-;15324:25;15320:1;15312:6;15308:14;15301:49;15184:173;:::o;15363:366::-;15505:3;15526:67;15590:2;15585:3;15526:67;:::i;:::-;15519:74;;15602:93;15691:3;15602:93;:::i;:::-;15720:2;15715:3;15711:12;15704:19;;15363:366;;;:::o;15735:419::-;15901:4;15939:2;15928:9;15924:18;15916:26;;15988:9;15982:4;15978:20;15974:1;15963:9;15959:17;15952:47;16016:131;16142:4;16016:131;:::i;:::-;16008:139;;15735:419;;;:::o;16160:224::-;16300:34;16296:1;16288:6;16284:14;16277:58;16369:7;16364:2;16356:6;16352:15;16345:32;16160:224;:::o;16390:366::-;16532:3;16553:67;16617:2;16612:3;16553:67;:::i;:::-;16546:74;;16629:93;16718:3;16629:93;:::i;:::-;16747:2;16742:3;16738:12;16731:19;;16390:366;;;:::o;16762:419::-;16928:4;16966:2;16955:9;16951:18;16943:26;;17015:9;17009:4;17005:20;17001:1;16990:9;16986:17;16979:47;17043:131;17169:4;17043:131;:::i;:::-;17035:139;;16762:419;;;:::o;17187:175::-;17327:27;17323:1;17315:6;17311:14;17304:51;17187:175;:::o;17368:366::-;17510:3;17531:67;17595:2;17590:3;17531:67;:::i;:::-;17524:74;;17607:93;17696:3;17607:93;:::i;:::-;17725:2;17720:3;17716:12;17709:19;;17368:366;;;:::o;17740:419::-;17906:4;17944:2;17933:9;17929:18;17921:26;;17993:9;17987:4;17983:20;17979:1;17968:9;17964:17;17957:47;18021:131;18147:4;18021:131;:::i;:::-;18013:139;;17740:419;;;:::o;18165:174::-;18305:26;18301:1;18293:6;18289:14;18282:50;18165:174;:::o;18345:366::-;18487:3;18508:67;18572:2;18567:3;18508:67;:::i;:::-;18501:74;;18584:93;18673:3;18584:93;:::i;:::-;18702:2;18697:3;18693:12;18686:19;;18345:366;;;:::o;18717:419::-;18883:4;18921:2;18910:9;18906:18;18898:26;;18970:9;18964:4;18960:20;18956:1;18945:9;18941:17;18934:47;18998:131;19124:4;18998:131;:::i;:::-;18990:139;;18717:419;;;:::o;19142:223::-;19282:34;19278:1;19270:6;19266:14;19259:58;19351:6;19346:2;19338:6;19334:15;19327:31;19142:223;:::o;19371:366::-;19513:3;19534:67;19598:2;19593:3;19534:67;:::i;:::-;19527:74;;19610:93;19699:3;19610:93;:::i;:::-;19728:2;19723:3;19719:12;19712:19;;19371:366;;;:::o;19743:419::-;19909:4;19947:2;19936:9;19932:18;19924:26;;19996:9;19990:4;19986:20;19982:1;19971:9;19967:17;19960:47;20024:131;20150:4;20024:131;:::i;:::-;20016:139;;19743:419;;;:::o;20168:240::-;20308:34;20304:1;20296:6;20292:14;20285:58;20377:23;20372:2;20364:6;20360:15;20353:48;20168:240;:::o;20414:366::-;20556:3;20577:67;20641:2;20636:3;20577:67;:::i;:::-;20570:74;;20653:93;20742:3;20653:93;:::i;:::-;20771:2;20766:3;20762:12;20755:19;;20414:366;;;:::o;20786:419::-;20952:4;20990:2;20979:9;20975:18;20967:26;;21039:9;21033:4;21029:20;21025:1;21014:9;21010:17;21003:47;21067:131;21193:4;21067:131;:::i;:::-;21059:139;;20786:419;;;:::o;21211:239::-;21351:34;21347:1;21339:6;21335:14;21328:58;21420:22;21415:2;21407:6;21403:15;21396:47;21211:239;:::o;21456:366::-;21598:3;21619:67;21683:2;21678:3;21619:67;:::i;:::-;21612:74;;21695:93;21784:3;21695:93;:::i;:::-;21813:2;21808:3;21804:12;21797:19;;21456:366;;;:::o;21828:419::-;21994:4;22032:2;22021:9;22017:18;22009:26;;22081:9;22075:4;22071:20;22067:1;22056:9;22052:17;22045:47;22109:131;22235:4;22109:131;:::i;:::-;22101:139;;21828:419;;;:::o;22253:220::-;22393:34;22389:1;22381:6;22377:14;22370:58;22462:3;22457:2;22449:6;22445:15;22438:28;22253:220;:::o;22479:366::-;22621:3;22642:67;22706:2;22701:3;22642:67;:::i;:::-;22635:74;;22718:93;22807:3;22718:93;:::i;:::-;22836:2;22831:3;22827:12;22820:19;;22479:366;;;:::o;22851:419::-;23017:4;23055:2;23044:9;23040:18;23032:26;;23104:9;23098:4;23094:20;23090:1;23079:9;23075:17;23068:47;23132:131;23258:4;23132:131;:::i;:::-;23124:139;;22851:419;;;:::o;23276:225::-;23416:34;23412:1;23404:6;23400:14;23393:58;23485:8;23480:2;23472:6;23468:15;23461:33;23276:225;:::o;23507:366::-;23649:3;23670:67;23734:2;23729:3;23670:67;:::i;:::-;23663:74;;23746:93;23835:3;23746:93;:::i;:::-;23864:2;23859:3;23855:12;23848:19;;23507:366;;;:::o;23879:419::-;24045:4;24083:2;24072:9;24068:18;24060:26;;24132:9;24126:4;24122:20;24118:1;24107:9;24103:17;24096:47;24160:131;24286:4;24160:131;:::i;:::-;24152:139;;23879:419;;;:::o;24304:223::-;24444:34;24440:1;24432:6;24428:14;24421:58;24513:6;24508:2;24500:6;24496:15;24489:31;24304:223;:::o;24533:366::-;24675:3;24696:67;24760:2;24755:3;24696:67;:::i;:::-;24689:74;;24772:93;24861:3;24772:93;:::i;:::-;24890:2;24885:3;24881:12;24874:19;;24533:366;;;:::o;24905:419::-;25071:4;25109:2;25098:9;25094:18;25086:26;;25158:9;25152:4;25148:20;25144:1;25133:9;25129:17;25122:47;25186:131;25312:4;25186:131;:::i;:::-;25178:139;;24905:419;;;:::o;25330:221::-;25470:34;25466:1;25458:6;25454:14;25447:58;25539:4;25534:2;25526:6;25522:15;25515:29;25330:221;:::o;25557:366::-;25699:3;25720:67;25784:2;25779:3;25720:67;:::i;:::-;25713:74;;25796:93;25885:3;25796:93;:::i;:::-;25914:2;25909:3;25905:12;25898:19;;25557:366;;;:::o;25929:419::-;26095:4;26133:2;26122:9;26118:18;26110:26;;26182:9;26176:4;26172:20;26168:1;26157:9;26153:17;26146:47;26210:131;26336:4;26210:131;:::i;:::-;26202:139;;25929:419;;;:::o;26354:221::-;26494:34;26490:1;26482:6;26478:14;26471:58;26563:4;26558:2;26550:6;26546:15;26539:29;26354:221;:::o;26581:366::-;26723:3;26744:67;26808:2;26803:3;26744:67;:::i;:::-;26737:74;;26820:93;26909:3;26820:93;:::i;:::-;26938:2;26933:3;26929:12;26922:19;;26581:366;;;:::o;26953:419::-;27119:4;27157:2;27146:9;27142:18;27134:26;;27206:9;27200:4;27196:20;27192:1;27181:9;27177:17;27170:47;27234:131;27360:4;27234:131;:::i;:::-;27226:139;;26953:419;;;:::o;27378:182::-;27518:34;27514:1;27506:6;27502:14;27495:58;27378:182;:::o;27566:366::-;27708:3;27729:67;27793:2;27788:3;27729:67;:::i;:::-;27722:74;;27805:93;27894:3;27805:93;:::i;:::-;27923:2;27918:3;27914:12;27907:19;;27566:366;;;:::o;27938:419::-;28104:4;28142:2;28131:9;28127:18;28119:26;;28191:9;28185:4;28181:20;28177:1;28166:9;28162:17;28155:47;28219:131;28345:4;28219:131;:::i;:::-;28211:139;;27938:419;;;:::o;28363:168::-;28503:20;28499:1;28491:6;28487:14;28480:44;28363:168;:::o;28537:366::-;28679:3;28700:67;28764:2;28759:3;28700:67;:::i;:::-;28693:74;;28776:93;28865:3;28776:93;:::i;:::-;28894:2;28889:3;28885:12;28878:19;;28537:366;;;:::o;28909:419::-;29075:4;29113:2;29102:9;29098:18;29090:26;;29162:9;29156:4;29152:20;29148:1;29137:9;29133:17;29126:47;29190:131;29316:4;29190:131;:::i;:::-;29182:139;;28909:419;;;:::o;29334:170::-;29474:22;29470:1;29462:6;29458:14;29451:46;29334:170;:::o;29510:366::-;29652:3;29673:67;29737:2;29732:3;29673:67;:::i;:::-;29666:74;;29749:93;29838:3;29749:93;:::i;:::-;29867:2;29862:3;29858:12;29851:19;;29510:366;;;:::o;29882:419::-;30048:4;30086:2;30075:9;30071:18;30063:26;;30135:9;30129:4;30125:20;30121:1;30110:9;30106:17;30099:47;30163:131;30289:4;30163:131;:::i;:::-;30155:139;;29882:419;;;:::o;30307:228::-;30447:34;30443:1;30435:6;30431:14;30424:58;30516:11;30511:2;30503:6;30499:15;30492:36;30307:228;:::o;30541:366::-;30683:3;30704:67;30768:2;30763:3;30704:67;:::i;:::-;30697:74;;30780:93;30869:3;30780:93;:::i;:::-;30898:2;30893:3;30889:12;30882:19;;30541:366;;;:::o;30913:419::-;31079:4;31117:2;31106:9;31102:18;31094:26;;31166:9;31160:4;31156:20;31152:1;31141:9;31137:17;31130:47;31194:131;31320:4;31194:131;:::i;:::-;31186:139;;30913:419;;;:::o;31338:172::-;31478:24;31474:1;31466:6;31462:14;31455:48;31338:172;:::o;31516:366::-;31658:3;31679:67;31743:2;31738:3;31679:67;:::i;:::-;31672:74;;31755:93;31844:3;31755:93;:::i;:::-;31873:2;31868:3;31864:12;31857:19;;31516:366;;;:::o;31888:419::-;32054:4;32092:2;32081:9;32077:18;32069:26;;32141:9;32135:4;32131:20;32127:1;32116:9;32112:17;32105:47;32169:131;32295:4;32169:131;:::i;:::-;32161:139;;31888:419;;;:::o;32313:240::-;32453:34;32449:1;32441:6;32437:14;32430:58;32522:23;32517:2;32509:6;32505:15;32498:48;32313:240;:::o;32559:366::-;32701:3;32722:67;32786:2;32781:3;32722:67;:::i;:::-;32715:74;;32798:93;32887:3;32798:93;:::i;:::-;32916:2;32911:3;32907:12;32900:19;;32559:366;;;:::o;32931:419::-;33097:4;33135:2;33124:9;33120:18;33112:26;;33184:9;33178:4;33174:20;33170:1;33159:9;33155:17;33148:47;33212:131;33338:4;33212:131;:::i;:::-;33204:139;;32931:419;;;:::o;33356:169::-;33496:21;33492:1;33484:6;33480:14;33473:45;33356:169;:::o;33531:366::-;33673:3;33694:67;33758:2;33753:3;33694:67;:::i;:::-;33687:74;;33770:93;33859:3;33770:93;:::i;:::-;33888:2;33883:3;33879:12;33872:19;;33531:366;;;:::o;33903:419::-;34069:4;34107:2;34096:9;34092:18;34084:26;;34156:9;34150:4;34146:20;34142:1;34131:9;34127:17;34120:47;34184:131;34310:4;34184:131;:::i;:::-;34176:139;;33903:419;;;:::o;34328:241::-;34468:34;34464:1;34456:6;34452:14;34445:58;34537:24;34532:2;34524:6;34520:15;34513:49;34328:241;:::o;34575:366::-;34717:3;34738:67;34802:2;34797:3;34738:67;:::i;:::-;34731:74;;34814:93;34903:3;34814:93;:::i;:::-;34932:2;34927:3;34923:12;34916:19;;34575:366;;;:::o;34947:419::-;35113:4;35151:2;35140:9;35136:18;35128:26;;35200:9;35194:4;35190:20;35186:1;35175:9;35171:17;35164:47;35228:131;35354:4;35228:131;:::i;:::-;35220:139;;34947:419;;;:::o;35372:194::-;35412:4;35432:20;35450:1;35432:20;:::i;:::-;35427:25;;35466:20;35484:1;35466:20;:::i;:::-;35461:25;;35510:1;35507;35503:9;35495:17;;35534:1;35528:4;35525:11;35522:37;;;35539:18;;:::i;:::-;35522:37;35372:194;;;;:::o;35572:224::-;35712:34;35708:1;35700:6;35696:14;35689:58;35781:7;35776:2;35768:6;35764:15;35757:32;35572:224;:::o;35802:366::-;35944:3;35965:67;36029:2;36024:3;35965:67;:::i;:::-;35958:74;;36041:93;36130:3;36041:93;:::i;:::-;36159:2;36154:3;36150:12;36143:19;;35802:366;;;:::o;36174:419::-;36340:4;36378:2;36367:9;36363:18;36355:26;;36427:9;36421:4;36417:20;36413:1;36402:9;36398:17;36391:47;36455:131;36581:4;36455:131;:::i;:::-;36447:139;;36174:419;;;:::o;36599:222::-;36739:34;36735:1;36727:6;36723:14;36716:58;36808:5;36803:2;36795:6;36791:15;36784:30;36599:222;:::o;36827:366::-;36969:3;36990:67;37054:2;37049:3;36990:67;:::i;:::-;36983:74;;37066:93;37155:3;37066:93;:::i;:::-;37184:2;37179:3;37175:12;37168:19;;36827:366;;;:::o;37199:419::-;37365:4;37403:2;37392:9;37388:18;37380:26;;37452:9;37446:4;37442:20;37438:1;37427:9;37423:17;37416:47;37480:131;37606:4;37480:131;:::i;:::-;37472:139;;37199:419;;;:::o;37624:225::-;37764:34;37760:1;37752:6;37748:14;37741:58;37833:8;37828:2;37820:6;37816:15;37809:33;37624:225;:::o;37855:366::-;37997:3;38018:67;38082:2;38077:3;38018:67;:::i;:::-;38011:74;;38094:93;38183:3;38094:93;:::i;:::-;38212:2;38207:3;38203:12;38196:19;;37855:366;;;:::o;38227:419::-;38393:4;38431:2;38420:9;38416:18;38408:26;;38480:9;38474:4;38470:20;38466:1;38455:9;38451:17;38444:47;38508:131;38634:4;38508:131;:::i;:::-;38500:139;;38227:419;;;:::o

Swarm Source

ipfs://8e7d706dbab4c6dad31e11c49738313a6e844c4fd11a63f25d0b010f6da9d73b
[ 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.