ETH Price: $3,522.59 (+5.29%)

Token

Rewards (RWD)
 

Overview

Max Total Supply

139,953,314.752088266 RWD

Holders

1,186 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
Event Horizon: Deployer
Balance
254.92857763298 RWD

Value
$0.00
0xf3cd7261f2515c815d2bc0bc509ff38e45e05d6d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Cross-Chain Rewards Token.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RewardsToken

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at Etherscan.io on 2021-04-26
*/

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

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

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

// File: @openzeppelin/contracts/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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All three 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 returns (string memory) {
        return _name;
    }

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/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 {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol



pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

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



pragma solidity ^0.8.0;



/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    function hasRole(bytes32 role, address account) external view returns (bool);
    function getRoleAdmin(bytes32 role) external view returns (bytes32);
    function grantRole(bytes32 role, address account) external;
    function revokeRole(bytes32 role, address account) external;
    function renounceRole(bytes32 role, address account) external;
}

/**
 * @dev Contract module that allows children to implement role-based access
 * control mechanisms. This is a lightweight version that doesn't allow enumerating role
 * members except through off-chain means by accessing the contract event logs. Some
 * applications may benefit from on-chain enumerability, for those cases see
 * {AccessControlEnumerable}.
 *
 * Roles are referred to by their `bytes32` identifier. These should be exposed
 * in the external API and be unique. The best way to achieve this is by
 * using `public constant` hash digests:
 *
 * ```
 * bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
 * ```
 *
 * Roles can be used to represent a set of permissions. To restrict access to a
 * function call, use {hasRole}:
 *
 * ```
 * function foo() public {
 *     require(hasRole(MY_ROLE, msg.sender));
 *     ...
 * }
 * ```
 *
 * Roles can be granted and revoked dynamically via the {grantRole} and
 * {revokeRole} functions. Each role has an associated admin role, and only
 * accounts that have a role's admin role can call {grantRole} and {revokeRole}.
 *
 * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
 * that only accounts with this role will be able to grant or revoke other
 * roles. More complex role relationships can be created by using
 * {_setRoleAdmin}.
 *
 * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
 * grant and revoke this role. Extra precautions should be taken to secure
 * accounts that have been granted it.
 */
abstract contract AccessControl is Context, IAccessControl, ERC165 {
    struct RoleData {
        mapping (address => bool) members;
        bytes32 adminRole;
    }

    mapping (bytes32 => RoleData) private _roles;

    bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;

    /**
     * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
     *
     * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
     * {RoleAdminChanged} not being emitted signaling this.
     *
     * _Available since v3.1._
     */
    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);

    /**
     * @dev Emitted when `account` is granted `role`.
     *
     * `sender` is the account that originated the contract call, an admin role
     * bearer except when using {_setupRole}.
     */
    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev Emitted when `account` is revoked `role`.
     *
     * `sender` is the account that originated the contract call:
     *   - if using `revokeRole`, it is the admin role bearer
     *   - if using `renounceRole`, it is the role bearer (i.e. `account`)
     */
    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControl).interfaceId
            || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) public view override returns (bool) {
        return _roles[role].members[account];
    }

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) public view override returns (bytes32) {
        return _roles[role].adminRole;
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function grantRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to grant");

        _grantRole(role, account);
    }

    /**
     * @dev Revokes `role` from `account`.
     *
     * If `account` had been granted `role`, emits a {RoleRevoked} event.
     *
     * Requirements:
     *
     * - the caller must have ``role``'s admin role.
     */
    function revokeRole(bytes32 role, address account) public virtual override {
        require(hasRole(getRoleAdmin(role), _msgSender()), "AccessControl: sender must be an admin to revoke");

        _revokeRole(role, account);
    }

    /**
     * @dev Revokes `role` from the calling account.
     *
     * Roles are often managed via {grantRole} and {revokeRole}: this function's
     * purpose is to provide a mechanism for accounts to lose their privileges
     * if they are compromised (such as when a trusted device is misplaced).
     *
     * If the calling account had been granted `role`, emits a {RoleRevoked}
     * event.
     *
     * Requirements:
     *
     * - the caller must be `account`.
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        require(account == _msgSender(), "AccessControl: can only renounce roles for self");

        _revokeRole(role, account);
    }

    /**
     * @dev Grants `role` to `account`.
     *
     * If `account` had not been already granted `role`, emits a {RoleGranted}
     * event. Note that unlike {grantRole}, this function doesn't perform any
     * checks on the calling account.
     *
     * [WARNING]
     * ====
     * This function should only be called from the constructor when setting
     * up the initial roles for the system.
     *
     * Using this function in any other way is effectively circumventing the admin
     * system imposed by {AccessControl}.
     * ====
     */
    function _setupRole(bytes32 role, address account) internal virtual {
        _grantRole(role, account);
    }

    /**
     * @dev Sets `adminRole` as ``role``'s admin role.
     *
     * Emits a {RoleAdminChanged} event.
     */
    function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
        emit RoleAdminChanged(role, getRoleAdmin(role), adminRole);
        _roles[role].adminRole = adminRole;
    }

    function _grantRole(bytes32 role, address account) private {
        if (!hasRole(role, account)) {
            _roles[role].members[account] = true;
            emit RoleGranted(role, account, _msgSender());
        }
    }

    function _revokeRole(bytes32 role, address account) private {
        if (hasRole(role, account)) {
            _roles[role].members[account] = false;
            emit RoleRevoked(role, account, _msgSender());
        }
    }
}

// File: @openzeppelin/contracts/utils/structs/EnumerableSet.sol



pragma solidity ^0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;

        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping (bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) { // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            // When the value to delete is the last one, the swap operation is unnecessary. However, since this occurs
            // so rarely, we still do the swap anyway to avoid the gas cost of adding an 'if' statement.

            bytes32 lastvalue = set._values[lastIndex];

            // Move the last value to the index where the value to delete is
            set._values[toDeleteIndex] = lastvalue;
            // Update the index for the moved value
            set._indexes[lastvalue] = toDeleteIndex + 1; // All indexes are 1-based

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        require(set._values.length > index, "EnumerableSet: index out of bounds");
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }


    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

   /**
    * @dev Returns the value stored at position `index` in the set. O(1).
    *
    * Note that there are no guarantees on the ordering of values inside the
    * array, and it may change when more values are added or removed.
    *
    * Requirements:
    *
    * - `index` must be strictly less than {length}.
    */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

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



pragma solidity ^0.8.0;



/**
 * @dev External interface of AccessControlEnumerable declared to support ERC165 detection.
 */
interface IAccessControlEnumerable {
    function getRoleMember(bytes32 role, uint256 index) external view returns (address);
    function getRoleMemberCount(bytes32 role) external view returns (uint256);
}

/**
 * @dev Extension of {AccessControl} that allows enumerating the members of each role.
 */
abstract contract AccessControlEnumerable is IAccessControlEnumerable, AccessControl {
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping (bytes32 => EnumerableSet.AddressSet) private _roleMembers;

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IAccessControlEnumerable).interfaceId
            || super.supportsInterface(interfaceId);
    }

    /**
     * @dev Returns one of the accounts that have `role`. `index` must be a
     * value between 0 and {getRoleMemberCount}, non-inclusive.
     *
     * Role bearers are not sorted in any particular way, and their ordering may
     * change at any point.
     *
     * WARNING: When using {getRoleMember} and {getRoleMemberCount}, make sure
     * you perform all queries on the same block. See the following
     * https://forum.openzeppelin.com/t/iterating-over-elements-on-enumerableset-in-openzeppelin-contracts/2296[forum post]
     * for more information.
     */
    function getRoleMember(bytes32 role, uint256 index) public view override returns (address) {
        return _roleMembers[role].at(index);
    }

    /**
     * @dev Returns the number of accounts that have `role`. Can be used
     * together with {getRoleMember} to enumerate all bearers of a role.
     */
    function getRoleMemberCount(bytes32 role) public view override returns (uint256) {
        return _roleMembers[role].length();
    }

    /**
     * @dev Overload {grantRole} to track enumerable memberships
     */
    function grantRole(bytes32 role, address account) public virtual override {
        super.grantRole(role, account);
        _roleMembers[role].add(account);
    }

    /**
     * @dev Overload {revokeRole} to track enumerable memberships
     */
    function revokeRole(bytes32 role, address account) public virtual override {
        super.revokeRole(role, account);
        _roleMembers[role].remove(account);
    }

    /**
     * @dev Overload {renounceRole} to track enumerable memberships
     */
    function renounceRole(bytes32 role, address account) public virtual override {
        super.renounceRole(role, account);
        _roleMembers[role].remove(account);
    }

    /**
     * @dev Overload {_setupRole} to track enumerable memberships
     */
    function _setupRole(bytes32 role, address account) internal virtual override {
        super._setupRole(role, account);
        _roleMembers[role].add(account);
    }
}

