ETH Price: $3,896.04 (-0.28%)

Token

ERC-20: Nebula Stride Token (NST)
 

Overview

Max Total Supply

2,000,000,000 NST

Holders

70

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NSTToken

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-12-02
*/

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

/*
  _   _      _           _       ____  _        _     _      
 | \ | | ___| |__  _   _| | __ _/ ___|| |_ _ __(_) __| | ___ 
 |  \| |/ _ \ '_ \| | | | |/ _` \___ \| __| '__| |/ _` |/ _ \
 | |\  |  __/ |_) | |_| | | (_| |___) | |_| |  | | (_| |  __/
 |_| \_|\___|_.__/ \__,_|_|\__,_|____/ \__|_|  |_|\__,_|\___|
                                                             
*/

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        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 Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

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

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

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




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




/**
 * @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 guidelines: functions revert instead
 * of 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;

    uint8 private _decimals;
    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_, uint8 decimals_) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
    }

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

    /**
     * @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");
        if (currentAllowance != type(uint256).max) {
          _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");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(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:
     *
     * - `to` 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);
    }

    /**
     * @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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

        emit Transfer(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 to 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 { }
}


interface IProxy {
    function masterCopy() external view returns (address);
}



/*
* @dev Token with the ability to whitelist. This is necessary to prevent the user
* from selling, transferring tokens until it is listed. After listing, the whitelist
* mechanism is disabled with setAllowTransfers() and the owner of the contract
* is removed with renounceOwnership() 
*/
contract NSTToken is ERC20, Ownable {
    
    uint8 private constant decimals_ = 18;
    string private constant ticker_ = "NST";
    string private constant name_ = "Nebula Stride Token";
    bool public allowTransfers = false;
    uint256 timelock_period = 48*60*60; // 2 days timelock
    
    // initial_multisig admin (safe wallet)
    address private constant initial_multisig_admin = 0x8084C611Df9a3166CeccE4c8Dd60cFB5D5a256cE;
    mapping(address => bool) public whitelist;

    // addresses for token distribution
    address public constant presale_contract = 0x3f9437dE4A7184D4D7618f9A17C02A76027F3961;
    address public constant staking_safe_wallet = 0x3F321a174A1611B5CC2693FC13834eeF2a3c2eeE;
    address public constant liquidity_safe_wallet = 0x7E47CbfFd60eC47788E208DC9c0Cc6684d1df06f;
    address public constant team_and_developers_safe_wallet = 0xD9d417405a5f740477E654C2db8f2d0C8186B0c3;
    address public constant partners_safe_wallet = 0xf5C0bacA447965711E1ce19625c1aBA201865cab;
    address public constant marketing_safe_wallet = 0x2150EAb0E0F1B07BAf8dA3f66f88b74d87D1b2D3;
    address public constant giveaways_safe_wallet = 0xA89e1d8C8214aB9801064a0465c1aBEe881789e5;
    address public constant community_safe_wallet = 0x56272fB4f5cA1E98eFfE13Ee3af3D96c56a87391;
    address public constant ecosystem_safe_wallet = 0xEb0ED2f6657DFe26B8b2918f8610f21b2EC5aC26;
    address public constant reserve_safe_wallet = 0x369FD891341D65aD855e639E109FE932664E0aD4;
    address public constant airdrop_safe_wallet = 0x547A4126B66f191B5418C9FD39aBaED923C58aEF;
    
    //distribution amounts
    uint256 public constant presale_mint_amount = 500000000 * 10 ** decimals_; 
    uint256 public constant staking_mint_amount = 300000000 * 10 ** decimals_; 
    uint256 public constant liquidity_mint_amount = 200000000 * 10 ** decimals_;
    uint256 public constant team_and_developers_mint_amount = 140000000 * 10 ** decimals_;
    uint256 public constant partners_mint_amount = 60000000 * 10 ** decimals_;
    uint256 public constant marketing_mint_amount = 300000000 * 10 ** decimals_;
    uint256 public constant giveaways_mint_amount = 40000000 * 10 ** decimals_;
    uint256 public constant community_mint_amount = 60000000 * 10 ** decimals_;
    uint256 public constant ecosystem_mint_amount = 100000000 * 10 ** decimals_;
    uint256 public constant reserve_mint_amount = 100000000 * 10 ** decimals_;
    uint256 public constant airdrop_mint_amount = 200000000 * 10 ** decimals_;


    address public potential_owner = address(0);

    constructor() ERC20(name_, ticker_, decimals_) {
        //allow for addresses in distribution send tokens
        _setWhitelist(presale_contract,true);
        _setWhitelist(staking_safe_wallet,true);
        _setWhitelist(liquidity_safe_wallet,true);
        _setWhitelist(team_and_developers_safe_wallet ,true);
        _setWhitelist(partners_safe_wallet,true);
        _setWhitelist(marketing_safe_wallet,true);
        _setWhitelist(giveaways_safe_wallet,true);
        _setWhitelist(community_safe_wallet,true);
        _setWhitelist(ecosystem_safe_wallet,true);
        _setWhitelist(reserve_safe_wallet,true);
        _setWhitelist(airdrop_safe_wallet,true);

        _mint(presale_contract, presale_mint_amount);
        _mint(staking_safe_wallet, staking_mint_amount);
        _mint(liquidity_safe_wallet, liquidity_mint_amount);
        _mint(team_and_developers_safe_wallet, team_and_developers_mint_amount);
        _mint(partners_safe_wallet, partners_mint_amount);
        _mint(marketing_safe_wallet, marketing_mint_amount);
        _mint(giveaways_safe_wallet, giveaways_mint_amount);
        _mint(community_safe_wallet, community_mint_amount);
        _mint(ecosystem_safe_wallet, ecosystem_mint_amount);
        _mint(reserve_safe_wallet, reserve_mint_amount);
        _mint(airdrop_safe_wallet, airdrop_mint_amount);
        //transferring ownership to safe contract
        _transferOwnership(initial_multisig_admin);
    }

    event ScheduleTransferOwnership(
        address new_owner_candidate,
        uint256 allow_execute_at,
        bool canceled,
        bool executed
    );

    event ScheduleRenounceOwnership(
        uint256 allow_execute_at,
        bool canceled,
        bool executed
    );

    event OwnerNominated(address newOwner);

    event AllowTransfers(
        bool transfer_state
    );
    
    event WhitelistChange(
        address user,
        bool exmpt
    );

    event ScheduleSetWhitelist(
        address user,
        bool exmpt,
        uint256 allow_execute_at,
        bool canceled,
        bool executed
    );

    event ScheduleAllowTransfers(
        uint256 allow_execute_at,
        bool canceled,
        bool executed
    );


    uint256 public allow_transfer_ownership_at = 0;
    uint256 public allow_renounce_ownership_at = 0;
    uint256 public allow_set_whitelist_at = 0;
    uint256 public allow_set_allow_transfers_at =0;
    address public scheduled_whitelist_user = address(0);
    bool public scheduled_whitelist_user_exmpt = false;
    
    address public scheduled_new_owner = address(0);
   
    /*
    * @title Schedule transfer ownership with timelock model
    * @dev This function “plans” the execution of the transfer of ownership mechanism.
    * User can only plan TransferOwnership OR RenounceOwnership at same time.
    */
    function scheduleTransferOwnership(address newOwner) public onlyOwner {
        require(allow_transfer_ownership_at == 0, "TransferOwnership already planned");
        require(newOwner != address(0), "potential owner can not be the zero address.");
        require(allow_renounce_ownership_at == 0, "RenounceOwnership already planned");
        require(IProxy(newOwner).masterCopy() != address(0), "New owner must be safe wallet");
        allow_transfer_ownership_at = block.timestamp + timelock_period;
        scheduled_new_owner = newOwner;
        emit ScheduleTransferOwnership(
            scheduled_new_owner,
            allow_transfer_ownership_at,
            false,
            false
        );
    }

    /*
    * @title Cancel schedule transfer ownership with timelock model
    * @dev This function cancels a scheduled task for ownership transfer 
    */
    function cancelTransferOwnership() public onlyOwner {
        require(allow_transfer_ownership_at > 0, "TransferOwnership not planned");
        emit ScheduleTransferOwnership(
            scheduled_new_owner,
            allow_transfer_ownership_at,
            true,
            false
        );
        allow_transfer_ownership_at=0;
        scheduled_new_owner = address(0);
    }

    /*
    * @title Execute schedule transfer ownership with timelock model
    * @dev This function execute a scheduled task for ownership transfer 
    */
    function executeTransferOwnership() public onlyOwner {
        require(allow_transfer_ownership_at > 0, "TransferOwnership not planned");
        require(allow_transfer_ownership_at <= block.timestamp, "TransferOwnership not unlocked");
        potential_owner = scheduled_new_owner;
        emit OwnerNominated(potential_owner);
        emit ScheduleTransferOwnership(
            scheduled_new_owner,
            allow_transfer_ownership_at,
            false,
            true
        );
        allow_transfer_ownership_at=0;
        scheduled_new_owner=address(0);
    }

    /*
    * @title Schedule renounce ownership with timelock model
    * @dev This function “plans” the execution of the renounce of ownership mechanism. 
    * User can only plan TransferOwnership OR RenounceOwnership at same time.
    */
    function scheduleRenounceOwnership() public onlyOwner {
        require(allow_renounce_ownership_at == 0, "RenounceOwnership already planned");
        require(allow_transfer_ownership_at == 0, "TransferOwnership already planned");

        allow_renounce_ownership_at = block.timestamp + timelock_period;
        emit ScheduleRenounceOwnership(
            allow_renounce_ownership_at,
            false,
            false
        );
    }


    /*
    * @title Cancel schedule renounce ownership with timelock model
    * @dev This function cancels a scheduled task for ownership renounce 
    */
    function cancelRenounceOwnership() public onlyOwner {
        require(allow_renounce_ownership_at > 0, "RenounceOwnership not planned");
        emit ScheduleRenounceOwnership(
            allow_renounce_ownership_at,
            true,
            false
        );
        allow_renounce_ownership_at=0;
    }

    /*
    * @title Execute schedule renounce ownership with timelock model
    * @dev This function execute a scheduled task for ownership renounce 
    */
    function executeRenounceOwnership() public onlyOwner {
        require(allow_renounce_ownership_at > 0, "RenounceOwnership not planned");
        require(allow_renounce_ownership_at <= block.timestamp, "RenounceOwnership not unlocked");
        _transferOwnership(address(0));
        emit ScheduleRenounceOwnership(
            allow_renounce_ownership_at,
            false,
            true
        );
        allow_renounce_ownership_at = 0;
        allow_transfer_ownership_at = 0;
        potential_owner = address(0);
        scheduled_new_owner = address(0);
    }



    function acceptOwnership() public {
        require(msg.sender == potential_owner, "You must be nominated as potential owner before you can accept ownership");
        require(owner() != address(0), "Ownership renounced");
        _transferOwnership(potential_owner);
        potential_owner = address(0); 
    }


    /*
    * @title Schedule set user whitelist with timelock model
    * @dev This function “plans” the execution of the set user whitelist mechanism 
    */
    function scheduleSetWhitelist(address _user, bool _exmpt) public onlyOwner {
        require(allow_set_whitelist_at == 0, "SetWhitelist already planned");
        allow_set_whitelist_at = block.timestamp + timelock_period;
        scheduled_whitelist_user = _user;
        scheduled_whitelist_user_exmpt = _exmpt;
        emit ScheduleSetWhitelist(scheduled_whitelist_user, scheduled_whitelist_user_exmpt,allow_set_whitelist_at, false, false);
    }


    /*
    * @title Cancel schedule set user whitelist with timelock model
    * @dev This function cancels a scheduled task for set user whitelist
    */
    function cancelSetWhitelist() public onlyOwner {
        require(allow_set_whitelist_at > 0, "SetWhitelist not planned");
        emit ScheduleSetWhitelist(scheduled_whitelist_user, scheduled_whitelist_user_exmpt,allow_set_whitelist_at, true, false);
        allow_set_whitelist_at=0;
        scheduled_whitelist_user = address(0);
        scheduled_whitelist_user_exmpt = false;
    }

    function _setWhitelist(address _user, bool _exmpt) private {
        whitelist[_user] = _exmpt;
        emit WhitelistChange(
            scheduled_whitelist_user,
            scheduled_whitelist_user_exmpt
        );
    }

    /*
    * @title Execute schedule set user whitelist with timelock model
    * @dev This function execute a scheduled task for set user whitelist
    */
    function executeWhitelist() public  onlyOwner{
        require(allow_set_whitelist_at > 0, "SetWhitelist not planned");
        require(allow_set_whitelist_at <= block.timestamp, "SetWhitelist not unlocked");
        _setWhitelist(scheduled_whitelist_user, scheduled_whitelist_user_exmpt);
        emit ScheduleSetWhitelist(scheduled_whitelist_user, scheduled_whitelist_user_exmpt, allow_set_whitelist_at, false, true);
        allow_set_whitelist_at=0;
        scheduled_whitelist_user = address(0);
        scheduled_whitelist_user_exmpt = false;
    }


    /*
    * @title Schedule set allow transfers with timelock model
    * @dev This function “plans” the execution of the  whitelist mechanism 
    */
    function scheduleSetAllowTransfers() public onlyOwner {
        require(!allowTransfers, "NebulaStride: Already enabled");
        require(allow_set_allow_transfers_at == 0, "AllowTransfers already planned");
        allow_set_allow_transfers_at = block.timestamp + timelock_period;
        emit ScheduleAllowTransfers(allow_set_allow_transfers_at, false, false);
    }


    /*
    * @title Cancel schedule set allow transfers with timelock model
    * @dev This function cancels a scheduled task for set user whitelist
    */
    function cancelSetAllowTransfers() public onlyOwner {
        require(allow_set_allow_transfers_at > 0, "AllowTransfers not planned");
        allow_set_allow_transfers_at = 0;
        emit ScheduleAllowTransfers(allow_set_allow_transfers_at, true, false);
        
    }

    /*
    * @title Execute schedule set allow transfers with timelock model
    * @dev This function execute a scheduled task for set allow transfers
    */
    function executeSetAllowTransfers() external onlyOwner {
        require(allow_set_allow_transfers_at > 0, "AllowTransfers not planned");
        require(allow_set_allow_transfers_at <= block.timestamp, "AllowTransfers not unlocked");
        allowTransfers = true;
        emit AllowTransfers(allowTransfers);
        emit ScheduleAllowTransfers(allow_set_allow_transfers_at, false, true);

        allow_set_allow_transfers_at=0;
    }

    function getTimestamp() public view returns (uint256) {
        return block.timestamp;
    }


    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override {
        if (!whitelist[from] && !whitelist[to]) {
            require(allowTransfers,"NebulaStride: Not transferable until listing");
        }
    }

    function renounceOwnership() public override view onlyOwner{
        revert("RenounceOwnership only via timelock mechanism");
    }

    function transferOwnership(address newOwner) public override view onlyOwner {
        revert("TransferOwnership only via timelock mechanism");
    }


}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"transfer_state","type":"bool"}],"name":"AllowTransfers","type":"event"},{"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":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnerNominated","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":"allow_execute_at","type":"uint256"},{"indexed":false,"internalType":"bool","name":"canceled","type":"bool"},{"indexed":false,"internalType":"bool","name":"executed","type":"bool"}],"name":"ScheduleAllowTransfers","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"allow_execute_at","type":"uint256"},{"indexed":false,"internalType":"bool","name":"canceled","type":"bool"},{"indexed":false,"internalType":"bool","name":"executed","type":"bool"}],"name":"ScheduleRenounceOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"exmpt","type":"bool"},{"indexed":false,"internalType":"uint256","name":"allow_execute_at","type":"uint256"},{"indexed":false,"internalType":"bool","name":"canceled","type":"bool"},{"indexed":false,"internalType":"bool","name":"executed","type":"bool"}],"name":"ScheduleSetWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"new_owner_candidate","type":"address"},{"indexed":false,"internalType":"uint256","name":"allow_execute_at","type":"uint256"},{"indexed":false,"internalType":"bool","name":"canceled","type":"bool"},{"indexed":false,"internalType":"bool","name":"executed","type":"bool"}],"name":"ScheduleTransferOwnership","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":false,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"bool","name":"exmpt","type":"bool"}],"name":"WhitelistChange","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"airdrop_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"airdrop_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowTransfers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allow_renounce_ownership_at","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allow_set_allow_transfers_at","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allow_set_whitelist_at","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allow_transfer_ownership_at","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cancelRenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelSetAllowTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelSetWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cancelTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"community_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"community_safe_wallet","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":"ecosystem_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ecosystem_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"executeRenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeSetAllowTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"executeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveaways_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"giveaways_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidity_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidity_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketing_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partners_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partners_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"potential_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale_contract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"presale_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reserve_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scheduleRenounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"scheduleSetAllowTransfers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"_exmpt","type":"bool"}],"name":"scheduleSetWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"scheduleTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"scheduled_new_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scheduled_whitelist_user","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"scheduled_whitelist_user_exmpt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staking_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"staking_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team_and_developers_mint_amount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"team_and_developers_safe_wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040525f600660146101000a81548160ff0219169083151502179055506202a3006007555f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600a555f600b555f600c555f600d555f600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600e60146101000a81548160ff0219169083151502179055505f600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555034801561011a575f5ffd5b506040518060400160405280601381526020017f4e6562756c612053747269646520546f6b656e000000000000000000000000008152506040518060400160405280600381526020017f4e53540000000000000000000000000000000000000000000000000000000000815250601282600490816101989190610c73565b5081600590816101a89190610c73565b508060035f6101000a81548160ff021916908360ff1602179055505050506101e26101d761066160201b60201c565b61066860201b60201c565b610207733f9437de4a7184d4d7618f9a17c02a76027f3961600161072b60201b60201c565b61022c733f321a174a1611b5cc2693fc13834eef2a3c2eee600161072b60201b60201c565b610251737e47cbffd60ec47788e208dc9c0cc6684d1df06f600161072b60201b60201c565b61027673d9d417405a5f740477e654c2db8f2d0c8186b0c3600161072b60201b60201c565b61029b73f5c0baca447965711e1ce19625c1aba201865cab600161072b60201b60201c565b6102c0732150eab0e0f1b07baf8da3f66f88b74d87d1b2d3600161072b60201b60201c565b6102e573a89e1d8c8214ab9801064a0465c1abee881789e5600161072b60201b60201c565b61030a7356272fb4f5ca1e98effe13ee3af3d96c56a87391600161072b60201b60201c565b61032f73eb0ed2f6657dfe26b8b2918f8610f21b2ec5ac26600161072b60201b60201c565b61035473369fd891341d65ad855e639e109fe932664e0ad4600161072b60201b60201c565b61037973547a4126b66f191b5418c9fd39abaed923c58aef600161072b60201b60201c565b6103b9733f9437de4a7184d4d7618f9a17c02a76027f39616012600a61039f9190610eaa565b631dcd65006103ae9190610ef4565b6107ec60201b60201c565b6103f9733f321a174a1611b5cc2693fc13834eef2a3c2eee6012600a6103df9190610eaa565b6311e1a3006103ee9190610ef4565b6107ec60201b60201c565b610439737e47cbffd60ec47788e208dc9c0cc6684d1df06f6012600a61041f9190610eaa565b630bebc20061042e9190610ef4565b6107ec60201b60201c565b61047973d9d417405a5f740477e654c2db8f2d0c8186b0c36012600a61045f9190610eaa565b6308583b0061046e9190610ef4565b6107ec60201b60201c565b6104b973f5c0baca447965711e1ce19625c1aba201865cab6012600a61049f9190610eaa565b63039387006104ae9190610ef4565b6107ec60201b60201c565b6104f9732150eab0e0f1b07baf8da3f66f88b74d87d1b2d36012600a6104df9190610eaa565b6311e1a3006104ee9190610ef4565b6107ec60201b60201c565b61053973a89e1d8c8214ab9801064a0465c1abee881789e56012600a61051f9190610eaa565b6302625a0061052e9190610ef4565b6107ec60201b60201c565b6105797356272fb4f5ca1e98effe13ee3af3d96c56a873916012600a61055f9190610eaa565b630393870061056e9190610ef4565b6107ec60201b60201c565b6105b973eb0ed2f6657dfe26b8b2918f8610f21b2ec5ac266012600a61059f9190610eaa565b6305f5e1006105ae9190610ef4565b6107ec60201b60201c565b6105f973369fd891341d65ad855e639e109fe932664e0ad46012600a6105df9190610eaa565b6305f5e1006105ee9190610ef4565b6107ec60201b60201c565b61063973547a4126b66f191b5418c9fd39abaed923c58aef6012600a61061f9190610eaa565b630bebc20061062e9190610ef4565b6107ec60201b60201c565b61065c738084c611df9a3166cecce4c8dd60cfb5d5a256ce61066860201b60201c565b611116565b5f33905090565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3f50d04114467f3ca25c50f1540e2864f8a852c0380bbbbb603ebfda10b5baf2600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff166040516107e0929190610f8e565b60405180910390a15050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361085a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108519061100f565b60405180910390fd5b61086b5f838361093e60201b60201c565b8060025f82825461087c919061102d565b92505081905550805f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108ce919061102d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610932919061106f565b60405180910390a35050565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156109dc575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15610a3157600660149054906101000a900460ff16610a30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a27906110f8565b60405180910390fd5b5b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680610ab157607f821691505b602082108103610ac457610ac3610a6d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302610b267fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82610aeb565b610b308683610aeb565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f610b74610b6f610b6a84610b48565b610b51565b610b48565b9050919050565b5f819050919050565b610b8d83610b5a565b610ba1610b9982610b7b565b848454610af7565b825550505050565b5f5f905090565b610bb8610ba9565b610bc3818484610b84565b505050565b5b81811015610be657610bdb5f82610bb0565b600181019050610bc9565b5050565b601f821115610c2b57610bfc81610aca565b610c0584610adc565b81016020851015610c14578190505b610c28610c2085610adc565b830182610bc8565b50505b505050565b5f82821c905092915050565b5f610c4b5f1984600802610c30565b1980831691505092915050565b5f610c638383610c3c565b9150826002028217905092915050565b610c7c82610a36565b67ffffffffffffffff811115610c9557610c94610a40565b5b610c9f8254610a9a565b610caa828285610bea565b5f60209050601f831160018114610cdb575f8415610cc9578287015190505b610cd38582610c58565b865550610d3a565b601f198416610ce986610aca565b5f5b82811015610d1057848901518255600182019150602085019450602081019050610ceb565b86831015610d2d5784890151610d29601f891682610c3c565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f5f8291508390505b6001851115610dc457808604811115610da057610d9f610d42565b5b6001851615610daf5780820291505b8081029050610dbd85610d6f565b9450610d84565b94509492505050565b5f82610ddc5760019050610e97565b81610de9575f9050610e97565b8160018114610dff5760028114610e0957610e38565b6001915050610e97565b60ff841115610e1b57610e1a610d42565b5b8360020a915084821115610e3257610e31610d42565b5b50610e97565b5060208310610133831016604e8410600b8410161715610e6d5782820a905083811115610e6857610e67610d42565b5b610e97565b610e7a8484846001610d7b565b92509050818404811115610e9157610e90610d42565b5b81810290505b9392505050565b5f60ff82169050919050565b5f610eb482610b48565b9150610ebf83610e9e565b9250610eec7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484610dcd565b905092915050565b5f610efe82610b48565b9150610f0983610b48565b9250828202610f1781610b48565b91508282048414831517610f2e57610f2d610d42565b5b5092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610f5e82610f35565b9050919050565b610f6e81610f54565b82525050565b5f8115159050919050565b610f8881610f74565b82525050565b5f604082019050610fa15f830185610f65565b610fae6020830184610f7f565b9392505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610ff9601f83610fb5565b915061100482610fc5565b602082019050919050565b5f6020820190508181035f83015261102681610fed565b9050919050565b5f61103782610b48565b915061104283610b48565b925082820190508082111561105a57611059610d42565b5b92915050565b61106981610b48565b82525050565b5f6020820190506110825f830184611060565b92915050565b7f4e6562756c615374726964653a204e6f74207472616e7366657261626c6520755f8201527f6e74696c206c697374696e670000000000000000000000000000000000000000602082015250565b5f6110e2602c83610fb5565b91506110ed82611088565b604082019050919050565b5f6020820190508181035f83015261110f816110d6565b9050919050565b613fb0806111235f395ff3fe608060405234801561000f575f5ffd5b50600436106103a2575f3560e01c806392fede00116101e7578063c3829ee21161010d578063db5455fc116100ab578063e13627d21161007a578063e13627d2146109fa578063ec89c20014610a04578063f2fde38b14610a22578063f6396e1614610a3e576103a2565b8063db5455fc14610970578063dd62ed3e1461098e578063df39c765146109be578063df97367a146109dc576103a2565b8063c8ab7f46116100e7578063c8ab7f461461090e578063c91dcef41461092c578063d21e46fc1461094a578063d8530dba14610954576103a2565b8063c3829ee2146108b6578063c4bc0602146108d2578063c68b85e5146108f0576103a2565b8063a021209211610185578063af899a1e11610154578063af899a1e14610852578063b20ea95914610870578063b451b8121461088e578063bbc0465114610898576103a2565b8063a0212092146107b6578063a457c2d7146107d4578063a7b1101c14610804578063a9059cbb14610822576103a2565b806395d89b41116101c157806395d89b411461072c5780639b19251a1461074a5780639cc56c3d1461077a5780639ec1e34114610798576103a2565b806392fede00146106e65780639394c6e2146106f0578063942b96f31461070e576103a2565b806350fe2734116102cc57806370a082311161026a57806379ba50971161023957806379ba509714610682578063860d657b1461068c57806388d28380146106aa5780638da5cb5b146106c8576103a2565b806370a0823114610620578063715018a614610650578063732ef0bc1461065a5780637541792d14610678576103a2565b80635a142992116102a65780635a142992146105bc578063687844e4146105da5780636fe8bd83146105f85780637074af5c14610616576103a2565b806350fe2734146105765780635197da2a14610580578063582c16b61461059e576103a2565b80632185810b11610344578063313ce56711610313578063313ce5671461050057806331aff39f1461051e578063395093511461053c578063446db2ab1461056c576103a2565b80632185810b1461047657806323b872dd14610494578063250982c1146104c45780632c3245e2146104e2576103a2565b806318160ddd1161038057806318160ddd146103fe578063188ec3561461041c5780631a7b59311461043a5780631f8c92a514610458576103a2565b806306fdde03146103a6578063095ea7b3146103c45780630a0578fd146103f4575b5f5ffd5b6103ae610a48565b6040516103bb9190612b40565b60405180910390f35b6103de60048036038101906103d99190612bf1565b610ad8565b6040516103eb9190612c49565b60405180910390f35b6103fc610af5565b005b610406610c16565b6040516104139190612c71565b60405180910390f35b610424610c1f565b6040516104319190612c71565b60405180910390f35b610442610c26565b60405161044f9190612c99565b60405180910390f35b610460610c3e565b60405161046d9190612c99565b60405180910390f35b61047e610c56565b60405161048b9190612c49565b60405180910390f35b6104ae60048036038101906104a99190612cb2565b610c69565b6040516104bb9190612c49565b60405180910390f35b6104cc610d8c565b6040516104d99190612c99565b60405180910390f35b6104ea610da4565b6040516104f79190612c99565b60405180910390f35b610508610dbc565b6040516105159190612d1d565b60405180910390f35b610526610dd1565b6040516105339190612c99565b60405180910390f35b61055660048036038101906105519190612bf1565b610de9565b6040516105639190612c49565b60405180910390f35b610574610e90565b005b61057e610f7f565b005b610588611012565b6040516105959190612c71565b60405180910390f35b6105a6611032565b6040516105b39190612c71565b60405180910390f35b6105c4611052565b6040516105d19190612c99565b60405180910390f35b6105e261106a565b6040516105ef9190612c71565b60405180910390f35b61060061108a565b60405161060d9190612c71565b60405180910390f35b61061e6110aa565b005b61063a60048036038101906106359190612d36565b61129e565b6040516106479190612c71565b60405180910390f35b6106586112e3565b005b610662611326565b60405161066f9190612c71565b60405180910390f35b61068061132c565b005b61068a61140f565b005b61069461157f565b6040516106a19190612c71565b60405180910390f35b6106b261159f565b6040516106bf9190612c71565b60405180910390f35b6106d06115a5565b6040516106dd9190612c99565b60405180910390f35b6106ee6115cd565b005b6106f86116c3565b6040516107059190612c99565b60405180910390f35b6107166116e8565b6040516107239190612c49565b60405180910390f35b6107346116fb565b6040516107419190612b40565b60405180910390f35b610764600480360381019061075f9190612d36565b61178b565b6040516107719190612c49565b60405180910390f35b6107826117a8565b60405161078f9190612c71565b60405180910390f35b6107a06117c8565b6040516107ad9190612c99565b60405180910390f35b6107be6117e0565b6040516107cb9190612c99565b60405180910390f35b6107ee60048036038101906107e99190612bf1565b611805565b6040516107fb9190612c49565b60405180910390f35b61080c6118f4565b6040516108199190612c71565b60405180910390f35b61083c60048036038101906108379190612bf1565b611914565b6040516108499190612c49565b60405180910390f35b61085a611931565b6040516108679190612c99565b60405180910390f35b610878611949565b6040516108859190612c99565b60405180910390f35b610896611961565b005b6108a06119f4565b6040516108ad9190612c71565b60405180910390f35b6108d060048036038101906108cb9190612d36565b611a14565b005b6108da611ca3565b6040516108e79190612c71565b60405180910390f35b6108f8611ca9565b6040516109059190612c99565b60405180910390f35b610916611cc1565b6040516109239190612c71565b60405180910390f35b610934611ce1565b6040516109419190612c71565b60405180910390f35b610952611d01565b005b61096e60048036038101906109699190612d8b565b611e69565b005b610978611f98565b6040516109859190612c99565b60405180910390f35b6109a860048036038101906109a39190612dc9565b611fbd565b6040516109b59190612c71565b60405180910390f35b6109c661203f565b6040516109d39190612c71565b60405180910390f35b6109e4612045565b6040516109f19190612c99565b60405180910390f35b610a0261205d565b005b610a0c612196565b604051610a199190612c71565b60405180910390f35b610a3c6004803603810190610a379190612d36565b6121b6565b005b610a466121f9565b005b606060048054610a5790612e34565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390612e34565b8015610ace5780601f10610aa557610100808354040283529160200191610ace565b820191905f5260205f20905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b5f610aeb610ae4612399565b84846123a0565b6001905092915050565b610afd612563565b5f600c5411610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890612eae565b60405180910390fd5b7f5fe49aa80e1d8abda7347830ec5d1540f9dc01fa4d15b8bfc9943b081d4ea1be600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff16600c5460015f604051610bab959493929190612ecc565b60405180910390a15f600c819055505f600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600e60146101000a81548160ff021916908315150217905550565b5f600254905090565b5f42905090565b73547a4126b66f191b5418c9fd39abaed923c58aef81565b733f9437de4a7184d4d7618f9a17c02a76027f396181565b600660149054906101000a900460ff1681565b5f610c758484846125e1565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cbc612399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290612f8d565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d8057610d7f85610d6e612399565b8584610d7a9190612fd8565b6123a0565b5b60019150509392505050565b73369fd891341d65ad855e639e109fe932664e0ad481565b733f321a174a1611b5cc2693fc13834eef2a3c2eee81565b5f60035f9054906101000a900460ff16905090565b737e47cbffd60ec47788e208dc9c0cc6684d1df06f81565b5f610e86610df5612399565b848460015f610e02612399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e81919061300b565b6123a0565b6001905092915050565b610e98612563565b600660149054906101000a900460ff1615610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613088565b60405180910390fd5b5f600d5414610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f23906130f0565b60405180910390fd5b60075442610f3a919061300b565b600d819055507f8cba6b7a79ee56bc7c979db4adb0ab70f884317d1bdc26d8d7fe3ccbe6d2d460600d545f5f604051610f759392919061310e565b60405180910390a1565b610f87612563565b5f600d5411610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc29061318d565b60405180910390fd5b5f600d819055507f8cba6b7a79ee56bc7c979db4adb0ab70f884317d1bdc26d8d7fe3ccbe6d2d460600d5460015f6040516110089392919061310e565b60405180910390a1565b6012600a61102091906132da565b630393870061102f9190613324565b81565b6012600a61104091906132da565b631dcd650061104f9190613324565b81565b73d9d417405a5f740477e654c2db8f2d0c8186b0c381565b6012600a61107891906132da565b6311e1a3006110879190613324565b81565b6012600a61109891906132da565b6305f5e1006110a79190613324565b81565b6110b2612563565b5f600a54116110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed906133af565b60405180910390fd5b42600a54111561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290613417565b60405180910390fd5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2260095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516111ec9190612c99565b60405180910390a17f4c16f402d5b616974bc917612a1ea0ce86db31f00e2d3beb53bf760229ff44f3600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a545f600160405161124d9493929190613435565b60405180910390a15f600a819055505f600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112eb612563565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d906134e8565b60405180910390fd5b600a5481565b611334612563565b5f600b5414611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613576565b60405180910390fd5b5f600a54146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613604565b60405180910390fd5b600754426113ca919061300b565b600b819055507f96cb2fe4a7e25634168ccb973a61e53864e98248e60d8733f69a7e001817780a600b545f5f6040516114059392919061310e565b60405180910390a1565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461149e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611495906136b8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166114bd6115a5565b73ffffffffffffffffffffffffffffffffffffffff1603611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a90613720565b60405180910390fd5b61153d60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612854565b5f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6012600a61158d91906132da565b6308583b0061159c9190613324565b81565b600c5481565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115d5612563565b5f600a5411611619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611610906133af565b60405180910390fd5b7f4c16f402d5b616974bc917612a1ea0ce86db31f00e2d3beb53bf760229ff44f3600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a5460015f6040516116729493929190613435565b60405180910390a15f600a819055505f600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60149054906101000a900460ff1681565b60606005805461170a90612e34565b80601f016020809104026020016040519081016040528092919081815260200182805461173690612e34565b80156117815780601f1061175857610100808354040283529160200191611781565b820191905f5260205f20905b81548152906001019060200180831161176457829003601f168201915b5050505050905090565b6008602052805f5260405f205f915054906101000a900460ff1681565b6012600a6117b691906132da565b6305f5e1006117c59190613324565b81565b73eb0ed2f6657dfe26b8b2918f8610f21b2ec5ac2681565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f60015f611812612399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c3906137ae565b60405180910390fd5b6118e96118d7612399565b8585846118e49190612fd8565b6123a0565b600191505092915050565b6012600a61190291906132da565b630bebc2006119119190613324565b81565b5f611927611920612399565b84846125e1565b6001905092915050565b73f5c0baca447965711e1ce19625c1aba201865cab81565b7356272fb4f5ca1e98effe13ee3af3d96c56a8739181565b611969612563565b5f600b54116119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490613816565b60405180910390fd5b7f96cb2fe4a7e25634168ccb973a61e53864e98248e60d8733f69a7e001817780a600b5460015f6040516119e39392919061310e565b60405180910390a15f600b81905550565b6012600a611a0291906132da565b6302625a00611a119190613324565b81565b611a1c612563565b5f600a5414611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790613604565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906138a4565b60405180910390fd5b5f600b5414611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0990613576565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663a619486e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9691906138d6565b73ffffffffffffffffffffffffffffffffffffffff1603611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be39061394b565b60405180910390fd5b60075442611bfa919061300b565b600a8190555080600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4c16f402d5b616974bc917612a1ea0ce86db31f00e2d3beb53bf760229ff44f3600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a545f5f604051611c989493929190613435565b60405180910390a150565b600b5481565b73a89e1d8c8214ab9801064a0465c1abee881789e581565b6012600a611ccf91906132da565b6311e1a300611cde9190613324565b81565b6012600a611cef91906132da565b630bebc200611cfe9190613324565b81565b611d09612563565b5f600b5411611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490613816565b60405180910390fd5b42600b541115611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906139b3565b60405180910390fd5b611d9b5f612854565b7f96cb2fe4a7e25634168ccb973a61e53864e98248e60d8733f69a7e001817780a600b545f6001604051611dd19392919061310e565b60405180910390a15f600b819055505f600a819055505f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611e71612563565b5f600c5414611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac90613a1b565b60405180910390fd5b60075442611ec3919061300b565b600c8190555081600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60146101000a81548160ff0219169083151502179055507f5fe49aa80e1d8abda7347830ec5d1540f9dc01fa4d15b8bfc9943b081d4ea1be600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff16600c545f5f604051611f8c959493929190612ecc565b60405180910390a15050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b732150eab0e0f1b07baf8da3f66f88b74d87d1b2d381565b612065612563565b5f600d54116120a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a09061318d565b60405180910390fd5b42600d5411156120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590613a83565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507fc9fdf48b3499e3fc7a94e25a31b32650e0f327668f240483d89bc08e463bf3df600660149054906101000a900460ff166040516121479190612c49565b60405180910390a17f8cba6b7a79ee56bc7c979db4adb0ab70f884317d1bdc26d8d7fe3ccbe6d2d460600d545f60016040516121859392919061310e565b60405180910390a15f600d81905550565b6012600a6121a491906132da565b63039387006121b39190613324565b81565b6121be612563565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090613b11565b60405180910390fd5b612201612563565b5f600c5411612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90612eae565b60405180910390fd5b42600c54111561228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190613b79565b60405180910390fd5b6122c4600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff16612917565b7f5fe49aa80e1d8abda7347830ec5d1540f9dc01fa4d15b8bfc9943b081d4ea1be600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff16600c545f600160405161232e959493929190612ecc565b60405180910390a15f600c819055505f600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600e60146101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361240e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240590613c07565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613c95565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125569190612c71565b60405180910390a3505050565b61256b612399565b73ffffffffffffffffffffffffffffffffffffffff166125896115a5565b73ffffffffffffffffffffffffffffffffffffffff16146125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690613cfd565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613d8b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b490613e19565b60405180910390fd5b6126c88383836129d8565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561274b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274290613ea7565b60405180910390fd5b81816127579190612fd8565b5f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127e2919061300b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128469190612c71565b60405180910390a350505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3f50d04114467f3ca25c50f1540e2864f8a852c0380bbbbb603ebfda10b5baf2600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff166040516129cc929190613ec5565b60405180910390a15050565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612a76575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612acb57600660149054906101000a900460ff16612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190613f5c565b60405180910390fd5b5b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b1282612ad0565b612b1c8185612ada565b9350612b2c818560208601612aea565b612b3581612af8565b840191505092915050565b5f6020820190508181035f830152612b588184612b08565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b8d82612b64565b9050919050565b612b9d81612b83565b8114612ba7575f5ffd5b50565b5f81359050612bb881612b94565b92915050565b5f819050919050565b612bd081612bbe565b8114612bda575f5ffd5b50565b5f81359050612beb81612bc7565b92915050565b5f5f60408385031215612c0757612c06612b60565b5b5f612c1485828601612baa565b9250506020612c2585828601612bdd565b9150509250929050565b5f8115159050919050565b612c4381612c2f565b82525050565b5f602082019050612c5c5f830184612c3a565b92915050565b612c6b81612bbe565b82525050565b5f602082019050612c845f830184612c62565b92915050565b612c9381612b83565b82525050565b5f602082019050612cac5f830184612c8a565b92915050565b5f5f5f60608486031215612cc957612cc8612b60565b5b5f612cd686828701612baa565b9350506020612ce786828701612baa565b9250506040612cf886828701612bdd565b9150509250925092565b5f60ff82169050919050565b612d1781612d02565b82525050565b5f602082019050612d305f830184612d0e565b92915050565b5f60208284031215612d4b57612d4a612b60565b5b5f612d5884828501612baa565b91505092915050565b612d6a81612c2f565b8114612d74575f5ffd5b50565b5f81359050612d8581612d61565b92915050565b5f5f60408385031215612da157612da0612b60565b5b5f612dae85828601612baa565b9250506020612dbf85828601612d77565b9150509250929050565b5f5f60408385031215612ddf57612dde612b60565b5b5f612dec85828601612baa565b9250506020612dfd85828601612baa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e4b57607f821691505b602082108103612e5e57612e5d612e07565b5b50919050565b7f53657457686974656c697374206e6f7420706c616e6e656400000000000000005f82015250565b5f612e98601883612ada565b9150612ea382612e64565b602082019050919050565b5f6020820190508181035f830152612ec581612e8c565b9050919050565b5f60a082019050612edf5f830188612c8a565b612eec6020830187612c3a565b612ef96040830186612c62565b612f066060830185612c3a565b612f136080830184612c3a565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612f77602883612ada565b9150612f8282612f1d565b604082019050919050565b5f6020820190508181035f830152612fa481612f6b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612fe282612bbe565b9150612fed83612bbe565b925082820390508181111561300557613004612fab565b5b92915050565b5f61301582612bbe565b915061302083612bbe565b925082820190508082111561303857613037612fab565b5b92915050565b7f4e6562756c615374726964653a20416c726561647920656e61626c65640000005f82015250565b5f613072601d83612ada565b915061307d8261303e565b602082019050919050565b5f6020820190508181035f83015261309f81613066565b9050919050565b7f416c6c6f775472616e736665727320616c726561647920706c616e6e656400005f82015250565b5f6130da601e83612ada565b91506130e5826130a6565b602082019050919050565b5f6020820190508181035f830152613107816130ce565b9050919050565b5f6060820190506131215f830186612c62565b61312e6020830185612c3a565b61313b6040830184612c3a565b949350505050565b7f416c6c6f775472616e7366657273206e6f7420706c616e6e65640000000000005f82015250565b5f613177601a83612ada565b915061318282613143565b602082019050919050565b5f6020820190508181035f8301526131a48161316b565b9050919050565b5f8160011c9050919050565b5f5f8291508390505b6001851115613200578086048111156131dc576131db612fab565b5b60018516156131eb5780820291505b80810290506131f9856131ab565b94506131c0565b94509492505050565b5f8261321857600190506132d3565b81613225575f90506132d3565b816001811461323b576002811461324557613274565b60019150506132d3565b60ff84111561325757613256612fab565b5b8360020a91508482111561326e5761326d612fab565b5b506132d3565b5060208310610133831016604e8410600b84101617156132a95782820a9050838111156132a4576132a3612fab565b5b6132d3565b6132b684848460016131b7565b925090508184048111156132cd576132cc612fab565b5b81810290505b9392505050565b5f6132e482612bbe565b91506132ef83612d02565b925061331c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613209565b905092915050565b5f61332e82612bbe565b915061333983612bbe565b925082820261334781612bbe565b9150828204841483151761335e5761335d612fab565b5b5092915050565b7f5472616e736665724f776e657273686970206e6f7420706c616e6e65640000005f82015250565b5f613399601d83612ada565b91506133a482613365565b602082019050919050565b5f6020820190508181035f8301526133c68161338d565b9050919050565b7f5472616e736665724f776e657273686970206e6f7420756e6c6f636b656400005f82015250565b5f613401601e83612ada565b915061340c826133cd565b602082019050919050565b5f6020820190508181035f83015261342e816133f5565b9050919050565b5f6080820190506134485f830187612c8a565b6134556020830186612c62565b6134626040830185612c3a565b61346f6060830184612c3a565b95945050505050565b7f52656e6f756e63654f776e657273686970206f6e6c79207669612074696d656c5f8201527f6f636b206d656368616e69736d00000000000000000000000000000000000000602082015250565b5f6134d2602d83612ada565b91506134dd82613478565b604082019050919050565b5f6020820190508181035f8301526134ff816134c6565b9050919050565b7f52656e6f756e63654f776e65727368697020616c726561647920706c616e6e655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f613560602183612ada565b915061356b82613506565b604082019050919050565b5f6020820190508181035f83015261358d81613554565b9050919050565b7f5472616e736665724f776e65727368697020616c726561647920706c616e6e655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135ee602183612ada565b91506135f982613594565b604082019050919050565b5f6020820190508181035f83015261361b816135e2565b9050919050565b7f596f75206d757374206265206e6f6d696e6174656420617320706f74656e74695f8201527f616c206f776e6572206265666f726520796f752063616e20616363657074206f60208201527f776e657273686970000000000000000000000000000000000000000000000000604082015250565b5f6136a2604883612ada565b91506136ad82613622565b606082019050919050565b5f6020820190508181035f8301526136cf81613696565b9050919050565b7f4f776e6572736869702072656e6f756e636564000000000000000000000000005f82015250565b5f61370a601383612ada565b9150613715826136d6565b602082019050919050565b5f6020820190508181035f830152613737816136fe565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613798602583612ada565b91506137a38261373e565b604082019050919050565b5f6020820190508181035f8301526137c58161378c565b9050919050565b7f52656e6f756e63654f776e657273686970206e6f7420706c616e6e65640000005f82015250565b5f613800601d83612ada565b915061380b826137cc565b602082019050919050565b5f6020820190508181035f83015261382d816137f4565b9050919050565b7f706f74656e7469616c206f776e65722063616e206e6f7420626520746865207a5f8201527f65726f20616464726573732e0000000000000000000000000000000000000000602082015250565b5f61388e602c83612ada565b915061389982613834565b604082019050919050565b5f6020820190508181035f8301526138bb81613882565b9050919050565b5f815190506138d081612b94565b92915050565b5f602082840312156138eb576138ea612b60565b5b5f6138f8848285016138c2565b91505092915050565b7f4e6577206f776e6572206d75737420626520736166652077616c6c65740000005f82015250565b5f613935601d83612ada565b915061394082613901565b602082019050919050565b5f6020820190508181035f83015261396281613929565b9050919050565b7f52656e6f756e63654f776e657273686970206e6f7420756e6c6f636b656400005f82015250565b5f61399d601e83612ada565b91506139a882613969565b602082019050919050565b5f6020820190508181035f8301526139ca81613991565b9050919050565b7f53657457686974656c69737420616c726561647920706c616e6e6564000000005f82015250565b5f613a05601c83612ada565b9150613a10826139d1565b602082019050919050565b5f6020820190508181035f830152613a32816139f9565b9050919050565b7f416c6c6f775472616e7366657273206e6f7420756e6c6f636b656400000000005f82015250565b5f613a6d601b83612ada565b9150613a7882613a39565b602082019050919050565b5f6020820190508181035f830152613a9a81613a61565b9050919050565b7f5472616e736665724f776e657273686970206f6e6c79207669612074696d656c5f8201527f6f636b206d656368616e69736d00000000000000000000000000000000000000602082015250565b5f613afb602d83612ada565b9150613b0682613aa1565b604082019050919050565b5f6020820190508181035f830152613b2881613aef565b9050919050565b7f53657457686974656c697374206e6f7420756e6c6f636b6564000000000000005f82015250565b5f613b63601983612ada565b9150613b6e82613b2f565b602082019050919050565b5f6020820190508181035f830152613b9081613b57565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613bf1602483612ada565b9150613bfc82613b97565b604082019050919050565b5f6020820190508181035f830152613c1e81613be5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c7f602283612ada565b9150613c8a82613c25565b604082019050919050565b5f6020820190508181035f830152613cac81613c73565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ce7602083612ada565b9150613cf282613cb3565b602082019050919050565b5f6020820190508181035f830152613d1481613cdb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613d75602583612ada565b9150613d8082613d1b565b604082019050919050565b5f6020820190508181035f830152613da281613d69565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e03602383612ada565b9150613e0e82613da9565b604082019050919050565b5f6020820190508181035f830152613e3081613df7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613e91602683612ada565b9150613e9c82613e37565b604082019050919050565b5f6020820190508181035f830152613ebe81613e85565b9050919050565b5f604082019050613ed85f830185612c8a565b613ee56020830184612c3a565b9392505050565b7f4e6562756c615374726964653a204e6f74207472616e7366657261626c6520755f8201527f6e74696c206c697374696e670000000000000000000000000000000000000000602082015250565b5f613f46602c83612ada565b9150613f5182613eec565b604082019050919050565b5f6020820190508181035f830152613f7381613f3a565b905091905056fea264697066735822122030152ae7c90ae8c96f8d774d49281d7663ce59e6e88734c3c7fc3f02001fb77d64736f6c634300081c0033

