Contract 0x17d723436740F2852274192dA27F65116ECd011E

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash
Method
Block
From
To
Value [Txn Fee]
0x8f5fec6ceabe8e4f1f1cea32b1de4782a24b1009f07b6d360985d8b06d3fe106Set Current Step209722132021-11-04 12:51:31580 days 3 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x205176dc7946c8f30e8db1a283fb0876ce46a9554e8f88a91b99ce3817334e41Set Current Step209722132021-11-04 12:51:31580 days 3 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x0102361a1dc1684f102afc7e220644439ddd26094ba0d7f963e70200b5ad6d1aSet Current Step209710822021-11-04 12:12:41580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.007377150
0xae181b65c77ef26d3c68f5a452e4e1c0ba8f486d08ec074f096747f6e75e6d60Set Current Step209710822021-11-04 12:12:41580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.0043902150
0x3f0da09c2549f8a61a396715bc30f67b22910ba01a05fd299c4ef30c1dd8f460Set Current Step...209710822021-11-04 12:12:41580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.0108825150
0x363a16ec789e8002d76ba7a8202df8f2158255e3611a03fdbd0d82af5846708dSet Current Step209710822021-11-04 12:12:41580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004812150
0x9e0c022fe9ee4c84292d03cd57b8c016f677cf233d7c5341a9edb503e3aec7bdSet Current Step209710802021-11-04 12:12:37580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x8b28ea96687243e13536437932d84ac7e1efd8f0d6f03012812efce34be8b423Set Current Step209710792021-11-04 12:12:35580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004812150
0xc95d1df363a8f5c513be5388ea2e29c347cbae1ec9d8724e815f3f7e4fbe676aSet Current Step209710792021-11-04 12:12:35580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0xadef490d6604c0d8178cbae56b59a165f2518baceee39200cd0817087944109bSet Current Step209710792021-11-04 12:12:35580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x9df925dee8d44206b3424c1c27fa795321d26e882c171d4da975e84e0d982e83Set Current Step209710792021-11-04 12:12:35580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x0917d7a65375d9542045536e5d3abf008afb180dbbed3b8701666bc657bb6dc3Set Current Step209710792021-11-04 12:12:35580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.007377150
0x87cf49aa3fe8815f2e28ca31fdce4531b07b748ec60ee21da0be989cd8861cbdSet Current Step209710792021-11-04 12:12:35580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.0043902150
0xe0a8155aa143e374381daf88f0d3a9147d36030c1295a3c38b9df850e69a4430Set Current Step209710792021-11-04 12:12:35580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x0153920f5a5dc2e61da05ee8c6d616793e9e52a374860d12e35b285748c9af5dSet Current Step209710792021-11-04 12:12:35580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.0073752150
0xcef95493e73f15b8dc4dfe3a93e651d738f897409592b3c6b9a40899aef23d18Set Current Step209710152021-11-04 12:10:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.0015737632.000000001
0x92c1c2166eb0e6819cec0412eb83d79f83c707e262a9af47920404403ed80ed3Set Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004812150
0x6d758a2eef1e71f0abf29813c8a2368c61b8228f33355b3c92fdbd63948498adSet Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004812150
0x21d45f3cb13198b545088ae032e62d2a65c24223b780443ce68de0bbf3e7f161Set Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x2ba766179a3f5d4186fff240be24bd68fb6a2be244a40f7840cc974b2a159d0cSet Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0xcdbbd27b0be4cfcf71d05678aa06d9f60fe575d1784e3b85611312137b2e2147Set Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x5557e06202e59ef44002cf79b8555472896859aa656392dc225239b399e8748cSet Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0xc42064f85ab1b1b777fd3f48e7643b310b54da68f4809f88c3ac16dfdbb56936Set Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0x2cf0eac6a1f91634d59a196c202403342787d6cdb660aea394099273c9e20d06Set Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
0xbceb9dbbe28a68c73d62e15a8746d61e5e5c8b402c4d6298fb9f09c1f51a3d19Set Current Step209706952021-11-04 11:59:23580 days 4 hrs ago0xcea83a632ed655b3facb9a71950bde013d5b7253 IN  0x17d723436740f2852274192da27f65116ecd011e0 MATIC0.004392150
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OpeningCeremonyQuest

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion
File 1 of 8 : OpeningCeremonyQuest.sol
pragma solidity ^0.8.4;
// SPDX-License-Identifier: GPL-3.0-or-later

