Source Code
Overview
ETH Balance
0 ETH
More Info
ContractCreator
Multichain Info
N/A
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Loading...
Loading
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Source Code Verified (Exact Match)
Contract Name:
QuizManager
Compiler Version
v0.8.24+commit.e11b9ed9
ZkSolc Version
v1.5.10
Optimization Enabled:
Yes with Mode 3
Other Settings:
paris EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts/interfaces/IERC20.sol"; contract QuizManager is Initializable, AccessControlUpgradeable, PausableUpgradeable, ReentrancyGuardUpgradeable { bytes32 public constant QUIZ_MANAGER_ROLE = keccak256("QUIZ_MANAGER_ROLE"); // ----------------------- // GLOBAL (DEFAULT) FIELDS // ----------------------- IERC20 public rewardToken; // Default reward token bool public isRewardTokenSet; // Whether the default rewardToken is set uint256 public prizePool; // Global prize pool (mutable) uint256 public defaultPrizePool; // Baseline to reset after each default payout // ----------------------- // PER-QUIZ STRUCT // ----------------------- struct Question { string content; string correctAnswer; address[] participants; address[] correctPlayers; address[] optedOutPlayers; } struct Quiz { // Core Quiz Info string id; uint256 createdTime; uint256 completedTime; // Quiz-Specific Token & Pool // If quizRewardToken != address(0), we MUST use this token & quizPrizePool // If quizRewardToken == address(0), we use the default token & global prizePool address quizRewardToken; uint256 quizPrizePool; // Quiz Data address[] enrolledPlayers; Question[] questions; address[] finalWinners; bool isCompleted; bool rewardsPaid; } // ----------------------- // STORAGE // ----------------------- mapping(string => Quiz) public quizzes; string[] public quizIds; // ----------------------- // EVENTS // ----------------------- event QuizCreated(string quizId, uint256 timestamp); event QuizCompleted(string quizId, uint256 timestamp, address[] winners); event RewardDeposited(address indexed sender, uint256 amount, string quizId); event RewardsPaid(string quizId, uint256 totalPaid, address[] winners); event PrizePoolUpdated(uint256 oldPrizePool, uint256 newPrizePool); event RewardTokenSet(address indexed tokenAddress); event EnrolledPlayersUpdated(string quizId, address[] newPlayers); event QuizPrizePoolUpdated(string quizId, uint256 oldPool, uint256 newPool); // ----------------------- // CONSTRUCTOR & INIT // ----------------------- /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); } function initialize(uint256 _defaultPrizePool) public initializer { __AccessControl_init(); __Pausable_init(); __ReentrancyGuard_init(); // Grant the deployer the default admin role & quiz manager role _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); _grantRole(QUIZ_MANAGER_ROLE, msg.sender); // Initialize defaultPrizePool = _defaultPrizePool; prizePool = _defaultPrizePool; // Active global prize pool } // ----------------------- // ADMIN FUNCTIONS // ----------------------- function setRewardToken(address tokenAddress) external onlyRole(DEFAULT_ADMIN_ROLE) { require(tokenAddress != address(0), "Invalid token address"); require(!isRewardTokenSet, "Reward token already set"); rewardToken = IERC20(tokenAddress); isRewardTokenSet = true; emit RewardTokenSet(tokenAddress); } function pause() external onlyRole(DEFAULT_ADMIN_ROLE) { _pause(); } function unpause() external onlyRole(DEFAULT_ADMIN_ROLE) { _unpause(); } // ----------------------- // QUIZ MANAGER FUNCTIONS // ----------------------- /** * @notice Create a new quiz. * @param quizId Unique string ID for the quiz. * @param enrolledPlayers (Optional) list of players. * @param quizRewardToken If nonzero, the token for this quiz’s prize pool. * @param customPrizePool If nonzero, the prize pool for this quiz’s token. * * If you set `quizRewardToken != address(0)`, then `quizPrizePool` must be > 0. * If `quizRewardToken == address(0)`, then `quizPrizePool` must be == 0. */ function createQuiz( string calldata quizId, address[] calldata enrolledPlayers, address quizRewardToken, uint256 customPrizePool ) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { require(bytes(quizId).length > 0, "Quiz ID cannot be empty"); require(quizzes[quizId].createdTime == 0, "Quiz ID already exists"); // Initialize the new quiz's prize pool uint256 initialPrizePool; bool usingCustomToken = (quizRewardToken != address(0)); if (usingCustomToken) { require(customPrizePool > 0, "Must set customPrizePool > 0 if token is specified"); initialPrizePool = customPrizePool; } else { require(customPrizePool == 0, "customPrizePool must be 0 if no custom token"); // For default token quizzes, calculate initial prize pool initialPrizePool = defaultPrizePool; // If there was a previous quiz, check if we should add its unused pool if (quizIds.length > 0) { Quiz storage prevQuiz = quizzes[quizIds[quizIds.length - 1]]; if (prevQuiz.isCompleted && prevQuiz.rewardsPaid && prevQuiz.finalWinners.length == 0 && prevQuiz.quizRewardToken == address(0)) // Only if it used default token { initialPrizePool += prevQuiz.quizPrizePool; } } } Quiz storage newQuiz = quizzes[quizId]; newQuiz.id = quizId; newQuiz.createdTime = block.timestamp; newQuiz.completedTime = 0; newQuiz.quizRewardToken = quizRewardToken; newQuiz.quizPrizePool = initialPrizePool; newQuiz.enrolledPlayers = enrolledPlayers; newQuiz.isCompleted = false; newQuiz.rewardsPaid = false; quizIds.push(quizId); emit QuizCreated(quizId, block.timestamp); } /** * @notice Update the list of enrolled players for a specific quiz. * @param quizId The unique ID of the quiz to update. * @param newPlayers The new list of player addresses to enroll. */ function updateEnrolledPlayers( string calldata quizId, address[] calldata newPlayers ) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); // Update the enrolled players list quiz.enrolledPlayers = newPlayers; // Optionally, you can emit an event here to log the update. // Example: emit EnrolledPlayersUpdated(quizId, newPlayers); } /** * @notice Completes the quiz, storing final data: * - finalWinners * - questions (content + correct answers, etc.) * - completion time */ function completeQuiz( string calldata quizId, address[] calldata finalWinners, // Arrays of question data string[] calldata questionContents, string[] calldata correctAnswers, address[][] calldata questionParticipants, address[][] calldata questionCorrectPlayers, address[][] calldata questionOptedOutPlayers ) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); require(!quiz.isCompleted, "Quiz already completed"); // All arrays for questions must be the same length uint256 questionCount = questionContents.length; require(questionCount == correctAnswers.length, "Mismatched Q/A arrays"); require(questionCount == questionParticipants.length, "Mismatched participants array"); require(questionCount == questionCorrectPlayers.length, "Mismatched correctPlayers array"); require(questionCount == questionOptedOutPlayers.length, "Mismatched optedOutPlayers array"); // Mark quiz completed quiz.isCompleted = true; quiz.completedTime = block.timestamp; quiz.finalWinners = finalWinners; // Populate questions for (uint256 i = 0; i < questionCount; i++) { quiz.questions.push( Question({ content: questionContents[i], correctAnswer: correctAnswers[i], participants: questionParticipants[i], correctPlayers: questionCorrectPlayers[i], optedOutPlayers: questionOptedOutPlayers[i] }) ); } emit QuizCompleted(quizId, block.timestamp, finalWinners); } /** * @notice Deposit into the GLOBAL prize pool (when using the default token). * If you want to deposit into a quiz-specific pool, use `depositQuizPrizePool`. */ function ownerDeposit(uint256 amount) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { require(isRewardTokenSet, "Reward token not set (global)"); require(amount > 0, "Deposit must be > 0"); bool success = rewardToken.transferFrom(msg.sender, address(this), amount); require(success, "Token transfer failed"); emit RewardDeposited(msg.sender, amount, "GLOBAL"); } /** * @notice Deposit specifically into a quiz’s custom prize pool (if that quiz uses a custom token). */ function depositQuizPrizePool(string calldata quizId, uint256 amount) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); // Ensure this quiz actually uses a custom token require(quiz.quizRewardToken != address(0), "Quiz uses global token/pool, cannot deposit here"); require(amount > 0, "Deposit must be > 0"); // Transfer that quiz’s token from sender to this contract IERC20 customToken = IERC20(quiz.quizRewardToken); bool success = customToken.transferFrom(msg.sender, address(this), amount); require(success, "Quiz-specific token transfer failed"); emit RewardDeposited(msg.sender, amount, quizId); } /** * @notice Pays out the quiz winners. * - If the quiz has a custom token, use quiz.quizRewardToken & quiz.quizPrizePool. * - Otherwise, use the global token & global prizePool. * * If there are no winners, we do NOT reset or distribute the prize pool, * effectively carrying it over to the next quiz. * * After payout (if there *are* winners): * - For global, set `prizePool = defaultPrizePool`. * - For quiz-specific, set `quizPrizePool = 0`. */ function payoutWinners(string calldata quizId) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused nonReentrant { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); require(quiz.isCompleted, "Quiz not completed yet"); require(!quiz.rewardsPaid, "Rewards already paid"); require(quiz.quizPrizePool > 0, "Prize pool is empty"); address[] memory winners = quiz.finalWinners; uint256 winnerCount = winners.length; // Get the appropriate token IERC20 tokenToUse = quiz.quizRewardToken != address(0) ? IERC20(quiz.quizRewardToken) : rewardToken; if (quiz.quizRewardToken == address(0)) { require(isRewardTokenSet, "No default token set"); } // Mark rewards as paid quiz.rewardsPaid = true; // If no winners, keep the prize pool and exit if (winnerCount == 0) { emit RewardsPaid(quizId, 0, new address[](0)); return; } uint256 prizePerWinner = quiz.quizPrizePool / winnerCount; require(quiz.quizPrizePool >= prizePerWinner * winnerCount, "Prize calculation overflow"); // Transfer tokens to each winner for (uint256 i = 0; i < winnerCount; i++) { require(tokenToUse.transfer(winners[i], prizePerWinner), "Token transfer failed"); } // Reset this quiz's prize pool after successful payout uint256 paidPool = quiz.quizPrizePool; quiz.quizPrizePool = 0; emit RewardsPaid(quizId, paidPool, winners); } /** * @notice Update the default prize pool baseline (only affects global usage). */ function updateDefaultPrizePool(uint256 newAmount) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { require(newAmount > 0, "Prize pool must be > 0"); emit PrizePoolUpdated(defaultPrizePool, newAmount); defaultPrizePool = newAmount; } /** * @notice Manually sets (overwrites) the prize pool for a specific quiz. * @param quizId The unique ID of the quiz to update. * @param newPoolAmount The new prize pool amount to set. */ function setQuizPrizePool(string calldata quizId, uint256 newPoolAmount) external onlyRole(QUIZ_MANAGER_ROLE) whenNotPaused { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); require(!quiz.isCompleted, "Cannot modify prize pool after completion"); uint256 oldPool = quiz.quizPrizePool; quiz.quizPrizePool = newPoolAmount; emit QuizPrizePoolUpdated(quizId, oldPool, newPoolAmount); } // ----------------------- // VIEW FUNCTIONS // ----------------------- function getQuiz(string calldata quizId) external view returns (Quiz memory quiz) { quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); } function getAllQuizIds() external view returns (string[] memory) { return quizIds; } function getFinalWinners(string calldata quizId) external view returns (address[] memory) { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); return quiz.finalWinners; } function getQuizPrizePool(string calldata quizId) external view returns (uint256) { Quiz storage quiz = quizzes[quizId]; require(quiz.createdTime > 0, "Quiz does not exist"); return quiz.quizPrizePool; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol"; import {ERC165Upgradeable} from "../utils/introspection/ERC165Upgradeable.sol"; import {Initializable} from "../proxy/utils/Initializable.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: * * ```solidity * 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}: * * ```solidity * 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. We recommend using {AccessControlDefaultAdminRules} * to enforce additional security measures for this role. */ abstract contract AccessControlUpgradeable is Initializable, ContextUpgradeable, IAccessControl, ERC165Upgradeable { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /// @custom:storage-location erc7201:openzeppelin.storage.AccessControl struct AccessControlStorage { mapping(bytes32 role => RoleData) _roles; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.AccessControl")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant AccessControlStorageLocation = 0x02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800; function _getAccessControlStorage() private pure returns (AccessControlStorage storage $) { assembly { $.slot := AccessControlStorageLocation } } /** * @dev Modifier that checks that an account has a specific role. Reverts * with an {AccessControlUnauthorizedAccount} error including the required role. */ modifier onlyRole(bytes32 role) { _checkRole(role); _; } function __AccessControl_init() internal onlyInitializing { } function __AccessControl_init_unchained() internal onlyInitializing { } /** * @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 virtual returns (bool) { AccessControlStorage storage $ = _getAccessControlStorage(); return $._roles[role].hasRole[account]; } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `_msgSender()` * is missing `role`. Overriding this function changes the behavior of the {onlyRole} modifier. */ function _checkRole(bytes32 role) internal view virtual { _checkRole(role, _msgSender()); } /** * @dev Reverts with an {AccessControlUnauthorizedAccount} error if `account` * is missing `role`. */ function _checkRole(bytes32 role, address account) internal view virtual { if (!hasRole(role, account)) { revert AccessControlUnauthorizedAccount(account, role); } } /** * @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 virtual returns (bytes32) { AccessControlStorage storage $ = _getAccessControlStorage(); 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. * * May emit a {RoleGranted} event. */ function grantRole(bytes32 role, address account) public virtual 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. * * May emit a {RoleRevoked} event. */ function revokeRole(bytes32 role, address account) public virtual 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 revoked `role`, emits a {RoleRevoked} * event. * * Requirements: * * - the caller must be `callerConfirmation`. * * May emit a {RoleRevoked} event. */ function renounceRole(bytes32 role, address callerConfirmation) public virtual { if (callerConfirmation != _msgSender()) { revert AccessControlBadConfirmation(); } _revokeRole(role, callerConfirmation); } /** * @dev Sets `adminRole` as ``role``'s admin role. * * Emits a {RoleAdminChanged} event. */ function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual { AccessControlStorage storage $ = _getAccessControlStorage(); bytes32 previousAdminRole = getRoleAdmin(role); $._roles[role].adminRole = adminRole; emit RoleAdminChanged(role, previousAdminRole, adminRole); } /** * @dev Attempts to grant `role` to `account` and returns a boolean indicating if `role` was granted. * * Internal function without access restriction. * * May emit a {RoleGranted} event. */ function _grantRole(bytes32 role, address account) internal virtual returns (bool) { AccessControlStorage storage $ = _getAccessControlStorage(); if (!hasRole(role, account)) { $._roles[role].hasRole[account] = true; emit RoleGranted(role, account, _msgSender()); return true; } else { return false; } } /** * @dev Attempts to revoke `role` to `account` and returns a boolean indicating if `role` was revoked. * * Internal function without access restriction. * * May emit a {RoleRevoked} event. */ function _revokeRole(bytes32 role, address account) internal virtual returns (bool) { AccessControlStorage storage $ = _getAccessControlStorage(); if (hasRole(role, account)) { $._roles[role].hasRole[account] = false; emit RoleRevoked(role, account, _msgSender()); return true; } else { return false; } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; import {ContextUpgradeable} from "../utils/ContextUpgradeable.sol"; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract PausableUpgradeable is Initializable, ContextUpgradeable { /// @custom:storage-location erc7201:openzeppelin.storage.Pausable struct PausableStorage { bool _paused; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Pausable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant PausableStorageLocation = 0xcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300; function _getPausableStorage() private pure returns (PausableStorage storage $) { assembly { $.slot := PausableStorageLocation } } /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ function __Pausable_init() internal onlyInitializing { __Pausable_init_unchained(); } function __Pausable_init_unchained() internal onlyInitializing { PausableStorage storage $ = _getPausableStorage(); $._paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { PausableStorage storage $ = _getPausableStorage(); return $._paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { PausableStorage storage $ = _getPausableStorage(); $._paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { PausableStorage storage $ = _getPausableStorage(); $._paused = false; emit Unpaused(_msgSender()); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (interfaces/IERC20.sol) pragma solidity ^0.8.20; import {IERC20} from "../token/ERC20/IERC20.sol";
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (proxy/utils/Initializable.sol) pragma solidity ^0.8.20; /** * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. * * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be * reused. This mechanism prevents re-execution of each "step" but allows the creation of new initialization steps in * case an upgrade adds a module that needs to be initialized. * * For example: * * [.hljs-theme-light.nopadding] * ```solidity * contract MyToken is ERC20Upgradeable { * function initialize() initializer public { * __ERC20_init("MyToken", "MTK"); * } * } * * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { * function initializeV2() reinitializer(2) public { * __ERC20Permit_init("MyToken"); * } * } * ``` * * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. * * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. * * [CAUTION] * ==== * Avoid leaving a contract uninitialized. * * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: * * [.hljs-theme-light.nopadding] * ``` * /// @custom:oz-upgrades-unsafe-allow constructor * constructor() { * _disableInitializers(); * } * ``` * ==== */ abstract contract Initializable { /** * @dev Storage of the initializable contract. * * It's implemented on a custom ERC-7201 namespace to reduce the risk of storage collisions * when using with upgradeable contracts. * * @custom:storage-location erc7201:openzeppelin.storage.Initializable */ struct InitializableStorage { /** * @dev Indicates that the contract has been initialized. */ uint64 _initialized; /** * @dev Indicates that the contract is in the process of being initialized. */ bool _initializing; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.Initializable")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant INITIALIZABLE_STORAGE = 0xf0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00; /** * @dev The contract is already initialized. */ error InvalidInitialization(); /** * @dev The contract is not initializing. */ error NotInitializing(); /** * @dev Triggered when the contract has been initialized or reinitialized. */ event Initialized(uint64 version); /** * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope, * `onlyInitializing` functions can be used to initialize parent contracts. * * Similar to `reinitializer(1)`, except that in the context of a constructor an `initializer` may be invoked any * number of times. This behavior in the constructor can be useful during testing and is not expected to be used in * production. * * Emits an {Initialized} event. */ modifier initializer() { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); // Cache values to avoid duplicated sloads bool isTopLevelCall = !$._initializing; uint64 initialized = $._initialized; // Allowed calls: // - initialSetup: the contract is not in the initializing state and no previous version was // initialized // - construction: the contract is initialized at version 1 (no reininitialization) and the // current contract is just being deployed bool initialSetup = initialized == 0 && isTopLevelCall; bool construction = initialized == 1 && address(this).code.length == 0; if (!initialSetup && !construction) { revert InvalidInitialization(); } $._initialized = 1; if (isTopLevelCall) { $._initializing = true; } _; if (isTopLevelCall) { $._initializing = false; emit Initialized(1); } } /** * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be * used to initialize parent contracts. * * A reinitializer may be used after the original initialization step. This is essential to configure modules that * are added through upgrades and that require initialization. * * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer` * cannot be nested. If one is invoked in the context of another, execution will revert. * * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in * a contract, executing them in the right order is up to the developer or operator. * * WARNING: Setting the version to 2**64 - 1 will prevent any future reinitialization. * * Emits an {Initialized} event. */ modifier reinitializer(uint64 version) { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing || $._initialized >= version) { revert InvalidInitialization(); } $._initialized = version; $._initializing = true; _; $._initializing = false; emit Initialized(version); } /** * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the * {initializer} and {reinitializer} modifiers, directly or indirectly. */ modifier onlyInitializing() { _checkInitializing(); _; } /** * @dev Reverts if the contract is not in an initializing state. See {onlyInitializing}. */ function _checkInitializing() internal view virtual { if (!_isInitializing()) { revert NotInitializing(); } } /** * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call. * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized * to any version. It is recommended to use this to lock implementation contracts that are designed to be called * through proxies. * * Emits an {Initialized} event the first time it is successfully executed. */ function _disableInitializers() internal virtual { // solhint-disable-next-line var-name-mixedcase InitializableStorage storage $ = _getInitializableStorage(); if ($._initializing) { revert InvalidInitialization(); } if ($._initialized != type(uint64).max) { $._initialized = type(uint64).max; emit Initialized(type(uint64).max); } } /** * @dev Returns the highest version that has been initialized. See {reinitializer}. */ function _getInitializedVersion() internal view returns (uint64) { return _getInitializableStorage()._initialized; } /** * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}. */ function _isInitializing() internal view returns (bool) { return _getInitializableStorage()._initializing; } /** * @dev Returns a pointer to the storage namespace. */ // solhint-disable-next-line var-name-mixedcase function _getInitializableStorage() private pure returns (InitializableStorage storage $) { assembly { $.slot := INITIALIZABLE_STORAGE } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If EIP-1153 (transient storage) is available on the chain you're deploying at, * consider using {ReentrancyGuardTransient} instead. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuardUpgradeable is Initializable { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; /// @custom:storage-location erc7201:openzeppelin.storage.ReentrancyGuard struct ReentrancyGuardStorage { uint256 _status; } // keccak256(abi.encode(uint256(keccak256("openzeppelin.storage.ReentrancyGuard")) - 1)) & ~bytes32(uint256(0xff)) bytes32 private constant ReentrancyGuardStorageLocation = 0x9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00; function _getReentrancyGuardStorage() private pure returns (ReentrancyGuardStorage storage $) { assembly { $.slot := ReentrancyGuardStorageLocation } } /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); function __ReentrancyGuard_init() internal onlyInitializing { __ReentrancyGuard_init_unchained(); } function __ReentrancyGuard_init_unchained() internal onlyInitializing { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); $._status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); // On the first call to nonReentrant, _status will be NOT_ENTERED if ($._status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail $._status = ENTERED; } function _nonReentrantAfter() private { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) $._status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { ReentrancyGuardStorage storage $ = _getReentrancyGuardStorage(); return $._status == ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; import {Initializable} from "../proxy/utils/Initializable.sol"; /** * @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 ContextUpgradeable is Initializable { function __Context_init() internal onlyInitializing { } function __Context_init_unchained() internal onlyInitializing { } function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/ERC165.sol) pragma solidity ^0.8.20; import {IERC165} from "@openzeppelin/contracts/utils/introspection/IERC165.sol"; import {Initializable} from "../../proxy/utils/Initializable.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC-165 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); * } * ``` */ abstract contract ERC165Upgradeable is Initializable, IERC165 { function __ERC165_init() internal onlyInitializing { } function __ERC165_init_unchained() internal onlyInitializing { } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) { return interfaceId == type(IERC165).interfaceId; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-20 standard as defined in the ERC. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the value of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the value of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves a `value` amount of tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 value) 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 a `value` amount of tokens 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 value) external returns (bool); /** * @dev Moves a `value` amount of tokens from `from` to `to` using the * allowance mechanism. `value` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 value) external returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (access/IAccessControl.sol) pragma solidity ^0.8.20; /** * @dev External interface of AccessControl declared to support ERC-165 detection. */ interface IAccessControl { /** * @dev The `account` is missing a role. */ error AccessControlUnauthorizedAccount(address account, bytes32 neededRole); /** * @dev The caller of a function is not the expected one. * * NOTE: Don't confuse with {AccessControlUnauthorizedAccount}. */ error AccessControlBadConfirmation(); /** * @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. */ 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. This account bears the admin role (for the granted role). * Expected in cases where the role was granted using the internal {AccessControl-_grantRole}. */ 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 `callerConfirmation`. */ function renounceRole(bytes32 role, address callerConfirmation) external; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.1.0) (utils/introspection/IERC165.sol) pragma solidity ^0.8.20; /** * @dev Interface of the ERC-165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[ERC]. * * 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[ERC 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); }
{ "evmVersion": "paris", "optimizer": { "enabled": true, "mode": "3" }, "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AccessControlBadConfirmation","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"name":"AccessControlUnauthorizedAccount","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidInitialization","type":"error"},{"inputs":[],"name":"NotInitializing","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"address[]","name":"newPlayers","type":"address[]"}],"name":"EnrolledPlayersUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint64","name":"version","type":"uint64"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldPrizePool","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPrizePool","type":"uint256"}],"name":"PrizePoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"winners","type":"address[]"}],"name":"QuizCompleted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"QuizCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"uint256","name":"oldPool","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newPool","type":"uint256"}],"name":"QuizPrizePoolUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"quizId","type":"string"}],"name":"RewardDeposited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"tokenAddress","type":"address"}],"name":"RewardTokenSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"quizId","type":"string"},{"indexed":false,"internalType":"uint256","name":"totalPaid","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"winners","type":"address[]"}],"name":"RewardsPaid","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"QUIZ_MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"address[]","name":"finalWinners","type":"address[]"},{"internalType":"string[]","name":"questionContents","type":"string[]"},{"internalType":"string[]","name":"correctAnswers","type":"string[]"},{"internalType":"address[][]","name":"questionParticipants","type":"address[][]"},{"internalType":"address[][]","name":"questionCorrectPlayers","type":"address[][]"},{"internalType":"address[][]","name":"questionOptedOutPlayers","type":"address[][]"}],"name":"completeQuiz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"address[]","name":"enrolledPlayers","type":"address[]"},{"internalType":"address","name":"quizRewardToken","type":"address"},{"internalType":"uint256","name":"customPrizePool","type":"uint256"}],"name":"createQuiz","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultPrizePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositQuizPrizePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getAllQuizIds","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"getFinalWinners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"getQuiz","outputs":[{"components":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"createdTime","type":"uint256"},{"internalType":"uint256","name":"completedTime","type":"uint256"},{"internalType":"address","name":"quizRewardToken","type":"address"},{"internalType":"uint256","name":"quizPrizePool","type":"uint256"},{"internalType":"address[]","name":"enrolledPlayers","type":"address[]"},{"components":[{"internalType":"string","name":"content","type":"string"},{"internalType":"string","name":"correctAnswer","type":"string"},{"internalType":"address[]","name":"participants","type":"address[]"},{"internalType":"address[]","name":"correctPlayers","type":"address[]"},{"internalType":"address[]","name":"optedOutPlayers","type":"address[]"}],"internalType":"struct QuizManager.Question[]","name":"questions","type":"tuple[]"},{"internalType":"address[]","name":"finalWinners","type":"address[]"},{"internalType":"bool","name":"isCompleted","type":"bool"},{"internalType":"bool","name":"rewardsPaid","type":"bool"}],"internalType":"struct QuizManager.Quiz","name":"quiz","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"getQuizPrizePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"uint256","name":"_defaultPrizePool","type":"uint256"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isRewardTokenSet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerDeposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"}],"name":"payoutWinners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"prizePool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"quizIds","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"","type":"string"}],"name":"quizzes","outputs":[{"internalType":"string","name":"id","type":"string"},{"internalType":"uint256","name":"createdTime","type":"uint256"},{"internalType":"uint256","name":"completedTime","type":"uint256"},{"internalType":"address","name":"quizRewardToken","type":"address"},{"internalType":"uint256","name":"quizPrizePool","type":"uint256"},{"internalType":"bool","name":"isCompleted","type":"bool"},{"internalType":"bool","name":"rewardsPaid","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","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":[],"name":"rewardToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"uint256","name":"newPoolAmount","type":"uint256"}],"name":"setQuizPrizePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"setRewardToken","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":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateDefaultPrizePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"quizId","type":"string"},{"internalType":"address[]","name":"newPlayers","type":"address[]"}],"name":"updateEnrolledPlayers","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
9c4d535b00000000000000000000000000000000000000000000000000000000000000000100065f233febe05b26265208d42fca42d8b948367e602fd8f8976bc1549b7500000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x0002000000000002001900000000000200010000000103550000006003100270000005bb0030019d0000008004000039000000400040043f0000000100200190000000900000c13d000005bb03300197000000040030008c000014b40000413d000000000201043b000000e002200270000005c40020009c000000b30000a13d000005c50020009c000000ce0000213d000005d10020009c000001450000213d000005d70020009c0000020f0000213d000005da0020009c000004820000613d000005db0020009c000014b40000c13d000000440030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d001800040020003d0000001804100360000000000404043b001900000004001d000005c00040009c000014b40000213d0000002404200039001700000004001d0000001902400029000000000032004b000014b40000213d0000002401100370000000000101043b001600000001001d0000000001000411000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000005d30000613d000005f601000041000000000101041a000000ff00100190000008070000c13d000000190100002900000659021001980015001f00100193000000400100043d001400000002001d0000000002210019000000180300002900000020033000390000000103300367000000590000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000000550000c13d000000150000006b000000670000613d000000140330036000000015040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000001904000029000000000241001900000003030000390000000000320435000005bb0010009c000005bb010080410000004001100210000006040040009c000006040200004100000000020440190000006002200210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000006050110009a000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b0000000102100039000000000202041a000000000002004b00000aca0000613d0000000301100039000000000101041a000005f80210019800000aee0000c13d000000400100043d0000006402100039000006330300004100000000003204350000004402100039000006340300004100000000003204350000002402100039000000300300003900000ae30000013d0000000001000416000000000001004b000014b40000c13d000005bc01000041000000000101041a000005bd00100198000000af0000c13d000005c002100197000005c00020009c000000aa0000613d000005c0011001c7000005bc02000041000000000012041b000005c001000041000000800010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005c1011001c70000800d020000390000000103000039000005c20400004116e916df0000040f0000000100200190000014b40000613d000000200100003900000100001004430000012000000443000005c301000041000016ea0001042e000005be01000041000000800010043f000005bf01000041000016eb00010430000005dc0020009c0000012e0000a13d000005dd0020009c000001bd0000213d000005e30020009c0000028a0000213d000005e60020009c0000062a0000613d000005e70020009c000014b40000c13d000000440030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000002402100370000000000302043b000005f80030009c000014b40000213d0000000002000411000000000023004b000008820000c13d0000000401100370000000000101043b16e916780000040f0000000001000019000016ea0001042e000005c60020009c000001af0000213d000005cc0020009c000002380000213d000005cf0020009c0000048a0000613d000005d00020009c000014b40000c13d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000402043b000005c00040009c000014b40000213d0000002302400039000000000032004b000014b40000813d0000000402400039000000000121034f000000000201043b000000240140003916e9154a0000040f0000000013010434001800000003001d000000400200043d001900000002001d16e914b60000040f00000003040000390000001803000029000000190100002900000000021300190000000000420435000000200230003916e916ca0000040f001600000001001d16e914ef0000040f00000016030000290000000102300039000000000202041a001900000002001d0000000202300039000000000202041a001800000002001d0000000302300039000000000202041a001700000002001d0000000402300039000000000202041a001500000002001d0000000802300039000000000202041a001400000002001d000000e002000039000000400300043d001300000003001d0000000002230436001600000002001d000000e00230003916e914c30000040f00000014050000290000ff00005001900000000002000039000000010200c0390000001304000029000000c0034000390000000000230435000000ff005001900000000002000039000000010200c039000000a00340003900000000002304350000008002400039000000150300002900000000003204350000001702000029000005f802200197000000600340003900000000002304350000004002400039000000180300002900000000003204350000001902000029000000160300002900000000002304350000000001410049000005bb0010009c000005bb010080410000006001100210000005bb0040009c000005bb040080410000004002400210000000000121019f000016ea0001042e000005e80020009c000001ca0000a13d000005e90020009c000001f70000213d000005ec0020009c000002e60000613d000005ed0020009c000014b40000c13d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000401100370000000000101043b000000000010043f0000060f01000041000000200010043f0000004002000039000000000100001916e916ca0000040f0000000101100039000004860000013d000005d20020009c000002570000213d000005d50020009c000004da0000613d000005d60020009c000014b40000c13d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000402043b000005c00040009c000014b40000213d0000002302400039000000000032004b000014b40000813d0000000405400039000000000251034f000000000202043b000005c00020009c000014b40000213d00000000042400190000002404400039000000000034004b000014b40000213d000001c003000039000000400030043f0000002004500039000000000141034f0000006004000039000000800040043f000000a00000043f000000c00000043f000000e00000043f000001000000043f000001200040043f000001400040043f000001600040043f00000659052001980000001f0620018f000001c004500039000001800000043f000001a00000043f000001780000613d000000000701034f000000007807043c0000000003830436000000000043004b000001740000c13d000000000006004b000001850000613d000000000151034f0000000303600210000000000504043300000000053501cf000000000535022f000000000101043b0000010003300089000000000131022f00000000013101cf000000000151019f0000000000140435000001c00120003900000003030000390000000000310435000006040020009c000006040200804100000060012002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000006210110009a000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000f00000001001d000000400100043d001000000001001d000006220010009c000007b50000213d00000010010000290000014004100039000000400040043f0000000f01000029000000000101041a000000010210019000000001051002700000007f0550618f0000001f0050008c00000000030000390000000103002039000000000331013f000000010030019000000a300000613d0000063601000041000000000010043f0000002201000039000000040010043f0000063701000041000016eb00010430000005c70020009c000002600000213d000005ca0020009c000004f30000613d000005cb0020009c000014b40000c13d0000000001000416000000000001004b000014b40000c13d000000000100041a000005f801100197000000800010043f0000060301000041000016ea0001042e000005de0020009c000002af0000213d000005e10020009c000006690000613d000005e20020009c000014b40000c13d0000000001000416000000000001004b000014b40000c13d000005fe01000041000000800010043f0000060301000041000016ea0001042e000005ee0020009c000007bb0000613d000005ef0020009c000007a90000613d000005f00020009c000014b40000c13d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000401100370000000000101043b001900000001001d0000000001000411000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000005d30000613d000005f601000041000000000101041a000000ff00100190000008070000c13d000000000200041a00000625002001980000093e0000c13d000000400100043d00000044021000390000065203000041000000000032043500000024021000390000001d0300003900000ad00000013d000005ea0020009c000002ec0000613d000005eb0020009c000014b40000c13d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000401100370000000000101043b0000000402000039000000000302041a000000000031004b000014b40000813d000000000020043f0000061e0110009a16e914ef0000040f0000002002000039000000400300043d001900000003001d000000000223043616e914c30000040f000006200000013d000005d80020009c0000059d0000613d000005d90020009c000014b40000c13d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000401100370000000000101043b001900000001001d000005f80010009c000014b40000213d0000000001000411000000000010043f000005f901000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000005b10000613d0000001901000029000005f8051001980000095e0000c13d000000400100043d00000044021000390000062a0300004100000000003204350000002402100039000000150300003900000ad00000013d000005cd0020009c000005ba0000613d000005ce0020009c000014b40000c13d000000440030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000002402100370000000000202043b001900000002001d000005f80020009c000014b40000213d0000000401100370000000000101043b001800000001001d000000000010043f0000060f01000041000000200010043f0000004002000039000000000100001916e916ca0000040f0000000101100039000000000101041a16e916480000040f0000001801000029000000190200002916e916780000040f0000000001000019000016ea0001042e000005d30020009c000005e10000613d000005d40020009c000014b40000c13d0000000001000416000000000001004b000014b40000c13d0000000201000039000004860000013d000005c80020009c000005e70000613d000005c90020009c000014b40000c13d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d000005bc02000041000000000202041a000005bd032001970000000401100370000000000501043b000005c001200198000007cc0000613d000000010010008c000007db0000c13d001700000002001d001800000005001d001900000003001d000005f1010000410000000000100443000000000100041000000004001004430000000001000414000005bb0010009c000005bb01008041000000c001100210000005f2011001c7000080020200003916e916e40000040f0000000100200190000011350000613d000000000101043b000000000001004b000000190300002900000018050000290000001702000029000007ce0000613d000000400400043d000007db0000013d000005e40020009c000006a40000613d000005e50020009c000014b40000c13d0000000001000416000000000001004b000014b40000c13d0000000001000411000000000010043f000005f901000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000400200043d000000000101043b000000000101041a000000ff001001900000080f0000c13d0000060d01000041000000000012043500000004012000390000000003000411000000000031043500000024012000390000000000010435000005bb0020009c000005bb0200804100000040012002100000060e011001c7000016eb00010430000005df0020009c0000079e0000613d000005e00020009c000014b40000c13d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d001900040020003d0000001901100360000000000101043b001200000001001d000005c00010009c000014b40000213d0000002402200039001100000002001d0000001201200029000000000031004b000014b40000213d0000000001000411000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000005d30000613d000005f601000041000000000101041a000000ff00100190000008070000c13d000000400100043d000005f702000041000000000302041a000000020030008c00000a8f0000c13d0000064002000041000008090000013d0000000001000416000000000001004b000014b40000c13d000000000100041a0000062500100198000007a40000013d000000e40030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d0000000404200039000000000441034f000000000404043b001900000004001d000005c00040009c000014b40000213d0000002404200039001800000004001d0000001902400029000000000032004b000014b40000213d0000002402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d0000000404200039000000000441034f000000000404043b001700000004001d000005c00040009c000014b40000213d001500240020003d000000170200002900000005022002100000001502200029000000000032004b000014b40000213d0000004402100370000000000202043b001600000002001d000005c00020009c000014b40000213d00000016020000290000002302200039000000000032004b000014b40000813d00000016020000290000000402200039000000000221034f000000000202043b001400000002001d000005c00020009c000014b40000213d0000001602000029001300240020003d000000140200002900000005022002100000001302200029000000000032004b000014b40000213d0000006402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d0000000404200039000000000441034f000000000404043b001200000004001d000005c00040009c000014b40000213d001100240020003d000000120200002900000005022002100000001102200029000000000032004b000014b40000213d0000008402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d0000000404200039000000000441034f000000000404043b001000000004001d000005c00040009c000014b40000213d000f00240020003d000000100200002900000005022002100000000f02200029000000000032004b000014b40000213d000000a402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d0000000404200039000000000441034f000000000404043b000e00000004001d000005c00040009c000014b40000213d000d00240020003d0000000e0200002900000005022002100000000d02200029000000000032004b000014b40000213d000000c402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d0000000404200039000000000141034f000000000101043b000c00000001001d000005c00010009c000014b40000213d000b00240020003d0000000c0100002900000005011002100000000b01100029000000000031004b000014b40000213d0000000001000411000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000005d30000613d000005f601000041000000000101041a000000ff00100190000008070000c13d000000190100002900000659021001980002001f0010019300000018010000290000000103100367000000400100043d000100000002001d00000000022100190000039d0000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000003990000c13d000000020000006b000003ab0000613d000000010330036000000002040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000001904000029000000000241001900000003030000390000000000320435000005bb0010009c000005bb010080410000004001100210000006040040009c000006040200004100000000020440190000006002200210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000006050110009a000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000a00000001001d0000000101100039000000000101041a000000000001004b00000aca0000613d0000000a010000290000000801100039000000000201041a000000ff002001900000114e0000c13d0000001204000029000000140040006b000011520000c13d0000001004000029000000140040006b000011560000c13d0000000e04000029000000140040006b0000115a0000c13d0000000c04000029000000140040006b000011610000c13d0000065a0220019700000001022001bf000000000021041b0000061a0100004100000000001004430000000001000414000005bb0010009c000005bb01008041000000c0011002100000061b011001c70000800b0200003916e916e40000040f0000000100200190000011350000613d000000000101043b0000000a030000290000000202300039000000000012041b0000000702300039000000000302041a0000001701000029001200000002001d000000000012041b001000000003001d000000000013004b000004060000a13d0000001201000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000201043b00000017012000290000001002200029000000000021004b000004060000813d000000000001041b0000000101100039000000000021004b000004020000413d0000001201000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000170000006b000004210000613d000000010200036700000000030000190000001504000029000000000542034f000000000505043b000005f80050009c000014b40000213d0000000006130019000000000056041b00000020044000390000000103300039000000170030006c000004170000413d000000140000006b0000116c0000c13d000000400300043d00000060013000390000001902000029000000000021043500000060010000390000000001130436001300000001001d001400000003001d0000008001300039001600000001001d000000010110002900000018020000290000000102200367000000010000006b000004380000613d000000000302034f0000001604000029000000003503043c0000000004540436000000000014004b000004340000c13d000000020000006b000004460000613d000000010220036000000002030000290000000303300210000000000401043300000000043401cf000000000434022f000000000202043b0000010003300089000000000232022f00000000023201cf000000000242019f00000000002104350000001602000029000000190120002900000000000104350000061a0100004100000000001004430000000001000414000005bb0010009c000005bb01008041000000c0011002100000061b011001c70000800b0200003916e916e40000040f0000000100200190000011350000613d000000000101043b0000001302000029000000000012043500000019010000290000001f0110003900000659011001970000001601100029000000140300002900000000023100490000004003300039000000000023043500000017020000290000000001210436000000000002004b0000046f0000613d000000010200036700000000030000190000001504200360000000000404043b000005f80040009c000014b40000213d00000000014104360000001504000029001500200040003d0000000103300039000000170030006c000004650000413d00000014020000290000000001210049000005bb0010009c000005bb010080410000006001100210000005bb0020009c000005bb020080410000004002200210000000000121019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000005fb011001c70000800d0200003900000001030000390000064c040000410000091d0000013d0000000001000416000000000001004b000014b40000c13d0000000101000039000000000101041a000000800010043f0000060301000041000016ea0001042e000000840030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d001700040020003d0000001704100360000000000404043b001800000004001d000005c00040009c000014b40000213d0000002404200039001600000004001d0000001802400029000000000032004b000014b40000213d0000002402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d0000000404200039000000000441034f000000000404043b001900000004001d000005c00040009c000014b40000213d001500240020003d000000190200002900000005022002100000001502200029000000000032004b000014b40000213d0000004402100370000000000202043b001400000002001d000005f80020009c000014b40000213d0000006401100370000000000101043b001300000001001d0000000001000411000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000005d30000613d000005f601000041000000000101041a000000ff00100190000008070000c13d000000400100043d000000180000006b00000bdc0000c13d0000004402100039000006200300004100000000003204350000002402100039000000170300003900000ad00000013d000000440030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000002402100370000000000202043b001900000002001d000005f80020009c000014b40000213d0000000401100370000000000101043b000000000010043f0000060f01000041000000200010043f0000004002000039000000000100001916e916ca0000040f0000001902000029000000000020043f000000200010043f0000000001000019000000400200003916e916ca0000040f000007a20000013d000000440030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d001800040020003d0000001804100360000000000404043b001900000004001d000005c00040009c000014b40000213d00000019022000290000002402200039000000000032004b000014b40000213d0000002401100370000000000101043b001700000001001d0000000001000411000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000005d30000613d000005f601000041000000000101041a000000ff00100190000008070000c13d000000190100002900000659021001980016001f00100193000000400100043d001500000002001d000000000221001900000018030000290000002003300039001800000003001d0000000103300367000005320000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b0000052e0000c13d000000160000006b000005400000613d000000150330036000000016040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000001904000029000000000241001900000003030000390000000000320435000005bb0010009c000005bb010080410000004001100210000006040040009c000006040200004100000000020440190000006002200210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000006050110009a000080100200003916e916e40000040f0000000100200190000014b40000613d000000000201043b0000000101200039000000000101041a000000000001004b00000aca0000613d000000400100043d0000000803200039000000000303041a000000ff0030019000000adb0000c13d0000000403200039000000000203041a0000001704000029000000000043041b000000600310003900000019040000290000000000430435000000600300003900000000033104360000008004100039000000150540002900000018060000290000000106600367000000150000006b000005750000613d000000000706034f0000000008040019000000007907043c0000000008980436000000000058004b000005710000c13d000000160000006b000005830000613d000000150660036000000016070000290000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f000000000065043500000019050000290000000004540019000000000004043500000040041000390000001706000029000000000064043500000000002304350000001f0250003900000659022001970000060a0020009c0000060a020080410000006002200210000005bb0010009c000005bb010080410000004001100210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f0000060b0110009a0000800d0200003900000001030000390000060c040000410000091d0000013d0000000001000416000000000001004b000014b40000c13d0000000001000411000000000010043f000005f901000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000007e20000c13d000000400100043d0000060d02000041000000000021043500000004021000390000000003000411000000000032043500000024021000390000000000020435000005dc0000013d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000401100370000000000101043b001900000001001d0000000001000411000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000007f90000c13d000000400100043d0000002402100039000005fe0300004100000000003204350000060d020000410000000000210435000000040210003900000000030004110000000000320435000005bb0010009c000005bb0100804100000040011002100000060e011001c7000016eb000104300000000001000416000000000001004b000014b40000c13d000000800000043f0000060301000041000016ea0001042e000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000401100370000000000101043b000005c00010009c000014b40000213d0000000401100039000000000203001916e914d50000040f0000001f0420018f00000659052001980000000106100367000000400100043d0000000003510019000005ff0000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b000005fb0000c13d000000000004004b0000060c0000613d000000000556034f0000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f0000000000430435000000000321001900000003040000390000000000430435000000200220003916e916ca0000040f001900000001001d0000000102100039000000000102041a000000000001004b0000000001000039000000010100c03916e915820000040f0000001901000029000000070110003916e915960000040f0000002002000039000000400300043d001900000003001d000000000223043616e9153c0000040f00000019020000290000000001210049000005bb0010009c000005bb010080410000006001100210000005bb0020009c000005bb020080410000004002200210000000000121019f000016ea0001042e000000440030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000202043b001900000002001d0000002401100370000000000101043b001800000001001d000005f80010009c000014b40000213d0000001901000029000000000010043f0000060f01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b0000000101100039000000000101041a001700000001001d000000000010043f0000060f01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000009bf0000c13d000000400100043d00000024021000390000001703000029000005d60000013d000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000401100370000000000101043b000005c00010009c000014b40000213d0000000401100039000000000203001916e914d50000040f0000001f0420018f00000659052001980000000106100367000000400100043d0000000003510019000006810000613d000000000706034f0000000008010019000000007907043c0000000008980436000000000038004b0000067d0000c13d000000000004004b0000068e0000613d000000000556034f0000000304400210000000000603043300000000064601cf000000000646022f000000000505043b0000010004400089000000000545022f00000000044501cf000000000464019f0000000000430435000000000321001900000003040000390000000000430435000000200220003916e916ca0000040f001900000001001d0000000102100039000000000102041a000000000001004b0000000001000039000000010100c03916e915820000040f00000019010000290000000401100039000000000101041a000000400200043d0000000000120435000005bb0020009c000005bb02008041000000400120021000000641011001c7000016ea0001042e000000440030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d001800040020003d0000001804100360000000000404043b001900000004001d000005c00040009c000014b40000213d00000019022000290000002402200039000000000032004b000014b40000213d0000002402100370000000000202043b000005c00020009c000014b40000213d0000002304200039000000000034004b000014b40000813d0000000404200039000000000141034f000000000401043b000005c00040009c000014b40000213d000000240520003900000005014002100000000001510019000000000031004b000014b40000213d0000000001000411000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c70000801002000039001700000004001d001600000005001d16e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000005d30000613d000005f601000041000000000101041a000000ff00100190000008070000c13d000000190100002900000659021001980015001f00100193000000400100043d001400000002001d000000000221001900000018030000290000002003300039001800000003001d0000000103300367000006f30000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000006ef0000c13d000000150000006b000007010000613d000000140330036000000015040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000001904000029000000000241001900000003030000390000000000320435000005bb0010009c000005bb010080410000004001100210000006040040009c000006040200004100000000020440190000006002200210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000006050110009a000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b0000000102100039000000000202041a000000000002004b00000aca0000613d0000000502100039000000000302041a0000001701000029001300000002001d000000000012041b001200000003001d000000000013004b000007390000a13d0000001301000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f00000001002001900000001703000029000014b40000613d000000000201043b00000000013200190000001202200029000000000021004b000007390000813d000000000001041b0000000101100039000000000021004b000007350000413d0000001301000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f000000010020019000000017070000290000001604000029000014b40000613d0000000102000367000000000101043b000000000007004b000007550000613d0000000003000019000000000542034f000000000505043b000005f80050009c000014b40000213d0000000006130019000000000056041b00000020044000390000000103300039000000000073004b0000074b0000413d000000400100043d00000040031000390000001904000029000000000043043500000018062003600000004003000039000000000331043600000060041000390000001405400029000000140000006b000007660000613d000000000706034f0000000008040019000000007907043c0000000008980436000000000058004b000007620000c13d000000150000006b000007740000613d000000140660036000000015070000290000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f00000000006504350000001906000029000000000564001900000000000504350000001f05600039000006590550019700000000045400190000000005140049000000000053043500000017050000290000000003540436000000000005004b0000078c0000613d000000000400001900000017060000290000001607000029000000000572034f000000000505043b000005f80050009c000014b40000213d000000000353043600000020077000390000000104400039000000000064004b000007830000413d0000000002130049000005bb0020009c000005bb020080410000006002200210000005bb0010009c000005bb010080410000004001100210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000005fb011001c70000800d02000039000000010300003900000644040000410000091d0000013d0000000001000416000000000001004b000014b40000c13d000005f601000041000000000101041a000000ff001001900000000001000039000000010100c039000000800010043f0000060301000041000016ea0001042e0000000001000416000000000001004b000014b40000c13d0000000402000039000000000502041a000006530050009c000007b50000813d00000005015002100000003f011000390000062301100197000006540010009c0000081a0000a13d0000063601000041000000000010043f0000004101000039000000040010043f0000063701000041000016eb00010430000000240030008c000014b40000413d0000000002000416000000000002004b000014b40000c13d0000000401100370000000000101043b0000065600100198000014b40000c13d000006570010009c00000000020000390000000102006039000006580010009c00000001022061bf000000800020043f0000060301000041000016ea0001042e000000000003004b000007db0000c13d000005f30120019700000001011001bf000005f402200197000005f5022001c7000000000003004b000000000201c019000005bc01000041000000000021041b000005bd00200198000008860000c13d000000400100043d0000060102000041000008090000013d000005be010000410000000000140435000005bb0040009c000005bb04008041000000400140021000000602011001c7000016eb00010430000005f601000041000000000201041a000000ff00200190000008070000c13d0000065a0220019700000001022001bf000000000021041b000000400100043d00000000020004110000000000210435000005bb0010009c000005bb0100804100000040011002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f00000600011001c70000800d0200003900000001030000390000062b040000410000091d0000013d000005f601000041000000000101041a000000ff00100190000008070000c13d000000400100043d0000001904000029000000000004004b000009450000c13d0000004402100039000006110300004100000000003204350000002402100039000000160300003900000ad00000013d000000400100043d0000064e020000410000000000210435000005bb0010009c000005bb01008041000000400110021000000602011001c7000016eb00010430000005f601000041000000000301041a000000ff003001900000090d0000c13d00000643010000410000000000120435000005bb0020009c000005bb02008041000000400120021000000602011001c7000016eb000104300000008001100039000000400010043f000000800050043f000000000020043f000000000005004b000008700000613d000000a0060000390000065507000041000000200800008a0000000009000019001300000005001d000000000107041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000030000390000000103002039000000000032004b000001a90000c13d000000400a00043d00000000034a0436000000000002004b000008560000613d001400000003001d001500000004001d00160000000a001d001700000009001d001900000006001d001800000007001d000000000070043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000150b00002900000000000b004b00000013050000290000001906000029000000200800008a00000017090000290000085c0000613d000000000201043b00000000010000190000001807000029000000160a000029000000140c00002900000000031c0019000000000402041a0000000000430435000000010220003900000020011000390000000000b1004b0000084e0000413d0000085f0000013d0000065a011001970000000000130435000000000004004b000000200100003900000000010060390000085f0000013d00000000010000190000001807000029000000160a0000290000003f01100039000000000281016f0000000001a20019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f0000000006a6043600000001077000390000000109900039000000000059004b000008250000413d000000400100043d00000020020000390000000003210436000000800200043d0000000000230435000000400310003900000005042002100000000007340019000000000002004b000009220000c13d0000000002170049000005bb0020009c000005bb020080410000006002200210000005bb0010009c000005bb010080410000004001100210000000000112019f000016ea0001042e0000064501000041000000800010043f000005bf01000041000016eb00010430001800000005001d001900000003001d000005f601000041000000000201041a0000065a02200197000000000021041b0000000102000039000005f701000041000000000021041b0000000001000411000005f801100197001700000001001d000000000010043f000005f901000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000008c20000c13d0000001701000029000000000010043f000005f901000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000201041a0000065a0220019700000001022001bf000000000021041b0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fb011001c70000800d020000390000000403000039000005fc0400004100000000050000190000001706000029000000000700041116e916df0000040f0000000100200190000014b40000613d0000001701000029000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000008f30000c13d0000001701000029000000000010043f000005fd01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000201041a0000065a0220019700000001022001bf000000000021041b0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fb011001c70000800d020000390000000403000039000005fc04000041000005fe050000410000001706000029000000000700041116e916df0000040f0000000100200190000014b40000613d00000002010000390000001802000029000000000021041b0000000101000039000000000021041b000000190000006b000009200000c13d000005bc01000041000000000201041a000005ff02200197000000000021041b000000400100043d00000001030000390000000000310435000005bb0010009c000005bb0100804100000040011002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f00000600011001c70000800d02000039000005c2040000410000091d0000013d0000065a03300197000000000031041b00000000010004110000000000120435000005bb0020009c000005bb0200804100000040012002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f00000600011001c70000800d020000390000000103000039000006420400004116e916df0000040f0000000100200190000014b40000613d0000000001000019000016ea0001042e000000a00400003900000000060000190000092d0000013d0000001f0980003900000659099001970000000008780019000000000008043500000000077900190000000106600039000000000026004b000008790000813d0000000008170049000000400880008a0000000003830436000000004804043400000000980804340000000007870436000000000008004b000009250000613d000000000a000019000000000b7a0019000000000ca90019000000000c0c04330000000000cb0435000000200aa0003900000000008a004b000009360000413d000009250000013d0000001903000029000000000003004b0000096e0000c13d000000400100043d0000004402100039000006510300004100000acd0000013d0000000202000039000000000202041a000000200310003900000000004304350000000000210435000005bb0010009c000005bb0100804100000040011002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f000005fa011001c70000800d020000390000000103000039000006100400004116e916df0000040f0000000100200190000014b40000613d00000019010000290000000202000039000000000012041b0000000001000019000016ea0001042e000000000100041a000006250010019800000a0b0000c13d0000062701100197000000000115019f00000628011001c7000000000010041b0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fb011001c70000800d02000039000000020300003900000629040000410000091d0000013d000000400400043d001800000004001d000000440140003900000000003104350000000001000410000005f801100197000000240340003900000000001304350000062c0100004100000000001404350000000001000411000005f80110019700000004034000390000000000130435000005bb0040009c000005bb01000041000000000104401900000040011002100000000003000414000005bb0030009c000005bb03008041000000c003300210000000000113019f00000612011001c7000005f80220019716e916df0000040f0000006003100270000005bb03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000180b0000290000001805700029000009980000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000009940000c13d000000000006004b000009a50000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000a120000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f000000200030008c000014b40000413d00000000020b0433000000000002004b0000000003000039000000010300c039000000000032004b000014b40000c13d000000000002004b00000bb20000c13d00000044021000390000063a03000041000002340000013d0000001901000029000000000010043f0000060f01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000101041a000000ff00100190000009200000c13d0000001901000029000000000010043f0000060f01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b0000001802000029000000000020043f000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000000201041a0000065a0220019700000001022001bf000000000021041b0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fb011001c70000800d020000390000000403000039000005fc0400004100000019050000290000001806000029000000000700041116e916df0000040f0000000100200190000009200000c13d000014b40000013d000000400100043d0000004402100039000006260300004100000000003204350000002402100039000000180300003900000ad00000013d0000001f0530018f0000062d06300198000000400200043d000000000462001900000a1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000a190000c13d000000000005004b00000a2a0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000005bb0020009c000005bb020080410000004002200210000000000112019f000016eb00010430001900000004001d001800000005001d0000000000540435000000000002004b00000a500000613d0000000f01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d0000001806000029000000000006004b000000000200001900000a570000613d00000010020000290000016003200039000000000101043b00000000020000190000000004230019000000000501041a000000000054043500000001011000390000002002200039000000000062004b00000a480000413d00000a570000013d0000065a01100197000000100200002900000160022000390000000000120435000000180000006b000000200200003900000000020060390000003f0120003900000659021001970000001901200029000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f0000001002000029000000190100002900000000041204360000000f030000290000000101300039000000000101041a000e00000004001d00000000001404350000000201300039000000000101041a0000004004200039000d00000004001d00000000001404350000000301300039000000000101041a000005f8011001970000006004200039000b00000004001d000000000014043500000080022000390000000401300039000000000101041a000c00000002001d00000000001204350000000501300039000000000301041a000000400200043d001900000002001d001800000003001d0000000002320436001700000002001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000180000006b00000b570000c13d000000170400002900000b620000013d0000000203000039000000000032041b000000120200002900000659032001980010001f00200193000f00000003001d000000000231001900000019030000290000002003300039000000010330036700000aa00000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b00000a9c0000c13d000000100000006b00000aae0000613d0000000f0330036000000010040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000001204000029000000000241001900000003030000390000000000320435000005bb0010009c000005bb010080410000004001100210000006040040009c000006040200004100000000020440190000006002200210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000006050110009a000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b001900000001001d0000000101100039000000000101041a000000000001004b00000b470000c13d000000400100043d00000044021000390000064d03000041000000000032043500000024021000390000001303000039000000000032043500000608020000410000000000210435000000040210003900000020030000390000000000320435000005bb0010009c000005bb01008041000000400110021000000612011001c7000016eb0001043000000064021000390000060603000041000000000032043500000044021000390000060703000041000000000032043500000024021000390000002903000039000000000032043500000608020000410000000000210435000000040210003900000020030000390000000000320435000005bb0010009c000005bb01008041000000400110021000000609011001c7000016eb00010430000000160000006b000009410000613d000000400400043d001800000004001d0000004401400039000000160300002900000000003104350000000001000410000005f801100197000000240340003900000000001304350000062c0100004100000000001404350000000001000411000005f80110019700000004034000390000000000130435000005bb0040009c000005bb01000041000000000104401900000040011002100000000003000414000005bb0030009c000005bb03008041000000c003300210000000000113019f00000612011001c716e916df0000040f0000006003100270000005bb03300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000180b000029000000180570002900000b1a0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000b160000c13d000000000006004b00000b270000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000c4a0000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f000000200030008c000014b40000413d00000000020b0433000000000002004b0000000003000039000000010300c039000000000032004b000014b40000c13d000000000002004b00000de60000c13d0000006402100039000006310300004100000000003204350000004402100039000006320300004100000000003204350000002402100039000000230300003900000ae30000013d000000400100043d001700000001001d00000019010000290000000801100039001300000001001d000000000101041a001800000001001d000000ff0010019000000bcb0000c13d000000170300002900000044013000390000063f0200004100000000002104350000002401300039000000160200003900000c5c0000013d000000000101043b000000000200001900000017040000290000001805000029000000000301041a000005f803300197000000000434043600000001011000390000000102200039000000000052004b00000b5b0000413d000000190140006a0000001f0110003900000659021001970000001901200029000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f0000001001000029000000a001100039000a00000001001d000000190200002900000000002104350000000f010000290000000601100039000000000201041a001200000002001d000005c00020009c000007b50000213d000000120200002900000005022002100000003f022000390000062302200197000000400300043d0000000002230019000900000003001d000000000032004b00000000030000390000000103004039000005c00020009c000007b50000213d0000000100300190000007b50000c13d000000400020043f000000120200002900000009030000290000000000230435000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000120000006b00000ca80000c13d0000001001000029000000c0021000390000000901000029001600000002001d00000000001204350000000f010000290000000701100039000000000301041a000000400200043d001900000002001d001800000003001d0000000002320436001700000002001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000180000006b00000e250000c13d000000170400002900000e300000013d00000060021000390000064f03000041000000000032043500000040021000390000000603000039000000000032043500000020021000390000004003000039000000000032043500000019020000290000000000210435000005bb0010009c000005bb0100804100000040011002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f00000650011001c70000800d020000390000000203000039000006300400004100000000050004110000091d0000013d00000018010000290000ff000010019000000c560000c13d00000019010000290000000401100039000d00000001001d000000000101041a000e00000001001d000000000001004b00000c670000c13d000000170300002900000044013000390000063e0200004100000000002104350000002401300039000000130200003900000c5c0000013d000000180200002900000659032001980012001f00200193001100000003001d000000000231001900000017030000290000002003300039001700000003001d000000010330036700000bec0000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b00000be80000c13d000000120000006b00000bfa0000613d000000110330036000000012040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f00000000003204350000001803000029000000000231001900000003040000390000000000420435000005bb0010009c000005bb0100804100000040011002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f000006040030009c00000604020000410000000002034019000000600220021000100613002000a200000010011001af000005fb011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b0000000101100039000000000101041a000000000001004b00000ca40000c13d000000140000006b00000dda0000c13d000000130000006b00000e1b0000c13d0000000201000039000000000101041a001300000001001d0000000402000039000000000102041a000000000001004b0000106a0000613d000000000020043f000006190110009a000000000201041a000000010320019000000001042002700000007f0440618f000f00000004001d0000001f0040008c00000000040000390000000104002039000000000442013f0000000100400190000001a90000c13d000000400400043d000e00000004001d000000000003004b0000103e0000613d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d0000000f05000029000000000005004b0000000e06000029000010420000613d000000000101043b00000000020000190000000003620019000000000401041a000000000043043500000001011000390000002002200039000000000052004b00000c420000413d000010420000013d0000001f0530018f0000062d06300198000000400200043d000000000462001900000a1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000c510000c13d00000a1d0000013d000000170300002900000044013000390000063502000041000000000021043500000024013000390000001402000039000000000021043500000608010000410000000000130435000000040130003900000020020000390000000000210435000005bb0030009c000005bb03008041000000400130021000000612011001c7000016eb0001043000000019010000290000000701100039000000000301041a0000001702000029001500000003001d0000000002320436001600000002001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d0000001505000029000000000005004b000000160200002900000c860000613d000000000101043b00000016020000290000000003000019000000000401041a000005f804400197000000000242043600000001011000390000000103300039000000000053004b00000c7f0000413d000000170120006a0000001f0110003900000659011001970000001702100029000000000012004b00000000010000390000000101004039000005c00020009c000007b50000213d0000000100100190000007b50000c13d0000000009020019000000400020043f00000017010000290000000001010433001500000001001d00000019010000290000000301100039000000000101041a001405f80010019c00000ec10000c13d000000000100041a000006250010019800000ec00000c13d00000044019000390000063d0200004100000000002104350000002401900039000000140200003900000f2c0000013d000000400100043d00000044021000390000061403000041000008030000013d000000000101043b001900000001001d00000000020000190000000903000029001600000003001d001700000002001d000000400100043d001800000001001d000006240010009c000007b50000213d0000001801000029000000a006100039000000400060043f0000001901000029000000000101041a000000010210019000000001041002700000007f0440618f0000001f0040008c00000000030000390000000103002039000000000331013f0000000100300190000001a90000c13d0000000000460435000000000002004b00000ce00000613d001400000004001d001500000006001d0000001901000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d0000001407000029000000000007004b00000ce80000613d0000001802000029000000c002200039000000000301043b000000000100001900000015060000290000000004120019000000000503041a000000000054043500000001033000390000002001100039000000000071004b00000cd80000413d00000cea0000013d0000065a011001970000001802000029000000c0022000390000000000120435000000000004004b0000002001000039000000000100603900000cea0000013d000000000100001900000015060000290000003f0110003900000659021001970000000001620019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f0000001801000029000000000561043600000019010000290000000101100039000000000201041a000000010320019000000001072002700000007f0770618f0000001f0070008c00000000040000390000000104002039000000000442013f0000000100400190000001a90000c13d000000400600043d0000000004760436000000000003004b00000d250000613d001100000004001d001500000007001d001300000006001d001400000005001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d0000001507000029000000000007004b00000d2b0000613d000000000201043b00000000010000190000001405000029000000130600002900000011080000290000000003180019000000000402041a000000000043043500000001022000390000002001100039000000000071004b00000d1d0000413d00000d2e0000013d0000065a012001970000000000140435000000000007004b0000002001000039000000000100603900000d2e0000013d0000000001000019000000140500002900000013060000290000003f0110003900000659021001970000000001620019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f000000000065043500000019010000290000000201100039000000000301041a000000400200043d001500000002001d001300000003001d0000000002320436001400000002001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d0000001306000029000000000006004b00000d5b0000613d000000000101043b000000000200001900000015040000290000001405000029000000000301041a000005f803300197000000000535043600000001011000390000000102200039000000000062004b00000d530000413d00000d5d0000013d0000001504000029000000140500002900000000014500490000001f0110003900000659021001970000000001420019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f00000018010000290000004001100039000000000041043500000019010000290000000301100039000000000301041a000000400200043d001500000002001d001300000003001d0000000002320436001400000002001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d0000001306000029000000000006004b00000d8d0000613d000000000101043b000000000200001900000015040000290000001405000029000000000301041a000005f803300197000000000535043600000001011000390000000102200039000000000062004b00000d850000413d00000d8f0000013d0000001504000029000000140500002900000000014500490000001f0110003900000659021001970000000001420019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f00000018010000290000006001100039000000000041043500000019010000290000000401100039000000000301041a000000400200043d001500000002001d001300000003001d0000000002320436001400000002001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d0000001306000029000000000006004b00000dbf0000613d000000000101043b000000000200001900000015040000290000001405000029000000000301041a000005f803300197000000000535043600000001011000390000000102200039000000000062004b00000db70000413d00000dc10000013d0000001504000029000000140500002900000000014500490000001f0110003900000659021001970000000001420019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d00000016030000290000002003300039000000400010043f00000018020000290000008001200039000000000041043500000000002304350000001901000029001900050010003d00000017020000290000000102200039000000120020006c00000cac0000413d00000b970000013d000000130000006b0000106a0000c13d000000400100043d0000006402100039000006150300004100000000003204350000004402100039000006160300004100000000003204350000002402100039000000320300003900000ae30000013d000000400210003900000019030000290000000000320435000000200210003900000040030000390000000000320435000000160200002900000000002104350000006002100039000000140320002900000017040000290000000104400367000000140000006b00000dfa0000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b00000df60000c13d000000150000006b00000e080000613d000000140440036000000015050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004304350000001903000029000000000232001900000000000204350000001f0230003900000659022001970000062e0020009c0000062e020080410000006002200210000005bb0010009c000005bb010080410000004001100210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f0000062f0110009a00000bc60000013d000000400100043d00000064021000390000061703000041000000000032043500000044021000390000061803000041000000000032043500000024021000390000002c0300003900000ae30000013d000000000101043b000000000200001900000017040000290000001805000029000000000301041a000005f803300197000000000434043600000001011000390000000102200039000000000052004b00000e290000413d000000190140006a0000001f0110003900000659021001970000001901200029000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f0000001001000029000000e002100039001700000002001d000000190300002900000000003204350000000f020000290000000802200039000000000202041a0000ff00002001900000000003000039000000010300c0390000012004100039001800000004001d00000000003404350000010001100039000000ff002001900000000002000039000000010200c039001500000001001d00000000002104350000000e010000290000000002010433000000000002004b00000aca0000613d000000400500043d000000200200003900000000022504360000001001000029000000000301043300000140040000390000000000420435000001600250003900000000430304340000000000320435001900000005001d0000018002500039000000000003004b00000e6a0000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b00000e630000413d000000000423001900000000000404350000000e0100002900000000040104330000001906000029000000400560003900000000004504350000000d010000290000000004010433000000600560003900000000004504350000000b010000290000000004010433000005f804400197000000800560003900000000004504350000000c010000290000000004010433000000a00560003900000000004504350000001f033000390000065903300197000000c0056000390000000a01000029000000000401043300000160063000390000000000650435000000000323001900000000020404330000000003230436000000000002004b00000e920000613d000000000500001900000020044000390000000006040433000005f80660019700000000036304360000000105500039000000000025004b00000e8b0000413d00000019010000290000000002130049000000200220008a00000016040000290000000004040433000000e005100039000000000025043500000000050404330000000000530435000000050250021000000000022300190000002002200039000000000005004b00000fd40000c13d00000019040000290000000001420049000000200310008a000000170100002900000000010104330000010004400039000000000034043516e9153c0000040f00000015020000290000000002020433000000000002004b0000000002000039000000010200c03900000019040000290000012003400039000000000023043500000018020000290000000002020433000000000002004b0000000002000039000000010200c039000001400340003900000000002304350000000001410049000005bb0040009c000005bb04008041000005bb0010009c000005bb0100804100000040024002100000006001100210000000000121019f000016ea0001042e001405f80010019b0000ff010100008a000000180110017f00000100011001bf0000001302000029000000000012041b000000150000006b00000f1c0000c13d0000063c0090009c000007b50000213d0000002001900039000000400010043f0000000000090435000000400100043d0000006002100039000000120300002900000000003204350000006002000039000000000221043600000080031000390000000f04300029000000110500002900000001055003670000000f0000006b00000edf0000613d000000000605034f0000000007030019000000006806043c0000000007870436000000000047004b00000edb0000c13d000000100000006b00000eed0000613d0000000f0550036000000010060000290000000306600210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000001205000029000000000453001900000000000404350000001f0450003900000659044001970000000004430019000000000314004900000040051000390000000000350435000000000002043500000000030904330000000002340436000000000003004b00000f030000613d000000000400001900000020099000390000000005090433000005f80550019700000000025204360000000104400039000000000034004b00000efc0000413d0000000002120049000005bb0020009c000005bb020080410000006002200210000005bb0010009c000005bb010080410000004001100210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000005fb011001c70000800d020000390000000103000039000006390400004116e916df0000040f0000000100200190000014b40000613d0000000101000039000005f702000041000000000012041b0000000001000019000016ea0001042e0000000e0300002900000015013000fa001300000001001d00000015011000b9000000150030006b00000f250000213d00000013021000fa000000150020006b000011360000c13d0000000e0010006b00000f370000813d00000044019000390000063b02000041000000000021043500000024019000390000001a02000039000000000021043500000608010000410000000000190435000000040190003900000020020000390000000000210435000005bb0090009c000005bb09008041000000400190021000000612011001c7000016eb000104300000000004000019000000170200002900000000030900190000000001020433000000000014004b0000113c0000813d001800000004001d00000005014002100000001601100029000000000101043300000024023000390000001304000029000000000042043500000638020000410000000000230435000005f80110019700000004023000390000000000120435000005bb0030009c000005bb01000041000000000103401900000040011002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f0000060e011001c70000001402000029001900000003001d16e916df0000040f000000190a0000290000006003100270000005bb03300197000000200030008c00000020040000390000000004034019000000200640019000000000056a001900000f650000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b00000f610000c13d0000001f0740019000000f720000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f00000000006504350000000100200190000011420000613d0000001f01400039000000600210018f0000000001a20019000000000021004b00000000020000390000000102004039000005c00010009c000007b50000213d0000000100200190000007b50000c13d000000400010043f000000200030008c000014b40000413d00000019020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000014b40000c13d000000000002004b000009bc0000613d00000018040000290000000104400039000000150040006c0000000003010019000000170200002900000f3a0000413d0000000d03000029000000000203041a000000000003041b0000006003100039000000120400002900000000004304350000006003000039000000000431043600000080031000390000000f05300029000000110600002900000001066003670000000f0000006b00000fa40000613d000000000706034f0000000008030019000000007907043c0000000008980436000000000058004b00000fa00000c13d000000100000006b00000fb20000613d0000000f0660036000000010070000290000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f000000000065043500000012060000290000000005630019000000000005043500000000002404350000001f0260003900000659022001970000000002230019000000000312004900000040041000390000000000340435000000170300002900000000030304330000000002320436000000000003004b00000fca0000613d0000000004000019000000170600002900000020066000390000000005060433000005f80550019700000000025204360000000104400039000000000034004b00000fc30000413d0000000002120049000005bb0020009c000005bb020080410000006002200210000005bb0010009c000005bb010080410000004001100210000000000112019f000000000200041400000f0c0000013d0000000007000019000000000803001900000fda0000013d0000000107700039000000000057004b00000ea00000813d0000000009320049000000200990008a000000200880003900000000009804350000002004400039000000000904043300000000bc090434000000a001000039000000000a120436000000a00d20003900000000ec0c04340000000000cd0435000000c00d20003900000000000c004b00000ff10000613d000000000f0000190000000001df00190000000006fe001900000000060604330000000000610435000000200ff000390000000000cf004b00000fea0000413d0000000001dc001900000000000104350000001f01c0003900000659011001970000000001d1001900000000060b0433000000000b2100490000000000ba043500000000cb060434000000000ab1043600000000000b004b000010050000613d000000000d0000190000000001ad00190000000006dc001900000000060604330000000000610435000000200dd000390000000000bd004b00000ffe0000413d0000000001ab001900000000000104350000001f01b0003900000659011001970000000001a100190000004006900039000000000b0604330000000006210049000000400a20003900000000006a0435000000000c0b0433000000000ac1043600000000000c004b0000101b0000613d000000000d000019000000200bb0003900000000010b0433000005f801100197000000000a1a0436000000010dd000390000000000cd004b000010140000413d0000006001900039000000000b01043300000000012a004900000060062000390000000000160435000000000c0b0433000000000aca043600000000000c004b0000102c0000613d000000000d000019000000200bb0003900000000010b0433000005f801100197000000000a1a0436000000010dd000390000000000cd004b000010250000413d0000008001900039000000000901043300000000012a004900000080022000390000000000120435000000000b0904330000000002ba043600000000000b004b00000fd70000613d000000000a00001900000020099000390000000001090433000005f8011001970000000002120436000000010aa000390000000000ba004b000010360000413d00000fd70000013d0000065a012001970000000e0600002900000000001604350000000f05000029000000000165001900000003020000390000000000210435000005bb0060009c000005bb060080410000004001600210000006040050009c00000604050080410000006002500210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000121019f000006050110009a000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b0000000802100039000000000202041a000000ff002001900000106a0000613d0000ff00002001900000106a0000613d0000000702100039000000000202041a000000000002004b0000106a0000c13d0000000302100039000000000202041a000005f8002001980000106a0000c13d0000000401100039000000000101041a000000130010002a000011360000413d001300130010002d000000400100043d000000110210002900000017030000290000000103300367000000110000006b000010760000613d000000000403034f0000000005010019000000004604043c0000000005650436000000000025004b000010720000c13d000000120000006b000010840000613d000000110330036000000012040000290000000304400210000000000502043300000000054501cf000000000545022f000000000303043b0000010004400089000000000343022f00000000034301cf000000000353019f0000000000320435000000180210002900000003030000390000000000320435000005bb0010009c000005bb0100804100000040011002100000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f00000010011001af000005fb011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b001000000001001d0000001602000029000000180300002916e915cc0000040f0000061a0100004100000000001004430000000001000414000005bb0010009c000005bb01008041000000c0011002100000061b011001c70000800b0200003916e916e40000040f0000000100200190000011350000613d000000000201043b00000010040000290000000101400039000f00000002001d000000000021041b0000000201400039000000000001041b0000000301400039000000000201041a0000061c0220019700000014022001af000000000021041b00000004014000390000001302000029000000000021041b0000000502400039000000000302041a0000001901000029001400000002001d000000000012041b001300000003001d000000000013004b000010d00000a13d0000001401000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000201043b00000019012000290000001302200029000000000021004b000010d00000813d000000000001041b0000000101100039000000000021004b000010cc0000413d0000001401000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000190000006b0000001505000029000010ec0000613d00000001020003670000000003000019000000000452034f000000000404043b000005f80040009c000014b40000213d00000000060500190000000005130019000000000045041b00000020056000390000000103300039000000190030006c000010e10000413d00000010010000290000000801100039000000000201041a0000061d02200197000000000021041b0000000402000039000000000102041a000005c00010009c000007b50000213d0000000103100039000000000032041b000000000020043f0000061e0110009a0000001602000029000000180300002916e915cc0000040f000000400100043d000000400210003900000018030000290000000000320435000000400200003900000000022104360000006003100039000000110430002900000017050000290000000105500367000000110000006b0000110e0000613d000000000605034f0000000007030019000000006806043c0000000007870436000000000047004b0000110a0000c13d000000120000006b0000111c0000613d000000110550036000000012060000290000000306600210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000001804000029000000000343001900000000000304350000000f0300002900000000003204350000001f0240003900000659022001970000006002200039000005bb0020009c000005bb020080410000006002200210000005bb0010009c000005bb010080410000004001100210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f000005fb011001c70000800d0200003900000001030000390000061f040000410000091d0000013d000000000001042f0000063601000041000000000010043f0000001101000039000000040010043f0000063701000041000016eb000104300000063601000041000000000010043f0000003201000039000000040010043f0000063701000041000016eb000104300000001f0530018f0000062d06300198000000400200043d000000000462001900000a1d0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000011490000c13d00000a1d0000013d000000400100043d00000044021000390000064603000041000008030000013d000000400100043d00000044021000390000064703000041000002340000013d000000400100043d00000044021000390000064803000041000001f30000013d000000400100043d00000044021000390000064903000041000000000032043500000024021000390000001f0300003900000ad00000013d000000400100043d00000044021000390000064a03000041000000000032043500000608020000410000000000210435000000240210003900000020030000390000000000320435000000040210003900000ad50000013d0000000a01000029000400060010003d000700000000001d000011750000013d00000007020000290000000102200039000700000002001d000000140020006c000004230000813d0000000701000029000000050310021000000013023000290000000101000367000000000221034f000000000402043b0000000002000031000000160520006a000000430550008a0000064b065001970000064b07400197000000000867013f000000000067004b00000000060000190000064b06004041000000000054004b00000000050000190000064b050080410000064b0080009c000000000605c019000000000006004b000014b40000c13d0000001304400029000000000541034f000000000a05043b000005c000a0009c000014b40000213d0000000005a20049000000200f4000390000064b045001970000064b06f00197000000000746013f000000000046004b00000000040000190000064b0400404100000000005f004b00000000050000190000064b050020410000064b0070009c000000000405c019000000000004004b000014b40000c13d0000001104300029000000000441034f000000000404043b0000001f0720008a000000110570006a0000064b065001970000064b08400197000000000968013f000000000068004b00000000060000190000064b06004041000000000054004b00000000050000190000064b050080410000064b0090009c000000000605c019000000000006004b000014b40000c13d0000001104400029000000000541034f000000000505043b000005c00050009c000014b40000213d0000000006520049000000200b4000390000064b046001970000064b08b00197000000000948013f000000000048004b00000000040000190000064b04004041000e0000000b001d00000000006b004b00000000060000190000064b060020410000064b0090009c000000000406c019000000000004004b000014b40000c13d0000000f0670006a0000000f04300029000000000441034f000000000404043b0000064b086001970000064b09400197000000000b89013f000000000089004b00000000080000190000064b08004041000000000064004b00000000060000190000064b060080410000064b00b0009c000000000806c019000000000008004b000014b40000c13d0000000f04400029000000000641034f000000000606043b001000000006001d000005c00060009c000014b40000213d0000001006000029000c0005006002180000000c0820006a00000020064000390000064b048001970000064b09600197000000000b49013f000000000049004b00000000040000190000064b04004041000000000086004b00000000080000190000064b080020410000064b00b0009c000000000408c019000000000004004b000014b40000c13d0000000d0870006a0000000d04300029000000000441034f000000000404043b0000064b098001970000064b0b400197000000000c9b013f00000000009b004b00000000090000190000064b09004041000000000084004b00000000080000190000064b080080410000064b00c0009c000000000908c019000000000009004b000014b40000c13d0000000d04400029000000000841034f000000000808043b000a00000008001d000005c00080009c000014b40000213d0000000a080000290008000500800218000000080820006a00000020044000390000064b098001970000064b0b400197000000000c9b013f00000000009b004b00000000090000190000064b09004041000000000084004b00000000080000190000064b080020410000064b00c0009c000000000908c019000000000009004b000014b40000c13d0000000b0770006a0000000b03300029000000000331034f000000000303043b0000064b087001970000064b09300197000000000b89013f000000000089004b00000000080000190000064b08004041000000000073004b00000000070000190000064b070080410000064b00b0009c000000000807c019000000000008004b000014b40000c13d0000000b03300029000000000731034f000000000707043b000900000007001d000005c00070009c000014b40000213d00000009070000290005000500700218000000050720006a00000020033000390000064b087001970000064b09300197000000000b89013f000000000089004b00000000080000190000064b08004041000000000073004b00000000070000190000064b070020410000064b00b0009c000000000807c019000000000008004b000014b40000c13d000000400700043d001200000007001d000006240070009c000007b50000213d0000001f07a0003900000659077001970000003f0770003900000659087001970000001207000029000000a007700039000000400070043f0000000008870019000005c00080009c000007b50000213d000000400080043f0000000000a704350000000008fa0019000000000028004b000014b40000213d000000000cf1034f000006590ba001980000001208000029000000c00d8000390000000008bd00190000125d0000613d00000000090c034f000000000f0d0019000000009e09043c000000000fef043600000000008f004b000012590000c13d0000001f09a001900000126a0000613d000000000bbc034f0000000309900210000000000c080433000000000c9c01cf000000000c9c022f000000000b0b043b0000010009900089000000000b9b022f00000000099b01cf0000000009c9019f00000000009804350000000008ad0019000000000008043500000012080000290000000007780436000600000007001d0000001f0750003900000659077001970000003f077000390000065907700197000000400a00043d00000000077a00190000000000a7004b00000000080000390000000108004039000005c00070009c000007b50000213d0000000100800190000007b50000c13d000000400070043f00000000075a04360000000e08500029000000000028004b000014b40000213d0000000e09100360000006590b5001980000000008b700190000128b0000613d000000000c09034f000000000d07001900000000ce0c043c000000000ded043600000000008d004b000012870000c13d0000001f0c500190000012980000613d0000000009b9034f000000030bc00210000000000c080433000000000cbc01cf000000000cbc022f000000000909043b000001000bb000890000000009b9022f0000000009b901cf0000000009c9019f00000000009804350000000005570019000000000005043500000006050000290000000000a504350000000c050000290000003f055000390000062307500197000000400500043d0000000007750019000000000057004b00000000080000390000000108004039000005c00070009c000007b50000213d0000000100800190000007b50000c13d000000400070043f000000100700002900000000007504350000000c07600029000000000027004b000014b40000213d000000000067004b000012ba0000a13d0000000008050019000000000961034f000000000909043b000005f80090009c000014b40000213d000000200880003900000000009804350000002006600039000000000076004b000012b10000413d00000012060000290000004006600039000300000006001d000000000056043500000008050000290000003f055000390000062306500197000000400500043d0000000006650019000000000056004b00000000070000390000000107004039000005c00060009c000007b50000213d0000000100700190000007b50000c13d000000400060043f0000000a0600002900000000006504350000000806400029000000000026004b000014b40000213d000000000046004b000012dc0000a13d0000000007050019000000000841034f000000000808043b000005f80080009c000014b40000213d000000200770003900000000008704350000002004400039000000000064004b000012d30000413d00000012040000290000006004400039000800000004001d000000000054043500000005040000290000003f044000390000062305400197000000400400043d0000000005540019000000000045004b00000000060000390000000106004039000005c00050009c000007b50000213d0000000100600190000007b50000c13d000000400050043f000000090500002900000000005404350000000505300029000000000025004b000014b40000213d000000000035004b000012fe0000a13d0000000002040019000000000631034f000000000606043b000005f80060009c000014b40000213d000000200220003900000000006204350000002003300039000000000053004b000012f50000413d00000012010000290000008001100039000900000001001d00000000004104350000000401000029000000000101041a000e00000001001d000005c00010009c000007b50000213d0000000e0100002900000001011000390000000402000029000000000012041b000000000020043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b00000012020000290000000002020433001200000002001d0000000032020434000a00000003001d001000000002001d000005c00020009c000007b50000213d0000000e0200002900000005022000c90000000001210019000e00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000c00000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000001a90000c13d0000000c01000029000000200010008c0000134c0000413d0000000e01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d00000010030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000c010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b0000134c0000813d000000000002041b0000000102200039000000000012004b000013480000413d00000010010000290000001f0010008c0000136b0000a13d0000000e01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000200200008a0000001002200180000000000101043b000013700000613d000000010320008a000000050330027000000000033100190000000104300039000000200300003900000012053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b000013630000c13d000013710000013d000000100000006b000013800000613d0000000a010000290000000001010433000013810000013d0000002003000039000000100020006c0000137c0000813d00000010020000290000000302200210000000f80220018f0000065b0220027f0000065b0220016700000012033000290000000003030433000000000223016f000000000021041b0000001001000029000000010110021000000001011001bf000013880000013d0000000001000019000000100400002900000003024002100000065b0220027f0000065b02200167000000000121016f0000000102400210000000000121019f0000000e02000029000000000012041b00000006010000290000000001010433001200000001001d0000000021010434000600000002001d001000000001001d000005c00010009c000007b50000213d0000000e010000290000000101100039000c00000001001d000000000101041a000000010010019000000001021002700000007f0220618f000a00000002001d0000001f0020008c00000000020000390000000102002039000000000121013f0000000100100190000001a90000c13d0000000a01000029000000200010008c000013bf0000413d0000000c01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d00000010030000290000001f023000390000000502200270000000200030008c0000000002004019000000000301043b0000000a010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000013bf0000813d000000000002041b0000000102200039000000000012004b000013bb0000413d00000010010000290000001f0010008c000a000100100218000013df0000a13d0000000c01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000200200008a0000001002200180000000000101043b000013e40000613d000000010320008a000000050330027000000000033100190000000104300039000000200300003900000012053000290000000005050433000000000051041b00000020033000390000000101100039000000000041004b000013d70000c13d000013e50000013d000000100000006b000013f30000613d00000006010000290000000001010433000013f40000013d0000002003000039000000100020006c000013f00000813d00000010020000290000000302200210000000f80220018f0000065b0220027f0000065b0220016700000012033000290000000003030433000000000223016f000000000021041b0000000a0100002900000001011001bf000013fa0000013d0000000001000019000000100200002900000003022002100000065b0220027f0000065b02200167000000000121016f0000000a011001af0000000c02000029000000000012041b00000003010000290000000001010433001200000001001d0000000001010433001000000001001d000005c00010009c000007b50000213d0000000e010000290000000202100039000000000302041a0000001001000029000c00000002001d000000000012041b000a00000003001d000000000013004b000014200000a13d0000000c01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000201043b00000010012000290000000a02200029000000000021004b000014200000813d000000000001041b0000000101100039000000000021004b0000141c0000413d0000000c01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000100000006b000014390000613d0000000002000019000000000312001900000012040000290000002004400039001200000004001d0000000004040433000005f804400197000000000043041b0000000102200039000000100020006c0000142f0000413d00000008010000290000000001010433001200000001001d0000000001010433001000000001001d000005c00010009c000007b50000213d0000000e010000290000000302100039000000000302041a0000001001000029000c00000002001d000000000012041b000a00000003001d000000000013004b0000145d0000a13d0000000c01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000201043b00000010012000290000000a02200029000000000021004b0000145d0000813d000000000001041b0000000101100039000000000021004b000014590000413d0000000c01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000100000006b000014760000613d0000000002000019000000000312001900000012040000290000002004400039001200000004001d0000000004040433000005f804400197000000000043041b0000000102200039000000100020006c0000146c0000413d00000009010000290000000001010433001200000001001d0000000001010433001000000001001d000005c00010009c000007b50000213d0000000e010000290000000402100039000000000302041a0000001001000029000e00000002001d000000000012041b000c00000003001d000000000013004b0000149a0000a13d0000000e01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000201043b00000010012000290000000c02200029000000000021004b0000149a0000813d000000000001041b0000000101100039000000000021004b000014960000413d0000000e01000029000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000014b40000613d000000000101043b000000100000006b000011700000613d0000000002000019000000000312001900000012040000290000002004400039001200000004001d0000000004040433000005f804400197000000000043041b0000000102200039000000100020006c000014a90000413d000011700000013d0000000001000019000016eb00010430000000000003004b000014c00000613d000000000400001900000000052400190000000006140019000000000606043300000000006504350000002004400039000000000034004b000014b90000413d00000000012300190000000000010435000000000001042d00000000430104340000000001320436000000000003004b000014cf0000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b000014c80000413d000000000213001900000000000204350000001f0230003900000659022001970000000001210019000000000001042d0000001f03100039000000000023004b00000000040000190000064b040040410000064b052001970000064b03300197000000000653013f000000000053004b00000000030000190000064b030020410000064b0060009c000000000304c019000000000003004b000014ed0000613d0000000103100367000000000303043b000005c00030009c000014ed0000213d00000020011000390000000004310019000000000024004b000014ed0000213d0000000002030019000000000001042d0000000001000019000016eb000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b0000152e0000c13d000000400500043d0000000004650436000000000003004b000015190000613d000100000004001d000300000006001d000200000005001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f00000001002001900000153a0000613d0000000306000029000000000006004b0000151f0000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000015110000413d000015210000013d0000065a012001970000000000140435000000000006004b00000020010000390000000001006039000015210000013d000000000100001900000002050000290000003f0110003900000659021001970000000001520019000000000021004b00000000020000390000000102004039000005c00010009c000015340000213d0000000100200190000015340000c13d000000400010043f0000000001050019000000000001042d0000063601000041000000000010043f0000002201000039000000040010043f0000063701000041000016eb000104300000063601000041000000000010043f0000004101000039000000040010043f0000063701000041000016eb000104300000000001000019000016eb00010430000000000301001900000000040104330000000001420436000000000004004b000015490000613d000000000200001900000020033000390000000005030433000005f80550019700000000015104360000000102200039000000000042004b000015420000413d000000000001042d000006530020009c0000157a0000813d00000000040100190000001f0120003900000659011001970000003f011000390000065905100197000000400100043d0000000005510019000000000015004b00000000070000390000000107004039000005c00050009c0000157a0000213d00000001007001900000157a0000c13d000000400050043f00000000052104360000000007420019000000000037004b000015800000213d00000659062001980000001f0720018f000000010440036700000000036500190000156a0000613d000000000804034f0000000009050019000000008a08043c0000000009a90436000000000039004b000015660000c13d000000000007004b000015770000613d000000000464034f0000000306700210000000000703043300000000076701cf000000000767022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000474019f000000000043043500000000022500190000000000020435000000000001042d0000063601000041000000000010043f0000004101000039000000040010043f0000063701000041000016eb000104300000000001000019000016eb00010430000000000001004b000015850000613d000000000001042d000000400100043d00000044021000390000064d03000041000000000032043500000024021000390000001303000039000000000032043500000608020000410000000000210435000000040210003900000020030000390000000000320435000005bb0010009c000005bb01008041000000400110021000000612011001c7000016eb000104300003000000000002000000000301041a000000400200043d000300000002001d000200000003001d0000000002320436000100000002001d000000000010043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000015c40000613d0000000205000029000000000005004b000015b50000613d000000000101043b00000000020000190000000104000029000000000301041a000005f803300197000000000434043600000001011000390000000102200039000000000052004b000015ad0000413d000015b60000013d0000000104000029000000030100002900000000021400490000001f0320003900000659023001970000000003120019000000000023004b00000000020000390000000102004039000005c00030009c000015c60000213d0000000100200190000015c60000c13d000000400030043f000000000001042d0000000001000019000016eb000104300000063601000041000000000010043f0000004101000039000000040010043f0000063701000041000016eb000104300004000000000002000006530030009c0000163a0000813d0000000006010019000000000101041a000000010410019000000001051002700000007f0550618f0000001f0050008c00000000010000390000000101002039000000000014004b000016400000c13d000000200050008c000200000006001d000400000003001d000300000002001d000015fc0000413d000100000005001d000000000060043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000016460000613d00000004030000290000001f023000390000000502200270000000200030008c0000000002004019000000000401043b00000001010000290000001f01100039000000050110027000000000011400190000000004240019000000000014004b00000002060000290000000302000029000015fc0000813d000000000004041b0000000104400039000000000014004b000015f80000413d0000001f0030008c000016270000a13d000000000060043f0000000001000414000005bb0010009c000005bb01008041000000c00110021000000600011001c7000080100200003916e916e40000040f0000000100200190000016460000613d00000004070000290000065902700198000000000101043b0000000308000029000016350000613d0000000104000367000000000300001900000002060000290000000005830019000000000554034f000000000505043b000000000051041b00000001011000390000002003300039000000000023004b000016100000413d000000000072004b000016230000813d0000000302700210000000f80220018f0000065b0220027f0000065b0220016700000000038300190000000103300367000000000303043b000000000223016f000000000021041b000000010170021000000001011001bf000000000016041b000000000001042d000000000003004b000016330000613d00000003013002100000065b0110027f0000065b011001670000000102200367000000000202043b000000000112016f0000000102300210000000000121019f000000000016041b000000000001042d000000000006041b000000000001042d00000000030000190000000206000029000000000072004b0000161a0000413d000016230000013d0000063601000041000000000010043f0000004101000039000000040010043f0000063701000041000016eb000104300000063601000041000000000010043f0000002201000039000000040010043f0000063701000041000016eb000104300000000001000019000016eb000104300001000000000002000100000001001d000000000010043f0000060f01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000016680000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000016680000613d000000000101043b000000000101041a000000ff001001900000166a0000613d000000000001042d0000000001000019000016eb00010430000000400100043d0000002402100039000000010300002900000000003204350000060d020000410000000000210435000000040210003900000000030004110000000000320435000005bb0010009c000005bb0100804100000040011002100000060e011001c7000016eb000104300002000000000002000100000002001d000200000001001d000000000010043f0000060f01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000016c70000613d000000000101043b0000000102000029000005f802200197000100000002001d000000000020043f000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000016c70000613d000000000101043b000000000101041a000000ff00100190000016c60000613d0000000201000029000000000010043f0000060f01000041000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000016c70000613d000000000101043b0000000102000029000000000020043f000000200010043f0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fa011001c7000080100200003916e916e40000040f0000000100200190000016c70000613d000000000101043b000000000201041a0000065a02200197000000000021041b0000000001000414000005bb0010009c000005bb01008041000000c001100210000005fb011001c70000800d02000039000000040300003900000000070004110000065c040000410000000205000029000000010600002916e916df0000040f0000000100200190000016c70000613d000000000001042d0000000001000019000016eb00010430000000000001042f000005bb0010009c000005bb010080410000004001100210000005bb0020009c000005bb020080410000006002200210000000000112019f0000000002000414000005bb0020009c000005bb02008041000000c002200210000000000112019f000005fb011001c7000080100200003916e916e40000040f0000000100200190000016dd0000613d000000000101043b000000000001042d0000000001000019000016eb00010430000016e2002104210000000102000039000000000001042d0000000002000019000000000001042d000016e7002104230000000102000039000000000001042d0000000002000019000000000001042d000016e900000432000016ea0001042e000016eb0001043000000000000000000000000000000000000000000000000000000000fffffffff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a000000000000000000000000000000000000000000000000ff0000000000000000f92ee8a9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffff0200000000000000000000000000000000000020000000800000000000000000c7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2000000020000000000000000000000000000004000000100000000000000000000000000000000000000000000000000000000000000000000000000719ce73d00000000000000000000000000000000000000000000000000000000b1085cde00000000000000000000000000000000000000000000000000000000e87c8e8000000000000000000000000000000000000000000000000000000000faa94a2a00000000000000000000000000000000000000000000000000000000faa94a2b00000000000000000000000000000000000000000000000000000000fe4b84df00000000000000000000000000000000000000000000000000000000e87c8e8100000000000000000000000000000000000000000000000000000000f7c618c100000000000000000000000000000000000000000000000000000000cd4cef6700000000000000000000000000000000000000000000000000000000cd4cef6800000000000000000000000000000000000000000000000000000000d547741f00000000000000000000000000000000000000000000000000000000b1085cdf00000000000000000000000000000000000000000000000000000000c32a79480000000000000000000000000000000000000000000000000000000091d1485300000000000000000000000000000000000000000000000000000000a217fdde00000000000000000000000000000000000000000000000000000000a217fddf00000000000000000000000000000000000000000000000000000000a698b2cb0000000000000000000000000000000000000000000000000000000091d1485400000000000000000000000000000000000000000000000000000000a1a906b9000000000000000000000000000000000000000000000000000000008456cb58000000000000000000000000000000000000000000000000000000008456cb59000000000000000000000000000000000000000000000000000000008aee812700000000000000000000000000000000000000000000000000000000719ce73e0000000000000000000000000000000000000000000000000000000071f71d47000000000000000000000000000000000000000000000000000000002f2ff15c0000000000000000000000000000000000000000000000000000000043e04495000000000000000000000000000000000000000000000000000000005c975aba000000000000000000000000000000000000000000000000000000005c975abb000000000000000000000000000000000000000000000000000000005f516fcc0000000000000000000000000000000000000000000000000000000043e044960000000000000000000000000000000000000000000000000000000044920d640000000000000000000000000000000000000000000000000000000037375af30000000000000000000000000000000000000000000000000000000037375af4000000000000000000000000000000000000000000000000000000003f4ba83a000000000000000000000000000000000000000000000000000000002f2ff15d0000000000000000000000000000000000000000000000000000000036568abe000000000000000000000000000000000000000000000000000000001be318a6000000000000000000000000000000000000000000000000000000002668144a000000000000000000000000000000000000000000000000000000002668144b00000000000000000000000000000000000000000000000000000000276a6805000000000000000000000000000000000000000000000000000000001be318a700000000000000000000000000000000000000000000000000000000248a9ca30000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000000000000ea99c3e00000000000000000000000000000000000000000000000000000000141833dc1806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000010000000000000001cd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00000000000000000000000000ffffffffffffffffffffffffffffffffffffffffb7db2dd08fcb62d0c9e08c51941cae53c267786a0b75803fb7960902fc8ef97d020000000000000000000000000000000000004000000000000000000000000002000000000000000000000000000000000000000000000000000000000000002f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d2613d2fa7bb06bd1529324e62fa8aa404609fa1e50a6f288b0137fc4c8acb4b48cbba69751e2ad12031a020b3cdf7f24f20225e09530064c9ad9fa187f4075caffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff0200000000000000000000000000000000000020000000000000000000000000d7e6bcf8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000002000000080000000000000000000000000000000000000000000000000000000000000000000000000ffffffdffdffffffffffffffffffffffffffffffffffffe00000000000000000000000006f6d706c6574696f6e000000000000000000000000000000000000000000000043616e6e6f74206d6f64696679207072697a6520706f6f6c206166746572206308c379a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000000000000000000000000ffffff7ffdffffffffffffffffffffffffffffffffffff80000000000000000000000000699a2f92b905557154bab3a19bf23932ff443e39f52870622e5b0f9b065760fee2517d3f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680014f8e85417eecedfed3e5ee8717ea0cd751e834889ece1727aa9457e713c07215072697a6520706f6f6c206d757374206265203e2030000000000000000000000000000000000000000000000000000000000064000000000000000000000000ffffffffffffffffffffffffffffffffffffffe00000000000000000000000005175697a20494420616c72656164792065786973747300000000000000000000746f6b656e2069732073706563696669656400000000000000000000000000004d7573742073657420637573746f6d5072697a65506f6f6c203e203020696620637573746f6d20746f6b656e0000000000000000000000000000000000000000637573746f6d5072697a65506f6f6c206d7573742062652030206966206e6f2075ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e66796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d955391320200000200000000000000000000000000000004000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000075ca53043ea007e5c65182cbb028f60d7179ff4b55739a3949b401801c942e65acd81dab929adeaebd54503c17dc8111e5edee98d31faa264758f76e4710fbdf5175697a2049442063616e6e6f7420626520656d707479000000000000000000fdffffffffffffffffffffffffffffffffffffdffffffe400000000000000000000000000000000000000000000000000000000000000000fffffffffffffebf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0000000000000000000000000000000000000000000000000ffffffffffffff5f0000000000000000000000ff000000000000000000000000000000000000000052657761726420746f6b656e20616c7265616479207365740000000000000000ffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000002d6b04df9b7d358407d1a014f1114b064add34c19d63d395db155a7e533e967a496e76616c696420746f6b656e2061646472657373000000000000000000000062e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25823b872dd0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffe000000000000000000000000000000000000000000000000000000000ffffff9ffdffffffffffffffffffffffffffffffffffffa0000000000000000000000000cc1a84eb17a6b864337cd92d7a63056e0aac020dfc0de17f6813bc6b1867cf516c656400000000000000000000000000000000000000000000000000000000005175697a2d737065636966696320746f6b656e207472616e73666572206661696e6f74206465706f7369742068657265000000000000000000000000000000005175697a207573657320676c6f62616c20746f6b656e2f706f6f6c2c2063616e5265776172647320616c726561647920706169640000000000000000000000004e487b71000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000a9059cbb000000000000000000000000000000000000000000000000000000007ba16a12d3b47b506200875461686df4168c41c97a2a2c19a7b2095c6c444bb0546f6b656e207472616e73666572206661696c656400000000000000000000005072697a652063616c63756c6174696f6e206f766572666c6f77000000000000000000000000000000000000000000000000000000000000ffffffffffffffdf4e6f2064656661756c7420746f6b656e207365740000000000000000000000005072697a6520706f6f6c20697320656d707479000000000000000000000000005175697a206e6f7420636f6d706c6574656420796574000000000000000000003ee5aeb50000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000005db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa8dfc202b000000000000000000000000000000000000000000000000000000004573792c0e6a2b1b87cc723a44d436a9e4d5b11082622240906cd91bc9e579b76697b232000000000000000000000000000000000000000000000000000000005175697a20616c726561647920636f6d706c65746564000000000000000000004d69736d61746368656420512f412061727261797300000000000000000000004d69736d617463686564207061727469636970616e74732061727261790000004d69736d61746368656420636f7272656374506c6179657273206172726179004d69736d617463686564206f707465644f7574506c61796572732061727261798000000000000000000000000000000000000000000000000000000000000000d87580407343cf94fe330e1193d1714fe514990fc9659a7e1f712960c92645a65175697a20646f6573206e6f7420657869737400000000000000000000000000d93c066500000000000000000000000000000000000000000000000000000000474c4f42414c000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000800000000000000000000000004465706f736974206d757374206265203e20300000000000000000000000000052657761726420746f6b656e206e6f74207365742028676c6f62616c290000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000ffffffffffffff7f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b00000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000007965db0b00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b0000000000000000000000000000000000000000000000000000000000000000f7fbc99af71a63a7544686d1744dfd532c0a18fb66625a4b3d53667ece1a84a2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.