Deployed Bytecode

0x608060405234801561000f575f5ffd5b50600436106103a2575f3560e01c806392fede00116101e7578063c3829ee21161010d578063db5455fc116100ab578063e13627d21161007a578063e13627d2146109fa578063ec89c20014610a04578063f2fde38b14610a22578063f6396e1614610a3e576103a2565b8063db5455fc14610970578063dd62ed3e1461098e578063df39c765146109be578063df97367a146109dc576103a2565b8063c8ab7f46116100e7578063c8ab7f461461090e578063c91dcef41461092c578063d21e46fc1461094a578063d8530dba14610954576103a2565b8063c3829ee2146108b6578063c4bc0602146108d2578063c68b85e5146108f0576103a2565b8063a021209211610185578063af899a1e11610154578063af899a1e14610852578063b20ea95914610870578063b451b8121461088e578063bbc0465114610898576103a2565b8063a0212092146107b6578063a457c2d7146107d4578063a7b1101c14610804578063a9059cbb14610822576103a2565b806395d89b41116101c157806395d89b411461072c5780639b19251a1461074a5780639cc56c3d1461077a5780639ec1e34114610798576103a2565b806392fede00146106e65780639394c6e2146106f0578063942b96f31461070e576103a2565b806350fe2734116102cc57806370a082311161026a57806379ba50971161023957806379ba509714610682578063860d657b1461068c57806388d28380146106aa5780638da5cb5b146106c8576103a2565b806370a0823114610620578063715018a614610650578063732ef0bc1461065a5780637541792d14610678576103a2565b80635a142992116102a65780635a142992146105bc578063687844e4146105da5780636fe8bd83146105f85780637074af5c14610616576103a2565b806350fe2734146105765780635197da2a14610580578063582c16b61461059e576103a2565b80632185810b11610344578063313ce56711610313578063313ce5671461050057806331aff39f1461051e578063395093511461053c578063446db2ab1461056c576103a2565b80632185810b1461047657806323b872dd14610494578063250982c1146104c45780632c3245e2146104e2576103a2565b806318160ddd1161038057806318160ddd146103fe578063188ec3561461041c5780631a7b59311461043a5780631f8c92a514610458576103a2565b806306fdde03146103a6578063095ea7b3146103c45780630a0578fd146103f4575b5f5ffd5b6103ae610a48565b6040516103bb9190612b40565b60405180910390f35b6103de60048036038101906103d99190612bf1565b610ad8565b6040516103eb9190612c49565b60405180910390f35b6103fc610af5565b005b610406610c16565b6040516104139190612c71565b60405180910390f35b610424610c1f565b6040516104319190612c71565b60405180910390f35b610442610c26565b60405161044f9190612c99565b60405180910390f35b610460610c3e565b60405161046d9190612c99565b60405180910390f35b61047e610c56565b60405161048b9190612c49565b60405180910390f35b6104ae60048036038101906104a99190612cb2565b610c69565b6040516104bb9190612c49565b60405180910390f35b6104cc610d8c565b6040516104d99190612c99565b60405180910390f35b6104ea610da4565b6040516104f79190612c99565b60405180910390f35b610508610dbc565b6040516105159190612d1d565b60405180910390f35b610526610dd1565b6040516105339190612c99565b60405180910390f35b61055660048036038101906105519190612bf1565b610de9565b6040516105639190612c49565b60405180910390f35b610574610e90565b005b61057e610f7f565b005b610588611012565b6040516105959190612c71565b60405180910390f35b6105a6611032565b6040516105b39190612c71565b60405180910390f35b6105c4611052565b6040516105d19190612c99565b60405180910390f35b6105e261106a565b6040516105ef9190612c71565b60405180910390f35b61060061108a565b60405161060d9190612c71565b60405180910390f35b61061e6110aa565b005b61063a60048036038101906106359190612d36565b61129e565b6040516106479190612c71565b60405180910390f35b6106586112e3565b005b610662611326565b60405161066f9190612c71565b60405180910390f35b61068061132c565b005b61068a61140f565b005b61069461157f565b6040516106a19190612c71565b60405180910390f35b6106b261159f565b6040516106bf9190612c71565b60405180910390f35b6106d06115a5565b6040516106dd9190612c99565b60405180910390f35b6106ee6115cd565b005b6106f86116c3565b6040516107059190612c99565b60405180910390f35b6107166116e8565b6040516107239190612c49565b60405180910390f35b6107346116fb565b6040516107419190612b40565b60405180910390f35b610764600480360381019061075f9190612d36565b61178b565b6040516107719190612c49565b60405180910390f35b6107826117a8565b60405161078f9190612c71565b60405180910390f35b6107a06117c8565b6040516107ad9190612c99565b60405180910390f35b6107be6117e0565b6040516107cb9190612c99565b60405180910390f35b6107ee60048036038101906107e99190612bf1565b611805565b6040516107fb9190612c49565b60405180910390f35b61080c6118f4565b6040516108199190612c71565b60405180910390f35b61083c60048036038101906108379190612bf1565b611914565b6040516108499190612c49565b60405180910390f35b61085a611931565b6040516108679190612c99565b60405180910390f35b610878611949565b6040516108859190612c99565b60405180910390f35b610896611961565b005b6108a06119f4565b6040516108ad9190612c71565b60405180910390f35b6108d060048036038101906108cb9190612d36565b611a14565b005b6108da611ca3565b6040516108e79190612c71565b60405180910390f35b6108f8611ca9565b6040516109059190612c99565b60405180910390f35b610916611cc1565b6040516109239190612c71565b60405180910390f35b610934611ce1565b6040516109419190612c71565b60405180910390f35b610952611d01565b005b61096e60048036038101906109699190612d8b565b611e69565b005b610978611f98565b6040516109859190612c99565b60405180910390f35b6109a860048036038101906109a39190612dc9565b611fbd565b6040516109b59190612c71565b60405180910390f35b6109c661203f565b6040516109d39190612c71565b60405180910390f35b6109e4612045565b6040516109f19190612c99565b60405180910390f35b610a0261205d565b005b610a0c612196565b604051610a199190612c71565b60405180910390f35b610a3c6004803603810190610a379190612d36565b6121b6565b005b610a466121f9565b005b606060048054610a5790612e34565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8390612e34565b8015610ace5780601f10610aa557610100808354040283529160200191610ace565b820191905f5260205f20905b815481529060010190602001808311610ab157829003601f168201915b5050505050905090565b5f610aeb610ae4612399565b84846123a0565b6001905092915050565b610afd612563565b5f600c5411610b41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3890612eae565b60405180910390fd5b7f5fe49aa80e1d8abda7347830ec5d1540f9dc01fa4d15b8bfc9943b081d4ea1be600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff16600c5460015f604051610bab959493929190612ecc565b60405180910390a15f600c819055505f600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600e60146101000a81548160ff021916908315150217905550565b5f600254905090565b5f42905090565b73547a4126b66f191b5418c9fd39abaed923c58aef81565b733f9437de4a7184d4d7618f9a17c02a76027f396181565b600660149054906101000a900460ff1681565b5f610c758484846125e1565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f610cbc612399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290612f8d565b60405180910390fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610d8057610d7f85610d6e612399565b8584610d7a9190612fd8565b6123a0565b5b60019150509392505050565b73369fd891341d65ad855e639e109fe932664e0ad481565b733f321a174a1611b5cc2693fc13834eef2a3c2eee81565b5f60035f9054906101000a900460ff16905090565b737e47cbffd60ec47788e208dc9c0cc6684d1df06f81565b5f610e86610df5612399565b848460015f610e02612399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610e81919061300b565b6123a0565b6001905092915050565b610e98612563565b600660149054906101000a900460ff1615610ee8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edf90613088565b60405180910390fd5b5f600d5414610f2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f23906130f0565b60405180910390fd5b60075442610f3a919061300b565b600d819055507f8cba6b7a79ee56bc7c979db4adb0ab70f884317d1bdc26d8d7fe3ccbe6d2d460600d545f5f604051610f759392919061310e565b60405180910390a1565b610f87612563565b5f600d5411610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc29061318d565b60405180910390fd5b5f600d819055507f8cba6b7a79ee56bc7c979db4adb0ab70f884317d1bdc26d8d7fe3ccbe6d2d460600d5460015f6040516110089392919061310e565b60405180910390a1565b6012600a61102091906132da565b630393870061102f9190613324565b81565b6012600a61104091906132da565b631dcd650061104f9190613324565b81565b73d9d417405a5f740477e654c2db8f2d0c8186b0c381565b6012600a61107891906132da565b6311e1a3006110879190613324565b81565b6012600a61109891906132da565b6305f5e1006110a79190613324565b81565b6110b2612563565b5f600a54116110f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ed906133af565b60405180910390fd5b42600a54111561113b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113290613417565b60405180910390fd5b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce2260095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516111ec9190612c99565b60405180910390a17f4c16f402d5b616974bc917612a1ea0ce86db31f00e2d3beb53bf760229ff44f3600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a545f600160405161124d9493929190613435565b60405180910390a15f600a819055505f600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f5f5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112eb612563565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d906134e8565b60405180910390fd5b600a5481565b611334612563565b5f600b5414611378576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136f90613576565b60405180910390fd5b5f600a54146113bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b390613604565b60405180910390fd5b600754426113ca919061300b565b600b819055507f96cb2fe4a7e25634168ccb973a61e53864e98248e60d8733f69a7e001817780a600b545f5f6040516114059392919061310e565b60405180910390a1565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461149e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611495906136b8565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff166114bd6115a5565b73ffffffffffffffffffffffffffffffffffffffff1603611513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150a90613720565b60405180910390fd5b61153d60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16612854565b5f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6012600a61158d91906132da565b6308583b0061159c9190613324565b81565b600c5481565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6115d5612563565b5f600a5411611619576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611610906133af565b60405180910390fd5b7f4c16f402d5b616974bc917612a1ea0ce86db31f00e2d3beb53bf760229ff44f3600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a5460015f6040516116729493929190613435565b60405180910390a15f600a819055505f600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e60149054906101000a900460ff1681565b60606005805461170a90612e34565b80601f016020809104026020016040519081016040528092919081815260200182805461173690612e34565b80156117815780601f1061175857610100808354040283529160200191611781565b820191905f5260205f20905b81548152906001019060200180831161176457829003601f168201915b5050505050905090565b6008602052805f5260405f205f915054906101000a900460ff1681565b6012600a6117b691906132da565b6305f5e1006117c59190613324565b81565b73eb0ed2f6657dfe26b8b2918f8610f21b2ec5ac2681565b600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f60015f611812612399565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050828110156118cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c3906137ae565b60405180910390fd5b6118e96118d7612399565b8585846118e49190612fd8565b6123a0565b600191505092915050565b6012600a61190291906132da565b630bebc2006119119190613324565b81565b5f611927611920612399565b84846125e1565b6001905092915050565b73f5c0baca447965711e1ce19625c1aba201865cab81565b7356272fb4f5ca1e98effe13ee3af3d96c56a8739181565b611969612563565b5f600b54116119ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a490613816565b60405180910390fd5b7f96cb2fe4a7e25634168ccb973a61e53864e98248e60d8733f69a7e001817780a600b5460015f6040516119e39392919061310e565b60405180910390a15f600b81905550565b6012600a611a0291906132da565b6302625a00611a119190613324565b81565b611a1c612563565b5f600a5414611a60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5790613604565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ace576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac5906138a4565b60405180910390fd5b5f600b5414611b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0990613576565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1663a619486e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b72573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9691906138d6565b73ffffffffffffffffffffffffffffffffffffffff1603611bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be39061394b565b60405180910390fd5b60075442611bfa919061300b565b600a8190555080600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f4c16f402d5b616974bc917612a1ea0ce86db31f00e2d3beb53bf760229ff44f3600f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600a545f5f604051611c989493929190613435565b60405180910390a150565b600b5481565b73a89e1d8c8214ab9801064a0465c1abee881789e581565b6012600a611ccf91906132da565b6311e1a300611cde9190613324565b81565b6012600a611cef91906132da565b630bebc200611cfe9190613324565b81565b611d09612563565b5f600b5411611d4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4490613816565b60405180910390fd5b42600b541115611d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d89906139b3565b60405180910390fd5b611d9b5f612854565b7f96cb2fe4a7e25634168ccb973a61e53864e98248e60d8733f69a7e001817780a600b545f6001604051611dd19392919061310e565b60405180910390a15f600b819055505f600a819055505f60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b611e71612563565b5f600c5414611eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eac90613a1b565b60405180910390fd5b60075442611ec3919061300b565b600c8190555081600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60146101000a81548160ff0219169083151502179055507f5fe49aa80e1d8abda7347830ec5d1540f9dc01fa4d15b8bfc9943b081d4ea1be600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff16600c545f5f604051611f8c959493929190612ecc565b60405180910390a15050565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600d5481565b732150eab0e0f1b07baf8da3f66f88b74d87d1b2d381565b612065612563565b5f600d54116120a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120a09061318d565b60405180910390fd5b42600d5411156120ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e590613a83565b60405180910390fd5b6001600660146101000a81548160ff0219169083151502179055507fc9fdf48b3499e3fc7a94e25a31b32650e0f327668f240483d89bc08e463bf3df600660149054906101000a900460ff166040516121479190612c49565b60405180910390a17f8cba6b7a79ee56bc7c979db4adb0ab70f884317d1bdc26d8d7fe3ccbe6d2d460600d545f60016040516121859392919061310e565b60405180910390a15f600d81905550565b6012600a6121a491906132da565b63039387006121b39190613324565b81565b6121be612563565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f090613b11565b60405180910390fd5b612201612563565b5f600c5411612245576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223c90612eae565b60405180910390fd5b42600c54111561228a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228190613b79565b60405180910390fd5b6122c4600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff16612917565b7f5fe49aa80e1d8abda7347830ec5d1540f9dc01fa4d15b8bfc9943b081d4ea1be600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff16600c545f600160405161232e959493929190612ecc565b60405180910390a15f600c819055505f600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600e60146101000a81548160ff021916908315150217905550565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361240e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240590613c07565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361247c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247390613c95565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125569190612c71565b60405180910390a3505050565b61256b612399565b73ffffffffffffffffffffffffffffffffffffffff166125896115a5565b73ffffffffffffffffffffffffffffffffffffffff16146125df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125d690613cfd565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361264f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264690613d8b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036126bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b490613e19565b60405180910390fd5b6126c88383836129d8565b5f5f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101561274b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274290613ea7565b60405180910390fd5b81816127579190612fd8565b5f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546127e2919061300b565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128469190612c71565b60405180910390a350505050565b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f3f50d04114467f3ca25c50f1540e2864f8a852c0380bbbbb603ebfda10b5baf2600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e60149054906101000a900460ff166040516129cc929190613ec5565b60405180910390a15050565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612a76575060085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612acb57600660149054906101000a900460ff16612aca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ac190613f5c565b60405180910390fd5b5b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f612b1282612ad0565b612b1c8185612ada565b9350612b2c818560208601612aea565b612b3581612af8565b840191505092915050565b5f6020820190508181035f830152612b588184612b08565b905092915050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612b8d82612b64565b9050919050565b612b9d81612b83565b8114612ba7575f5ffd5b50565b5f81359050612bb881612b94565b92915050565b5f819050919050565b612bd081612bbe565b8114612bda575f5ffd5b50565b5f81359050612beb81612bc7565b92915050565b5f5f60408385031215612c0757612c06612b60565b5b5f612c1485828601612baa565b9250506020612c2585828601612bdd565b9150509250929050565b5f8115159050919050565b612c4381612c2f565b82525050565b5f602082019050612c5c5f830184612c3a565b92915050565b612c6b81612bbe565b82525050565b5f602082019050612c845f830184612c62565b92915050565b612c9381612b83565b82525050565b5f602082019050612cac5f830184612c8a565b92915050565b5f5f5f60608486031215612cc957612cc8612b60565b5b5f612cd686828701612baa565b9350506020612ce786828701612baa565b9250506040612cf886828701612bdd565b9150509250925092565b5f60ff82169050919050565b612d1781612d02565b82525050565b5f602082019050612d305f830184612d0e565b92915050565b5f60208284031215612d4b57612d4a612b60565b5b5f612d5884828501612baa565b91505092915050565b612d6a81612c2f565b8114612d74575f5ffd5b50565b5f81359050612d8581612d61565b92915050565b5f5f60408385031215612da157612da0612b60565b5b5f612dae85828601612baa565b9250506020612dbf85828601612d77565b9150509250929050565b5f5f60408385031215612ddf57612dde612b60565b5b5f612dec85828601612baa565b9250506020612dfd85828601612baa565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680612e4b57607f821691505b602082108103612e5e57612e5d612e07565b5b50919050565b7f53657457686974656c697374206e6f7420706c616e6e656400000000000000005f82015250565b5f612e98601883612ada565b9150612ea382612e64565b602082019050919050565b5f6020820190508181035f830152612ec581612e8c565b9050919050565b5f60a082019050612edf5f830188612c8a565b612eec6020830187612c3a565b612ef96040830186612c62565b612f066060830185612c3a565b612f136080830184612c3a565b9695505050505050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f612f77602883612ada565b9150612f8282612f1d565b604082019050919050565b5f6020820190508181035f830152612fa481612f6b565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612fe282612bbe565b9150612fed83612bbe565b925082820390508181111561300557613004612fab565b5b92915050565b5f61301582612bbe565b915061302083612bbe565b925082820190508082111561303857613037612fab565b5b92915050565b7f4e6562756c615374726964653a20416c726561647920656e61626c65640000005f82015250565b5f613072601d83612ada565b915061307d8261303e565b602082019050919050565b5f6020820190508181035f83015261309f81613066565b9050919050565b7f416c6c6f775472616e736665727320616c726561647920706c616e6e656400005f82015250565b5f6130da601e83612ada565b91506130e5826130a6565b602082019050919050565b5f6020820190508181035f830152613107816130ce565b9050919050565b5f6060820190506131215f830186612c62565b61312e6020830185612c3a565b61313b6040830184612c3a565b949350505050565b7f416c6c6f775472616e7366657273206e6f7420706c616e6e65640000000000005f82015250565b5f613177601a83612ada565b915061318282613143565b602082019050919050565b5f6020820190508181035f8301526131a48161316b565b9050919050565b5f8160011c9050919050565b5f5f8291508390505b6001851115613200578086048111156131dc576131db612fab565b5b60018516156131eb5780820291505b80810290506131f9856131ab565b94506131c0565b94509492505050565b5f8261321857600190506132d3565b81613225575f90506132d3565b816001811461323b576002811461324557613274565b60019150506132d3565b60ff84111561325757613256612fab565b5b8360020a91508482111561326e5761326d612fab565b5b506132d3565b5060208310610133831016604e8410600b84101617156132a95782820a9050838111156132a4576132a3612fab565b5b6132d3565b6132b684848460016131b7565b925090508184048111156132cd576132cc612fab565b5b81810290505b9392505050565b5f6132e482612bbe565b91506132ef83612d02565b925061331c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613209565b905092915050565b5f61332e82612bbe565b915061333983612bbe565b925082820261334781612bbe565b9150828204841483151761335e5761335d612fab565b5b5092915050565b7f5472616e736665724f776e657273686970206e6f7420706c616e6e65640000005f82015250565b5f613399601d83612ada565b91506133a482613365565b602082019050919050565b5f6020820190508181035f8301526133c68161338d565b9050919050565b7f5472616e736665724f776e657273686970206e6f7420756e6c6f636b656400005f82015250565b5f613401601e83612ada565b915061340c826133cd565b602082019050919050565b5f6020820190508181035f83015261342e816133f5565b9050919050565b5f6080820190506134485f830187612c8a565b6134556020830186612c62565b6134626040830185612c3a565b61346f6060830184612c3a565b95945050505050565b7f52656e6f756e63654f776e657273686970206f6e6c79207669612074696d656c5f8201527f6f636b206d656368616e69736d00000000000000000000000000000000000000602082015250565b5f6134d2602d83612ada565b91506134dd82613478565b604082019050919050565b5f6020820190508181035f8301526134ff816134c6565b9050919050565b7f52656e6f756e63654f776e65727368697020616c726561647920706c616e6e655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f613560602183612ada565b915061356b82613506565b604082019050919050565b5f6020820190508181035f83015261358d81613554565b9050919050565b7f5472616e736665724f776e65727368697020616c726561647920706c616e6e655f8201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b5f6135ee602183612ada565b91506135f982613594565b604082019050919050565b5f6020820190508181035f83015261361b816135e2565b9050919050565b7f596f75206d757374206265206e6f6d696e6174656420617320706f74656e74695f8201527f616c206f776e6572206265666f726520796f752063616e20616363657074206f60208201527f776e657273686970000000000000000000000000000000000000000000000000604082015250565b5f6136a2604883612ada565b91506136ad82613622565b606082019050919050565b5f6020820190508181035f8301526136cf81613696565b9050919050565b7f4f776e6572736869702072656e6f756e636564000000000000000000000000005f82015250565b5f61370a601383612ada565b9150613715826136d6565b602082019050919050565b5f6020820190508181035f830152613737816136fe565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f613798602583612ada565b91506137a38261373e565b604082019050919050565b5f6020820190508181035f8301526137c58161378c565b9050919050565b7f52656e6f756e63654f776e657273686970206e6f7420706c616e6e65640000005f82015250565b5f613800601d83612ada565b915061380b826137cc565b602082019050919050565b5f6020820190508181035f83015261382d816137f4565b9050919050565b7f706f74656e7469616c206f776e65722063616e206e6f7420626520746865207a5f8201527f65726f20616464726573732e0000000000000000000000000000000000000000602082015250565b5f61388e602c83612ada565b915061389982613834565b604082019050919050565b5f6020820190508181035f8301526138bb81613882565b9050919050565b5f815190506138d081612b94565b92915050565b5f602082840312156138eb576138ea612b60565b5b5f6138f8848285016138c2565b91505092915050565b7f4e6577206f776e6572206d75737420626520736166652077616c6c65740000005f82015250565b5f613935601d83612ada565b915061394082613901565b602082019050919050565b5f6020820190508181035f83015261396281613929565b9050919050565b7f52656e6f756e63654f776e657273686970206e6f7420756e6c6f636b656400005f82015250565b5f61399d601e83612ada565b91506139a882613969565b602082019050919050565b5f6020820190508181035f8301526139ca81613991565b9050919050565b7f53657457686974656c69737420616c726561647920706c616e6e6564000000005f82015250565b5f613a05601c83612ada565b9150613a10826139d1565b602082019050919050565b5f6020820190508181035f830152613a32816139f9565b9050919050565b7f416c6c6f775472616e7366657273206e6f7420756e6c6f636b656400000000005f82015250565b5f613a6d601b83612ada565b9150613a7882613a39565b602082019050919050565b5f6020820190508181035f830152613a9a81613a61565b9050919050565b7f5472616e736665724f776e657273686970206f6e6c79207669612074696d656c5f8201527f6f636b206d656368616e69736d00000000000000000000000000000000000000602082015250565b5f613afb602d83612ada565b9150613b0682613aa1565b604082019050919050565b5f6020820190508181035f830152613b2881613aef565b9050919050565b7f53657457686974656c697374206e6f7420756e6c6f636b6564000000000000005f82015250565b5f613b63601983612ada565b9150613b6e82613b2f565b602082019050919050565b5f6020820190508181035f830152613b9081613b57565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f613bf1602483612ada565b9150613bfc82613b97565b604082019050919050565b5f6020820190508181035f830152613c1e81613be5565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f613c7f602283612ada565b9150613c8a82613c25565b604082019050919050565b5f6020820190508181035f830152613cac81613c73565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f613ce7602083612ada565b9150613cf282613cb3565b602082019050919050565b5f6020820190508181035f830152613d1481613cdb565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613d75602583612ada565b9150613d8082613d1b565b604082019050919050565b5f6020820190508181035f830152613da281613d69565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613e03602383612ada565b9150613e0e82613da9565b604082019050919050565b5f6020820190508181035f830152613e3081613df7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613e91602683612ada565b9150613e9c82613e37565b604082019050919050565b5f6020820190508181035f830152613ebe81613e85565b9050919050565b5f604082019050613ed85f830185612c8a565b613ee56020830184612c3a565b9392505050565b7f4e6562756c615374726964653a204e6f74207472616e7366657261626c6520755f8201527f6e74696c206c697374696e670000000000000000000000000000000000000000602082015250565b5f613f46602c83612ada565b9150613f5182613eec565b604082019050919050565b5f6020820190508181035f830152613f7381613f3a565b905091905056fea264697066735822122030152ae7c90ae8c96f8d774d49281d7663ce59e6e88734c3c7fc3f02001fb77d64736f6c634300081c0033