import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/access/AccessControl.sol";

/**
 * Temple opening ceremony contract */ 
 contract OpeningCeremonyQuest is AccessControl {
    bytes32 public constant CAN_CHANGE_STATE = keccak256("CAN_CHANGE_STATE");

    struct QuestData {
        bytes32 stepWhenLocked;
        bytes32 stepWhenUnlocked;
        uint256 lockedUntil;
        bytes32 enclave;
        bool completed;
    }

    // opening ceremony data from a templar
    mapping(address => QuestData) public dataOf;

    // keccak256 encoeded step where caller can set the enclave
    bytes32 public setEnclaveCondition;

    // keccak256 encoeded step where caller can mark the quest as complete
    bytes32 public setCompletedCondition;

    constructor() {
        _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
        grantRole(CAN_CHANGE_STATE, msg.sender);
    }

    function setConditions(bytes32 _setEnclaveCondition, bytes32 _setCompletedCondition) external onlyRole(DEFAULT_ADMIN_ROLE) {
        setEnclaveCondition = _setEnclaveCondition;
        setCompletedCondition = _setCompletedCondition;
    }

    function setCurrentStep(address templar, bytes32 step) external onlyRole(CAN_CHANGE_STATE) {
        QuestData storage questData = dataOf[templar];

        require(block.timestamp > questData.lockedUntil, "Locked on current step");
        dataOf[templar].stepWhenUnlocked = step;
    }

    function setCurrentStepWithLock(address templar, bytes32 step, uint256 lockDurationSeconds, bytes32 stepWhenUnlocked) external  onlyRole(CAN_CHANGE_STATE)  {
        QuestData storage questData = dataOf[templar];

        require(block.timestamp > questData.lockedUntil, "Locked on current step");

        dataOf[templar].stepWhenLocked = step;
        dataOf[templar].stepWhenUnlocked = stepWhenUnlocked;
        dataOf[templar].lockedUntil = block.timestamp + lockDurationSeconds;
    }

    function setEnclave(address templar, bytes32 enclave) external onlyRole(CAN_CHANGE_STATE) {
        require(
            keccak256(abi.encode(getCurrentStep(templar))) == setEnclaveCondition 
            && dataOf[templar].enclave == "", "Cannot set enclave at current quest step");
        dataOf[templar].enclave = enclave;
    }
        

    function setCompleted(address templar) external onlyRole(CAN_CHANGE_STATE) {
        require(keccak256(abi.encode(getCurrentStep(templar))) == setCompletedCondition, "Cannot set quest as completed at current step");
        dataOf[templar].completed = true;
    }

    /** Owner only method to udpate any/all user quest data if required by enclave of order to support questers */
    function overrideUserData(address templar, QuestData memory data) external onlyRole(DEFAULT_ADMIN_ROLE) {
        dataOf[templar] = data;
    }

    /** Owner only method to remove a lock for a given user (to speed up testing) */
    function removeLock(address templar) external onlyRole(DEFAULT_ADMIN_ROLE) {
        dataOf[templar].lockedUntil = 0;
    }

    function getCurrentStep(address templar) public view returns(bytes32) {
        QuestData storage questData = dataOf[templar];

        if (block.timestamp < questData.lockedUntil) {
            return questData.stepWhenLocked;
        } else {
            return questData.stepWhenUnlocked;
        }
    }
}