// File: contracts/RewardsToken.sol



pragma solidity ^0.8.0;





/**
 * @dev {ERC20} token, including:
 *
 *  - ability for holders to burn (destroy) their tokens
 *  - a minter role that allows for token minting (creation)
 *
 * This contract uses {AccessControl} to lock permissioned functions using the
 * different roles - head to its documentation for details.
 *
 * The account that deploys the contract will be granted the minter
 * role, as well as the default admin role, which will let it grant the minter
 * role to other accounts.
 */
contract RewardsToken is Context, AccessControlEnumerable, ERC20Burnable {
    bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");

    /**
     * @dev Grants `DEFAULT_ADMIN_ROLE`, `MINTER_ROLE` to the
     * account that deploys the contract.
     *
     * See {ERC20-constructor}.
     */
    constructor(string memory name, string memory symbol) ERC20(name, symbol) {
        _setupRole(DEFAULT_ADMIN_ROLE, _msgSender());

        _setupRole(MINTER_ROLE, _msgSender());
    }

    /**
     * @dev Creates `amount` new tokens for `to`.
     *
     * See {ERC20-_mint}.
     *
     * Requirements:
     *
     * - the caller must have the `MINTER_ROLE`.
     */
    function mint(address to, uint256 amount) public virtual {
        require(hasRole(MINTER_ROLE, _msgSender()), "RewardsToken: must have minter role to mint");
        _mint(to, amount);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual override(ERC20) {
        super._beforeTokenTransfer(from, to, amount);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"}],"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":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","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"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINTER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getRoleMember","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleMemberCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"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"}]

60806040523480156200001157600080fd5b506040516200317838038062003178833981810160405281019062000037919062000492565b818181600590805190602001906200005192919062000370565b5080600690805190602001906200006a92919062000370565b505050620000916000801b62000085620000da60201b60201c565b620000e260201b60201c565b620000d27f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6620000c6620000da60201b60201c565b620000e260201b60201c565b505062000675565b600033905090565b620000f982826200012a60201b62000d101760201c565b6200012581600160008581526020019081526020016000206200014060201b62000d1e1790919060201c565b505050565b6200013c82826200017860201b60201c565b5050565b600062000170836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6200026960201b60201c565b905092915050565b6200018a8282620002e360201b60201c565b6200026557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200020a620000da60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006200027d83836200034d60201b60201c565b620002d8578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050620002dd565b600090505b92915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b8280546200037e906200059a565b90600052602060002090601f016020900481019282620003a25760008555620003ee565b82601f10620003bd57805160ff1916838001178555620003ee565b82800160010185558215620003ee579182015b82811115620003ed578251825591602001919060010190620003d0565b5b509050620003fd919062000401565b5090565b5b808211156200041c57600081600090555060010162000402565b5090565b60006200043762000431846200052e565b62000505565b9050828152602081018484840111156200045057600080fd5b6200045d84828562000564565b509392505050565b600082601f8301126200047757600080fd5b81516200048984826020860162000420565b91505092915050565b60008060408385031215620004a657600080fd5b600083015167ffffffffffffffff811115620004c157600080fd5b620004cf8582860162000465565b925050602083015167ffffffffffffffff811115620004ed57600080fd5b620004fb8582860162000465565b9150509250929050565b60006200051162000524565b90506200051f8282620005d0565b919050565b6000604051905090565b600067ffffffffffffffff8211156200054c576200054b62000635565b5b620005578262000664565b9050602081019050919050565b60005b838110156200058457808201518184015260208101905062000567565b8381111562000594576000848401525b50505050565b60006002820490506001821680620005b357607f821691505b60208210811415620005ca57620005c962000606565b5b50919050565b620005db8262000664565b810181811067ffffffffffffffff82111715620005fd57620005fc62000635565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b612af380620006856000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d7146103ff578063a9059cbb1461042f578063ca15c8731461045f578063d53913931461048f578063d547741f146104ad578063dd62ed3e146104c957610158565b806370a082311461031757806379cc6790146103475780639010d07c1461036357806391d148541461039357806395d89b41146103c3578063a217fddf146103e157610158565b80632f2ff15d116101155780632f2ff15d14610259578063313ce5671461027557806336568abe1461029357806339509351146102af57806340c10f19146102df57806342966c68146102fb57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b61017760048036038101906101729190611de3565b6104f9565b6040516101849190612104565b60405180910390f35b610195610573565b6040516101a2919061213a565b60405180910390f35b6101c560048036038101906101c09190611d06565b610605565b6040516101d29190612104565b60405180910390f35b6101e3610623565b6040516101f0919061235c565b60405180910390f35b610213600480360381019061020e9190611cb7565b61062d565b6040516102209190612104565b60405180910390f35b610243600480360381019061023e9190611d42565b61072e565b604051610250919061211f565b60405180910390f35b610273600480360381019061026e9190611d6b565b61074d565b005b61027d610781565b60405161028a9190612377565b60405180910390f35b6102ad60048036038101906102a89190611d6b565b61078a565b005b6102c960048036038101906102c49190611d06565b6107be565b6040516102d69190612104565b60405180910390f35b6102f960048036038101906102f49190611d06565b61086a565b005b61031560048036038101906103109190611e0c565b6108e8565b005b610331600480360381019061032c9190611c52565b6108fc565b60405161033e919061235c565b60405180910390f35b610361600480360381019061035c9190611d06565b610945565b005b61037d60048036038101906103789190611da7565b6109c9565b60405161038a91906120e9565b60405180910390f35b6103ad60048036038101906103a89190611d6b565b6109f8565b6040516103ba9190612104565b60405180910390f35b6103cb610a62565b6040516103d8919061213a565b60405180910390f35b6103e9610af4565b6040516103f6919061211f565b60405180910390f35b61041960048036038101906104149190611d06565b610afb565b6040516104269190612104565b60405180910390f35b61044960048036038101906104449190611d06565b610bef565b6040516104569190612104565b60405180910390f35b61047960048036038101906104749190611d42565b610c0d565b604051610486919061235c565b60405180910390f35b610497610c31565b6040516104a4919061211f565b60405180910390f35b6104c760048036038101906104c29190611d6b565b610c55565b005b6104e360048036038101906104de9190611c7b565b610c89565b6040516104f0919061235c565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056c575061056b82610d4e565b5b9050919050565b606060058054610582906124f6565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906124f6565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b6000610619610612610dc8565b8484610dd0565b6001905092915050565b6000600454905090565b600061063a848484610f9b565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610685610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc9061223c565b60405180910390fd5b61072285610711610dc8565b858461071d9190612404565b610dd0565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b610757828261121d565b61077c8160016000858152602001908152602001600020610d1e90919063ffffffff16565b505050565b60006012905090565b6107948282611283565b6107b9816001600085815260200190815260200160002061130690919063ffffffff16565b505050565b60006108606107cb610dc8565b8484600360006107d9610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461085b91906123ae565b610dd0565b6001905092915050565b61089b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610896610dc8565b6109f8565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d19061225c565b60405180910390fd5b6108e48282611336565b5050565b6108f96108f3610dc8565b8261148b565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061095883610953610dc8565b610c89565b90508181101561099d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109949061227c565b60405180910390fd5b6109ba836109a9610dc8565b84846109b59190612404565b610dd0565b6109c4838361148b565b505050565b60006109f0826001600086815260200190815260200160002061166190919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610a71906124f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9d906124f6565b8015610aea5780601f10610abf57610100808354040283529160200191610aea565b820191906000526020600020905b815481529060010190602001808311610acd57829003601f168201915b5050505050905090565b6000801b81565b60008060036000610b0a610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe906122fc565b60405180910390fd5b610be4610bd2610dc8565b858584610bdf9190612404565b610dd0565b600191505092915050565b6000610c03610bfc610dc8565b8484610f9b565b6001905092915050565b6000610c2a6001600084815260200190815260200160002061167b565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c5f8282611690565b610c84816001600085815260200190815260200160002061130690919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d1a82826116f6565b5050565b6000610d46836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6117d6565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dc15750610dc082611846565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906122dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea7906121dc565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f8e919061235c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906122bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110729061217c565b60405180910390fd5b6110868383836118b0565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906121fc565b60405180910390fd5b81816111199190612404565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111ab91906123ae565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120f919061235c565b60405180910390a350505050565b6112366112298361072e565b611231610dc8565b6109f8565b611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c9061219c565b60405180910390fd5b61127f82826116f6565b5050565b61128b610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef9061231c565b60405180910390fd5b61130282826118c0565b5050565b600061132e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6119a1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d9061233c565b60405180910390fd5b6113b2600083836118b0565b80600460008282546113c491906123ae565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141a91906123ae565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161147f919061235c565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29061229c565b60405180910390fd5b611507826000836118b0565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906121bc565b60405180910390fd5b818161159a9190612404565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546115ef9190612404565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611654919061235c565b60405180910390a3505050565b60006116708360000183611b2b565b60001c905092915050565b600061168982600001611bc5565b9050919050565b6116a961169c8361072e565b6116a4610dc8565b6109f8565b6116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df9061221c565b60405180910390fd5b6116f282826118c0565b5050565b61170082826109f8565b6117d257600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611777610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006117e28383611bd6565b61183b578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611840565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6118bb838383611bf9565b505050565b6118ca82826109f8565b1561199d57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611942610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611b1f5760006001826119d39190612404565b90506000600186600001805490506119eb9190612404565b90506000866000018281548110611a2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611a75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550600183611a9091906123ae565b8760010160008381526020019081526020016000208190555086600001805480611ae3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611b25565b60009150505b92915050565b600081836000018054905011611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d9061215c565b60405180910390fd5b826000018281548110611bb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b505050565b600081359050611c0d81612a61565b92915050565b600081359050611c2281612a78565b92915050565b600081359050611c3781612a8f565b92915050565b600081359050611c4c81612aa6565b92915050565b600060208284031215611c6457600080fd5b6000611c7284828501611bfe565b91505092915050565b60008060408385031215611c8e57600080fd5b6000611c9c85828601611bfe565b9250506020611cad85828601611bfe565b9150509250929050565b600080600060608486031215611ccc57600080fd5b6000611cda86828701611bfe565b9350506020611ceb86828701611bfe565b9250506040611cfc86828701611c3d565b9150509250925092565b60008060408385031215611d1957600080fd5b6000611d2785828601611bfe565b9250506020611d3885828601611c3d565b9150509250929050565b600060208284031215611d5457600080fd5b6000611d6284828501611c13565b91505092915050565b60008060408385031215611d7e57600080fd5b6000611d8c85828601611c13565b9250506020611d9d85828601611bfe565b9150509250929050565b60008060408385031215611dba57600080fd5b6000611dc885828601611c13565b9250506020611dd985828601611c3d565b9150509250929050565b600060208284031215611df557600080fd5b6000611e0384828501611c28565b91505092915050565b600060208284031215611e1e57600080fd5b6000611e2c84828501611c3d565b91505092915050565b611e3e81612438565b82525050565b611e4d8161244a565b82525050565b611e5c81612456565b82525050565b6000611e6d82612392565b611e77818561239d565b9350611e878185602086016124c3565b611e9081612586565b840191505092915050565b6000611ea860228361239d565b9150611eb382612597565b604082019050919050565b6000611ecb60238361239d565b9150611ed6826125e6565b604082019050919050565b6000611eee602f8361239d565b9150611ef982612635565b604082019050919050565b6000611f1160228361239d565b9150611f1c82612684565b604082019050919050565b6000611f3460228361239d565b9150611f3f826126d3565b604082019050919050565b6000611f5760268361239d565b9150611f6282612722565b604082019050919050565b6000611f7a60308361239d565b9150611f8582612771565b604082019050919050565b6000611f9d60288361239d565b9150611fa8826127c0565b604082019050919050565b6000611fc0602b8361239d565b9150611fcb8261280f565b604082019050919050565b6000611fe360248361239d565b9150611fee8261285e565b604082019050919050565b600061200660218361239d565b9150612011826128ad565b604082019050919050565b600061202960258361239d565b9150612034826128fc565b604082019050919050565b600061204c60248361239d565b91506120578261294b565b604082019050919050565b600061206f60258361239d565b915061207a8261299a565b604082019050919050565b6000612092602f8361239d565b915061209d826129e9565b604082019050919050565b60006120b5601f8361239d565b91506120c082612a38565b602082019050919050565b6120d4816124ac565b82525050565b6120e3816124b6565b82525050565b60006020820190506120fe6000830184611e35565b92915050565b60006020820190506121196000830184611e44565b92915050565b60006020820190506121346000830184611e53565b92915050565b600060208201905081810360008301526121548184611e62565b905092915050565b6000602082019050818103600083015261217581611e9b565b9050919050565b6000602082019050818103600083015261219581611ebe565b9050919050565b600060208201905081810360008301526121b581611ee1565b9050919050565b600060208201905081810360008301526121d581611f04565b9050919050565b600060208201905081810360008301526121f581611f27565b9050919050565b6000602082019050818103600083015261221581611f4a565b9050919050565b6000602082019050818103600083015261223581611f6d565b9050919050565b6000602082019050818103600083015261225581611f90565b9050919050565b6000602082019050818103600083015261227581611fb3565b9050919050565b6000602082019050818103600083015261229581611fd6565b9050919050565b600060208201905081810360008301526122b581611ff9565b9050919050565b600060208201905081810360008301526122d58161201c565b9050919050565b600060208201905081810360008301526122f58161203f565b9050919050565b6000602082019050818103600083015261231581612062565b9050919050565b6000602082019050818103600083015261233581612085565b9050919050565b60006020820190508181036000830152612355816120a8565b9050919050565b600060208201905061237160008301846120cb565b92915050565b600060208201905061238c60008301846120da565b92915050565b600081519050919050565b600082825260208201905092915050565b60006123b9826124ac565b91506123c4836124ac565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123f9576123f8612528565b5b828201905092915050565b600061240f826124ac565b915061241a836124ac565b92508282101561242d5761242c612528565b5b828203905092915050565b60006124438261248c565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156124e15780820151818401526020810190506124c6565b838111156124f0576000848401525b50505050565b6000600282049050600182168061250e57607f821691505b6020821081141561252257612521612557565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f206772616e740000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f52657761726473546f6b656e3a206d7573742068617665206d696e746572207260008201527f6f6c6520746f206d696e74000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612a6a81612438565b8114612a7557600080fd5b50565b612a8181612456565b8114612a8c57600080fd5b50565b612a9881612460565b8114612aa357600080fd5b50565b612aaf816124ac565b8114612aba57600080fd5b5056fea26469706673582212204f9fb522dfd333172367dff0bc23f03bfccf6445e72e6061a388f661ff0c1fbb64736f6c63430008010033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000007526577617264730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035257440000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c806370a08231116100c3578063a457c2d71161007c578063a457c2d7146103ff578063a9059cbb1461042f578063ca15c8731461045f578063d53913931461048f578063d547741f146104ad578063dd62ed3e146104c957610158565b806370a082311461031757806379cc6790146103475780639010d07c1461036357806391d148541461039357806395d89b41146103c3578063a217fddf146103e157610158565b80632f2ff15d116101155780632f2ff15d14610259578063313ce5671461027557806336568abe1461029357806339509351146102af57806340c10f19146102df57806342966c68146102fb57610158565b806301ffc9a71461015d57806306fdde031461018d578063095ea7b3146101ab57806318160ddd146101db57806323b872dd146101f9578063248a9ca314610229575b600080fd5b61017760048036038101906101729190611de3565b6104f9565b6040516101849190612104565b60405180910390f35b610195610573565b6040516101a2919061213a565b60405180910390f35b6101c560048036038101906101c09190611d06565b610605565b6040516101d29190612104565b60405180910390f35b6101e3610623565b6040516101f0919061235c565b60405180910390f35b610213600480360381019061020e9190611cb7565b61062d565b6040516102209190612104565b60405180910390f35b610243600480360381019061023e9190611d42565b61072e565b604051610250919061211f565b60405180910390f35b610273600480360381019061026e9190611d6b565b61074d565b005b61027d610781565b60405161028a9190612377565b60405180910390f35b6102ad60048036038101906102a89190611d6b565b61078a565b005b6102c960048036038101906102c49190611d06565b6107be565b6040516102d69190612104565b60405180910390f35b6102f960048036038101906102f49190611d06565b61086a565b005b61031560048036038101906103109190611e0c565b6108e8565b005b610331600480360381019061032c9190611c52565b6108fc565b60405161033e919061235c565b60405180910390f35b610361600480360381019061035c9190611d06565b610945565b005b61037d60048036038101906103789190611da7565b6109c9565b60405161038a91906120e9565b60405180910390f35b6103ad60048036038101906103a89190611d6b565b6109f8565b6040516103ba9190612104565b60405180910390f35b6103cb610a62565b6040516103d8919061213a565b60405180910390f35b6103e9610af4565b6040516103f6919061211f565b60405180910390f35b61041960048036038101906104149190611d06565b610afb565b6040516104269190612104565b60405180910390f35b61044960048036038101906104449190611d06565b610bef565b6040516104569190612104565b60405180910390f35b61047960048036038101906104749190611d42565b610c0d565b604051610486919061235c565b60405180910390f35b610497610c31565b6040516104a4919061211f565b60405180910390f35b6104c760048036038101906104c29190611d6b565b610c55565b005b6104e360048036038101906104de9190611c7b565b610c89565b6040516104f0919061235c565b60405180910390f35b60007f5a05180f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061056c575061056b82610d4e565b5b9050919050565b606060058054610582906124f6565b80601f01602080910402602001604051908101604052809291908181526020018280546105ae906124f6565b80156105fb5780601f106105d0576101008083540402835291602001916105fb565b820191906000526020600020905b8154815290600101906020018083116105de57829003601f168201915b5050505050905090565b6000610619610612610dc8565b8484610dd0565b6001905092915050565b6000600454905090565b600061063a848484610f9b565b6000600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610685610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc9061223c565b60405180910390fd5b61072285610711610dc8565b858461071d9190612404565b610dd0565b60019150509392505050565b6000806000838152602001908152602001600020600101549050919050565b610757828261121d565b61077c8160016000858152602001908152602001600020610d1e90919063ffffffff16565b505050565b60006012905090565b6107948282611283565b6107b9816001600085815260200190815260200160002061130690919063ffffffff16565b505050565b60006108606107cb610dc8565b8484600360006107d9610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461085b91906123ae565b610dd0565b6001905092915050565b61089b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6610896610dc8565b6109f8565b6108da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108d19061225c565b60405180910390fd5b6108e48282611336565b5050565b6108f96108f3610dc8565b8261148b565b50565b6000600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600061095883610953610dc8565b610c89565b90508181101561099d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109949061227c565b60405180910390fd5b6109ba836109a9610dc8565b84846109b59190612404565b610dd0565b6109c4838361148b565b505050565b60006109f0826001600086815260200190815260200160002061166190919063ffffffff16565b905092915050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606060068054610a71906124f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9d906124f6565b8015610aea5780601f10610abf57610100808354040283529160200191610aea565b820191906000526020600020905b815481529060010190602001808311610acd57829003601f168201915b5050505050905090565b6000801b81565b60008060036000610b0a610dc8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bbe906122fc565b60405180910390fd5b610be4610bd2610dc8565b858584610bdf9190612404565b610dd0565b600191505092915050565b6000610c03610bfc610dc8565b8484610f9b565b6001905092915050565b6000610c2a6001600084815260200190815260200160002061167b565b9050919050565b7f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b610c5f8282611690565b610c84816001600085815260200190815260200160002061130690919063ffffffff16565b505050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610d1a82826116f6565b5050565b6000610d46836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6117d6565b905092915050565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610dc15750610dc082611846565b5b9050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e37906122dc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea7906121dc565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f8e919061235c565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561100b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611002906122bc565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561107b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110729061217c565b60405180910390fd5b6110868383836118b0565b6000600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561110d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611104906121fc565b60405180910390fd5b81816111199190612404565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546111ab91906123ae565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161120f919061235c565b60405180910390a350505050565b6112366112298361072e565b611231610dc8565b6109f8565b611275576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126c9061219c565b60405180910390fd5b61127f82826116f6565b5050565b61128b610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146112f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ef9061231c565b60405180910390fd5b61130282826118c0565b5050565b600061132e836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6119a1565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139d9061233c565b60405180910390fd5b6113b2600083836118b0565b80600460008282546113c491906123ae565b9250508190555080600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461141a91906123ae565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161147f919061235c565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29061229c565b60405180910390fd5b611507826000836118b0565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906121bc565b60405180910390fd5b818161159a9190612404565b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008282546115ef9190612404565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611654919061235c565b60405180910390a3505050565b60006116708360000183611b2b565b60001c905092915050565b600061168982600001611bc5565b9050919050565b6116a961169c8361072e565b6116a4610dc8565b6109f8565b6116e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116df9061221c565b60405180910390fd5b6116f282826118c0565b5050565b61170082826109f8565b6117d257600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611777610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b60006117e28383611bd6565b61183b578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050611840565b600090505b92915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6118bb838383611bf9565b505050565b6118ca82826109f8565b1561199d57600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611942610dc8565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008083600101600084815260200190815260200160002054905060008114611b1f5760006001826119d39190612404565b90506000600186600001805490506119eb9190612404565b90506000866000018281548110611a2b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080876000018481548110611a75577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550600183611a9091906123ae565b8760010160008381526020019081526020016000208190555086600001805480611ae3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050611b25565b60009150505b92915050565b600081836000018054905011611b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d9061215c565b60405180910390fd5b826000018281548110611bb2577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905092915050565b600081600001805490509050919050565b600080836001016000848152602001908152602001600020541415905092915050565b505050565b600081359050611c0d81612a61565b92915050565b600081359050611c2281612a78565b92915050565b600081359050611c3781612a8f565b92915050565b600081359050611c4c81612aa6565b92915050565b600060208284031215611c6457600080fd5b6000611c7284828501611bfe565b91505092915050565b60008060408385031215611c8e57600080fd5b6000611c9c85828601611bfe565b9250506020611cad85828601611bfe565b9150509250929050565b600080600060608486031215611ccc57600080fd5b6000611cda86828701611bfe565b9350506020611ceb86828701611bfe565b9250506040611cfc86828701611c3d565b9150509250925092565b60008060408385031215611d1957600080fd5b6000611d2785828601611bfe565b9250506020611d3885828601611c3d565b9150509250929050565b600060208284031215611d5457600080fd5b6000611d6284828501611c13565b91505092915050565b60008060408385031215611d7e57600080fd5b6000611d8c85828601611c13565b9250506020611d9d85828601611bfe565b9150509250929050565b60008060408385031215611dba57600080fd5b6000611dc885828601611c13565b9250506020611dd985828601611c3d565b9150509250929050565b600060208284031215611df557600080fd5b6000611e0384828501611c28565b91505092915050565b600060208284031215611e1e57600080fd5b6000611e2c84828501611c3d565b91505092915050565b611e3e81612438565b82525050565b611e4d8161244a565b82525050565b611e5c81612456565b82525050565b6000611e6d82612392565b611e77818561239d565b9350611e878185602086016124c3565b611e9081612586565b840191505092915050565b6000611ea860228361239d565b9150611eb382612597565b604082019050919050565b6000611ecb60238361239d565b9150611ed6826125e6565b604082019050919050565b6000611eee602f8361239d565b9150611ef982612635565b604082019050919050565b6000611f1160228361239d565b9150611f1c82612684565b604082019050919050565b6000611f3460228361239d565b9150611f3f826126d3565b604082019050919050565b6000611f5760268361239d565b9150611f6282612722565b604082019050919050565b6000611f7a60308361239d565b9150611f8582612771565b604082019050919050565b6000611f9d60288361239d565b9150611fa8826127c0565b604082019050919050565b6000611fc0602b8361239d565b9150611fcb8261280f565b604082019050919050565b6000611fe360248361239d565b9150611fee8261285e565b604082019050919050565b600061200660218361239d565b9150612011826128ad565b604082019050919050565b600061202960258361239d565b9150612034826128fc565b604082019050919050565b600061204c60248361239d565b91506120578261294b565b604082019050919050565b600061206f60258361239d565b915061207a8261299a565b604082019050919050565b6000612092602f8361239d565b915061209d826129e9565b604082019050919050565b60006120b5601f8361239d565b91506120c082612a38565b602082019050919050565b6120d4816124ac565b82525050565b6120e3816124b6565b82525050565b60006020820190506120fe6000830184611e35565b92915050565b60006020820190506121196000830184611e44565b92915050565b60006020820190506121346000830184611e53565b92915050565b600060208201905081810360008301526121548184611e62565b905092915050565b6000602082019050818103600083015261217581611e9b565b9050919050565b6000602082019050818103600083015261219581611ebe565b9050919050565b600060208201905081810360008301526121b581611ee1565b9050919050565b600060208201905081810360008301526121d581611f04565b9050919050565b600060208201905081810360008301526121f581611f27565b9050919050565b6000602082019050818103600083015261221581611f4a565b9050919050565b6000602082019050818103600083015261223581611f6d565b9050919050565b6000602082019050818103600083015261225581611f90565b9050919050565b6000602082019050818103600083015261227581611fb3565b9050919050565b6000602082019050818103600083015261229581611fd6565b9050919050565b600060208201905081810360008301526122b581611ff9565b9050919050565b600060208201905081810360008301526122d58161201c565b9050919050565b600060208201905081810360008301526122f58161203f565b9050919050565b6000602082019050818103600083015261231581612062565b9050919050565b6000602082019050818103600083015261233581612085565b9050919050565b60006020820190508181036000830152612355816120a8565b9050919050565b600060208201905061237160008301846120cb565b92915050565b600060208201905061238c60008301846120da565b92915050565b600081519050919050565b600082825260208201905092915050565b60006123b9826124ac565b91506123c4836124ac565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156123f9576123f8612528565b5b828201905092915050565b600061240f826124ac565b915061241a836124ac565b92508282101561242d5761242c612528565b5b828203905092915050565b60006124438261248c565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156124e15780820151818401526020810190506124c6565b838111156124f0576000848401525b50505050565b6000600282049050600182168061250e57607f821691505b6020821081141561252257612521612557565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f206772616e740000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2073656e646572206d75737420626520616e60008201527f2061646d696e20746f207265766f6b6500000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f52657761726473546f6b656e3a206d7573742068617665206d696e746572207260008201527f6f6c6520746f206d696e74000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612a6a81612438565b8114612a7557600080fd5b50565b612a8181612456565b8114612a8c57600080fd5b50565b612a9881612460565b8114612aa357600080fd5b50565b612aaf816124ac565b8114612aba57600080fd5b5056fea26469706673582212204f9fb522dfd333172367dff0bc23f03bfccf6445e72e6061a388f661ff0c1fbb64736f6c63430008010033

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

000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000007526577617264730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000035257440000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Rewards
Arg [1] : symbol (string): RWD

-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [3] : 5265776172647300000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 5257440000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38664:1076:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35754:227;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5855:91;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7995:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6948:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8646:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21904:123;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37125:165;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6799:84;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37648:174;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9477:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39367:194;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15090:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7119:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15500:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36580:145;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21576:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6065:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20032:49;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10195:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7459:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36899:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38744:62;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37383:170;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7697:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35754:227;35839:4;35878:42;35863:57;;;:11;:57;;;;:110;;;;35937:36;35961:11;35937:23;:36::i;:::-;35863:110;35856:117;;35754:227;;;:::o;5855:91::-;5900:13;5933:5;5926:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5855:91;:::o;7995:169::-;8078:4;8095:39;8104:12;:10;:12::i;:::-;8118:7;8127:6;8095:8;:39::i;:::-;8152:4;8145:11;;7995:169;;;;:::o;6948:108::-;7009:7;7036:12;;7029:19;;6948:108;:::o;8646:422::-;8752:4;8769:36;8779:6;8787:9;8798:6;8769:9;:36::i;:::-;8818:24;8845:11;:19;8857:6;8845:19;;;;;;;;;;;;;;;:33;8865:12;:10;:12::i;:::-;8845:33;;;;;;;;;;;;;;;;8818:60;;8917:6;8897:16;:26;;8889:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;8979:57;8988:6;8996:12;:10;:12::i;:::-;9029:6;9010:16;:25;;;;:::i;:::-;8979:8;:57::i;:::-;9056:4;9049:11;;;8646:422;;;;;:::o;21904:123::-;21970:7;21997:6;:12;22004:4;21997:12;;;;;;;;;;;:22;;;21990:29;;21904:123;;;:::o;37125:165::-;37210:30;37226:4;37232:7;37210:15;:30::i;:::-;37251:31;37274:7;37251:12;:18;37264:4;37251:18;;;;;;;;;;;:22;;:31;;;;:::i;:::-;;37125:165;;:::o;6799:84::-;6848:5;6873:2;6866:9;;6799:84;:::o;37648:174::-;37736:33;37755:4;37761:7;37736:18;:33::i;:::-;37780:34;37806:7;37780:12;:18;37793:4;37780:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;37648:174;;:::o;9477:215::-;9565:4;9582:80;9591:12;:10;:12::i;:::-;9605:7;9651:10;9614:11;:25;9626:12;:10;:12::i;:::-;9614:25;;;;;;;;;;;;;;;:34;9640:7;9614:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;9582:8;:80::i;:::-;9680:4;9673:11;;9477:215;;;;:::o;39367:194::-;39443:34;38782:24;39464:12;:10;:12::i;:::-;39443:7;:34::i;:::-;39435:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;39536:17;39542:2;39546:6;39536:5;:17::i;:::-;39367:194;;:::o;15090:91::-;15146:27;15152:12;:10;:12::i;:::-;15166:6;15146:5;:27::i;:::-;15090:91;:::o;7119:127::-;7193:7;7220:9;:18;7230:7;7220:18;;;;;;;;;;;;;;;;7213:25;;7119:127;;;:::o;15500:332::-;15577:24;15604:32;15614:7;15623:12;:10;:12::i;:::-;15604:9;:32::i;:::-;15577:59;;15675:6;15655:16;:26;;15647:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;15733:58;15742:7;15751:12;:10;:12::i;:::-;15784:6;15765:16;:25;;;;:::i;:::-;15733:8;:58::i;:::-;15802:22;15808:7;15817:6;15802:5;:22::i;:::-;15500:332;;;:::o;36580:145::-;36662:7;36689:28;36711:5;36689:12;:18;36702:4;36689:18;;;;;;;;;;;:21;;:28;;;;:::i;:::-;36682:35;;36580:145;;;;:::o;21576:139::-;21654:4;21678:6;:12;21685:4;21678:12;;;;;;;;;;;:20;;:29;21699:7;21678:29;;;;;;;;;;;;;;;;;;;;;;;;;21671:36;;21576:139;;;;:::o;6065:95::-;6112:13;6145:7;6138:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6065:95;:::o;20032:49::-;20077:4;20032:49;;;:::o;10195:377::-;10288:4;10305:24;10332:11;:25;10344:12;:10;:12::i;:::-;10332:25;;;;;;;;;;;;;;;:34;10358:7;10332:34;;;;;;;;;;;;;;;;10305:61;;10405:15;10385:16;:35;;10377:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10473:67;10482:12;:10;:12::i;:::-;10496:7;10524:15;10505:16;:34;;;;:::i;:::-;10473:8;:67::i;:::-;10560:4;10553:11;;;10195:377;;;;:::o;7459:175::-;7545:4;7562:42;7572:12;:10;:12::i;:::-;7586:9;7597:6;7562:9;:42::i;:::-;7622:4;7615:11;;7459:175;;;;:::o;36899:134::-;36971:7;36998:27;:12;:18;37011:4;36998:18;;;;;;;;;;;:25;:27::i;:::-;36991:34;;36899:134;;;:::o;38744:62::-;38782:24;38744:62;:::o;37383:170::-;37469:31;37486:4;37492:7;37469:16;:31::i;:::-;37511:34;37537:7;37511:12;:18;37524:4;37511:18;;;;;;;;;;;:25;;:34;;;;:::i;:::-;;37383:170;;:::o;7697:151::-;7786:7;7813:11;:18;7825:5;7813:18;;;;;;;;;;;;;;;:27;7832:7;7813:27;;;;;;;;;;;;;;;;7806:34;;7697:151;;;;:::o;24309:112::-;24388:25;24399:4;24405:7;24388:10;:25::i;:::-;24309:112;;:::o;31888:152::-;31958:4;31982:50;31987:3;:10;;32023:5;32007:23;;31999:32;;31982:4;:50::i;:::-;31975:57;;31888:152;;;;:::o;21267:217::-;21352:4;21391:32;21376:47;;;:11;:47;;;;:100;;;;21440:36;21464:11;21440:23;:36::i;:::-;21376:100;21369:107;;21267:217;;;:::o;3458:98::-;3511:7;3538:10;3531:17;;3458:98;:::o;13551:346::-;13670:1;13653:19;;:5;:19;;;;13645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13751:1;13732:21;;:7;:21;;;;13724:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13835:6;13805:11;:18;13817:5;13805:18;;;;;;;;;;;;;;;:27;13824:7;13805:27;;;;;;;;;;;;;;;:36;;;;13873:7;13857:32;;13866:5;13857:32;;;13882:6;13857:32;;;;;;:::i;:::-;;;;;;;;13551:346;;;:::o;11062:604::-;11186:1;11168:20;;:6;:20;;;;11160:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11270:1;11249:23;;:9;:23;;;;11241:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11325:47;11346:6;11354:9;11365:6;11325:20;:47::i;:::-;11385:21;11409:9;:17;11419:6;11409:17;;;;;;;;;;;;;;;;11385:41;;11462:6;11445:13;:23;;11437:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11558:6;11542:13;:22;;;;:::i;:::-;11522:9;:17;11532:6;11522:17;;;;;;;;;;;;;;;:42;;;;11599:6;11575:9;:20;11585:9;11575:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;11640:9;11623:35;;11632:6;11623:35;;;11651:6;11623:35;;;;;;:::i;:::-;;;;;;;;11062:604;;;;:::o;22289:232::-;22382:41;22390:18;22403:4;22390:12;:18::i;:::-;22410:12;:10;:12::i;:::-;22382:7;:41::i;:::-;22374:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;22488:25;22499:4;22505:7;22488:10;:25::i;:::-;22289:232;;:::o;23508:218::-;23615:12;:10;:12::i;:::-;23604:23;;:7;:23;;;23596:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;23692:26;23704:4;23710:7;23692:11;:26::i;:::-;23508:218;;:::o;32216:158::-;32289:4;32313:53;32321:3;:10;;32357:5;32341:23;;32333:32;;32313:7;:53::i;:::-;32306:60;;32216:158;;;;:::o;11948:338::-;12051:1;12032:21;;:7;:21;;;;12024:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12102:49;12131:1;12135:7;12144:6;12102:20;:49::i;:::-;12180:6;12164:12;;:22;;;;;;;:::i;:::-;;;;;;;;12219:6;12197:9;:18;12207:7;12197:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12262:7;12241:37;;12258:1;12241:37;;;12271:6;12241:37;;;;;;:::i;:::-;;;;;;;;11948:338;;:::o;12619:494::-;12722:1;12703:21;;:7;:21;;;;12695:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;12775:49;12796:7;12813:1;12817:6;12775:20;:49::i;:::-;12837:22;12862:9;:18;12872:7;12862:18;;;;;;;;;;;;;;;;12837:43;;12917:6;12899:14;:24;;12891:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13011:6;12994:14;:23;;;;:::i;:::-;12973:9;:18;12983:7;12973:18;;;;;;;;;;;;;;;:44;;;;13044:6;13028:12;;:22;;;;;;;:::i;:::-;;;;;;;;13094:1;13068:37;;13077:7;13068:37;;;13098:6;13068:37;;;;;;:::i;:::-;;;;;;;;12619:494;;;:::o;33174:158::-;33248:7;33299:22;33303:3;:10;;33315:5;33299:3;:22::i;:::-;33291:31;;33268:56;;33174:158;;;;:::o;32713:117::-;32776:7;32803:19;32811:3;:10;;32803:7;:19::i;:::-;32796:26;;32713:117;;;:::o;22766:235::-;22860:41;22868:18;22881:4;22868:12;:18::i;:::-;22888:12;:10;:12::i;:::-;22860:7;:41::i;:::-;22852:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;22967:26;22979:4;22985:7;22967:11;:26::i;:::-;22766:235;;:::o;24756:229::-;24831:22;24839:4;24845:7;24831;:22::i;:::-;24826:152;;24902:4;24870:6;:12;24877:4;24870:12;;;;;;;;;;;:20;;:29;24891:7;24870:29;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;24953:12;:10;:12::i;:::-;24926:40;;24944:7;24926:40;;24938:4;24926:40;;;;;;;;;;24826:152;24756:229;;:::o;26952:414::-;27015:4;27037:21;27047:3;27052:5;27037:9;:21::i;:::-;27032:327;;27075:3;:11;;27092:5;27075:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27258:3;:11;;:18;;;;27236:3;:12;;:19;27249:5;27236:19;;;;;;;;;;;:40;;;;27298:4;27291:11;;;;27032:327;27342:5;27335:12;;26952:414;;;;;:::o;17486:157::-;17571:4;17610:25;17595:40;;;:11;:40;;;;17588:47;;17486:157;;;:::o;39569:168::-;39685:44;39712:4;39718:2;39722:6;39685:26;:44::i;:::-;39569:168;;;:::o;24993:230::-;25068:22;25076:4;25082:7;25068;:22::i;:::-;25064:152;;;25139:5;25107:6;:12;25114:4;25107:12;;;;;;;;;;;:20;;:29;25128:7;25107:29;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;25191:12;:10;:12::i;:::-;25164:40;;25182:7;25164:40;;25176:4;25164:40;;;;;;;;;;25064:152;24993:230;;:::o;27542:1544::-;27608:4;27726:18;27747:3;:12;;:19;27760:5;27747:19;;;;;;;;;;;;27726:40;;27797:1;27783:10;:15;27779:1300;;28145:21;28182:1;28169:10;:14;;;;:::i;:::-;28145:38;;28198:17;28239:1;28218:3;:11;;:18;;;;:22;;;;:::i;:::-;28198:42;;28485:17;28505:3;:11;;28517:9;28505:22;;;;;;;;;;;;;;;;;;;;;;;;28485:42;;28651:9;28622:3;:11;;28634:13;28622:26;;;;;;;;;;;;;;;;;;;;;;;:38;;;;28770:1;28754:13;:17;;;;:::i;:::-;28728:3;:12;;:23;28741:9;28728:23;;;;;;;;;;;:43;;;;28880:3;:11;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28975:3;:12;;:19;28988:5;28975:19;;;;;;;;;;;28968:26;;;29018:4;29011:11;;;;;;;;27779:1300;29062:5;29055:12;;;27542:1544;;;;;:::o;29840:204::-;29907:7;29956:5;29935:3;:11;;:18;;;;:26;29927:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30018:3;:11;;30030:5;30018:18;;;;;;;;;;;;;;;;;;;;;;;;30011:25;;29840:204;;;;:::o;29387:109::-;29443:7;29470:3;:11;;:18;;;;29463:25;;29387:109;;;:::o;29172:129::-;29245:4;29292:1;29269:3;:12;;:19;29282:5;29269:19;;;;;;;;;;;;:24;;29262:31;;29172:129;;;;:::o;14500:92::-;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:139::-;;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;204:87;;;;:::o;297:137::-;;380:6;367:20;358:29;;396:32;422:5;396:32;:::i;:::-;348:86;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:262::-;;693:2;681:9;672:7;668:23;664:32;661:2;;;709:1;706;699:12;661:2;752:1;777:53;822:7;813:6;802:9;798:22;777:53;:::i;:::-;767:63;;723:117;651:196;;;;:::o;853:407::-;;;978:2;966:9;957:7;953:23;949:32;946:2;;;994:1;991;984:12;946:2;1037:1;1062:53;1107:7;1098:6;1087:9;1083:22;1062:53;:::i;:::-;1052:63;;1008:117;1164:2;1190:53;1235:7;1226:6;1215:9;1211:22;1190:53;:::i;:::-;1180:63;;1135:118;936:324;;;;;:::o;1266:552::-;;;;1408:2;1396:9;1387:7;1383:23;1379:32;1376:2;;;1424:1;1421;1414:12;1376:2;1467:1;1492:53;1537:7;1528:6;1517:9;1513:22;1492:53;:::i;:::-;1482:63;;1438:117;1594:2;1620:53;1665:7;1656:6;1645:9;1641:22;1620:53;:::i;:::-;1610:63;;1565:118;1722:2;1748:53;1793:7;1784:6;1773:9;1769:22;1748:53;:::i;:::-;1738:63;;1693:118;1366:452;;;;;:::o;1824:407::-;;;1949:2;1937:9;1928:7;1924:23;1920:32;1917:2;;;1965:1;1962;1955:12;1917:2;2008:1;2033:53;2078:7;2069:6;2058:9;2054:22;2033:53;:::i;:::-;2023:63;;1979:117;2135:2;2161:53;2206:7;2197:6;2186:9;2182:22;2161:53;:::i;:::-;2151:63;;2106:118;1907:324;;;;;:::o;2237:262::-;;2345:2;2333:9;2324:7;2320:23;2316:32;2313:2;;;2361:1;2358;2351:12;2313:2;2404:1;2429:53;2474:7;2465:6;2454:9;2450:22;2429:53;:::i;:::-;2419:63;;2375:117;2303:196;;;;:::o;2505:407::-;;;2630:2;2618:9;2609:7;2605:23;2601:32;2598:2;;;2646:1;2643;2636:12;2598:2;2689:1;2714:53;2759:7;2750:6;2739:9;2735:22;2714:53;:::i;:::-;2704:63;;2660:117;2816:2;2842:53;2887:7;2878:6;2867:9;2863:22;2842:53;:::i;:::-;2832:63;;2787:118;2588:324;;;;;:::o;2918:407::-;;;3043:2;3031:9;3022:7;3018:23;3014:32;3011:2;;;3059:1;3056;3049:12;3011:2;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;3229:2;3255:53;3300:7;3291:6;3280:9;3276:22;3255:53;:::i;:::-;3245:63;;3200:118;3001:324;;;;;:::o;3331:260::-;;3438:2;3426:9;3417:7;3413:23;3409:32;3406:2;;;3454:1;3451;3444:12;3406:2;3497:1;3522:52;3566:7;3557:6;3546:9;3542:22;3522:52;:::i;:::-;3512:62;;3468:116;3396:195;;;;:::o;3597:262::-;;3705:2;3693:9;3684:7;3680:23;3676:32;3673:2;;;3721:1;3718;3711:12;3673:2;3764:1;3789:53;3834:7;3825:6;3814:9;3810:22;3789:53;:::i;:::-;3779:63;;3735:117;3663:196;;;;:::o;3865:118::-;3952:24;3970:5;3952:24;:::i;:::-;3947:3;3940:37;3930:53;;:::o;3989:109::-;4070:21;4085:5;4070:21;:::i;:::-;4065:3;4058:34;4048:50;;:::o;4104:118::-;4191:24;4209:5;4191:24;:::i;:::-;4186:3;4179:37;4169:53;;:::o;4228:364::-;;4344:39;4377:5;4344:39;:::i;:::-;4399:71;4463:6;4458:3;4399:71;:::i;:::-;4392:78;;4479:52;4524:6;4519:3;4512:4;4505:5;4501:16;4479:52;:::i;:::-;4556:29;4578:6;4556:29;:::i;:::-;4551:3;4547:39;4540:46;;4320:272;;;;;:::o;4598:366::-;;4761:67;4825:2;4820:3;4761:67;:::i;:::-;4754:74;;4837:93;4926:3;4837:93;:::i;:::-;4955:2;4950:3;4946:12;4939:19;;4744:220;;;:::o;4970:366::-;;5133:67;5197:2;5192:3;5133:67;:::i;:::-;5126:74;;5209:93;5298:3;5209:93;:::i;:::-;5327:2;5322:3;5318:12;5311:19;;5116:220;;;:::o;5342:366::-;;5505:67;5569:2;5564:3;5505:67;:::i;:::-;5498:74;;5581:93;5670:3;5581:93;:::i;:::-;5699:2;5694:3;5690:12;5683:19;;5488:220;;;:::o;5714:366::-;;5877:67;5941:2;5936:3;5877:67;:::i;:::-;5870:74;;5953:93;6042:3;5953:93;:::i;:::-;6071:2;6066:3;6062:12;6055:19;;5860:220;;;:::o;6086:366::-;;6249:67;6313:2;6308:3;6249:67;:::i;:::-;6242:74;;6325:93;6414:3;6325:93;:::i;:::-;6443:2;6438:3;6434:12;6427:19;;6232:220;;;:::o;6458:366::-;;6621:67;6685:2;6680:3;6621:67;:::i;:::-;6614:74;;6697:93;6786:3;6697:93;:::i;:::-;6815:2;6810:3;6806:12;6799:19;;6604:220;;;:::o;6830:366::-;;6993:67;7057:2;7052:3;6993:67;:::i;:::-;6986:74;;7069:93;7158:3;7069:93;:::i;:::-;7187:2;7182:3;7178:12;7171:19;;6976:220;;;:::o;7202:366::-;;7365:67;7429:2;7424:3;7365:67;:::i;:::-;7358:74;;7441:93;7530:3;7441:93;:::i;:::-;7559:2;7554:3;7550:12;7543:19;;7348:220;;;:::o;7574:366::-;;7737:67;7801:2;7796:3;7737:67;:::i;:::-;7730:74;;7813:93;7902:3;7813:93;:::i;:::-;7931:2;7926:3;7922:12;7915:19;;7720:220;;;:::o;7946:366::-;;8109:67;8173:2;8168:3;8109:67;:::i;:::-;8102:74;;8185:93;8274:3;8185:93;:::i;:::-;8303:2;8298:3;8294:12;8287:19;;8092:220;;;:::o;8318:366::-;;8481:67;8545:2;8540:3;8481:67;:::i;:::-;8474:74;;8557:93;8646:3;8557:93;:::i;:::-;8675:2;8670:3;8666:12;8659:19;;8464:220;;;:::o;8690:366::-;;8853:67;8917:2;8912:3;8853:67;:::i;:::-;8846:74;;8929:93;9018:3;8929:93;:::i;:::-;9047:2;9042:3;9038:12;9031:19;;8836:220;;;:::o;9062:366::-;;9225:67;9289:2;9284:3;9225:67;:::i;:::-;9218:74;;9301:93;9390:3;9301:93;:::i;:::-;9419:2;9414:3;9410:12;9403:19;;9208:220;;;:::o;9434:366::-;;9597:67;9661:2;9656:3;9597:67;:::i;:::-;9590:74;;9673:93;9762:3;9673:93;:::i;:::-;9791:2;9786:3;9782:12;9775:19;;9580:220;;;:::o;9806:366::-;;9969:67;10033:2;10028:3;9969:67;:::i;:::-;9962:74;;10045:93;10134:3;10045:93;:::i;:::-;10163:2;10158:3;10154:12;10147:19;;9952:220;;;:::o;10178:366::-;;10341:67;10405:2;10400:3;10341:67;:::i;:::-;10334:74;;10417:93;10506:3;10417:93;:::i;:::-;10535:2;10530:3;10526:12;10519:19;;10324:220;;;:::o;10550:118::-;10637:24;10655:5;10637:24;:::i;:::-;10632:3;10625:37;10615:53;;:::o;10674:112::-;10757:22;10773:5;10757:22;:::i;:::-;10752:3;10745:35;10735:51;;:::o;10792:222::-;;10923:2;10912:9;10908:18;10900:26;;10936:71;11004:1;10993:9;10989:17;10980:6;10936:71;:::i;:::-;10890:124;;;;:::o;11020:210::-;;11145:2;11134:9;11130:18;11122:26;;11158:65;11220:1;11209:9;11205:17;11196:6;11158:65;:::i;:::-;11112:118;;;;:::o;11236:222::-;;11367:2;11356:9;11352:18;11344:26;;11380:71;11448:1;11437:9;11433:17;11424:6;11380:71;:::i;:::-;11334:124;;;;:::o;11464:313::-;;11615:2;11604:9;11600:18;11592:26;;11664:9;11658:4;11654:20;11650:1;11639:9;11635:17;11628:47;11692:78;11765:4;11756:6;11692:78;:::i;:::-;11684:86;;11582:195;;;;:::o;11783:419::-;;11987:2;11976:9;11972:18;11964:26;;12036:9;12030:4;12026:20;12022:1;12011:9;12007:17;12000:47;12064:131;12190:4;12064:131;:::i;:::-;12056:139;;11954:248;;;:::o;12208:419::-;;12412:2;12401:9;12397:18;12389:26;;12461:9;12455:4;12451:20;12447:1;12436:9;12432:17;12425:47;12489:131;12615:4;12489:131;:::i;:::-;12481:139;;12379:248;;;:::o;12633:419::-;;12837:2;12826:9;12822:18;12814:26;;12886:9;12880:4;12876:20;12872:1;12861:9;12857:17;12850:47;12914:131;13040:4;12914:131;:::i;:::-;12906:139;;12804:248;;;:::o;13058:419::-;;13262:2;13251:9;13247:18;13239:26;;13311:9;13305:4;13301:20;13297:1;13286:9;13282:17;13275:47;13339:131;13465:4;13339:131;:::i;:::-;13331:139;;13229:248;;;:::o;13483:419::-;;13687:2;13676:9;13672:18;13664:26;;13736:9;13730:4;13726:20;13722:1;13711:9;13707:17;13700:47;13764:131;13890:4;13764:131;:::i;:::-;13756:139;;13654:248;;;:::o;13908:419::-;;14112:2;14101:9;14097:18;14089:26;;14161:9;14155:4;14151:20;14147:1;14136:9;14132:17;14125:47;14189:131;14315:4;14189:131;:::i;:::-;14181:139;;14079:248;;;:::o;14333:419::-;;14537:2;14526:9;14522:18;14514:26;;14586:9;14580:4;14576:20;14572:1;14561:9;14557:17;14550:47;14614:131;14740:4;14614:131;:::i;:::-;14606:139;;14504:248;;;:::o;14758:419::-;;14962:2;14951:9;14947:18;14939:26;;15011:9;15005:4;15001:20;14997:1;14986:9;14982:17;14975:47;15039:131;15165:4;15039:131;:::i;:::-;15031:139;;14929:248;;;:::o;15183:419::-;;15387:2;15376:9;15372:18;15364:26;;15436:9;15430:4;15426:20;15422:1;15411:9;15407:17;15400:47;15464:131;15590:4;15464:131;:::i;:::-;15456:139;;15354:248;;;:::o;15608:419::-;;15812:2;15801:9;15797:18;15789:26;;15861:9;15855:4;15851:20;15847:1;15836:9;15832:17;15825:47;15889:131;16015:4;15889:131;:::i;:::-;15881:139;;15779:248;;;:::o;16033:419::-;;16237:2;16226:9;16222:18;16214:26;;16286:9;16280:4;16276:20;16272:1;16261:9;16257:17;16250:47;16314:131;16440:4;16314:131;:::i;:::-;16306:139;;16204:248;;;:::o;16458:419::-;;16662:2;16651:9;16647:18;16639:26;;16711:9;16705:4;16701:20;16697:1;16686:9;16682:17;16675:47;16739:131;16865:4;16739:131;:::i;:::-;16731:139;;16629:248;;;:::o;16883:419::-;;17087:2;17076:9;17072:18;17064:26;;17136:9;17130:4;17126:20;17122:1;17111:9;17107:17;17100:47;17164:131;17290:4;17164:131;:::i;:::-;17156:139;;17054:248;;;:::o;17308:419::-;;17512:2;17501:9;17497:18;17489:26;;17561:9;17555:4;17551:20;17547:1;17536:9;17532:17;17525:47;17589:131;17715:4;17589:131;:::i;:::-;17581:139;;17479:248;;;:::o;17733:419::-;;17937:2;17926:9;17922:18;17914:26;;17986:9;17980:4;17976:20;17972:1;17961:9;17957:17;17950:47;18014:131;18140:4;18014:131;:::i;:::-;18006:139;;17904:248;;;:::o;18158:419::-;;18362:2;18351:9;18347:18;18339:26;;18411:9;18405:4;18401:20;18397:1;18386:9;18382:17;18375:47;18439:131;18565:4;18439:131;:::i;:::-;18431:139;;18329:248;;;:::o;18583:222::-;;18714:2;18703:9;18699:18;18691:26;;18727:71;18795:1;18784:9;18780:17;18771:6;18727:71;:::i;:::-;18681:124;;;;:::o;18811:214::-;;18938:2;18927:9;18923:18;18915:26;;18951:67;19015:1;19004:9;19000:17;18991:6;18951:67;:::i;:::-;18905:120;;;;:::o;19031:99::-;;19117:5;19111:12;19101:22;;19090:40;;;:::o;19136:169::-;;19254:6;19249:3;19242:19;19294:4;19289:3;19285:14;19270:29;;19232:73;;;;:::o;19311:305::-;;19370:20;19388:1;19370:20;:::i;:::-;19365:25;;19404:20;19422:1;19404:20;:::i;:::-;19399:25;;19558:1;19490:66;19486:74;19483:1;19480:81;19477:2;;;19564:18;;:::i;:::-;19477:2;19608:1;19605;19601:9;19594:16;;19355:261;;;;:::o;19622:191::-;;19682:20;19700:1;19682:20;:::i;:::-;19677:25;;19716:20;19734:1;19716:20;:::i;:::-;19711:25;;19755:1;19752;19749:8;19746:2;;;19760:18;;:::i;:::-;19746:2;19805:1;19802;19798:9;19790:17;;19667:146;;;;:::o;19819:96::-;;19885:24;19903:5;19885:24;:::i;:::-;19874:35;;19864:51;;;:::o;19921:90::-;;19998:5;19991:13;19984:21;19973:32;;19963:48;;;:::o;20017:77::-;;20083:5;20072:16;;20062:32;;;:::o;20100:149::-;;20176:66;20169:5;20165:78;20154:89;;20144:105;;;:::o;20255:126::-;;20332:42;20325:5;20321:54;20310:65;;20300:81;;;:::o;20387:77::-;;20453:5;20442:16;;20432:32;;;:::o;20470:86::-;;20545:4;20538:5;20534:16;20523:27;;20513:43;;;:::o;20562:307::-;20630:1;20640:113;20654:6;20651:1;20648:13;20640:113;;;20739:1;20734:3;20730:11;20724:18;20720:1;20715:3;20711:11;20704:39;20676:2;20673:1;20669:10;20664:15;;20640:113;;;20771:6;20768:1;20765:13;20762:2;;;20851:1;20842:6;20837:3;20833:16;20826:27;20762:2;20611:258;;;;:::o;20875:320::-;;20956:1;20950:4;20946:12;20936:22;;21003:1;20997:4;20993:12;21024:18;21014:2;;21080:4;21072:6;21068:17;21058:27;;21014:2;21142;21134:6;21131:14;21111:18;21108:38;21105:2;;;21161:18;;:::i;:::-;21105:2;20926:269;;;;:::o;21201:180::-;21249:77;21246:1;21239:88;21346:4;21343:1;21336:15;21370:4;21367:1;21360:15;21387:180;21435:77;21432:1;21425:88;21532:4;21529:1;21522:15;21556:4;21553:1;21546:15;21573:102;;21665:2;21661:7;21656:2;21649:5;21645:14;21641:28;21631:38;;21621:54;;;:::o;21681:221::-;21821:34;21817:1;21809:6;21805:14;21798:58;21890:4;21885:2;21877:6;21873:15;21866:29;21787:115;:::o;21908:222::-;22048:34;22044:1;22036:6;22032:14;22025:58;22117:5;22112:2;22104:6;22100:15;22093:30;22014:116;:::o;22136:234::-;22276:34;22272:1;22264:6;22260:14;22253:58;22345:17;22340:2;22332:6;22328:15;22321:42;22242:128;:::o;22376:221::-;22516:34;22512:1;22504:6;22500:14;22493:58;22585:4;22580:2;22572:6;22568:15;22561:29;22482:115;:::o;22603:221::-;22743:34;22739:1;22731:6;22727:14;22720:58;22812:4;22807:2;22799:6;22795:15;22788:29;22709:115;:::o;22830:225::-;22970:34;22966:1;22958:6;22954:14;22947:58;23039:8;23034:2;23026:6;23022:15;23015:33;22936:119;:::o;23061:235::-;23201:34;23197:1;23189:6;23185:14;23178:58;23270:18;23265:2;23257:6;23253:15;23246:43;23167:129;:::o;23302:227::-;23442:34;23438:1;23430:6;23426:14;23419:58;23511:10;23506:2;23498:6;23494:15;23487:35;23408:121;:::o;23535:230::-;23675:34;23671:1;23663:6;23659:14;23652:58;23744:13;23739:2;23731:6;23727:15;23720:38;23641:124;:::o;23771:223::-;23911:34;23907:1;23899:6;23895:14;23888:58;23980:6;23975:2;23967:6;23963:15;23956:31;23877:117;:::o;24000:220::-;24140:34;24136:1;24128:6;24124:14;24117:58;24209:3;24204:2;24196:6;24192:15;24185:28;24106:114;:::o;24226:224::-;24366:34;24362:1;24354:6;24350:14;24343:58;24435:7;24430:2;24422:6;24418:15;24411:32;24332:118;:::o;24456:223::-;24596:34;24592:1;24584:6;24580:14;24573:58;24665:6;24660:2;24652:6;24648:15;24641:31;24562:117;:::o;24685:224::-;24825:34;24821:1;24813:6;24809:14;24802:58;24894:7;24889:2;24881:6;24877:15;24870:32;24791:118;:::o;24915:234::-;25055:34;25051:1;25043:6;25039:14;25032:58;25124:17;25119:2;25111:6;25107:15;25100:42;25021:128;:::o;25155:181::-;25295:33;25291:1;25283:6;25279:14;25272:57;25261:75;:::o;25342:122::-;25415:24;25433:5;25415:24;:::i;:::-;25408:5;25405:35;25395:2;;25454:1;25451;25444:12;25395:2;25385:79;:::o;25470:122::-;25543:24;25561:5;25543:24;:::i;:::-;25536:5;25533:35;25523:2;;25582:1;25579;25572:12;25523:2;25513:79;:::o;25598:120::-;25670:23;25687:5;25670:23;:::i;:::-;25663:5;25660:34;25650:2;;25708:1;25705;25698:12;25650:2;25640:78;:::o;25724:122::-;25797:24;25815:5;25797:24;:::i;:::-;25790:5;25787:35;25777:2;;25836:1;25833;25826:12;25777:2;25767:79;:::o

Swarm Source

ipfs://4f9fb522dfd333172367dff0bc23f03bfccf6445e72e6061a388f661ff0c1fbb
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.