ETH Price: $2,119.45 (+4.99%)

Token

Paradice (PARA)

Overview

Max Total Supply

10,000,000,000 PARA

Holders

26

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

-

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
988,000 PARA

Value
$0.00
0xDdA1d7dF2783C8Dd98795eC80466a047FA3Bdb77
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Paradice

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Arbiscan.io on 2023-09-12
*/

// SPDX-License-Identifier: MIT
// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

    /**
     * @dev Returns the amount of tokens 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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 amount) external returns (bool);

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * 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 `from` to `to` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


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

pragma solidity ^0.8.0;


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

// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


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

pragma solidity ^0.8.0;




/**
 * @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.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the default value returned by this function, unless
     * it's overridden.
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    /**
     * @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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @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) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, 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) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity ^0.8.0;



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

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

// File: contracts/PARA/PARA-L2.sol


pragma solidity ^0.8.9;






//Intro
contract Paradice is ERC20, ERC20Burnable, ReentrancyGuard, Ownable, Pausable {
    uint256 public constant TOTAL_SUPPLY = 10000000000 * 10 ** 18;
    uint256 public constant MAX_TRANSFER_AMOUNT = TOTAL_SUPPLY * 2 / 100; // 2% of the total supply
    address public feeRecipient;
    address public constant BURN_ADDRESS = 0x000000000000000000000000000000000000dEaD;

    mapping(address => uint256) private lastTransferTimestamp;
    mapping(address => bool) private whitelist;

    modifier canTransfer(address sender, uint256 amount) {
        if (!_isExemptFromCooldown(sender)) {
            require(isAllowed(sender, amount), "Cooldown active");
            uint256 cooldown = calculateCooldown(amount, sender);
            uint256 lastTransfer = lastTransferTimestamp[sender];
            require(block.timestamp >= lastTransfer + cooldown, "Cooldown still active");
            lastTransferTimestamp[sender] = block.timestamp;
        }
        _;
    }

    //Fee-recipient Role Transfer system
    constructor() ERC20("Paradice", "PARA") {
        _mint(msg.sender, TOTAL_SUPPLY);
        feeRecipient = 0x44DCF474DD6392ce7a14cF59Ce7D1de19dE8E5Ed;
        whitelist[msg.sender] = true;
    }

    function _isExemptFromCooldown(address sender) internal view returns (bool) {
        return whitelist[sender] || sender == owner() || sender == feeRecipient;
    }

    function setFeeRecipient(address _feeRecipient) external onlyOwner {
        require(_feeRecipient != address(0), "No zero address");
        feeRecipient = _feeRecipient;
    }

    //Whitelist function
    function addAddressToWhitelist(address _address) external onlyOwner {
        whitelist[_address] = true;
    }

    function removeAddressFromWhitelist(address _address) external onlyOwner {
        whitelist[_address] = false;
    }

    //Sliding Scale Fee Structure
    function calculateFee(uint256 amount, address sender) public view returns (uint256) {
        if (sender == owner() || sender == feeRecipient) {
            return 0;
        }

        uint256 factor = 10**18;
        uint256 percentage = amount * factor / TOTAL_SUPPLY;
        uint256 feeRate;

        if (percentage >= factor / 50) {
            feeRate = 300;  // 30%
        } else if (percentage >= factor / 100) {
            feeRate = 150;  // 15%
        } else if (percentage >= factor / 200) {
            feeRate = 100;  // 10%
        } else if (percentage >= factor / 500) {
            feeRate = 80;  // 8%
        } else if (percentage >= factor / 1000) {
            feeRate = 50;  // 5%
        } else if (percentage >= factor / 2000) {
            feeRate = 30;  // 3%
        } else if (percentage >= factor / 10000) {
            feeRate = 15;  // 1.5%
        } else if (percentage >= factor / 20000) {
            feeRate = 8;  // 0.8%
        } else if (percentage >= factor / 100000) {
            feeRate = 4;  // 0.4%
        } else if (percentage >= factor / 200000) {
            feeRate = 2;  // 0.2%
        } else {
            feeRate = 1;  // 0.1% default
        }

        return amount * feeRate / 1000;
    }

    //Transaction Cooldown system
    function calculateCooldown(uint256 amount, address sender) public view returns (uint256) {
        if (sender == owner() || sender == feeRecipient) {
            return 0;
        }

        uint256 factor = 10**18;
        uint256 percentage = amount * factor / TOTAL_SUPPLY;
        uint256 cooldown;

        if (percentage >= factor / 50) {
            cooldown = 144000;  // 40h
        } else if (percentage >= factor / 100) {
            cooldown = 54000;  // 15h
        } else if (percentage >= factor / 200) {
            cooldown = 21000;  // 350min
        } else if (percentage >= factor / 500) {
            cooldown = 9000;  // 150min
        } else if (percentage >= factor / 1000) {
            cooldown = 3600;  // 60min
        } else if (percentage >= factor / 2000) {
            cooldown = 1200;  // 20min
        } else if (percentage >= factor / 10000) {
            cooldown = 180;  // 3min
        } else if (percentage >= factor / 20000) {
            cooldown = 60;  // 1min
        } else if (percentage >= factor / 100000) {
            cooldown = 20;  // 20sec
        } else if (percentage >= factor / 200000) {
            cooldown = 10;  // 10sec
        } else {
            cooldown = 4;  // 4sec default
        }

        return cooldown;
    }

    //Transaction override system - Allowing anti-whale mechanisms to be applied to each transaction
    function isAllowed(address sender, uint256 amount) public view returns (bool) {
        if (_isExemptFromCooldown(sender)) {
            return true;
        }
        uint256 timeDifference = block.timestamp - lastTransferTimestamp[sender];
        return timeDifference > calculateCooldown(amount, sender);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override {
        super._beforeTokenTransfer(from, to, amount);
    
    if (from == owner() || from == feeRecipient || to == owner() || to == feeRecipient) {
        return;  // Skip the checks for the owner and feeRecipient
    }
    
    require(amount <= MAX_TRANSFER_AMOUNT, "Transfer limit exceeded");
    
    if (from != owner() && to != owner()) {
        require(!paused(), "Transfers paused");
    }
}

//Transaction override system - Allowing anti-whale mechanisms to be applied to each transaction
function transfer(address recipient, uint256 amount) public virtual override canTransfer(msg.sender, amount) nonReentrant whenNotPaused returns (bool) {
    require(amount <= MAX_TRANSFER_AMOUNT, "Transfer amount exceeds limit");
    require(balanceOf(msg.sender) >= amount, "Insufficient sender balance");
    
    uint256 fee = calculateFee(amount, msg.sender);
    uint256 transferAmount = amount - fee;

    require(transferAmount > 0, "Transfer amount must be greater than zero");

    if (fee > 0) {
        uint256 burnAmount = fee * 10 / 100; // Burn 10% of fee
        uint256 recipientAmount = fee * 90 / 100; // 90% of fee goes to feeRecipient

        super.transfer(BURN_ADDRESS, burnAmount);
        super.transfer(feeRecipient, recipientAmount);
    }

    super.transfer(recipient, transferAmount);
    return true;
}

//TransferFrom override system - Allowing anti-whale mechanisms to be applied to any third party transactions
function transferFrom(address sender, address recipient, uint256 amount) public virtual override canTransfer(sender, amount) nonReentrant whenNotPaused returns (bool) {
    require(amount <= MAX_TRANSFER_AMOUNT, "Transfer amount exceeds limit");
    require(balanceOf(sender) >= amount, "Insufficient sender balance");
    
    uint256 fee = calculateFee(amount, sender);
    uint256 transferAmount = amount - fee;

    require(transferAmount > 0, "Transfer amount must be greater than zero");

    if (fee > 0) {
        uint256 burnAmount = fee * 10 / 100; // Burn 10% of fee
        uint256 recipientAmount = fee * 90 / 100; // 90% of fee goes to feeRecipient

        super.transferFrom(sender, BURN_ADDRESS, burnAmount);
        super.transferFrom(sender, feeRecipient, recipientAmount);
    }

    super.transferFrom(sender, recipient, transferAmount);
    return true;
}

    //Pause function
    function pause() external onlyOwner {
        _pause();
    }

    //Unpause function
    function unpause() external onlyOwner {
        _unpause();
    }
}

//All to be Nice. - A2 2B 9S

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"BURN_ADDRESS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_TRANSFER_AMOUNT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TOTAL_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addAddressToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateCooldown","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"sender","type":"address"}],"name":"calculateFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"feeRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"isAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeAddressFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeRecipient","type":"address"}],"name":"setFeeRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040523480156200001157600080fd5b506040518060400160405280600881526020017f50617261646963650000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f5041524100000000000000000000000000000000000000000000000000000000815250816003908051906020019062000096929190620006fc565b508060049080519060200190620000af929190620006fc565b5050506001600581905550620000da620000ce620001c660201b60201c565b620001ce60201b60201c565b6000600660146101000a81548160ff02191690831515021790555062000113336b204fce5e3e250261100000006200029460201b60201c565b7344dcf474dd6392ce7a14cf59ce7d1de19de8e5ed600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000b04565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000307576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002fe906200080d565b60405180910390fd5b6200031b600083836200040260201b60201c565b80600260008282546200032f919062000868565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620003e29190620008d6565b60405180910390a3620003fe60008383620006b160201b60201c565b5050565b6200041a838383620006b660201b620016601760201c565b6200042a620006bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480620004b15750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b80620004f75750620004c8620006bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80620005505750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156200055c57620006ac565b606460026b204fce5e3e25026110000000620005799190620008f3565b62000585919062000983565b811115620005ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005c19062000a0b565b60405180910390fd5b620005da620006bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000651575062000621620006bb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15620006ab5762000667620006e560201b60201c565b15620006aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006a19062000a7d565b60405180910390fd5b5b5b505050565b505050565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600660149054906101000a900460ff16905090565b8280546200070a9062000ace565b90600052602060002090601f0160209004810192826200072e57600085556200077a565b82601f106200074957805160ff19168380011785556200077a565b828001600101855582156200077a579182015b82811115620007795782518255916020019190600101906200075c565b5b5090506200078991906200078d565b5090565b5b80821115620007a85760008160009055506001016200078e565b5090565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620007f5601f83620007ac565b91506200080282620007bd565b602082019050919050565b600060208201905081810360008301526200082881620007e6565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000875826200082f565b915062000882836200082f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008ba57620008b962000839565b5b828201905092915050565b620008d0816200082f565b82525050565b6000602082019050620008ed6000830184620008c5565b92915050565b600062000900826200082f565b91506200090d836200082f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000949576200094862000839565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000990826200082f565b91506200099d836200082f565b925082620009b057620009af62000954565b5b828204905092915050565b7f5472616e73666572206c696d6974206578636565646564000000000000000000600082015250565b6000620009f3601783620007ac565b915062000a0082620009bb565b602082019050919050565b6000602082019050818103600083015262000a2681620009e4565b9050919050565b7f5472616e73666572732070617573656400000000000000000000000000000000600082015250565b600062000a65601083620007ac565b915062000a728262000a2d565b602082019050919050565b6000602082019050818103600083015262000a988162000a56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ae757607f821691505b6020821081141562000afe5762000afd62000a9f565b5b50919050565b6133fc8062000b146000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806379cc679011610104578063a9059cbb116100a2578063f2fde38b11610071578063f2fde38b1461051e578063f8350ed01461053a578063fc1b31131461056a578063fccc281314610588576101cf565b8063a9059cbb14610472578063dd62ed3e146104a2578063e74b981b146104d2578063f0dd199f146104ee576101cf565b80638da5cb5b116100de5780638da5cb5b146103e8578063902d55a51461040657806395d89b4114610424578063a457c2d714610442576101cf565b806379cc6790146103a65780637b9417c8146103c25780638456cb59146103de576101cf565b80633f4ba83a11610171578063469048401161014b57806346904840146103305780635c975abb1461034e57806370a082311461036c578063715018a61461039c576101cf565b80633f4ba83a146102da578063400ba069146102e457806342966c6814610314576101cf565b806323b872dd116101ad57806323b872dd14610240578063286dd3f514610270578063313ce5671461028c57806339509351146102aa576101cf565b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610222575b600080fd5b6101dc6105a6565b6040516101e99190612445565b60405180910390f35b61020c60048036038101906102079190612500565b610638565b604051610219919061255b565b60405180910390f35b61022a61065b565b6040516102379190612585565b60405180910390f35b61025a600480360381019061025591906125a0565b610665565b604051610267919061255b565b60405180910390f35b61028a600480360381019061028591906125f3565b61096e565b005b6102946109d1565b6040516102a1919061263c565b60405180910390f35b6102c460048036038101906102bf9190612500565b6109da565b6040516102d1919061255b565b60405180910390f35b6102e2610a11565b005b6102fe60048036038101906102f99190612657565b610a23565b60405161030b9190612585565b60405180910390f35b61032e60048036038101906103299190612697565b610c4c565b005b610338610c60565b60405161034591906126d3565b60405180910390f35b610356610c86565b604051610363919061255b565b60405180910390f35b610386600480360381019061038191906125f3565b610c9d565b6040516103939190612585565b60405180910390f35b6103a4610ce5565b005b6103c060048036038101906103bb9190612500565b610cf9565b005b6103dc60048036038101906103d791906125f3565b610d19565b005b6103e6610d7c565b005b6103f0610d8e565b6040516103fd91906126d3565b60405180910390f35b61040e610db8565b60405161041b9190612585565b60405180910390f35b61042c610dc8565b6040516104399190612445565b60405180910390f35b61045c60048036038101906104579190612500565b610e5a565b604051610469919061255b565b60405180910390f35b61048c60048036038101906104879190612500565b610ed1565b604051610499919061255b565b60405180910390f35b6104bc60048036038101906104b791906126ee565b6111d6565b6040516104c99190612585565b60405180910390f35b6104ec60048036038101906104e791906125f3565b61125d565b005b61050860048036038101906105039190612657565b611319565b6040516105159190612585565b60405180910390f35b610538600480360381019061053391906125f3565b611530565b005b610554600480360381019061054f9190612500565b6115b4565b604051610561919061255b565b60405180910390f35b610572611632565b60405161057f9190612585565b60405180910390f35b61059061165a565b60405161059d91906126d3565b60405180910390f35b6060600380546105b59061275d565b80601f01602080910402602001604051908101604052809291908181526020018280546105e19061275d565b801561062e5780601f106106035761010080835404028352916020019161062e565b820191906000526020600020905b81548152906001019060200180831161061157829003601f168201915b5050505050905090565b600080610643611665565b905061065081858561166d565b600191505092915050565b6000600254905090565b6000838261067282611838565b6107a65761068082826115b4565b6106bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b6906127db565b60405180910390fd5b60006106cb8284611319565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818161071d919061282a565b42101561075f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610756906128cc565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b6107ae611923565b6107b6611973565b606460026b204fce5e3e250261100000006107d191906128ec565b6107db9190612975565b84111561081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906129f2565b60405180910390fd5b8361082787610c9d565b1015610868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085f90612a5e565b60405180910390fd5b60006108748588610a23565b9050600081866108849190612a7e565b9050600081116108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090612b24565b60405180910390fd5b600082111561094b5760006064600a846108e391906128ec565b6108ed9190612975565b905060006064605a8561090091906128ec565b61090a9190612975565b90506109198a61dead846119bd565b506109478a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836119bd565b5050505b6109568888836119bd565b506001945050506109656119ec565b50509392505050565b6109766119f6565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006012905090565b6000806109e5611665565b9050610a068185856109f785896111d6565b610a01919061282a565b61166d565b600191505092915050565b610a196119f6565b610a21611a74565b565b6000610a2d610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610ab35750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ac15760009050610c46565b6000670de0b6b3a7640000905060006b204fce5e3e250261100000008286610ae991906128ec565b610af39190612975565b90506000603283610b049190612975565b8210610b145761012c9050610c27565b606483610b219190612975565b8210610b305760969050610c26565b60c883610b3d9190612975565b8210610b4c5760649050610c25565b6101f483610b5a9190612975565b8210610b695760509050610c24565b6103e883610b779190612975565b8210610b865760329050610c23565b6107d083610b949190612975565b8210610ba357601e9050610c22565b61271083610bb19190612975565b8210610bc057600f9050610c21565b614e2083610bce9190612975565b8210610bdd5760089050610c20565b620186a083610bec9190612975565b8210610bfb5760049050610c1f565b62030d4083610c0a9190612975565b8210610c195760029050610c1e565b600190505b5b5b5b5b5b5b5b5b5b6103e88187610c3691906128ec565b610c409190612975565b93505050505b92915050565b610c5d610c57611665565b82611ad7565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ced6119f6565b610cf76000611ca5565b565b610d0b82610d05611665565b83611d6b565b610d158282611ad7565b5050565b610d216119f6565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d846119f6565b610d8c611df7565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6b204fce5e3e2502611000000081565b606060048054610dd79061275d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e039061275d565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050505050905090565b600080610e65611665565b90506000610e7382866111d6565b905083811015610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90612bb6565b60405180910390fd5b610ec5828686840361166d565b60019250505092915050565b60003382610ede82611838565b61101257610eec82826115b4565b610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906127db565b60405180910390fd5b6000610f378284611319565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181610f89919061282a565b421015610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc2906128cc565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b61101a611923565b611022611973565b606460026b204fce5e3e2502611000000061103d91906128ec565b6110479190612975565b841115611089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611080906129f2565b60405180910390fd5b8361109333610c9d565b10156110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612a5e565b60405180910390fd5b60006110e08533610a23565b9050600081866110f09190612a7e565b905060008111611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612b24565b60405180910390fd5b60008211156111b55760006064600a8461114f91906128ec565b6111599190612975565b905060006064605a8561116c91906128ec565b6111769190612975565b905061118461dead83611e5a565b506111b1600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e5a565b5050505b6111bf8782611e5a565b506001945050506111ce6119ec565b505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112656119f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90612c22565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611323610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806113a95750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156113b7576000905061152a565b6000670de0b6b3a7640000905060006b204fce5e3e2502611000000082866113df91906128ec565b6113e99190612975565b905060006032836113fa9190612975565b821061140b57620232809050611523565b6064836114189190612975565b82106114285761d2f09050611522565b60c8836114359190612975565b8210611445576152089050611521565b6101f4836114539190612975565b8210611463576123289050611520565b6103e8836114719190612975565b821061148157610e10905061151f565b6107d08361148f9190612975565b821061149f576104b0905061151e565b612710836114ad9190612975565b82106114bc5760b4905061151d565b614e20836114ca9190612975565b82106114d957603c905061151c565b620186a0836114e89190612975565b82106114f7576014905061151b565b62030d40836115069190612975565b821061151557600a905061151a565b600490505b5b5b5b5b5b5b5b5b5b8093505050505b92915050565b6115386119f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90612cb4565b60405180910390fd5b6115b181611ca5565b50565b60006115bf83611838565b156115cd576001905061162c565b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261161a9190612a7e565b90506116268385611319565b81119150505b92915050565b606460026b204fce5e3e2502611000000061164d91906128ec565b6116579190612975565b81565b61dead81565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490612d46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490612dd8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161182b9190612585565b60405180910390a3505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118c45750611895610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061191c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b60026005541415611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090612e44565b60405180910390fd5b6002600581905550565b61197b610c86565b156119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290612eb0565b60405180910390fd5b565b6000806119c8611665565b90506119d5858285611d6b565b6119e0858585611e7d565b60019150509392505050565b6001600581905550565b6119fe611665565b73ffffffffffffffffffffffffffffffffffffffff16611a1c610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990612f1c565b60405180910390fd5b565b611a7c6120f5565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ac0611665565b604051611acd91906126d3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90612fae565b60405180910390fd5b611b538260008361213e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090613040565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c8c9190612585565b60405180910390a3611ca0836000846123a7565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611d7784846111d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611df15781811015611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906130ac565b60405180910390fd5b611df0848484840361166d565b5b50505050565b611dff611973565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e43611665565b604051611e5091906126d3565b60405180910390a1565b600080611e65611665565b9050611e72818585611e7d565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee49061313e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f54906131d0565b60405180910390fd5b611f6883838361213e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590613262565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120dc9190612585565b60405180910390a36120ef8484846123a7565b50505050565b6120fd610c86565b61213c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612133906132ce565b60405180910390fd5b565b612149838383611660565b612151610d8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806121d75750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061221457506121e5610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061226c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612276576123a2565b606460026b204fce5e3e2502611000000061229191906128ec565b61229b9190612975565b8111156122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d49061333a565b60405180910390fd5b6122e5610d8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123535750612323610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123a157612360610c86565b156123a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612397906133a6565b60405180910390fd5b5b5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123e65780820151818401526020810190506123cb565b838111156123f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000612417826123ac565b61242181856123b7565b93506124318185602086016123c8565b61243a816123fb565b840191505092915050565b6000602082019050818103600083015261245f818461240c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124978261246c565b9050919050565b6124a78161248c565b81146124b257600080fd5b50565b6000813590506124c48161249e565b92915050565b6000819050919050565b6124dd816124ca565b81146124e857600080fd5b50565b6000813590506124fa816124d4565b92915050565b6000806040838503121561251757612516612467565b5b6000612525858286016124b5565b9250506020612536858286016124eb565b9150509250929050565b60008115159050919050565b61255581612540565b82525050565b6000602082019050612570600083018461254c565b92915050565b61257f816124ca565b82525050565b600060208201905061259a6000830184612576565b92915050565b6000806000606084860312156125b9576125b8612467565b5b60006125c7868287016124b5565b93505060206125d8868287016124b5565b92505060406125e9868287016124eb565b9150509250925092565b60006020828403121561260957612608612467565b5b6000612617848285016124b5565b91505092915050565b600060ff82169050919050565b61263681612620565b82525050565b6000602082019050612651600083018461262d565b92915050565b6000806040838503121561266e5761266d612467565b5b600061267c858286016124eb565b925050602061268d858286016124b5565b9150509250929050565b6000602082840312156126ad576126ac612467565b5b60006126bb848285016124eb565b91505092915050565b6126cd8161248c565b82525050565b60006020820190506126e860008301846126c4565b92915050565b6000806040838503121561270557612704612467565b5b6000612713858286016124b5565b9250506020612724858286016124b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061277557607f821691505b602082108114156127895761278861272e565b5b50919050565b7f436f6f6c646f776e206163746976650000000000000000000000000000000000600082015250565b60006127c5600f836123b7565b91506127d08261278f565b602082019050919050565b600060208201905081810360008301526127f4816127b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612835826124ca565b9150612840836124ca565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612875576128746127fb565b5b828201905092915050565b7f436f6f6c646f776e207374696c6c206163746976650000000000000000000000600082015250565b60006128b66015836123b7565b91506128c182612880565b602082019050919050565b600060208201905081810360008301526128e5816128a9565b9050919050565b60006128f7826124ca565b9150612902836124ca565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561293b5761293a6127fb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612980826124ca565b915061298b836124ca565b92508261299b5761299a612946565b5b828204905092915050565b7f5472616e7366657220616d6f756e742065786365656473206c696d6974000000600082015250565b60006129dc601d836123b7565b91506129e7826129a6565b602082019050919050565b60006020820190508181036000830152612a0b816129cf565b9050919050565b7f496e73756666696369656e742073656e6465722062616c616e63650000000000600082015250565b6000612a48601b836123b7565b9150612a5382612a12565b602082019050919050565b60006020820190508181036000830152612a7781612a3b565b9050919050565b6000612a89826124ca565b9150612a94836124ca565b925082821015612aa757612aa66127fb565b5b828203905092915050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612b0e6029836123b7565b9150612b1982612ab2565b604082019050919050565b60006020820190508181036000830152612b3d81612b01565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ba06025836123b7565b9150612bab82612b44565b604082019050919050565b60006020820190508181036000830152612bcf81612b93565b9050919050565b7f4e6f207a65726f20616464726573730000000000000000000000000000000000600082015250565b6000612c0c600f836123b7565b9150612c1782612bd6565b602082019050919050565b60006020820190508181036000830152612c3b81612bff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c9e6026836123b7565b9150612ca982612c42565b604082019050919050565b60006020820190508181036000830152612ccd81612c91565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612d306024836123b7565b9150612d3b82612cd4565b604082019050919050565b60006020820190508181036000830152612d5f81612d23565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612dc26022836123b7565b9150612dcd82612d66565b604082019050919050565b60006020820190508181036000830152612df181612db5565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612e2e601f836123b7565b9150612e3982612df8565b602082019050919050565b60006020820190508181036000830152612e5d81612e21565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612e9a6010836123b7565b9150612ea582612e64565b602082019050919050565b60006020820190508181036000830152612ec981612e8d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f066020836123b7565b9150612f1182612ed0565b602082019050919050565b60006020820190508181036000830152612f3581612ef9565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f986021836123b7565b9150612fa382612f3c565b604082019050919050565b60006020820190508181036000830152612fc781612f8b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061302a6022836123b7565b915061303582612fce565b604082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613096601d836123b7565b91506130a182613060565b602082019050919050565b600060208201905081810360008301526130c581613089565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131286025836123b7565b9150613133826130cc565b604082019050919050565b600060208201905081810360008301526131578161311b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006131ba6023836123b7565b91506131c58261315e565b604082019050919050565b600060208201905081810360008301526131e9816131ad565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061324c6026836123b7565b9150613257826131f0565b604082019050919050565b6000602082019050818103600083015261327b8161323f565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006132b86014836123b7565b91506132c382613282565b602082019050919050565b600060208201905081810360008301526132e7816132ab565b9050919050565b7f5472616e73666572206c696d6974206578636565646564000000000000000000600082015250565b60006133246017836123b7565b915061332f826132ee565b602082019050919050565b6000602082019050818103600083015261335381613317565b9050919050565b7f5472616e73666572732070617573656400000000000000000000000000000000600082015250565b60006133906010836123b7565b915061339b8261335a565b602082019050919050565b600060208201905081810360008301526133bf81613383565b905091905056fea264697066735822122001a11aab3df60c72eb11db65ea175bfd42e30a4b94448a0beeaef42fc0461e7f64736f6c63430008090033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806379cc679011610104578063a9059cbb116100a2578063f2fde38b11610071578063f2fde38b1461051e578063f8350ed01461053a578063fc1b31131461056a578063fccc281314610588576101cf565b8063a9059cbb14610472578063dd62ed3e146104a2578063e74b981b146104d2578063f0dd199f146104ee576101cf565b80638da5cb5b116100de5780638da5cb5b146103e8578063902d55a51461040657806395d89b4114610424578063a457c2d714610442576101cf565b806379cc6790146103a65780637b9417c8146103c25780638456cb59146103de576101cf565b80633f4ba83a11610171578063469048401161014b57806346904840146103305780635c975abb1461034e57806370a082311461036c578063715018a61461039c576101cf565b80633f4ba83a146102da578063400ba069146102e457806342966c6814610314576101cf565b806323b872dd116101ad57806323b872dd14610240578063286dd3f514610270578063313ce5671461028c57806339509351146102aa576101cf565b806306fdde03146101d4578063095ea7b3146101f257806318160ddd14610222575b600080fd5b6101dc6105a6565b6040516101e99190612445565b60405180910390f35b61020c60048036038101906102079190612500565b610638565b604051610219919061255b565b60405180910390f35b61022a61065b565b6040516102379190612585565b60405180910390f35b61025a600480360381019061025591906125a0565b610665565b604051610267919061255b565b60405180910390f35b61028a600480360381019061028591906125f3565b61096e565b005b6102946109d1565b6040516102a1919061263c565b60405180910390f35b6102c460048036038101906102bf9190612500565b6109da565b6040516102d1919061255b565b60405180910390f35b6102e2610a11565b005b6102fe60048036038101906102f99190612657565b610a23565b60405161030b9190612585565b60405180910390f35b61032e60048036038101906103299190612697565b610c4c565b005b610338610c60565b60405161034591906126d3565b60405180910390f35b610356610c86565b604051610363919061255b565b60405180910390f35b610386600480360381019061038191906125f3565b610c9d565b6040516103939190612585565b60405180910390f35b6103a4610ce5565b005b6103c060048036038101906103bb9190612500565b610cf9565b005b6103dc60048036038101906103d791906125f3565b610d19565b005b6103e6610d7c565b005b6103f0610d8e565b6040516103fd91906126d3565b60405180910390f35b61040e610db8565b60405161041b9190612585565b60405180910390f35b61042c610dc8565b6040516104399190612445565b60405180910390f35b61045c60048036038101906104579190612500565b610e5a565b604051610469919061255b565b60405180910390f35b61048c60048036038101906104879190612500565b610ed1565b604051610499919061255b565b60405180910390f35b6104bc60048036038101906104b791906126ee565b6111d6565b6040516104c99190612585565b60405180910390f35b6104ec60048036038101906104e791906125f3565b61125d565b005b61050860048036038101906105039190612657565b611319565b6040516105159190612585565b60405180910390f35b610538600480360381019061053391906125f3565b611530565b005b610554600480360381019061054f9190612500565b6115b4565b604051610561919061255b565b60405180910390f35b610572611632565b60405161057f9190612585565b60405180910390f35b61059061165a565b60405161059d91906126d3565b60405180910390f35b6060600380546105b59061275d565b80601f01602080910402602001604051908101604052809291908181526020018280546105e19061275d565b801561062e5780601f106106035761010080835404028352916020019161062e565b820191906000526020600020905b81548152906001019060200180831161061157829003601f168201915b5050505050905090565b600080610643611665565b905061065081858561166d565b600191505092915050565b6000600254905090565b6000838261067282611838565b6107a65761068082826115b4565b6106bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b6906127db565b60405180910390fd5b60006106cb8284611319565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818161071d919061282a565b42101561075f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610756906128cc565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b6107ae611923565b6107b6611973565b606460026b204fce5e3e250261100000006107d191906128ec565b6107db9190612975565b84111561081d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610814906129f2565b60405180910390fd5b8361082787610c9d565b1015610868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161085f90612a5e565b60405180910390fd5b60006108748588610a23565b9050600081866108849190612a7e565b9050600081116108c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108c090612b24565b60405180910390fd5b600082111561094b5760006064600a846108e391906128ec565b6108ed9190612975565b905060006064605a8561090091906128ec565b61090a9190612975565b90506109198a61dead846119bd565b506109478a600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836119bd565b5050505b6109568888836119bd565b506001945050506109656119ec565b50509392505050565b6109766119f6565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006012905090565b6000806109e5611665565b9050610a068185856109f785896111d6565b610a01919061282a565b61166d565b600191505092915050565b610a196119f6565b610a21611a74565b565b6000610a2d610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480610ab35750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610ac15760009050610c46565b6000670de0b6b3a7640000905060006b204fce5e3e250261100000008286610ae991906128ec565b610af39190612975565b90506000603283610b049190612975565b8210610b145761012c9050610c27565b606483610b219190612975565b8210610b305760969050610c26565b60c883610b3d9190612975565b8210610b4c5760649050610c25565b6101f483610b5a9190612975565b8210610b695760509050610c24565b6103e883610b779190612975565b8210610b865760329050610c23565b6107d083610b949190612975565b8210610ba357601e9050610c22565b61271083610bb19190612975565b8210610bc057600f9050610c21565b614e2083610bce9190612975565b8210610bdd5760089050610c20565b620186a083610bec9190612975565b8210610bfb5760049050610c1f565b62030d4083610c0a9190612975565b8210610c195760029050610c1e565b600190505b5b5b5b5b5b5b5b5b5b6103e88187610c3691906128ec565b610c409190612975565b93505050505b92915050565b610c5d610c57611665565b82611ad7565b50565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660149054906101000a900460ff16905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610ced6119f6565b610cf76000611ca5565b565b610d0b82610d05611665565b83611d6b565b610d158282611ad7565b5050565b610d216119f6565b6001600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610d846119f6565b610d8c611df7565b565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6b204fce5e3e2502611000000081565b606060048054610dd79061275d565b80601f0160208091040260200160405190810160405280929190818152602001828054610e039061275d565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050505050905090565b600080610e65611665565b90506000610e7382866111d6565b905083811015610eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eaf90612bb6565b60405180910390fd5b610ec5828686840361166d565b60019250505092915050565b60003382610ede82611838565b61101257610eec82826115b4565b610f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f22906127db565b60405180910390fd5b6000610f378284611319565b90506000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181610f89919061282a565b421015610fcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc2906128cc565b60405180910390fd5b42600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050505b61101a611923565b611022611973565b606460026b204fce5e3e2502611000000061103d91906128ec565b6110479190612975565b841115611089576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611080906129f2565b60405180910390fd5b8361109333610c9d565b10156110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb90612a5e565b60405180910390fd5b60006110e08533610a23565b9050600081866110f09190612a7e565b905060008111611135576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112c90612b24565b60405180910390fd5b60008211156111b55760006064600a8461114f91906128ec565b6111599190612975565b905060006064605a8561116c91906128ec565b6111769190612975565b905061118461dead83611e5a565b506111b1600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611e5a565b5050505b6111bf8782611e5a565b506001945050506111ce6119ec565b505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6112656119f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156112d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cc90612c22565b60405180910390fd5b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000611323610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806113a95750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b156113b7576000905061152a565b6000670de0b6b3a7640000905060006b204fce5e3e2502611000000082866113df91906128ec565b6113e99190612975565b905060006032836113fa9190612975565b821061140b57620232809050611523565b6064836114189190612975565b82106114285761d2f09050611522565b60c8836114359190612975565b8210611445576152089050611521565b6101f4836114539190612975565b8210611463576123289050611520565b6103e8836114719190612975565b821061148157610e10905061151f565b6107d08361148f9190612975565b821061149f576104b0905061151e565b612710836114ad9190612975565b82106114bc5760b4905061151d565b614e20836114ca9190612975565b82106114d957603c905061151c565b620186a0836114e89190612975565b82106114f7576014905061151b565b62030d40836115069190612975565b821061151557600a905061151a565b600490505b5b5b5b5b5b5b5b5b5b8093505050505b92915050565b6115386119f6565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159f90612cb4565b60405180910390fd5b6115b181611ca5565b50565b60006115bf83611838565b156115cd576001905061162c565b6000600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261161a9190612a7e565b90506116268385611319565b81119150505b92915050565b606460026b204fce5e3e2502611000000061164d91906128ec565b6116579190612975565b81565b61dead81565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490612d46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561174d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174490612dd8565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161182b9190612585565b60405180910390a3505050565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806118c45750611895610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061191c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b60026005541415611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196090612e44565b60405180910390fd5b6002600581905550565b61197b610c86565b156119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290612eb0565b60405180910390fd5b565b6000806119c8611665565b90506119d5858285611d6b565b6119e0858585611e7d565b60019150509392505050565b6001600581905550565b6119fe611665565b73ffffffffffffffffffffffffffffffffffffffff16611a1c610d8e565b73ffffffffffffffffffffffffffffffffffffffff1614611a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6990612f1c565b60405180910390fd5b565b611a7c6120f5565b6000600660146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611ac0611665565b604051611acd91906126d3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90612fae565b60405180910390fd5b611b538260008361213e565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090613040565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611c8c9190612585565b60405180910390a3611ca0836000846123a7565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000611d7784846111d6565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114611df15781811015611de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dda906130ac565b60405180910390fd5b611df0848484840361166d565b5b50505050565b611dff611973565b6001600660146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e43611665565b604051611e5091906126d3565b60405180910390a1565b600080611e65611665565b9050611e72818585611e7d565b600191505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ee49061313e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f54906131d0565b60405180910390fd5b611f6883838361213e565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611fee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fe590613262565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516120dc9190612585565b60405180910390a36120ef8484846123a7565b50505050565b6120fd610c86565b61213c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612133906132ce565b60405180910390fd5b565b612149838383611660565b612151610d8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806121d75750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b8061221457506121e5610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061226c5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15612276576123a2565b606460026b204fce5e3e2502611000000061229191906128ec565b61229b9190612975565b8111156122dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d49061333a565b60405180910390fd5b6122e5610d8e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123535750612323610d8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156123a157612360610c86565b156123a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612397906133a6565b60405180910390fd5b5b5b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156123e65780820151818401526020810190506123cb565b838111156123f5576000848401525b50505050565b6000601f19601f8301169050919050565b6000612417826123ac565b61242181856123b7565b93506124318185602086016123c8565b61243a816123fb565b840191505092915050565b6000602082019050818103600083015261245f818461240c565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006124978261246c565b9050919050565b6124a78161248c565b81146124b257600080fd5b50565b6000813590506124c48161249e565b92915050565b6000819050919050565b6124dd816124ca565b81146124e857600080fd5b50565b6000813590506124fa816124d4565b92915050565b6000806040838503121561251757612516612467565b5b6000612525858286016124b5565b9250506020612536858286016124eb565b9150509250929050565b60008115159050919050565b61255581612540565b82525050565b6000602082019050612570600083018461254c565b92915050565b61257f816124ca565b82525050565b600060208201905061259a6000830184612576565b92915050565b6000806000606084860312156125b9576125b8612467565b5b60006125c7868287016124b5565b93505060206125d8868287016124b5565b92505060406125e9868287016124eb565b9150509250925092565b60006020828403121561260957612608612467565b5b6000612617848285016124b5565b91505092915050565b600060ff82169050919050565b61263681612620565b82525050565b6000602082019050612651600083018461262d565b92915050565b6000806040838503121561266e5761266d612467565b5b600061267c858286016124eb565b925050602061268d858286016124b5565b9150509250929050565b6000602082840312156126ad576126ac612467565b5b60006126bb848285016124eb565b91505092915050565b6126cd8161248c565b82525050565b60006020820190506126e860008301846126c4565b92915050565b6000806040838503121561270557612704612467565b5b6000612713858286016124b5565b9250506020612724858286016124b5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061277557607f821691505b602082108114156127895761278861272e565b5b50919050565b7f436f6f6c646f776e206163746976650000000000000000000000000000000000600082015250565b60006127c5600f836123b7565b91506127d08261278f565b602082019050919050565b600060208201905081810360008301526127f4816127b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612835826124ca565b9150612840836124ca565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612875576128746127fb565b5b828201905092915050565b7f436f6f6c646f776e207374696c6c206163746976650000000000000000000000600082015250565b60006128b66015836123b7565b91506128c182612880565b602082019050919050565b600060208201905081810360008301526128e5816128a9565b9050919050565b60006128f7826124ca565b9150612902836124ca565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561293b5761293a6127fb565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612980826124ca565b915061298b836124ca565b92508261299b5761299a612946565b5b828204905092915050565b7f5472616e7366657220616d6f756e742065786365656473206c696d6974000000600082015250565b60006129dc601d836123b7565b91506129e7826129a6565b602082019050919050565b60006020820190508181036000830152612a0b816129cf565b9050919050565b7f496e73756666696369656e742073656e6465722062616c616e63650000000000600082015250565b6000612a48601b836123b7565b9150612a5382612a12565b602082019050919050565b60006020820190508181036000830152612a7781612a3b565b9050919050565b6000612a89826124ca565b9150612a94836124ca565b925082821015612aa757612aa66127fb565b5b828203905092915050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612b0e6029836123b7565b9150612b1982612ab2565b604082019050919050565b60006020820190508181036000830152612b3d81612b01565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ba06025836123b7565b9150612bab82612b44565b604082019050919050565b60006020820190508181036000830152612bcf81612b93565b9050919050565b7f4e6f207a65726f20616464726573730000000000000000000000000000000000600082015250565b6000612c0c600f836123b7565b9150612c1782612bd6565b602082019050919050565b60006020820190508181036000830152612c3b81612bff565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612c9e6026836123b7565b9150612ca982612c42565b604082019050919050565b60006020820190508181036000830152612ccd81612c91565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612d306024836123b7565b9150612d3b82612cd4565b604082019050919050565b60006020820190508181036000830152612d5f81612d23565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612dc26022836123b7565b9150612dcd82612d66565b604082019050919050565b60006020820190508181036000830152612df181612db5565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000612e2e601f836123b7565b9150612e3982612df8565b602082019050919050565b60006020820190508181036000830152612e5d81612e21565b9050919050565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b6000612e9a6010836123b7565b9150612ea582612e64565b602082019050919050565b60006020820190508181036000830152612ec981612e8d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612f066020836123b7565b9150612f1182612ed0565b602082019050919050565b60006020820190508181036000830152612f3581612ef9565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f986021836123b7565b9150612fa382612f3c565b604082019050919050565b60006020820190508181036000830152612fc781612f8b565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061302a6022836123b7565b915061303582612fce565b604082019050919050565b600060208201905081810360008301526130598161301d565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613096601d836123b7565b91506130a182613060565b602082019050919050565b600060208201905081810360008301526130c581613089565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006131286025836123b7565b9150613133826130cc565b604082019050919050565b600060208201905081810360008301526131578161311b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006131ba6023836123b7565b91506131c58261315e565b604082019050919050565b600060208201905081810360008301526131e9816131ad565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061324c6026836123b7565b9150613257826131f0565b604082019050919050565b6000602082019050818103600083015261327b8161323f565b9050919050565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b60006132b86014836123b7565b91506132c382613282565b602082019050919050565b600060208201905081810360008301526132e7816132ab565b9050919050565b7f5472616e73666572206c696d6974206578636565646564000000000000000000600082015250565b60006133246017836123b7565b915061332f826132ee565b602082019050919050565b6000602082019050818103600083015261335381613317565b9050919050565b7f5472616e73666572732070617573656400000000000000000000000000000000600082015250565b60006133906010836123b7565b915061339b8261335a565b602082019050919050565b600060208201905081810360008301526133bf81613383565b905091905056fea264697066735822122001a11aab3df60c72eb11db65ea175bfd42e30a4b94448a0beeaef42fc0461e7f64736f6c63430008090033

Deployed Bytecode Sourcemap

27486:7650:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15242:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17602:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16371:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34045:896;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29229:119;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16213:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19053:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35066:67;;;:::i;:::-;;29391:1282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26818:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27740:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5839:86;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16542:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8697:103;;;:::i;:::-;;27228:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29108:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34971:63;;;:::i;:::-;;8056:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27571:61;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15461:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19794:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33078:852;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17131:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28894:180;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30716:1316;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8955:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32142:320;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27639:68;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27774:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15242:100;15296:13;15329:5;15322:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15242:100;:::o;17602:201::-;17685:4;17702:13;17718:12;:10;:12::i;:::-;17702:28;;17741:32;17750:5;17757:7;17766:6;17741:8;:32::i;:::-;17791:4;17784:11;;;17602:201;;;;:::o;16371:108::-;16432:7;16459:12;;16452:19;;16371:108;:::o;34045:896::-;34206:4;34154:6;34162;28048:29;28070:6;28048:21;:29::i;:::-;28043:403;;28102:25;28112:6;28120;28102:9;:25::i;:::-;28094:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:16;28181:33;28199:6;28207;28181:17;:33::i;:::-;28162:52;;28229:20;28252:21;:29;28274:6;28252:29;;;;;;;;;;;;;;;;28229:52;;28338:8;28323:12;:23;;;;:::i;:::-;28304:15;:42;;28296:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28419:15;28387:21;:29;28409:6;28387:29;;;;;;;;;;;;;;;:47;;;;28079:367;;28043:403;2378:21:::1;:19;:21::i;:::-;5444:19:::2;:17;:19::i;:::-;27704:3:::3;27700:1;27610:22;27685:16;;;;:::i;:::-;:22;;;;:::i;:::-;34227:6;:29;;34219:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;34326:6;34305:17;34315:6;34305:9;:17::i;:::-;:27;;34297:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34377:11;34391:28;34404:6;34412;34391:12;:28::i;:::-;34377:42;;34426:22;34460:3;34451:6;:12;;;;:::i;:::-;34426:37;;34497:1;34480:14;:18;34472:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;34563:1;34557:3;:7;34553:305;;;34577:18;34609:3;34604:2;34598:3;:8;;;;:::i;:::-;:14;;;;:::i;:::-;34577:35;;34642:23;34679:3;34674:2;34668:3;:8;;;;:::i;:::-;:14;;;;:::i;:::-;34642:40;;34730:52;34749:6;27813:42;34771:10;34730:18;:52::i;:::-;;34793:57;34812:6;34820:12;;;;;;;;;;;34834:15;34793:18;:57::i;:::-;;34566:292;;34553:305;34866:53;34885:6;34893:9;34904:14;34866:18;:53::i;:::-;;34933:4;34926:11;;;;2422:20:::1;:18;:20::i;:::-;34045:896:::0;;;;;;;:::o;29229:119::-;7942:13;:11;:13::i;:::-;29335:5:::1;29313:9;:19;29323:8;29313:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;29229:119:::0;:::o;16213:93::-;16271:5;16296:2;16289:9;;16213:93;:::o;19053:238::-;19141:4;19158:13;19174:12;:10;:12::i;:::-;19158:28;;19197:64;19206:5;19213:7;19250:10;19222:25;19232:5;19239:7;19222:9;:25::i;:::-;:38;;;;:::i;:::-;19197:8;:64::i;:::-;19279:4;19272:11;;;19053:238;;;;:::o;35066:67::-;7942:13;:11;:13::i;:::-;35115:10:::1;:8;:10::i;:::-;35066:67::o:0;29391:1282::-;29466:7;29500;:5;:7::i;:::-;29490:17;;:6;:17;;;:43;;;;29521:12;;;;;;;;;;;29511:22;;:6;:22;;;29490:43;29486:84;;;29557:1;29550:8;;;;29486:84;29582:14;29599:6;29582:23;;29616:18;27610:22;29646:6;29637;:15;;;;:::i;:::-;:30;;;;:::i;:::-;29616:51;;29678:15;29733:2;29724:6;:11;;;;:::i;:::-;29710:10;:25;29706:917;;29762:3;29752:13;;29706:917;;;29818:3;29809:6;:12;;;;:::i;:::-;29795:10;:26;29791:832;;29848:3;29838:13;;29791:832;;;29904:3;29895:6;:12;;;;:::i;:::-;29881:10;:26;29877:746;;29934:3;29924:13;;29877:746;;;29990:3;29981:6;:12;;;;:::i;:::-;29967:10;:26;29963:660;;30020:2;30010:12;;29963:660;;;30074:4;30065:6;:13;;;;:::i;:::-;30051:10;:27;30047:576;;30105:2;30095:12;;30047:576;;;30159:4;30150:6;:13;;;;:::i;:::-;30136:10;:27;30132:491;;30190:2;30180:12;;30132:491;;;30244:5;30235:6;:14;;;;:::i;:::-;30221:10;:28;30217:406;;30276:2;30266:12;;30217:406;;;30332:5;30323:6;:14;;;;:::i;:::-;30309:10;:28;30305:318;;30364:1;30354:11;;30305:318;;;30419:6;30410;:15;;;;:::i;:::-;30396:10;:29;30392:231;;30452:1;30442:11;;30392:231;;;30507:6;30498;:15;;;;:::i;:::-;30484:10;:29;30480:143;;30540:1;30530:11;;30480:143;;;30593:1;30583:11;;30480:143;30392:231;30305:318;30217:406;30132:491;30047:576;29963:660;29877:746;29791:832;29706:917;30661:4;30651:7;30642:6;:16;;;;:::i;:::-;:23;;;;:::i;:::-;30635:30;;;;;29391:1282;;;;;:::o;26818:91::-;26874:27;26880:12;:10;:12::i;:::-;26894:6;26874:5;:27::i;:::-;26818:91;:::o;27740:27::-;;;;;;;;;;;;;:::o;5839:86::-;5886:4;5910:7;;;;;;;;;;;5903:14;;5839:86;:::o;16542:127::-;16616:7;16643:9;:18;16653:7;16643:18;;;;;;;;;;;;;;;;16636:25;;16542:127;;;:::o;8697:103::-;7942:13;:11;:13::i;:::-;8762:30:::1;8789:1;8762:18;:30::i;:::-;8697:103::o:0;27228:164::-;27305:46;27321:7;27330:12;:10;:12::i;:::-;27344:6;27305:15;:46::i;:::-;27362:22;27368:7;27377:6;27362:5;:22::i;:::-;27228:164;;:::o;29108:113::-;7942:13;:11;:13::i;:::-;29209:4:::1;29187:9;:19;29197:8;29187:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;29108:113:::0;:::o;34971:63::-;7942:13;:11;:13::i;:::-;35018:8:::1;:6;:8::i;:::-;34971:63::o:0;8056:87::-;8102:7;8129:6;;;;;;;;;;;8122:13;;8056:87;:::o;27571:61::-;27610:22;27571:61;:::o;15461:104::-;15517:13;15550:7;15543:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15461:104;:::o;19794:436::-;19887:4;19904:13;19920:12;:10;:12::i;:::-;19904:28;;19943:24;19970:25;19980:5;19987:7;19970:9;:25::i;:::-;19943:52;;20034:15;20014:16;:35;;20006:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;20127:60;20136:5;20143:7;20171:15;20152:16;:34;20127:8;:60::i;:::-;20218:4;20211:11;;;;19794:436;;;;:::o;33078:852::-;33223:4;33167:10;33179:6;28048:29;28070:6;28048:21;:29::i;:::-;28043:403;;28102:25;28112:6;28120;28102:9;:25::i;:::-;28094:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;28162:16;28181:33;28199:6;28207;28181:17;:33::i;:::-;28162:52;;28229:20;28252:21;:29;28274:6;28252:29;;;;;;;;;;;;;;;;28229:52;;28338:8;28323:12;:23;;;;:::i;:::-;28304:15;:42;;28296:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28419:15;28387:21;:29;28409:6;28387:29;;;;;;;;;;;;;;;:47;;;;28079:367;;28043:403;2378:21:::1;:19;:21::i;:::-;5444:19:::2;:17;:19::i;:::-;27704:3:::3;27700:1;27610:22;27685:16;;;;:::i;:::-;:22;;;;:::i;:::-;33244:6;:29;;33236:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33347:6;33322:21;33332:10;33322:9;:21::i;:::-;:31;;33314:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;33398:11;33412:32;33425:6;33433:10;33412:12;:32::i;:::-;33398:46;;33451:22;33485:3;33476:6;:12;;;;:::i;:::-;33451:37;;33522:1;33505:14;:18;33497:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;33588:1;33582:3;:7;33578:281;;;33602:18;33634:3;33629:2;33623:3;:8;;;;:::i;:::-;:14;;;;:::i;:::-;33602:35;;33667:23;33704:3;33699:2;33693:3;:8;;;;:::i;:::-;:14;;;;:::i;:::-;33667:40;;33755;27813:42;33784:10;33755:14;:40::i;:::-;;33806:45;33821:12;;;;;;;;;;;33835:15;33806:14;:45::i;:::-;;33591:268;;33578:281;33867:41;33882:9;33893:14;33867;:41::i;:::-;;33922:4;33915:11;;;;2422:20:::1;:18;:20::i;:::-;33078:852:::0;;;;;;:::o;17131:151::-;17220:7;17247:11;:18;17259:5;17247:18;;;;;;;;;;;;;;;:27;17266:7;17247:27;;;;;;;;;;;;;;;;17240:34;;17131:151;;;;:::o;28894:180::-;7942:13;:11;:13::i;:::-;29005:1:::1;28980:27;;:13;:27;;;;28972:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;29053:13;29038:12;;:28;;;;;;;;;;;;;;;;;;28894:180:::0;:::o;30716:1316::-;30796:7;30830;:5;:7::i;:::-;30820:17;;:6;:17;;;:43;;;;30851:12;;;;;;;;;;;30841:22;;:6;:22;;;30820:43;30816:84;;;30887:1;30880:8;;;;30816:84;30912:14;30929:6;30912:23;;30946:18;27610:22;30976:6;30967;:15;;;;:::i;:::-;:30;;;;:::i;:::-;30946:51;;31008:16;31064:2;31055:6;:11;;;;:::i;:::-;31041:10;:25;31037:960;;31094:6;31083:17;;31037:960;;;31153:3;31144:6;:12;;;;:::i;:::-;31130:10;:26;31126:871;;31184:5;31173:16;;31126:871;;;31242:3;31233:6;:12;;;;:::i;:::-;31219:10;:26;31215:782;;31273:5;31262:16;;31215:782;;;31334:3;31325:6;:12;;;;:::i;:::-;31311:10;:26;31307:690;;31365:4;31354:15;;31307:690;;;31425:4;31416:6;:13;;;;:::i;:::-;31402:10;:27;31398:599;;31457:4;31446:15;;31398:599;;;31516:4;31507:6;:13;;;;:::i;:::-;31493:10;:27;31489:508;;31548:4;31537:15;;31489:508;;;31607:5;31598:6;:14;;;;:::i;:::-;31584:10;:28;31580:417;;31640:3;31629:14;;31580:417;;;31697:5;31688:6;:14;;;;:::i;:::-;31674:10;:28;31670:327;;31730:2;31719:13;;31670:327;;;31786:6;31777;:15;;;;:::i;:::-;31763:10;:29;31759:238;;31820:2;31809:13;;31759:238;;;31877:6;31868;:15;;;;:::i;:::-;31854:10;:29;31850:147;;31911:2;31900:13;;31850:147;;;31967:1;31956:12;;31850:147;31759:238;31670:327;31580:417;31489:508;31398:599;31307:690;31215:782;31126:871;31037:960;32016:8;32009:15;;;;;30716:1316;;;;;:::o;8955:201::-;7942:13;:11;:13::i;:::-;9064:1:::1;9044:22;;:8;:22;;;;9036:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9120:28;9139:8;9120:18;:28::i;:::-;8955:201:::0;:::o;32142:320::-;32214:4;32235:29;32257:6;32235:21;:29::i;:::-;32231:73;;;32288:4;32281:11;;;;32231:73;32314:22;32357:21;:29;32379:6;32357:29;;;;;;;;;;;;;;;;32339:15;:47;;;;:::i;:::-;32314:72;;32421:33;32439:6;32447;32421:17;:33::i;:::-;32404:14;:50;32397:57;;;32142:320;;;;;:::o;27639:68::-;27704:3;27700:1;27610:22;27685:16;;;;:::i;:::-;:22;;;;:::i;:::-;27639:68;:::o;27774:81::-;27813:42;27774:81;:::o;25443:91::-;;;;:::o;3952:98::-;4005:7;4032:10;4025:17;;3952:98;:::o;23787:346::-;23906:1;23889:19;;:5;:19;;;;23881:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23987:1;23968:21;;:7;:21;;;;23960:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24071:6;24041:11;:18;24053:5;24041:18;;;;;;;;;;;;;;;:27;24060:7;24041:27;;;;;;;;;;;;;;;:36;;;;24109:7;24093:32;;24102:5;24093:32;;;24118:6;24093:32;;;;;;:::i;:::-;;;;;;;;23787:346;;;:::o;28720:166::-;28790:4;28814:9;:17;28824:6;28814:17;;;;;;;;;;;;;;;;;;;;;;;;;:38;;;;28845:7;:5;:7::i;:::-;28835:17;;:6;:17;;;28814:38;:64;;;;28866:12;;;;;;;;;;;28856:22;;:6;:22;;;28814:64;28807:71;;28720:166;;;:::o;2458:293::-;1860:1;2592:7;;:19;;2584:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1860:1;2725:7;:18;;;;2458:293::o;5998:108::-;6069:8;:6;:8::i;:::-;6068:9;6060:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;5998:108::o;18383:261::-;18480:4;18497:15;18515:12;:10;:12::i;:::-;18497:30;;18538:38;18554:4;18560:7;18569:6;18538:15;:38::i;:::-;18587:27;18597:4;18603:2;18607:6;18587:9;:27::i;:::-;18632:4;18625:11;;;18383:261;;;;;:::o;2759:213::-;1816:1;2942:7;:22;;;;2759:213::o;8221:132::-;8296:12;:10;:12::i;:::-;8285:23;;:7;:5;:7::i;:::-;:23;;;8277:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8221:132::o;6694:120::-;5703:16;:14;:16::i;:::-;6763:5:::1;6753:7;;:15;;;;;;;;;;;;;;;;;;6784:22;6793:12;:10;:12::i;:::-;6784:22;;;;;;:::i;:::-;;;;;;;;6694:120::o:0;22674:675::-;22777:1;22758:21;;:7;:21;;;;22750:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22830:49;22851:7;22868:1;22872:6;22830:20;:49::i;:::-;22892:22;22917:9;:18;22927:7;22917:18;;;;;;;;;;;;;;;;22892:43;;22972:6;22954:14;:24;;22946:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23091:6;23074:14;:23;23053:9;:18;23063:7;23053:18;;;;;;;;;;;;;;;:44;;;;23208:6;23192:12;;:22;;;;;;;;;;;23269:1;23243:37;;23252:7;23243:37;;;23273:6;23243:37;;;;;;:::i;:::-;;;;;;;;23293:48;23313:7;23330:1;23334:6;23293:19;:48::i;:::-;22739:610;22674:675;;:::o;9316:191::-;9390:16;9409:6;;;;;;;;;;;9390:25;;9435:8;9426:6;;:17;;;;;;;;;;;;;;;;;;9490:8;9459:40;;9480:8;9459:40;;;;;;;;;;;;9379:128;9316:191;:::o;24424:419::-;24525:24;24552:25;24562:5;24569:7;24552:9;:25::i;:::-;24525:52;;24612:17;24592:16;:37;24588:248;;24674:6;24654:16;:26;;24646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24758:51;24767:5;24774:7;24802:6;24783:16;:25;24758:8;:51::i;:::-;24588:248;24514:329;24424:419;;;:::o;6435:118::-;5444:19;:17;:19::i;:::-;6505:4:::1;6495:7;;:14;;;;;;;;;;;;;;;;;;6525:20;6532:12;:10;:12::i;:::-;6525:20;;;;;;:::i;:::-;;;;;;;;6435:118::o:0;16875:193::-;16954:4;16971:13;16987:12;:10;:12::i;:::-;16971:28;;17010;17020:5;17027:2;17031:6;17010:9;:28::i;:::-;17056:4;17049:11;;;16875:193;;;;:::o;20700:806::-;20813:1;20797:18;;:4;:18;;;;20789:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20890:1;20876:16;;:2;:16;;;;20868:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;20945:38;20966:4;20972:2;20976:6;20945:20;:38::i;:::-;20996:19;21018:9;:15;21028:4;21018:15;;;;;;;;;;;;;;;;20996:37;;21067:6;21052:11;:21;;21044:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;21184:6;21170:11;:20;21152:9;:15;21162:4;21152:15;;;;;;;;;;;;;;;:38;;;;21387:6;21370:9;:13;21380:2;21370:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;21437:2;21422:26;;21431:4;21422:26;;;21441:6;21422:26;;;;;;:::i;:::-;;;;;;;;21461:37;21481:4;21487:2;21491:6;21461:19;:37::i;:::-;20778:728;20700:806;;;:::o;6183:108::-;6250:8;:6;:8::i;:::-;6242:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;6183:108::o;32470:506::-;32571:44;32598:4;32604:2;32608:6;32571:26;:44::i;:::-;32640:7;:5;:7::i;:::-;32632:15;;:4;:15;;;:39;;;;32659:12;;;;;;;;;;;32651:20;;:4;:20;;;32632:39;:56;;;;32681:7;:5;:7::i;:::-;32675:13;;:2;:13;;;32632:56;:78;;;;32698:12;;;;;;;;;;;32692:18;;:2;:18;;;32632:78;32628:160;;;32723:7;;32628:160;27704:3;27700:1;27610:22;27685:16;;;;:::i;:::-;:22;;;;:::i;:::-;32808:6;:29;;32800:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32890:7;:5;:7::i;:::-;32882:15;;:4;:15;;;;:32;;;;;32907:7;:5;:7::i;:::-;32901:13;;:2;:13;;;;32882:32;32878:95;;;32936:8;:6;:8::i;:::-;32935:9;32927:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;32878:95;32470:506;;;;:::o;26138:90::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:619::-;3923:6;3931;3939;3988:2;3976:9;3967:7;3963:23;3959:32;3956:119;;;3994:79;;:::i;:::-;3956:119;4114:1;4139:53;4184:7;4175:6;4164:9;4160:22;4139:53;:::i;:::-;4129:63;;4085:117;4241:2;4267:53;4312:7;4303:6;4292:9;4288:22;4267:53;:::i;:::-;4257:63;;4212:118;4369:2;4395:53;4440:7;4431:6;4420:9;4416:22;4395:53;:::i;:::-;4385:63;;4340:118;3846:619;;;;;:::o;4471:329::-;4530:6;4579:2;4567:9;4558:7;4554:23;4550:32;4547:119;;;4585:79;;:::i;:::-;4547:119;4705:1;4730:53;4775:7;4766:6;4755:9;4751:22;4730:53;:::i;:::-;4720:63;;4676:117;4471:329;;;;:::o;4806:86::-;4841:7;4881:4;4874:5;4870:16;4859:27;;4806:86;;;:::o;4898:112::-;4981:22;4997:5;4981:22;:::i;:::-;4976:3;4969:35;4898:112;;:::o;5016:214::-;5105:4;5143:2;5132:9;5128:18;5120:26;;5156:67;5220:1;5209:9;5205:17;5196:6;5156:67;:::i;:::-;5016:214;;;;:::o;5236:474::-;5304:6;5312;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5614:2;5640:53;5685:7;5676:6;5665:9;5661:22;5640:53;:::i;:::-;5630:63;;5585:118;5236:474;;;;;:::o;5716:329::-;5775:6;5824:2;5812:9;5803:7;5799:23;5795:32;5792:119;;;5830:79;;:::i;:::-;5792:119;5950:1;5975:53;6020:7;6011:6;6000:9;5996:22;5975:53;:::i;:::-;5965:63;;5921:117;5716:329;;;;:::o;6051:118::-;6138:24;6156:5;6138:24;:::i;:::-;6133:3;6126:37;6051:118;;:::o;6175:222::-;6268:4;6306:2;6295:9;6291:18;6283:26;;6319:71;6387:1;6376:9;6372:17;6363:6;6319:71;:::i;:::-;6175:222;;;;:::o;6403:474::-;6471:6;6479;6528:2;6516:9;6507:7;6503:23;6499:32;6496:119;;;6534:79;;:::i;:::-;6496:119;6654:1;6679:53;6724:7;6715:6;6704:9;6700:22;6679:53;:::i;:::-;6669:63;;6625:117;6781:2;6807:53;6852:7;6843:6;6832:9;6828:22;6807:53;:::i;:::-;6797:63;;6752:118;6403:474;;;;;:::o;6883:180::-;6931:77;6928:1;6921:88;7028:4;7025:1;7018:15;7052:4;7049:1;7042:15;7069:320;7113:6;7150:1;7144:4;7140:12;7130:22;;7197:1;7191:4;7187:12;7218:18;7208:81;;7274:4;7266:6;7262:17;7252:27;;7208:81;7336:2;7328:6;7325:14;7305:18;7302:38;7299:84;;;7355:18;;:::i;:::-;7299:84;7120:269;7069:320;;;:::o;7395:165::-;7535:17;7531:1;7523:6;7519:14;7512:41;7395:165;:::o;7566:366::-;7708:3;7729:67;7793:2;7788:3;7729:67;:::i;:::-;7722:74;;7805:93;7894:3;7805:93;:::i;:::-;7923:2;7918:3;7914:12;7907:19;;7566:366;;;:::o;7938:419::-;8104:4;8142:2;8131:9;8127:18;8119:26;;8191:9;8185:4;8181:20;8177:1;8166:9;8162:17;8155:47;8219:131;8345:4;8219:131;:::i;:::-;8211:139;;7938:419;;;:::o;8363:180::-;8411:77;8408:1;8401:88;8508:4;8505:1;8498:15;8532:4;8529:1;8522:15;8549:305;8589:3;8608:20;8626:1;8608:20;:::i;:::-;8603:25;;8642:20;8660:1;8642:20;:::i;:::-;8637:25;;8796:1;8728:66;8724:74;8721:1;8718:81;8715:107;;;8802:18;;:::i;:::-;8715:107;8846:1;8843;8839:9;8832:16;;8549:305;;;;:::o;8860:171::-;9000:23;8996:1;8988:6;8984:14;8977:47;8860:171;:::o;9037:366::-;9179:3;9200:67;9264:2;9259:3;9200:67;:::i;:::-;9193:74;;9276:93;9365:3;9276:93;:::i;:::-;9394:2;9389:3;9385:12;9378:19;;9037:366;;;:::o;9409:419::-;9575:4;9613:2;9602:9;9598:18;9590:26;;9662:9;9656:4;9652:20;9648:1;9637:9;9633:17;9626:47;9690:131;9816:4;9690:131;:::i;:::-;9682:139;;9409:419;;;:::o;9834:348::-;9874:7;9897:20;9915:1;9897:20;:::i;:::-;9892:25;;9931:20;9949:1;9931:20;:::i;:::-;9926:25;;10119:1;10051:66;10047:74;10044:1;10041:81;10036:1;10029:9;10022:17;10018:105;10015:131;;;10126:18;;:::i;:::-;10015:131;10174:1;10171;10167:9;10156:20;;9834:348;;;;:::o;10188:180::-;10236:77;10233:1;10226:88;10333:4;10330:1;10323:15;10357:4;10354:1;10347:15;10374:185;10414:1;10431:20;10449:1;10431:20;:::i;:::-;10426:25;;10465:20;10483:1;10465:20;:::i;:::-;10460:25;;10504:1;10494:35;;10509:18;;:::i;:::-;10494:35;10551:1;10548;10544:9;10539:14;;10374:185;;;;:::o;10565:179::-;10705:31;10701:1;10693:6;10689:14;10682:55;10565:179;:::o;10750:366::-;10892:3;10913:67;10977:2;10972:3;10913:67;:::i;:::-;10906:74;;10989:93;11078:3;10989:93;:::i;:::-;11107:2;11102:3;11098:12;11091:19;;10750:366;;;:::o;11122:419::-;11288:4;11326:2;11315:9;11311:18;11303:26;;11375:9;11369:4;11365:20;11361:1;11350:9;11346:17;11339:47;11403:131;11529:4;11403:131;:::i;:::-;11395:139;;11122:419;;;:::o;11547:177::-;11687:29;11683:1;11675:6;11671:14;11664:53;11547:177;:::o;11730:366::-;11872:3;11893:67;11957:2;11952:3;11893:67;:::i;:::-;11886:74;;11969:93;12058:3;11969:93;:::i;:::-;12087:2;12082:3;12078:12;12071:19;;11730:366;;;:::o;12102:419::-;12268:4;12306:2;12295:9;12291:18;12283:26;;12355:9;12349:4;12345:20;12341:1;12330:9;12326:17;12319:47;12383:131;12509:4;12383:131;:::i;:::-;12375:139;;12102:419;;;:::o;12527:191::-;12567:4;12587:20;12605:1;12587:20;:::i;:::-;12582:25;;12621:20;12639:1;12621:20;:::i;:::-;12616:25;;12660:1;12657;12654:8;12651:34;;;12665:18;;:::i;:::-;12651:34;12710:1;12707;12703:9;12695:17;;12527:191;;;;:::o;12724:228::-;12864:34;12860:1;12852:6;12848:14;12841:58;12933:11;12928:2;12920:6;12916:15;12909:36;12724:228;:::o;12958:366::-;13100:3;13121:67;13185:2;13180:3;13121:67;:::i;:::-;13114:74;;13197:93;13286:3;13197:93;:::i;:::-;13315:2;13310:3;13306:12;13299:19;;12958:366;;;:::o;13330:419::-;13496:4;13534:2;13523:9;13519:18;13511:26;;13583:9;13577:4;13573:20;13569:1;13558:9;13554:17;13547:47;13611:131;13737:4;13611:131;:::i;:::-;13603:139;;13330:419;;;:::o;13755:224::-;13895:34;13891:1;13883:6;13879:14;13872:58;13964:7;13959:2;13951:6;13947:15;13940:32;13755:224;:::o;13985:366::-;14127:3;14148:67;14212:2;14207:3;14148:67;:::i;:::-;14141:74;;14224:93;14313:3;14224:93;:::i;:::-;14342:2;14337:3;14333:12;14326:19;;13985:366;;;:::o;14357:419::-;14523:4;14561:2;14550:9;14546:18;14538:26;;14610:9;14604:4;14600:20;14596:1;14585:9;14581:17;14574:47;14638:131;14764:4;14638:131;:::i;:::-;14630:139;;14357:419;;;:::o;14782:165::-;14922:17;14918:1;14910:6;14906:14;14899:41;14782:165;:::o;14953:366::-;15095:3;15116:67;15180:2;15175:3;15116:67;:::i;:::-;15109:74;;15192:93;15281:3;15192:93;:::i;:::-;15310:2;15305:3;15301:12;15294:19;;14953:366;;;:::o;15325:419::-;15491:4;15529:2;15518:9;15514:18;15506:26;;15578:9;15572:4;15568:20;15564:1;15553:9;15549:17;15542:47;15606:131;15732:4;15606:131;:::i;:::-;15598:139;;15325:419;;;:::o;15750:225::-;15890:34;15886:1;15878:6;15874:14;15867:58;15959:8;15954:2;15946:6;15942:15;15935:33;15750:225;:::o;15981:366::-;16123:3;16144:67;16208:2;16203:3;16144:67;:::i;:::-;16137:74;;16220:93;16309:3;16220:93;:::i;:::-;16338:2;16333:3;16329:12;16322:19;;15981:366;;;:::o;16353:419::-;16519:4;16557:2;16546:9;16542:18;16534:26;;16606:9;16600:4;16596:20;16592:1;16581:9;16577:17;16570:47;16634:131;16760:4;16634:131;:::i;:::-;16626:139;;16353:419;;;:::o;16778:223::-;16918:34;16914:1;16906:6;16902:14;16895:58;16987:6;16982:2;16974:6;16970:15;16963:31;16778:223;:::o;17007:366::-;17149:3;17170:67;17234:2;17229:3;17170:67;:::i;:::-;17163:74;;17246:93;17335:3;17246:93;:::i;:::-;17364:2;17359:3;17355:12;17348:19;;17007:366;;;:::o;17379:419::-;17545:4;17583:2;17572:9;17568:18;17560:26;;17632:9;17626:4;17622:20;17618:1;17607:9;17603:17;17596:47;17660:131;17786:4;17660:131;:::i;:::-;17652:139;;17379:419;;;:::o;17804:221::-;17944:34;17940:1;17932:6;17928:14;17921:58;18013:4;18008:2;18000:6;17996:15;17989:29;17804:221;:::o;18031:366::-;18173:3;18194:67;18258:2;18253:3;18194:67;:::i;:::-;18187:74;;18270:93;18359:3;18270:93;:::i;:::-;18388:2;18383:3;18379:12;18372:19;;18031:366;;;:::o;18403:419::-;18569:4;18607:2;18596:9;18592:18;18584:26;;18656:9;18650:4;18646:20;18642:1;18631:9;18627:17;18620:47;18684:131;18810:4;18684:131;:::i;:::-;18676:139;;18403:419;;;:::o;18828:181::-;18968:33;18964:1;18956:6;18952:14;18945:57;18828:181;:::o;19015:366::-;19157:3;19178:67;19242:2;19237:3;19178:67;:::i;:::-;19171:74;;19254:93;19343:3;19254:93;:::i;:::-;19372:2;19367:3;19363:12;19356:19;;19015:366;;;:::o;19387:419::-;19553:4;19591:2;19580:9;19576:18;19568:26;;19640:9;19634:4;19630:20;19626:1;19615:9;19611:17;19604:47;19668:131;19794:4;19668:131;:::i;:::-;19660:139;;19387:419;;;:::o;19812:166::-;19952:18;19948:1;19940:6;19936:14;19929:42;19812:166;:::o;19984:366::-;20126:3;20147:67;20211:2;20206:3;20147:67;:::i;:::-;20140:74;;20223:93;20312:3;20223:93;:::i;:::-;20341:2;20336:3;20332:12;20325:19;;19984:366;;;:::o;20356:419::-;20522:4;20560:2;20549:9;20545:18;20537:26;;20609:9;20603:4;20599:20;20595:1;20584:9;20580:17;20573:47;20637:131;20763:4;20637:131;:::i;:::-;20629:139;;20356:419;;;:::o;20781:182::-;20921:34;20917:1;20909:6;20905:14;20898:58;20781:182;:::o;20969:366::-;21111:3;21132:67;21196:2;21191:3;21132:67;:::i;:::-;21125:74;;21208:93;21297:3;21208:93;:::i;:::-;21326:2;21321:3;21317:12;21310:19;;20969:366;;;:::o;21341:419::-;21507:4;21545:2;21534:9;21530:18;21522:26;;21594:9;21588:4;21584:20;21580:1;21569:9;21565:17;21558:47;21622:131;21748:4;21622:131;:::i;:::-;21614:139;;21341:419;;;:::o;21766:220::-;21906:34;21902:1;21894:6;21890:14;21883:58;21975:3;21970:2;21962:6;21958:15;21951:28;21766:220;:::o;21992:366::-;22134:3;22155:67;22219:2;22214:3;22155:67;:::i;:::-;22148:74;;22231:93;22320:3;22231:93;:::i;:::-;22349:2;22344:3;22340:12;22333:19;;21992:366;;;:::o;22364:419::-;22530:4;22568:2;22557:9;22553:18;22545:26;;22617:9;22611:4;22607:20;22603:1;22592:9;22588:17;22581:47;22645:131;22771:4;22645:131;:::i;:::-;22637:139;;22364:419;;;:::o;22789:221::-;22929:34;22925:1;22917:6;22913:14;22906:58;22998:4;22993:2;22985:6;22981:15;22974:29;22789:221;:::o;23016:366::-;23158:3;23179:67;23243:2;23238:3;23179:67;:::i;:::-;23172:74;;23255:93;23344:3;23255:93;:::i;:::-;23373:2;23368:3;23364:12;23357:19;;23016:366;;;:::o;23388:419::-;23554:4;23592:2;23581:9;23577:18;23569:26;;23641:9;23635:4;23631:20;23627:1;23616:9;23612:17;23605:47;23669:131;23795:4;23669:131;:::i;:::-;23661:139;;23388:419;;;:::o;23813:179::-;23953:31;23949:1;23941:6;23937:14;23930:55;23813:179;:::o;23998:366::-;24140:3;24161:67;24225:2;24220:3;24161:67;:::i;:::-;24154:74;;24237:93;24326:3;24237:93;:::i;:::-;24355:2;24350:3;24346:12;24339:19;;23998:366;;;:::o;24370:419::-;24536:4;24574:2;24563:9;24559:18;24551:26;;24623:9;24617:4;24613:20;24609:1;24598:9;24594:17;24587:47;24651:131;24777:4;24651:131;:::i;:::-;24643:139;;24370:419;;;:::o;24795:224::-;24935:34;24931:1;24923:6;24919:14;24912:58;25004:7;24999:2;24991:6;24987:15;24980:32;24795:224;:::o;25025:366::-;25167:3;25188:67;25252:2;25247:3;25188:67;:::i;:::-;25181:74;;25264:93;25353:3;25264:93;:::i;:::-;25382:2;25377:3;25373:12;25366:19;;25025:366;;;:::o;25397:419::-;25563:4;25601:2;25590:9;25586:18;25578:26;;25650:9;25644:4;25640:20;25636:1;25625:9;25621:17;25614:47;25678:131;25804:4;25678:131;:::i;:::-;25670:139;;25397:419;;;:::o;25822:222::-;25962:34;25958:1;25950:6;25946:14;25939:58;26031:5;26026:2;26018:6;26014:15;26007:30;25822:222;:::o;26050:366::-;26192:3;26213:67;26277:2;26272:3;26213:67;:::i;:::-;26206:74;;26289:93;26378:3;26289:93;:::i;:::-;26407:2;26402:3;26398:12;26391:19;;26050:366;;;:::o;26422:419::-;26588:4;26626:2;26615:9;26611:18;26603:26;;26675:9;26669:4;26665:20;26661:1;26650:9;26646:17;26639:47;26703:131;26829:4;26703:131;:::i;:::-;26695:139;;26422:419;;;:::o;26847:225::-;26987:34;26983:1;26975:6;26971:14;26964:58;27056:8;27051:2;27043:6;27039:15;27032:33;26847:225;:::o;27078:366::-;27220:3;27241:67;27305:2;27300:3;27241:67;:::i;:::-;27234:74;;27317:93;27406:3;27317:93;:::i;:::-;27435:2;27430:3;27426:12;27419:19;;27078:366;;;:::o;27450:419::-;27616:4;27654:2;27643:9;27639:18;27631:26;;27703:9;27697:4;27693:20;27689:1;27678:9;27674:17;27667:47;27731:131;27857:4;27731:131;:::i;:::-;27723:139;;27450:419;;;:::o;27875:170::-;28015:22;28011:1;28003:6;27999:14;27992:46;27875:170;:::o;28051:366::-;28193:3;28214:67;28278:2;28273:3;28214:67;:::i;:::-;28207:74;;28290:93;28379:3;28290:93;:::i;:::-;28408:2;28403:3;28399:12;28392:19;;28051:366;;;:::o;28423:419::-;28589:4;28627:2;28616:9;28612:18;28604:26;;28676:9;28670:4;28666:20;28662:1;28651:9;28647:17;28640:47;28704:131;28830:4;28704:131;:::i;:::-;28696:139;;28423:419;;;:::o;28848:173::-;28988:25;28984:1;28976:6;28972:14;28965:49;28848:173;:::o;29027:366::-;29169:3;29190:67;29254:2;29249:3;29190:67;:::i;:::-;29183:74;;29266:93;29355:3;29266:93;:::i;:::-;29384:2;29379:3;29375:12;29368:19;;29027:366;;;:::o;29399:419::-;29565:4;29603:2;29592:9;29588:18;29580:26;;29652:9;29646:4;29642:20;29638:1;29627:9;29623:17;29616:47;29680:131;29806:4;29680:131;:::i;:::-;29672:139;;29399:419;;;:::o;29824:166::-;29964:18;29960:1;29952:6;29948:14;29941:42;29824:166;:::o;29996:366::-;30138:3;30159:67;30223:2;30218:3;30159:67;:::i;:::-;30152:74;;30235:93;30324:3;30235:93;:::i;:::-;30353:2;30348:3;30344:12;30337:19;;29996:366;;;:::o;30368:419::-;30534:4;30572:2;30561:9;30557:18;30549:26;;30621:9;30615:4;30611:20;30607:1;30596:9;30592:17;30585:47;30649:131;30775:4;30649:131;:::i;:::-;30641:139;;30368:419;;;:::o

Swarm Source

ipfs://01a11aab3df60c72eb11db65ea175bfd42e30a4b94448a0beeaef42fc0461e7f
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.