File 2 of 8 : Ownable.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

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

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

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

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

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 3 of 8 : AccessControl.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IAccessControl.sol";
import "../utils/Context.sol";
import "../utils/Strings.sol";
import "../utils/introspection/ERC165.sol";

/**
 * @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 Modifier that checks that an account has a specific role. Reverts
     * with a standardized message including the required role.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     *
     * _Available since v4.1._
     */
    modifier onlyRole(bytes32 role) {
        _checkRole(role, _msgSender());
        _;
    }

    /**
     * @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 Revert with a standard message if `account` is missing `role`.
     *
     * The format of the revert reason is given by the following regular expression:
     *
     *  /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
     */
    function _checkRole(bytes32 role, address account) internal view {
        if (!hasRole(role, account)) {
            revert(
                string(
                    abi.encodePacked(
                        "AccessControl: account ",
                        Strings.toHexString(uint160(account), 20),
                        " is missing role ",
                        Strings.toHexString(uint256(role), 32)
                    )
                )
            );
        }
    }

    /**
     * @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 onlyRole(getRoleAdmin(role)) {
        _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 onlyRole(getRoleAdmin(role)) {
        _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 {
        bytes32 previousAdminRole = getRoleAdmin(role);
        _roles[role].adminRole = adminRole;
        emit RoleAdminChanged(role, previousAdminRole, 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 4 of 8 : Context.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

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

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

File 5 of 8 : IAccessControl.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev External interface of AccessControl declared to support ERC165 detection.
 */
interface IAccessControl {
    /**
     * @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 {AccessControl-_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 Returns `true` if `account` has been granted `role`.
     */
    function hasRole(bytes32 role, address account) external view returns (bool);