Deployed Bytecode Sourcemap

18445:14267:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9203:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11377:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29077:391;;;:::i;:::-;;10330:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32048:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19956:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18986:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18644:34;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12029:497;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19861:88;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19078;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10165:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19173:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12935:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30605:374;;;:::i;:::-;;31149:276;;;:::i;:::-;;20664:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20085:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19270:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20166:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20745:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25410:588;;;:::i;:::-;;10501:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32414:133;;;:::i;:::-;;23317:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26256:450;;;:::i;:::-;;27959:317;;;:::i;:::-;;20329:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23423:41;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2416:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24847:394;;;:::i;:::-;;23524:52;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23583:50;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9422:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18895:41;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20827:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19764:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23646:47;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13653:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20247:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10841:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19377:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19667:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26876:317;;;:::i;:::-;;20583:74;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23954:725;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23370:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19570:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20501:75;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20907:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27362:585;;;:::i;:::-;;28453:455;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20991:43;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11079:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23471:46;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19473:90;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31595:445;;;:::i;:::-;;20421:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32555:150;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29873:562;;;:::i;:::-;;9203:100;9257:13;9290:5;9283:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9203:100;:::o;11377:169::-;11460:4;11477:39;11486:12;:10;:12::i;:::-;11500:7;11509:6;11477:8;:39::i;:::-;11534:4;11527:11;;11377:169;;;;:::o;29077:391::-;2302:13;:11;:13::i;:::-;29168:1:::1;29143:22;;:26;29135:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;29214:114;29235:24;;;;;;;;;;;29261:30;;;;;;;;;;;29292:22;;29316:4;29322:5;29214:114;;;;;;;;;;:::i;:::-;;;;;;;;29362:1;29339:22;:24;;;;29409:1;29374:24;;:37;;;;;;;;;;;;;;;;;;29455:5;29422:30;;:38;;;;;;;;;;;;;;;;;;29077:391::o:0;10330:108::-;10391:7;10418:12;;10411:19;;10330:108;:::o;32048:95::-;32093:7;32120:15;32113:22;;32048:95;:::o;19956:88::-;20002:42;19956:88;:::o;18986:85::-;19029:42;18986:85;:::o;18644:34::-;;;;;;;;;;;;;:::o;12029:497::-;12135:4;12152:36;12162:6;12170:9;12181:6;12152:9;:36::i;:::-;12201:24;12228:11;:19;12240:6;12228:19;;;;;;;;;;;;;;;:33;12248:12;:10;:12::i;:::-;12228:33;;;;;;;;;;;;;;;;12201:60;;12300:6;12280:16;:26;;12272:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12386:17;12366:16;:37;12362:125;;12418:57;12427:6;12435:12;:10;:12::i;:::-;12468:6;12449:16;:25;;;;:::i;:::-;12418:8;:57::i;:::-;12362:125;12514:4;12507:11;;;12029:497;;;;;:::o;19861:88::-;19907:42;19861:88;:::o;19078:::-;19124:42;19078:88;:::o;10165:100::-;10223:5;10248:9;;;;;;;;;;;10241:16;;10165:100;:::o;19173:90::-;19221:42;19173:90;:::o;12935:215::-;13023:4;13040:80;13049:12;:10;:12::i;:::-;13063:7;13109:10;13072:11;:25;13084:12;:10;:12::i;:::-;13072:25;;;;;;;;;;;;;;;:34;13098:7;13072:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13040:8;:80::i;:::-;13138:4;13131:11;;12935:215;;;;:::o;30605:374::-;2302:13;:11;:13::i;:::-;30679:14:::1;;;;;;;;;;;30678:15;30670:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30778:1;30746:28;;:33;30738:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30874:15;;30856;:33;;;;:::i;:::-;30825:28;:64;;;;30905:66;30928:28;;30958:5;30965;30905:66;;;;;;;;:::i;:::-;;;;;;;;30605:374::o:0;31149:276::-;2302:13;:11;:13::i;:::-;31251:1:::1;31220:28;;:32;31212:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31325:1;31294:28;:32;;;;31342:65;31365:28;;31395:4;31401:5;31342:65;;;;;;;;:::i;:::-;;;;;;;;31149:276::o:0;20664:74::-;18529:2;20723;:15;;;;:::i;:::-;20712:8;:26;;;;:::i;:::-;20664:74;:::o;20085:73::-;18529:2;20143;:15;;;;:::i;:::-;20131:9;:27;;;;:::i;:::-;20085:73;:::o;19270:100::-;19328:42;19270:100;:::o;20166:73::-;18529:2;20224;:15;;;;:::i;:::-;20212:9;:27;;;;:::i;:::-;20166:73;:::o;20745:75::-;18529:2;20805;:15;;;;:::i;:::-;20793:9;:27;;;;:::i;:::-;20745:75;:::o;25410:588::-;2302:13;:11;:13::i;:::-;25512:1:::1;25482:27;;:31;25474:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25597:15;25566:27;;:46;;25558:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;25676:19;;;;;;;;;;;25658:15;;:37;;;;;;;;;;;;;;;;;;25711:31;25726:15;;;;;;;;;;;25711:31;;;;;;:::i;:::-;;;;;;;;25758:151;25798:19;;;;;;;;;;;25832:27;;25874:5;25894:4;25758:151;;;;;;;;;:::i;:::-;;;;;;;;25948:1;25920:27;:29;;;;25988:1;25960:19;;:30;;;;;;;;;;;;;;;;;;25410:588::o:0;10501:127::-;10575:7;10602:9;:18;10612:7;10602:18;;;;;;;;;;;;;;;;10595:25;;10501:127;;;:::o;32414:133::-;2302:13;:11;:13::i;:::-;32484:55:::1;;;;;;;;;;:::i;:::-;;;;;;;;23317:46:::0;;;;:::o;26256:450::-;2302:13;:11;:13::i;:::-;26360:1:::1;26329:27;;:32;26321:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;26449:1;26418:27;;:32;26410:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;26549:15;;26531;:33;;;;:::i;:::-;26501:27;:63;;;;26580:118;26620:27;;26662:5;26682;26580:118;;;;;;;;:::i;:::-;;;;;;;;26256:450::o:0;27959:317::-;28026:15;;;;;;;;;;;28012:29;;:10;:29;;;28004:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;28156:1;28137:21;;:7;:5;:7::i;:::-;:21;;;28129:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;28193:35;28212:15;;;;;;;;;;;28193:18;:35::i;:::-;28265:1;28239:15;;:28;;;;;;;;;;;;;;;;;;27959:317::o;20329:85::-;18529:2;20399;:15;;;;:::i;:::-;20387:9;:27;;;;:::i;:::-;20329:85;:::o;23423:41::-;;;;:::o;2416:87::-;2462:7;2489:6;;;;;;;;;;;2482:13;;2416:87;:::o;24847:394::-;2302:13;:11;:13::i;:::-;24948:1:::1;24918:27;;:31;24910:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24999:151;25039:19;;;;;;;;;;;25073:27;;25115:4;25134:5;24999:151;;;;;;;;;:::i;:::-;;;;;;;;25189:1;25161:27;:29;;;;25231:1;25201:19;;:32;;;;;;;;;;;;;;;;;;24847:394::o:0;23524:52::-;;;;;;;;;;;;;:::o;23583:50::-;;;;;;;;;;;;;:::o;9422:104::-;9478:13;9511:7;9504:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9422:104;:::o;18895:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;20827:73::-;18529:2;20885;:15;;;;:::i;:::-;20873:9;:27;;;;:::i;:::-;20827:73;:::o;19764:90::-;19812:42;19764:90;:::o;23646:47::-;;;;;;;;;;;;;:::o;13653:377::-;13746:4;13763:24;13790:11;:25;13802:12;:10;:12::i;:::-;13790:25;;;;;;;;;;;;;;;:34;13816:7;13790:34;;;;;;;;;;;;;;;;13763:61;;13863:15;13843:16;:35;;13835:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13931:67;13940:12;:10;:12::i;:::-;13954:7;13982:15;13963:16;:34;;;;:::i;:::-;13931:8;:67::i;:::-;14018:4;14011:11;;;13653:377;;;;:::o;20247:75::-;18529:2;20307;:15;;;;:::i;:::-;20295:9;:27;;;;:::i;:::-;20247:75;:::o;10841:175::-;10927:4;10944:42;10954:12;:10;:12::i;:::-;10968:9;10979:6;10944:9;:42::i;:::-;11004:4;10997:11;;10841:175;;;;:::o;19377:89::-;19424:42;19377:89;:::o;19667:90::-;19715:42;19667:90;:::o;26876:317::-;2302:13;:11;:13::i;:::-;26977:1:::1;26947:27;;:31;26939:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27028:117;27068:27;;27110:4;27129:5;27028:117;;;;;;;;:::i;:::-;;;;;;;;27184:1;27156:27;:29;;;;26876:317::o:0;20583:74::-;18529:2;20642;:15;;;;:::i;:::-;20631:8;:26;;;;:::i;:::-;20583:74;:::o;23954:725::-;2302:13;:11;:13::i;:::-;24074:1:::1;24043:27;;:32;24035:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24152:1;24132:22;;:8;:22;;::::0;24124:79:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24253:1;24222:27;;:32;24214:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;24352:1;24311:43;;24318:8;24311:27;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;::::0;24303:85:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24447:15;;24429;:33;;;;:::i;:::-;24399:27;:63;;;;24495:8;24473:19;;:30;;;;;;;;;;;;;;;;;;24519:152;24559:19;;;;;;;;;;;24593:27;;24635:5;24655;24519:152;;;;;;;;;:::i;:::-;;;;;;;;23954:725:::0;:::o;23370:46::-;;;;:::o;19570:90::-;19618:42;19570:90;:::o;20501:75::-;18529:2;20561;:15;;;;:::i;:::-;20549:9;:27;;;;:::i;:::-;20501:75;:::o;20907:73::-;18529:2;20965;:15;;;;:::i;:::-;20953:9;:27;;;;:::i;:::-;20907:73;:::o;27362:585::-;2302:13;:11;:13::i;:::-;27464:1:::1;27434:27;;:31;27426:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27549:15;27518:27;;:46;;27510:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;27610:30;27637:1;27610:18;:30::i;:::-;27656:117;27696:27;;27738:5;27758:4;27656:117;;;;;;;;:::i;:::-;;;;;;;;27814:1;27784:27;:31;;;;27856:1;27826:27;:31;;;;27894:1;27868:15;;:28;;;;;;;;;;;;;;;;;;27937:1;27907:19;;:32;;;;;;;;;;;;;;;;;;27362:585::o:0;28453:455::-;2302:13;:11;:13::i;:::-;28573:1:::1;28547:22;;:27;28539:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28661:15;;28643;:33;;;;:::i;:::-;28618:22;:58;;;;28714:5;28687:24;;:32;;;;;;;;;;;;;;;;;;28763:6;28730:30;;:39;;;;;;;;;;;;;;;;;;28785:115;28806:24;;;;;;;;;;;28832:30;;;;;;;;;;;28863:22;;28887:5;28894;28785:115;;;;;;;;;;:::i;:::-;;;;;;;;28453:455:::0;;:::o;20991:43::-;;;;;;;;;;;;;:::o;11079:151::-;11168:7;11195:11;:18;11207:5;11195:18;;;;;;;;;;;;;;;:27;11214:7;11195:27;;;;;;;;;;;;;;;;11188:34;;11079:151;;;;:::o;23471:46::-;;;;:::o;19473:90::-;19521:42;19473:90;:::o;31595:445::-;2302:13;:11;:13::i;:::-;31700:1:::1;31669:28;;:32;31661:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;31783:15;31751:28;;:47;;31743:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;31858:4;31841:14;;:21;;;;;;;;;;;;;;;;;;31878:30;31893:14;;;;;;;;;;;31878:30;;;;;;:::i;:::-;;;;;;;;31924:65;31947:28;;31977:5;31984:4;31924:65;;;;;;;;:::i;:::-;;;;;;;;32031:1;32002:28;:30;;;;31595:445::o:0;20421:73::-;18529:2;20479;:15;;;;:::i;:::-;20468:8;:26;;;;:::i;:::-;20421:73;:::o;32555:150::-;2302:13;:11;:13::i;:::-;32642:55:::1;;;;;;;;;;:::i;:::-;;;;;;;;29873:562:::0;2302:13;:11;:13::i;:::-;29962:1:::1;29937:22;;:26;29929:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;30037:15;30011:22;;:41;;30003:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;30093:71;30107:24;;;;;;;;;;;30133:30;;;;;;;;;;;30093:13;:71::i;:::-;30180:115;30201:24;;;;;;;;;;;30227:30;;;;;;;;;;;30259:22;;30283:5;30290:4;30180:115;;;;;;;;;;:::i;:::-;;;;;;;;30329:1;30306:22;:24;;;;30376:1;30341:24;;:37;;;;;;;;;;;;;;;;;;30422:5;30389:30;;:38;;;;;;;;;;;;;;;;;;29873:562::o:0;987:98::-;1040:7;1067:10;1060:17;;987:98;:::o;17009:346::-;17128:1;17111:19;;:5;:19;;;17103:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17209:1;17190:21;;:7;:21;;;17182:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17293:6;17263:11;:18;17275:5;17263:18;;;;;;;;;;;;;;;:27;17282:7;17263:27;;;;;;;;;;;;;;;:36;;;;17331:7;17315:32;;17324:5;17315:32;;;17340:6;17315:32;;;;;;:::i;:::-;;;;;;;;17009:346;;;:::o;2581:132::-;2656:12;:10;:12::i;:::-;2645:23;;:7;:5;:7::i;:::-;:23;;;2637:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2581:132::o;14520:604::-;14644:1;14626:20;;:6;:20;;;14618:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14728:1;14707:23;;:9;:23;;;14699:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14783:47;14804:6;14812:9;14823:6;14783:20;:47::i;:::-;14843:21;14867:9;:17;14877:6;14867:17;;;;;;;;;;;;;;;;14843:41;;14920:6;14903:13;:23;;14895:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15016:6;15000:13;:22;;;;:::i;:::-;14980:9;:17;14990:6;14980:17;;;;;;;;;;;;;;;:42;;;;15057:6;15033:9;:20;15043:9;15033:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15098:9;15081:35;;15090:6;15081:35;;;15109:6;15081:35;;;;;;:::i;:::-;;;;;;;;14607:517;14520:604;;;:::o;3676:191::-;3750:16;3769:6;;;;;;;;;;;3750:25;;3795:8;3786:6;;:17;;;;;;;;;;;;;;;;;;3850:8;3819:40;;3840:8;3819:40;;;;;;;;;;;;3739:128;3676:191;:::o;29476:229::-;29565:6;29546:9;:16;29556:5;29546:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;29587:110;29617:24;;;;;;;;;;;29656:30;;;;;;;;;;;29587:110;;;;;;;:::i;:::-;;;;;;;;29476:229;;:::o;32153:253::-;32267:9;:15;32277:4;32267:15;;;;;;;;;;;;;;;;;;;;;;;;;32266:16;:34;;;;;32287:9;:13;32297:2;32287:13;;;;;;;;;;;;;;;;;;;;;;;;;32286:14;32266:34;32262:137;;;32325:14;;;;;;;;;;;32317:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;32262:137;32153:253;;;:::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:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:118::-;3426:24;3444:5;3426:24;:::i;:::-;3421:3;3414:37;3339:118;;:::o;3463:222::-;3556:4;3594:2;3583:9;3579:18;3571:26;;3607:71;3675:1;3664:9;3660:17;3651:6;3607:71;:::i;:::-;3463:222;;;;:::o;3691:118::-;3778:24;3796:5;3778:24;:::i;:::-;3773:3;3766:37;3691:118;;:::o;3815:222::-;3908:4;3946:2;3935:9;3931:18;3923:26;;3959:71;4027:1;4016:9;4012:17;4003:6;3959:71;:::i;:::-;3815:222;;;;:::o;4043:619::-;4120:6;4128;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:119;;;4191:79;;:::i;:::-;4153:119;4311:1;4336:53;4381:7;4372:6;4361:9;4357:22;4336:53;:::i;:::-;4326:63;;4282:117;4438:2;4464:53;4509:7;4500:6;4489:9;4485:22;4464:53;:::i;:::-;4454:63;;4409:118;4566:2;4592:53;4637:7;4628:6;4617:9;4613:22;4592:53;:::i;:::-;4582:63;;4537:118;4043:619;;;;;:::o;4668:86::-;4703:7;4743:4;4736:5;4732:16;4721:27;;4668:86;;;:::o;4760:112::-;4843:22;4859:5;4843:22;:::i;:::-;4838:3;4831:35;4760:112;;:::o;4878:214::-;4967:4;5005:2;4994:9;4990:18;4982:26;;5018:67;5082:1;5071:9;5067:17;5058:6;5018:67;:::i;:::-;4878:214;;;;:::o;5098:329::-;5157:6;5206:2;5194:9;5185:7;5181:23;5177:32;5174:119;;;5212:79;;:::i;:::-;5174:119;5332:1;5357:53;5402:7;5393:6;5382:9;5378:22;5357:53;:::i;:::-;5347:63;;5303:117;5098:329;;;;:::o;5433:116::-;5503:21;5518:5;5503:21;:::i;:::-;5496:5;5493:32;5483:60;;5539:1;5536;5529:12;5483:60;5433:116;:::o;5555:133::-;5598:5;5636:6;5623:20;5614:29;;5652:30;5676:5;5652:30;:::i;:::-;5555:133;;;;:::o;5694:468::-;5759:6;5767;5816:2;5804:9;5795:7;5791:23;5787:32;5784:119;;;5822:79;;:::i;:::-;5784:119;5942:1;5967:53;6012:7;6003:6;5992:9;5988:22;5967:53;:::i;:::-;5957:63;;5913:117;6069:2;6095:50;6137:7;6128:6;6117:9;6113:22;6095:50;:::i;:::-;6085:60;;6040:115;5694:468;;;;;:::o;6168:474::-;6236:6;6244;6293:2;6281:9;6272:7;6268:23;6264:32;6261:119;;;6299:79;;:::i;:::-;6261:119;6419:1;6444:53;6489:7;6480:6;6469:9;6465:22;6444:53;:::i;:::-;6434:63;;6390:117;6546:2;6572:53;6617:7;6608:6;6597:9;6593:22;6572:53;:::i;:::-;6562:63;;6517:118;6168:474;;;;;:::o;6648:180::-;6696:77;6693:1;6686:88;6793:4;6790:1;6783:15;6817:4;6814:1;6807:15;6834:320;6878:6;6915:1;6909:4;6905:12;6895:22;;6962:1;6956:4;6952:12;6983:18;6973:81;;7039:4;7031:6;7027:17;7017:27;;6973:81;7101:2;7093:6;7090:14;7070:18;7067:38;7064:84;;7120:18;;:::i;:::-;7064:84;6885:269;6834:320;;;:::o;7160:174::-;7300:26;7296:1;7288:6;7284:14;7277:50;7160:174;:::o;7340:366::-;7482:3;7503:67;7567:2;7562:3;7503:67;:::i;:::-;7496:74;;7579:93;7668:3;7579:93;:::i;:::-;7697:2;7692:3;7688:12;7681:19;;7340:366;;;:::o;7712:419::-;7878:4;7916:2;7905:9;7901:18;7893:26;;7965:9;7959:4;7955:20;7951:1;7940:9;7936:17;7929:47;7993:131;8119:4;7993:131;:::i;:::-;7985:139;;7712:419;;;:::o;8137:628::-;8324:4;8362:3;8351:9;8347:19;8339:27;;8376:71;8444:1;8433:9;8429:17;8420:6;8376:71;:::i;:::-;8457:66;8519:2;8508:9;8504:18;8495:6;8457:66;:::i;:::-;8533:72;8601:2;8590:9;8586:18;8577:6;8533:72;:::i;:::-;8615:66;8677:2;8666:9;8662:18;8653:6;8615:66;:::i;:::-;8691:67;8753:3;8742:9;8738:19;8729:6;8691:67;:::i;:::-;8137:628;;;;;;;;:::o;8771:227::-;8911:34;8907:1;8899:6;8895:14;8888:58;8980:10;8975:2;8967:6;8963:15;8956:35;8771:227;:::o;9004:366::-;9146:3;9167:67;9231:2;9226:3;9167:67;:::i;:::-;9160:74;;9243:93;9332:3;9243:93;:::i;:::-;9361:2;9356:3;9352:12;9345:19;;9004:366;;;:::o;9376:419::-;9542:4;9580:2;9569:9;9565:18;9557:26;;9629:9;9623:4;9619:20;9615:1;9604:9;9600:17;9593:47;9657:131;9783:4;9657:131;:::i;:::-;9649:139;;9376:419;;;:::o;9801:180::-;9849:77;9846:1;9839:88;9946:4;9943:1;9936:15;9970:4;9967:1;9960:15;9987:194;10027:4;10047:20;10065:1;10047:20;:::i;:::-;10042:25;;10081:20;10099:1;10081:20;:::i;:::-;10076:25;;10125:1;10122;10118:9;10110:17;;10149:1;10143:4;10140:11;10137:37;;;10154:18;;:::i;:::-;10137:37;9987:194;;;;:::o;10187:191::-;10227:3;10246:20;10264:1;10246:20;:::i;:::-;10241:25;;10280:20;10298:1;10280:20;:::i;:::-;10275:25;;10323:1;10320;10316:9;10309:16;;10344:3;10341:1;10338:10;10335:36;;;10351:18;;:::i;:::-;10335:36;10187:191;;;;:::o;10384:179::-;10524:31;10520:1;10512:6;10508:14;10501:55;10384:179;:::o;10569:366::-;10711:3;10732:67;10796:2;10791:3;10732:67;:::i;:::-;10725:74;;10808:93;10897:3;10808:93;:::i;:::-;10926:2;10921:3;10917:12;10910:19;;10569:366;;;:::o;10941:419::-;11107:4;11145:2;11134:9;11130:18;11122:26;;11194:9;11188:4;11184:20;11180:1;11169:9;11165:17;11158:47;11222:131;11348:4;11222:131;:::i;:::-;11214:139;;10941:419;;;:::o;11366:180::-;11506:32;11502:1;11494:6;11490:14;11483:56;11366:180;:::o;11552:366::-;11694:3;11715:67;11779:2;11774:3;11715:67;:::i;:::-;11708:74;;11791:93;11880:3;11791:93;:::i;:::-;11909:2;11904:3;11900:12;11893:19;;11552:366;;;:::o;11924:419::-;12090:4;12128:2;12117:9;12113:18;12105:26;;12177:9;12171:4;12167:20;12163:1;12152:9;12148:17;12141:47;12205:131;12331:4;12205:131;:::i;:::-;12197:139;;11924:419;;;:::o;12349:418::-;12486:4;12524:2;12513:9;12509:18;12501:26;;12537:71;12605:1;12594:9;12590:17;12581:6;12537:71;:::i;:::-;12618:66;12680:2;12669:9;12665:18;12656:6;12618:66;:::i;:::-;12694;12756:2;12745:9;12741:18;12732:6;12694:66;:::i;:::-;12349:418;;;;;;:::o;12773:176::-;12913:28;12909:1;12901:6;12897:14;12890:52;12773:176;:::o;12955:366::-;13097:3;13118:67;13182:2;13177:3;13118:67;:::i;:::-;13111:74;;13194:93;13283:3;13194:93;:::i;:::-;13312:2;13307:3;13303:12;13296:19;;12955:366;;;:::o;13327:419::-;13493:4;13531:2;13520:9;13516:18;13508:26;;13580:9;13574:4;13570:20;13566:1;13555:9;13551:17;13544:47;13608:131;13734:4;13608:131;:::i;:::-;13600:139;;13327:419;;;:::o;13752:102::-;13794:8;13841:5;13838:1;13834:13;13813:34;;13752:102;;;:::o;13860:848::-;13921:5;13928:4;13952:6;13943:15;;13976:5;13967:14;;13990:712;14011:1;14001:8;13998:15;13990:712;;;14106:4;14101:3;14097:14;14091:4;14088:24;14085:50;;;14115:18;;:::i;:::-;14085:50;14165:1;14155:8;14151:16;14148:451;;;14580:4;14573:5;14569:16;14560:25;;14148:451;14630:4;14624;14620:15;14612:23;;14660:32;14683:8;14660:32;:::i;:::-;14648:44;;13990:712;;;13860:848;;;;;;;:::o;14714:1073::-;14768:5;14959:8;14949:40;;14980:1;14971:10;;14982:5;;14949:40;15008:4;14998:36;;15025:1;15016:10;;15027:5;;14998:36;15094:4;15142:1;15137:27;;;;15178:1;15173:191;;;;15087:277;;15137:27;15155:1;15146:10;;15157:5;;;15173:191;15218:3;15208:8;15205:17;15202:43;;;15225:18;;:::i;:::-;15202:43;15274:8;15271:1;15267:16;15258:25;;15309:3;15302:5;15299:14;15296:40;;;15316:18;;:::i;:::-;15296:40;15349:5;;;15087:277;;15473:2;15463:8;15460:16;15454:3;15448:4;15445:13;15441:36;15423:2;15413:8;15410:16;15405:2;15399:4;15396:12;15392:35;15376:111;15373:246;;;15529:8;15523:4;15519:19;15510:28;;15564:3;15557:5;15554:14;15551:40;;;15571:18;;:::i;:::-;15551:40;15604:5;;15373:246;15644:42;15682:3;15672:8;15666:4;15663:1;15644:42;:::i;:::-;15629:57;;;;15718:4;15713:3;15709:14;15702:5;15699:25;15696:51;;;15727:18;;:::i;:::-;15696:51;15776:4;15769:5;15765:16;15756:25;;14714:1073;;;;;;:::o;15793:281::-;15851:5;15875:23;15893:4;15875:23;:::i;:::-;15867:31;;15919:25;15935:8;15919:25;:::i;:::-;15907:37;;15963:104;16000:66;15990:8;15984:4;15963:104;:::i;:::-;15954:113;;15793:281;;;;:::o;16080:410::-;16120:7;16143:20;16161:1;16143:20;:::i;:::-;16138:25;;16177:20;16195:1;16177:20;:::i;:::-;16172:25;;16232:1;16229;16225:9;16254:30;16272:11;16254:30;:::i;:::-;16243:41;;16433:1;16424:7;16420:15;16417:1;16414:22;16394:1;16387:9;16367:83;16344:139;;16463:18;;:::i;:::-;16344:139;16128:362;16080:410;;;;:::o;16496:179::-;16636:31;16632:1;16624:6;16620:14;16613:55;16496:179;:::o;16681:366::-;16823:3;16844:67;16908:2;16903:3;16844:67;:::i;:::-;16837:74;;16920:93;17009:3;16920:93;:::i;:::-;17038:2;17033:3;17029:12;17022:19;;16681:366;;;:::o;17053:419::-;17219:4;17257:2;17246:9;17242:18;17234:26;;17306:9;17300:4;17296:20;17292:1;17281:9;17277:17;17270:47;17334:131;17460:4;17334:131;:::i;:::-;17326:139;;17053:419;;;:::o;17478:180::-;17618:32;17614:1;17606:6;17602:14;17595:56;17478:180;:::o;17664:366::-;17806:3;17827:67;17891:2;17886:3;17827:67;:::i;:::-;17820:74;;17903:93;17992:3;17903:93;:::i;:::-;18021:2;18016:3;18012:12;18005:19;;17664:366;;;:::o;18036:419::-;18202:4;18240:2;18229:9;18225:18;18217:26;;18289:9;18283:4;18279:20;18275:1;18264:9;18260:17;18253:47;18317:131;18443:4;18317:131;:::i;:::-;18309:139;;18036:419;;;:::o;18461:529::-;18626:4;18664:3;18653:9;18649:19;18641:27;;18678:71;18746:1;18735:9;18731:17;18722:6;18678:71;:::i;:::-;18759:72;18827:2;18816:9;18812:18;18803:6;18759:72;:::i;:::-;18841:66;18903:2;18892:9;18888:18;18879:6;18841:66;:::i;:::-;18917;18979:2;18968:9;18964:18;18955:6;18917:66;:::i;:::-;18461:529;;;;;;;:::o;18996:232::-;19136:34;19132:1;19124:6;19120:14;19113:58;19205:15;19200:2;19192:6;19188:15;19181:40;18996:232;:::o;19234:366::-;19376:3;19397:67;19461:2;19456:3;19397:67;:::i;:::-;19390:74;;19473:93;19562:3;19473:93;:::i;:::-;19591:2;19586:3;19582:12;19575:19;;19234:366;;;:::o;19606:419::-;19772:4;19810:2;19799:9;19795:18;19787:26;;19859:9;19853:4;19849:20;19845:1;19834:9;19830:17;19823:47;19887:131;20013:4;19887:131;:::i;:::-;19879:139;;19606:419;;;:::o;20031:220::-;20171:34;20167:1;20159:6;20155:14;20148:58;20240:3;20235:2;20227:6;20223:15;20216:28;20031:220;:::o;20257:366::-;20399:3;20420:67;20484:2;20479:3;20420:67;:::i;:::-;20413:74;;20496:93;20585:3;20496:93;:::i;:::-;20614:2;20609:3;20605:12;20598:19;;20257:366;;;:::o;20629:419::-;20795:4;20833:2;20822:9;20818:18;20810:26;;20882:9;20876:4;20872:20;20868:1;20857:9;20853:17;20846:47;20910:131;21036:4;20910:131;:::i;:::-;20902:139;;20629:419;;;:::o;21054:220::-;21194:34;21190:1;21182:6;21178:14;21171:58;21263:3;21258:2;21250:6;21246:15;21239:28;21054:220;:::o;21280:366::-;21422:3;21443:67;21507:2;21502:3;21443:67;:::i;:::-;21436:74;;21519:93;21608:3;21519:93;:::i;:::-;21637:2;21632:3;21628:12;21621:19;;21280:366;;;:::o;21652:419::-;21818:4;21856:2;21845:9;21841:18;21833:26;;21905:9;21899:4;21895:20;21891:1;21880:9;21876:17;21869:47;21933:131;22059:4;21933:131;:::i;:::-;21925:139;;21652:419;;;:::o;22077:296::-;22217:34;22213:1;22205:6;22201:14;22194:58;22286:34;22281:2;22273:6;22269:15;22262:59;22355:10;22350:2;22342:6;22338:15;22331:35;22077:296;:::o;22379:366::-;22521:3;22542:67;22606:2;22601:3;22542:67;:::i;:::-;22535:74;;22618:93;22707:3;22618:93;:::i;:::-;22736:2;22731:3;22727:12;22720:19;;22379:366;;;:::o;22751:419::-;22917:4;22955:2;22944:9;22940:18;22932:26;;23004:9;22998:4;22994:20;22990:1;22979:9;22975:17;22968:47;23032:131;23158:4;23032:131;:::i;:::-;23024:139;;22751:419;;;:::o;23176:169::-;23316:21;23312:1;23304:6;23300:14;23293:45;23176:169;:::o;23351:366::-;23493:3;23514:67;23578:2;23573:3;23514:67;:::i;:::-;23507:74;;23590:93;23679:3;23590:93;:::i;:::-;23708:2;23703:3;23699:12;23692:19;;23351:366;;;:::o;23723:419::-;23889:4;23927:2;23916:9;23912:18;23904:26;;23976:9;23970:4;23966:20;23962:1;23951:9;23947:17;23940:47;24004:131;24130:4;24004:131;:::i;:::-;23996:139;;23723:419;;;:::o;24148:224::-;24288:34;24284:1;24276:6;24272:14;24265:58;24357:7;24352:2;24344:6;24340:15;24333:32;24148:224;:::o;24378:366::-;24520:3;24541:67;24605:2;24600:3;24541:67;:::i;:::-;24534:74;;24617:93;24706:3;24617:93;:::i;:::-;24735:2;24730:3;24726:12;24719:19;;24378:366;;;:::o;24750:419::-;24916:4;24954:2;24943:9;24939:18;24931:26;;25003:9;24997:4;24993:20;24989:1;24978:9;24974:17;24967:47;25031:131;25157:4;25031:131;:::i;:::-;25023:139;;24750:419;;;:::o;25175:179::-;25315:31;25311:1;25303:6;25299:14;25292:55;25175:179;:::o;25360:366::-;25502:3;25523:67;25587:2;25582:3;25523:67;:::i;:::-;25516:74;;25599:93;25688:3;25599:93;:::i;:::-;25717:2;25712:3;25708:12;25701:19;;25360:366;;;:::o;25732:419::-;25898:4;25936:2;25925:9;25921:18;25913:26;;25985:9;25979:4;25975:20;25971:1;25960:9;25956:17;25949:47;26013:131;26139:4;26013:131;:::i;:::-;26005:139;;25732:419;;;:::o;26157:231::-;26297:34;26293:1;26285:6;26281:14;26274:58;26366:14;26361:2;26353:6;26349:15;26342:39;26157:231;:::o;26394:366::-;26536:3;26557:67;26621:2;26616:3;26557:67;:::i;:::-;26550:74;;26633:93;26722:3;26633:93;:::i;:::-;26751:2;26746:3;26742:12;26735:19;;26394:366;;;:::o;26766:419::-;26932:4;26970:2;26959:9;26955:18;26947:26;;27019:9;27013:4;27009:20;27005:1;26994:9;26990:17;26983:47;27047:131;27173:4;27047:131;:::i;:::-;27039:139;;26766:419;;;:::o;27191:143::-;27248:5;27279:6;27273:13;27264:22;;27295:33;27322:5;27295:33;:::i;:::-;27191:143;;;;:::o;27340:351::-;27410:6;27459:2;27447:9;27438:7;27434:23;27430:32;27427:119;;;27465:79;;:::i;:::-;27427:119;27585:1;27610:64;27666:7;27657:6;27646:9;27642:22;27610:64;:::i;:::-;27600:74;;27556:128;27340:351;;;;:::o;27697:179::-;27837:31;27833:1;27825:6;27821:14;27814:55;27697:179;:::o;27882:366::-;28024:3;28045:67;28109:2;28104:3;28045:67;:::i;:::-;28038:74;;28121:93;28210:3;28121:93;:::i;:::-;28239:2;28234:3;28230:12;28223:19;;27882:366;;;:::o;28254:419::-;28420:4;28458:2;28447:9;28443:18;28435:26;;28507:9;28501:4;28497:20;28493:1;28482:9;28478:17;28471:47;28535:131;28661:4;28535:131;:::i;:::-;28527:139;;28254:419;;;:::o;28679:180::-;28819:32;28815:1;28807:6;28803:14;28796:56;28679:180;:::o;28865:366::-;29007:3;29028:67;29092:2;29087:3;29028:67;:::i;:::-;29021:74;;29104:93;29193:3;29104:93;:::i;:::-;29222:2;29217:3;29213:12;29206:19;;28865:366;;;:::o;29237:419::-;29403:4;29441:2;29430:9;29426:18;29418:26;;29490:9;29484:4;29480:20;29476:1;29465:9;29461:17;29454:47;29518:131;29644:4;29518:131;:::i;:::-;29510:139;;29237:419;;;:::o;29662:178::-;29802:30;29798:1;29790:6;29786:14;29779:54;29662:178;:::o;29846:366::-;29988:3;30009:67;30073:2;30068:3;30009:67;:::i;:::-;30002:74;;30085:93;30174:3;30085:93;:::i;:::-;30203:2;30198:3;30194:12;30187:19;;29846:366;;;:::o;30218:419::-;30384:4;30422:2;30411:9;30407:18;30399:26;;30471:9;30465:4;30461:20;30457:1;30446:9;30442:17;30435:47;30499:131;30625:4;30499:131;:::i;:::-;30491:139;;30218:419;;;:::o;30643:177::-;30783:29;30779:1;30771:6;30767:14;30760:53;30643:177;:::o;30826:366::-;30968:3;30989:67;31053:2;31048:3;30989:67;:::i;:::-;30982:74;;31065:93;31154:3;31065:93;:::i;:::-;31183:2;31178:3;31174:12;31167:19;;30826:366;;;:::o;31198:419::-;31364:4;31402:2;31391:9;31387:18;31379:26;;31451:9;31445:4;31441:20;31437:1;31426:9;31422:17;31415:47;31479:131;31605:4;31479:131;:::i;:::-;31471:139;;31198:419;;;:::o;31623:232::-;31763:34;31759:1;31751:6;31747:14;31740:58;31832:15;31827:2;31819:6;31815:15;31808:40;31623:232;:::o;31861:366::-;32003:3;32024:67;32088:2;32083:3;32024:67;:::i;:::-;32017:74;;32100:93;32189:3;32100:93;:::i;:::-;32218:2;32213:3;32209:12;32202:19;;31861:366;;;:::o;32233:419::-;32399:4;32437:2;32426:9;32422:18;32414:26;;32486:9;32480:4;32476:20;32472:1;32461:9;32457:17;32450:47;32514:131;32640:4;32514:131;:::i;:::-;32506:139;;32233:419;;;:::o;32658:175::-;32798:27;32794:1;32786:6;32782:14;32775:51;32658:175;:::o;32839:366::-;32981:3;33002:67;33066:2;33061:3;33002:67;:::i;:::-;32995:74;;33078:93;33167:3;33078:93;:::i;:::-;33196:2;33191:3;33187:12;33180:19;;32839:366;;;:::o;33211:419::-;33377:4;33415:2;33404:9;33400:18;33392:26;;33464:9;33458:4;33454:20;33450:1;33439:9;33435:17;33428:47;33492:131;33618:4;33492:131;:::i;:::-;33484:139;;33211:419;;;:::o;33636:223::-;33776:34;33772:1;33764:6;33760:14;33753:58;33845:6;33840:2;33832:6;33828:15;33821:31;33636:223;:::o;33865:366::-;34007:3;34028:67;34092:2;34087:3;34028:67;:::i;:::-;34021:74;;34104:93;34193:3;34104:93;:::i;:::-;34222:2;34217:3;34213:12;34206:19;;33865:366;;;:::o;34237:419::-;34403:4;34441:2;34430:9;34426:18;34418:26;;34490:9;34484:4;34480:20;34476:1;34465:9;34461:17;34454:47;34518:131;34644:4;34518:131;:::i;:::-;34510:139;;34237:419;;;:::o;34662:221::-;34802:34;34798:1;34790:6;34786:14;34779:58;34871:4;34866:2;34858:6;34854:15;34847:29;34662:221;:::o;34889:366::-;35031:3;35052:67;35116:2;35111:3;35052:67;:::i;:::-;35045:74;;35128:93;35217:3;35128:93;:::i;:::-;35246:2;35241:3;35237:12;35230:19;;34889:366;;;:::o;35261:419::-;35427:4;35465:2;35454:9;35450:18;35442:26;;35514:9;35508:4;35504:20;35500:1;35489:9;35485:17;35478:47;35542:131;35668:4;35542:131;:::i;:::-;35534:139;;35261:419;;;:::o;35686:182::-;35826:34;35822:1;35814:6;35810:14;35803:58;35686:182;:::o;35874:366::-;36016:3;36037:67;36101:2;36096:3;36037:67;:::i;:::-;36030:74;;36113:93;36202:3;36113:93;:::i;:::-;36231:2;36226:3;36222:12;36215:19;;35874:366;;;:::o;36246:419::-;36412:4;36450:2;36439:9;36435:18;36427:26;;36499:9;36493:4;36489:20;36485:1;36474:9;36470:17;36463:47;36527:131;36653:4;36527:131;:::i;:::-;36519:139;;36246:419;;;:::o;36671:224::-;36811:34;36807:1;36799:6;36795:14;36788:58;36880:7;36875:2;36867:6;36863:15;36856:32;36671:224;:::o;36901:366::-;37043:3;37064:67;37128:2;37123:3;37064:67;:::i;:::-;37057:74;;37140:93;37229:3;37140:93;:::i;:::-;37258:2;37253:3;37249:12;37242:19;;36901:366;;;:::o;37273:419::-;37439:4;37477:2;37466:9;37462:18;37454:26;;37526:9;37520:4;37516:20;37512:1;37501:9;37497:17;37490:47;37554:131;37680:4;37554:131;:::i;:::-;37546:139;;37273:419;;;:::o;37698:222::-;37838:34;37834:1;37826:6;37822:14;37815:58;37907:5;37902:2;37894:6;37890:15;37883:30;37698:222;:::o;37926:366::-;38068:3;38089:67;38153:2;38148:3;38089:67;:::i;:::-;38082:74;;38165:93;38254:3;38165:93;:::i;:::-;38283:2;38278:3;38274:12;38267:19;;37926:366;;;:::o;38298:419::-;38464:4;38502:2;38491:9;38487:18;38479:26;;38551:9;38545:4;38541:20;38537:1;38526:9;38522:17;38515:47;38579:131;38705:4;38579:131;:::i;:::-;38571:139;;38298:419;;;:::o;38723:225::-;38863:34;38859:1;38851:6;38847:14;38840:58;38932:8;38927:2;38919:6;38915:15;38908:33;38723:225;:::o;38954:366::-;39096:3;39117:67;39181:2;39176:3;39117:67;:::i;:::-;39110:74;;39193:93;39282:3;39193:93;:::i;:::-;39311:2;39306:3;39302:12;39295:19;;38954:366;;;:::o;39326:419::-;39492:4;39530:2;39519:9;39515:18;39507:26;;39579:9;39573:4;39569:20;39565:1;39554:9;39550:17;39543:47;39607:131;39733:4;39607:131;:::i;:::-;39599:139;;39326:419;;;:::o;39751:320::-;39866:4;39904:2;39893:9;39889:18;39881:26;;39917:71;39985:1;39974:9;39970:17;39961:6;39917:71;:::i;:::-;39998:66;40060:2;40049:9;40045:18;40036:6;39998:66;:::i;:::-;39751:320;;;;;:::o;40077:231::-;40217:34;40213:1;40205:6;40201:14;40194:58;40286:14;40281:2;40273:6;40269:15;40262:39;40077:231;:::o;40314:366::-;40456:3;40477:67;40541:2;40536:3;40477:67;:::i;:::-;40470:74;;40553:93;40642:3;40553:93;:::i;:::-;40671:2;40666:3;40662:12;40655:19;;40314:366;;;:::o;40686:419::-;40852:4;40890:2;40879:9;40875:18;40867:26;;40939:9;40933:4;40929:20;40925:1;40914:9;40910:17;40903:47;40967:131;41093:4;40967:131;:::i;:::-;40959:139;;40686:419;;;:::o

Swarm Source

ipfs://30152ae7c90ae8c96f8d774d49281d7663ce59e6e88734c3c7fc3f02001fb77d
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.