    /**
     * @dev Returns the admin role that controls `role`. See {grantRole} and
     * {revokeRole}.
     *
     * To change a role's admin, use {AccessControl-_setRoleAdmin}.
     */
    function getRoleAdmin(bytes32 role) external view returns (bytes32);

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

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

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

File 6 of 8 : Strings.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 7 of 8 : ERC165.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

import "./IERC165.sol";

/**
 * @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 8 of 8 : IERC165.sol
// SPDX-License-Identifier: MIT

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);
}

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"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"},{"inputs":[],"name":"CAN_CHANGE_STATE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dataOf","outputs":[{"internalType":"bytes32","name":"stepWhenLocked","type":"bytes32"},{"internalType":"bytes32","name":"stepWhenUnlocked","type":"bytes32"},{"internalType":"uint256","name":"lockedUntil","type":"uint256"},{"internalType":"bytes32","name":"enclave","type":"bytes32"},{"internalType":"bool","name":"completed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"}],"name":"getCurrentStep","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","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":"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":"templar","type":"address"},{"components":[{"internalType":"bytes32","name":"stepWhenLocked","type":"bytes32"},{"internalType":"bytes32","name":"stepWhenUnlocked","type":"bytes32"},{"internalType":"uint256","name":"lockedUntil","type":"uint256"},{"internalType":"bytes32","name":"enclave","type":"bytes32"},{"internalType":"bool","name":"completed","type":"bool"}],"internalType":"struct OpeningCeremonyQuest.QuestData","name":"data","type":"tuple"}],"name":"overrideUserData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"}],"name":"removeLock","outputs":[],"stateMutability":"nonpayable","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":"address","name":"templar","type":"address"}],"name":"setCompleted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setCompletedCondition","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_setEnclaveCondition","type":"bytes32"},{"internalType":"bytes32","name":"_setCompletedCondition","type":"bytes32"}],"name":"setConditions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"},{"internalType":"bytes32","name":"step","type":"bytes32"}],"name":"setCurrentStep","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"},{"internalType":"bytes32","name":"step","type":"bytes32"},{"internalType":"uint256","name":"lockDurationSeconds","type":"uint256"},{"internalType":"bytes32","name":"stepWhenUnlocked","type":"bytes32"}],"name":"setCurrentStepWithLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"templar","type":"address"},{"internalType":"bytes32","name":"enclave","type":"bytes32"}],"name":"setEnclave","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setEnclaveCondition","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b50620000276000801b336200005f60201b60201c565b620000597f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d336200007560201b60201c565b62000997565b620000718282620000be60201b60201c565b5050565b6200008682620001af60201b60201c565b620000a7816200009b620001ce60201b60201c565b620001d660201b60201c565b620000b98383620000be60201b60201c565b505050565b620000d082826200029a60201b60201c565b620001ab57600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000150620001ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000806000838152602001908152602001600020600101549050919050565b600033905090565b620001e882826200029a60201b60201c565b62000296576200021b8173ffffffffffffffffffffffffffffffffffffffff1660146200030460201b62000c801760201c565b620002368360001c60206200030460201b62000c801760201c565b6040516020016200024992919062000700565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200028d919062000742565b60405180910390fd5b5050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6060600060028360026200031991906200080c565b620003259190620007af565b67ffffffffffffffff81111562000365577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015620003985781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110620003f7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811062000482577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002620004c491906200080c565b620004d09190620007af565b90505b6001811115620005c2577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106200053a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b82828151811062000578577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080620005ba90620008ad565b9050620004d3565b506000841462000609576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006009062000766565b60405180910390fd5b8091505092915050565b6000620006208262000788565b6200062c818562000793565b93506200063e81856020860162000877565b62000649816200090b565b840191505092915050565b6000620006618262000788565b6200066d8185620007a4565b93506200067f81856020860162000877565b80840191505092915050565b60006200069a60208362000793565b9150620006a7826200091c565b602082019050919050565b6000620006c1601783620007a4565b9150620006ce8262000945565b601782019050919050565b6000620006e8601183620007a4565b9150620006f5826200096e565b601182019050919050565b60006200070d82620006b2565b91506200071b828562000654565b91506200072882620006d9565b915062000736828462000654565b91508190509392505050565b600060208201905081810360008301526200075e818462000613565b905092915050565b6000602082019050818103600083015262000781816200068b565b9050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000620007bc826200086d565b9150620007c9836200086d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620008015762000800620008dc565b5b828201905092915050565b600062000819826200086d565b915062000826836200086d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620008625762000861620008dc565b5b828202905092915050565b6000819050919050565b60005b83811015620008975780820151818401526020810190506200087a565b83811115620008a7576000848401525b50505050565b6000620008ba826200086d565b91506000821415620008d157620008d0620008dc565b5b600182039050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b611ccb80620009a76000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063734c7055116100ad578063a217fddf11610071578063a217fddf14610302578063b6bd4ee514610320578063bb3d45621461033c578063bd1ff13e14610370578063d547741f1461038e57610121565b8063734c70551461025e57806374fc3f8d1461027a5780638104c78f1461029857806391946932146102b457806391d14854146102d257610121565b80632f2ff15d116100f45780632f2ff15d146101d257806336568abe146101ee578063393a3f291461020a5780634a387bef14610226578063682844b11461024257610121565b806301ffc9a714610126578063248a9ca314610156578063285a08f2146101865780632e9b959d146101b6575b600080fd5b610140600480360381019061013b91906114e0565b6103aa565b60405161014d91906116cf565b60405180910390f35b610170600480360381019061016b919061143f565b610424565b60405161017d91906116ea565b60405180910390f35b6101a0600480360381019061019b919061133b565b610443565b6040516101ad91906116ea565b60405180910390f35b6101d060048036038101906101cb91906113a0565b6104ae565b005b6101ec60048036038101906101e79190611468565b610651565b005b61020860048036038101906102039190611468565b61067a565b005b610224600480360381019061021f9190611364565b6106fd565b005b610240600480360381019061023b919061133b565b610805565b005b61025c60048036038101906102579190611403565b610866565b005b61027860048036038101906102739190611364565b61090b565b005b610282610a49565b60405161028f91906116ea565b60405180910390f35b6102b260048036038101906102ad919061133b565b610a6d565b005b6102bc610b6f565b6040516102c991906116ea565b60405180910390f35b6102ec60048036038101906102e79190611468565b610b75565b6040516102f991906116cf565b60405180910390f35b61030a610bdf565b60405161031791906116ea565b60405180910390f35b61033a600480360381019061033591906114a4565b610be6565b005b6103566004803603810190610351919061133b565b610c0e565b604051610367959493929190611705565b60405180910390f35b610378610c51565b60405161038591906116ea565b60405180910390f35b6103a860048036038101906103a39190611468565b610c57565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061041d575061041c82610f7a565b5b9050919050565b6000806000838152602001908152602001600020600101549050919050565b600080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600201544210156104a05780600001549150506104a9565b80600101549150505b919050565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d6104e0816104db610fe4565b610fec565b6000600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905080600201544211610569576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610560906117fa565b60405180910390fd5b84600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555082600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555083426106039190611866565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550505050505050565b61065a82610424565b61066b81610666610fe4565b610fec565b6106758383611089565b505050565b610682610fe4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e6906117da565b60405180910390fd5b6106f98282611169565b5050565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d61072f8161072a610fe4565b610fec565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050806002015442116107b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107af906117fa565b60405180910390fd5b82600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555050505050565b6000801b61081a81610815610fe4565b610fec565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201819055505050565b6000801b61087b81610876610fe4565b610fec565b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040160006101000a81548160ff021916908315150217905550905050505050565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d61093d81610938610fe4565b610fec565b60025461094984610443565b60405160200161095991906116ea565b604051602081830303815290604052805190602001201480156109be57506000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030154145b6109fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f49061179a565b60405180910390fd5b81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060030181905550505050565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d81565b7f1ee6eceadad6b1bcc072a88134ae057441bd9cb5c59bd0552375b0d6dc01249d610a9f81610a9a610fe4565b610fec565b600354610aab83610443565b604051602001610abb91906116ea565b6040516020818303038152906040528051906020012014610b11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b08906117ba565b60405180910390fd5b60018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548160ff0219169083151502179055505050565b60035481565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000801b81565b6000801b610bfb81610bf6610fe4565b610fec565b8260028190555081600381905550505050565b60016020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff16905085565b60025481565b610c6082610424565b610c7181610c6c610fe4565b610fec565b610c7b8383611169565b505050565b606060006002836002610c9391906118bc565b610c9d9190611866565b67ffffffffffffffff811115610cdc577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015610d0e5781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110610d6c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110610df6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002610e3691906118bc565b610e409190611866565b90505b6001811115610f2c577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110610ea8577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b1a60f81b828281518110610ee5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080610f25906119c7565b9050610e43565b5060008414610f70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f679061177a565b60405180910390fd5b8091505092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b610ff68282610b75565b6110855761101b8173ffffffffffffffffffffffffffffffffffffffff166014610c80565b6110298360001c6020610c80565b60405160200161103a929190611695565b6040516020818303038152906040526040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107c9190611758565b60405180910390fd5b5050565b6110938282610b75565b61116557600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061110a610fe4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6111738282610b75565b1561124657600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506111eb610fe4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b60008135905061125981611c22565b92915050565b60008135905061126e81611c39565b92915050565b60008135905061128381611c50565b92915050565b60008135905061129881611c67565b92915050565b600060a082840312156112b057600080fd5b6112ba60a061181a565b905060006112ca84828501611274565b60008301525060206112de84828501611274565b60208301525060406112f284828501611326565b604083015250606061130684828501611274565b606083015250608061131a8482850161125f565b60808301525092915050565b60008135905061133581611c7e565b92915050565b60006020828403121561134d57600080fd5b600061135b8482850161124a565b91505092915050565b6000806040838503121561137757600080fd5b60006113858582860161124a565b925050602061139685828601611274565b9150509250929050565b600080600080608085870312156113b657600080fd5b60006113c48782880161124a565b94505060206113d587828801611274565b93505060406113e687828801611326565b92505060606113f787828801611274565b91505092959194509250565b60008060c0838503121561141657600080fd5b60006114248582860161124a565b92505060206114358582860161129e565b9150509250929050565b60006020828403121561145157600080fd5b600061145f84828501611274565b91505092915050565b6000806040838503121561147b57600080fd5b600061148985828601611274565b925050602061149a8582860161124a565b9150509250929050565b600080604083850312156114b757600080fd5b60006114c585828601611274565b92505060206114d685828601611274565b9150509250929050565b6000602082840312156114f257600080fd5b600061150084828501611289565b91505092915050565b61151281611928565b82525050565b61152181611934565b82525050565b60006115328261183f565b61153c818561184a565b935061154c818560208601611994565b61155581611a80565b840191505092915050565b600061156b8261183f565b611575818561185b565b9350611585818560208601611994565b80840191505092915050565b600061159e60208361184a565b91506115a982611a91565b602082019050919050565b60006115c160288361184a565b91506115cc82611aba565b604082019050919050565b60006115e4602d8361184a565b91506115ef82611b09565b604082019050919050565b600061160760178361185b565b915061161282611b58565b601782019050919050565b600061162a60118361185b565b915061163582611b81565b601182019050919050565b600061164d602f8361184a565b915061165882611baa565b604082019050919050565b600061167060168361184a565b915061167b82611bf9565b602082019050919050565b61168f8161198a565b82525050565b60006116a0826115fa565b91506116ac8285611560565b91506116b78261161d565b91506116c38284611560565b91508190509392505050565b60006020820190506116e46000830184611509565b92915050565b60006020820190506116ff6000830184611518565b92915050565b600060a08201905061171a6000830188611518565b6117276020830187611518565b6117346040830186611686565b6117416060830185611518565b61174e6080830184611509565b9695505050505050565b600060208201905081810360008301526117728184611527565b905092915050565b6000602082019050818103600083015261179381611591565b9050919050565b600060208201905081810360008301526117b3816115b4565b9050919050565b600060208201905081810360008301526117d3816115d7565b9050919050565b600060208201905081810360008301526117f381611640565b9050919050565b6000602082019050818103600083015261181381611663565b9050919050565b6000611824611835565b905061183082826119f1565b919050565b6000604051905090565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006118718261198a565b915061187c8361198a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156118b1576118b0611a22565b5b828201905092915050565b60006118c78261198a565b91506118d28361198a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561190b5761190a611a22565b5b828202905092915050565b60006119218261196a565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156119b2578082015181840152602081019050611997565b838111156119c1576000848401525b50505050565b60006119d28261198a565b915060008214156119e6576119e5611a22565b5b600182039050919050565b6119fa82611a80565b810181811067ffffffffffffffff82111715611a1957611a18611a51565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b7f43616e6e6f742073657420656e636c6176652061742063757272656e7420717560008201527f6573742073746570000000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f742073657420717565737420617320636f6d706c6574656420617460008201527f2063757272656e74207374657000000000000000000000000000000000000000602082015250565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b7f4c6f636b6564206f6e2063757272656e74207374657000000000000000000000600082015250565b611c2b81611916565b8114611c3657600080fd5b50565b611c4281611928565b8114611c4d57600080fd5b50565b611c5981611934565b8114611c6457600080fd5b50565b611c708161193e565b8114611c7b57600080fd5b50565b611c878161198a565b8114611c9257600080fd5b5056fea2646970667358221220218abf98b52b42fcb4575baed6425dd9c99f5e8a6312ab067a0db62e15a5859364736f6c63430008040033

Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.