Source Code
Overview
SOPH Balance
More Info
ContractCreator
Multichain Info
N/A
Latest 5 from a total of 5 transactions
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577680 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577637 | 3 days ago | 0 SOPH | ||||
577624 | 3 days ago | 0 SOPH | ||||
577624 | 3 days ago | 0 SOPH | ||||
577624 | 3 days ago | 0 SOPH |
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 Name:
DynamicRewards
Compiler Version
v0.8.20+commit.a1b79de6
ZkSolc Version
v1.5.11
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.20; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/access/AccessControl.sol"; import "@openzeppelin/contracts/token/ERC20/IERC20.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; import "@openzeppelin/contracts/utils/Pausable.sol"; import "./interfaces/IReclaim.sol"; /** * @title DynamicRewards * @dev A smart contract for managing social media post rewards with proof verification * * This contract enables a reward system for social media posts where users can claim rewards * by proving their ownership of specific posts using zkTLS. The system supports * both native tokens (ETH) and ERC20 tokens as rewards. * * Key Features: * - Dynamic limits for post IDsx and usernames * - Configurable bulk operation limits * - Support for both ETH and ERC20 token rewards * - zkTLS Proof-based verification using Reclaim Protocol * - Gas-optimized using bytes32 for storage * - Comprehensive event logging * - Role-based access control with admin capabilities * * Security Features: * - String length restrictions to prevent DOS attacks * - Role-based access control for administrative functions * - Proof verification for claiming rewards * - Reentrancy protection for all external calls * - Pausable functionality for emergencies * - Emergency withdrawal capability * - Custom error messages for better debugging */ contract DynamicRewards is Ownable, AccessControl, ReentrancyGuard, Pausable { // Role definition for admins bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE"); bytes32 public constant REWARD_CREATOR_ROLE = keccak256("REWARD_CREATOR_ROLE"); // Dynamic limits that can be adjusted by the owner uint256 public maxPostIdLength; uint256 public maxUsernameLength; uint256 public maxBulkOperations; uint256 public defaultExpirationDuration; // Custom Errors for better gas efficiency and clearer error messages error EmptyPostId(); error ZeroAmount(); error PostIdAlreadyRewarded(); error InvalidTokenAddress(); error IncorrectNativeTokenAmount(); error NativeTokenNotNeeded(); error InsufficientContractBalance(); error TransferFailed(); error NoRewardAvailable(); error RewardAlreadyClaimed(); error InvalidProof(); error EmptyUsername(); error InvalidUsername(); error StringTooLong(); error RewardNotClaimable(); error ZeroAddress(); error EmptyArray(); error ArrayLengthMismatch(); error InvalidLength(); error ExceedsMaxBulkOperations(); error InvalidProofData(); error RewardExpired(); error InvalidExpiration(); error ProofVerificationFailed(); // New error for proof verification failure error UsernameVerificationFailed(); // New error for username verification failure /** * @dev Struct to store reward information * @param postId Original post ID for reference * @param username Username associated with the reward * @param token Address of the reward token (address(0) for ETH) * @param amount Amount of tokens to be rewarded * @param claimed Whether the reward has been claimed * @param claimable Whether the reward is still claimable (false if removed) * @param createdAt Timestamp when the reward was created * @param expiresAt Timestamp when the reward expires */ struct Reward { string postId; // Original post ID for reference string username; // Username associated with the reward address token; // Token address (address(0) for ETH) uint256 amount; // Amount of tokens to reward bool claimed; // Whether the reward has been claimed bool claimable; // Whether the reward is still claimable uint256 createdAt; // Timestamp when reward was created uint256 expiresAt; // Timestamp when reward expires } // STATE VARIABLES /// @dev Address of the Reclaim Protocol verifier contract for proof validation address public reclaimAddress; /// @dev Mapping from keccak256(postId) to reward information /// @notice Using bytes32 instead of string for gas optimization mapping(bytes32 => Reward) public postRewards; // EVENTS /// @dev Emitted when a new reward is added /// @param postIdHash Hash of the post ID for efficient indexing /// @param postId Original post ID for readability event RewardAdded( bytes32 indexed postIdHash, string postId, address indexed token, uint256 amount ); /// @dev Emitted when a reward is claimed /// @param postIdHash Hash of the post ID for efficient indexing /// @param postId Original post ID for readability event RewardClaimed( bytes32 indexed postIdHash, string postId, string username, address indexed token, uint256 amount ); /// @dev Emitted when Reclaim verifier address is updated event ReclaimAddressUpdated( address indexed oldAddress, address indexed newAddress ); /// @dev Emitted when a reward is removed event RewardRemoved(bytes32 indexed postIdHash, string postId); /// @dev Emitted when contract is paused/unpaused event ContractPaused(address indexed owner); event ContractUnpaused(address indexed owner); /// @dev Emitted when limits are updated event LimitsUpdated( uint256 maxPostIdLength, uint256 maxUsernameLength, uint256 maxBulkOperations ); event AdminAdded(address indexed account); event RewardCreatorAdded(address indexed account); event AdminRemoved(address indexed account); event RewardCreatorRemoved(address indexed account); /** * @dev Contract constructor * @param initialOwner Address to be set as contract owner * @param reclaimAddress_ Address of Reclaim Protocol verifier * @param initialMaxPostIdLength Initial maximum length for post IDs * @param initialMaxUsernameLength Initial maximum length for usernames * @param initialMaxBulkOperations Initial maximum number of bulk operations * @param initialDefaultExpirationDuration Initial default duration in seconds for reward expiration */ constructor( address initialOwner, address reclaimAddress_, uint256 initialMaxPostIdLength, uint256 initialMaxUsernameLength, uint256 initialMaxBulkOperations, uint256 initialDefaultExpirationDuration ) Ownable(initialOwner) { if (initialOwner == address(0)) revert ZeroAddress(); if (reclaimAddress_ == address(0)) revert ZeroAddress(); if (initialMaxPostIdLength == 0) revert InvalidLength(); if (initialMaxUsernameLength == 0) revert InvalidLength(); if (initialMaxBulkOperations == 0) revert InvalidLength(); if (initialDefaultExpirationDuration == 0) revert InvalidLength(); _grantRole(DEFAULT_ADMIN_ROLE, initialOwner); _grantRole(ADMIN_ROLE, initialOwner); reclaimAddress = reclaimAddress_; maxPostIdLength = initialMaxPostIdLength; maxUsernameLength = initialMaxUsernameLength; maxBulkOperations = initialMaxBulkOperations; defaultExpirationDuration = initialDefaultExpirationDuration; } /** * @dev Modifier that checks if the caller has admin privileges */ modifier onlyAdminRole() { require(hasRole(ADMIN_ROLE, msg.sender) || owner() == msg.sender, "Caller is not an admin"); _; } /** * @dev Modifier that checks if the caller has admin privileges */ modifier onlyRewardCreatorRole() { require(hasRole(REWARD_CREATOR_ROLE, msg.sender) || hasRole(ADMIN_ROLE, msg.sender) || owner() == msg.sender, "Caller is not a reward creator"); _; } /** * @dev Grants admin role to an account * @param account Address to grant admin role to */ function grantAdminRole(address account) external onlyOwner { if (account == address(0)) revert ZeroAddress(); _grantRole(ADMIN_ROLE, account); emit AdminAdded(account); } /** * @dev Grants reward creator role to an account * @param account Address to grant reward creator role to */ function grantRewardCreatorRole(address account) external onlyAdminRole { if (account == address(0)) revert ZeroAddress(); _grantRole(REWARD_CREATOR_ROLE, account); emit RewardCreatorAdded(account); } /** * @dev Revokes admin role from an account * @param account Address to revoke admin role from */ function revokeAdminRole(address account) external onlyOwner { _revokeRole(ADMIN_ROLE, account); emit AdminRemoved(account); } /** * @dev Revokes reward creator role from an account * @param account Address to revoke reward creator role from */ function revokeRewardCreatorRole(address account) external onlyOwner { _revokeRole(REWARD_CREATOR_ROLE, account); emit RewardCreatorRemoved(account); } /** * @dev Updates the system limits * @notice This function allows the owner to adjust the maximum lengths and bulk operation limits * @param newMaxPostIdLength New maximum length for post IDs * @param newMaxUsernameLength New maximum length for usernames * @param newMaxBulkOperations New maximum number of bulk operations */ function updateLimits( uint256 newMaxPostIdLength, uint256 newMaxUsernameLength, uint256 newMaxBulkOperations ) external onlyAdminRole { if (newMaxPostIdLength == 0) revert InvalidLength(); if (newMaxUsernameLength == 0) revert InvalidLength(); if (newMaxBulkOperations == 0) revert InvalidLength(); maxPostIdLength = newMaxPostIdLength; maxUsernameLength = newMaxUsernameLength; maxBulkOperations = newMaxBulkOperations; emit LimitsUpdated(newMaxPostIdLength, newMaxUsernameLength, newMaxBulkOperations); } function updateReclaimAddress(address newReclaimAddress) external onlyAdminRole { if (newReclaimAddress == address(0)) revert ZeroAddress(); address oldAddress = reclaimAddress; reclaimAddress = newReclaimAddress; emit ReclaimAddressUpdated(oldAddress, newReclaimAddress); } function pause() external onlyAdminRole { _pause(); emit ContractPaused(msg.sender); } function unpause() external onlyAdminRole { _unpause(); emit ContractUnpaused(msg.sender); } /** * @dev Internal function to convert post ID to its hash * @param postId Original post ID * @return bytes32 Hash of the post ID */ function _postIdToHash(string calldata postId) internal pure returns (bytes32) { return keccak256(abi.encodePacked(postId)); } /** * @dev Internal function to add a new reward * @notice Handles both ETH and ERC20 token rewards * @param postId Unique identifier of the post * @param username Username associated with the post * @param token Address of reward token (address(0) for ETH) * @param amount Amount of tokens to reward * @param expirationTimestamp Timestamp when the reward expires */ function _addReward( string calldata postId, string calldata username, address token, uint256 amount, uint256 expirationTimestamp ) internal { if (amount == 0) revert ZeroAmount(); if (bytes(postId).length == 0) revert EmptyPostId(); if (bytes(username).length == 0) revert EmptyUsername(); if (bytes(postId).length > maxPostIdLength) revert StringTooLong(); if (bytes(username).length > maxUsernameLength) revert StringTooLong(); bytes32 postIdHash = _postIdToHash(postId); if (postRewards[postIdHash].amount != 0) revert PostIdAlreadyRewarded(); uint256 currentTime = block.timestamp; uint256 actualExpirationTimestamp; // If expiration is 0 or equal to creation time, use default duration if (expirationTimestamp == 0 || expirationTimestamp == currentTime) { actualExpirationTimestamp = currentTime + defaultExpirationDuration; } else { if (expirationTimestamp <= currentTime) revert InvalidExpiration(); actualExpirationTimestamp = expirationTimestamp; } // Validate token address if it's an ERC20 if (token != address(0)) { if (token == address(0)) revert ZeroAddress(); if (IERC20(token).totalSupply() == 0) revert InvalidTokenAddress(); } postRewards[postIdHash] = Reward({ postId: postId, username: username, token: token, amount: amount, claimed: false, claimable: true, createdAt: currentTime, expiresAt: actualExpirationTimestamp }); emit RewardAdded(postIdHash, postId, token, amount); } function addReward( string calldata postId, string calldata username, address token, uint256 amount, uint256 expirationTimestamp ) external onlyRewardCreatorRole whenNotPaused { _addReward(postId, username, token, amount, expirationTimestamp); } /** * @dev Adds multiple rewards in a single transaction * @notice This function optimizes gas usage for multiple reward additions * @param postIds Array of post IDs * @param usernames Array of usernames * @param tokens Array of token addresses * @param amounts Array of reward amounts * @param expirationTimestamps Array of expiration timestamps */ function addBulkRewards( string[] calldata postIds, string[] calldata usernames, address[] calldata tokens, uint256[] calldata amounts, uint256[] calldata expirationTimestamps ) external onlyRewardCreatorRole whenNotPaused { uint256 length = postIds.length; if (length == 0) revert EmptyArray(); if (length > maxBulkOperations) revert ExceedsMaxBulkOperations(); if (length != usernames.length || length != tokens.length || length != amounts.length || length != expirationTimestamps.length) revert ArrayLengthMismatch(); for (uint256 i = 0; i < length; i++) { _addReward(postIds[i], usernames[i], tokens[i], amounts[i], expirationTimestamps[i]); } } function removeReward( string calldata postId, bool withTransfer ) external onlyAdminRole { bytes32 postIdHash = _postIdToHash(postId); Reward storage reward = postRewards[postIdHash]; if (reward.amount == 0) revert NoRewardAvailable(); if (reward.claimed) revert RewardAlreadyClaimed(); if (withTransfer) { if (reward.token == address(0)) { (bool success, ) = msg.sender.call{value: reward.amount}(""); if (!success) revert TransferFailed(); } else { if (!IERC20(reward.token).transfer(msg.sender, reward.amount)) { revert TransferFailed(); } } } reward.claimable = false; emit RewardRemoved(postIdHash, postId); } function removeBulkRewards( string[] calldata postIds, bool withTransfer ) external onlyAdminRole { uint256 length = postIds.length; if (length == 0) revert EmptyArray(); if (length > maxBulkOperations) revert ExceedsMaxBulkOperations(); if (withTransfer) { uint256 totalNativeAmount; address[] memory tokenAddresses = new address[](length); uint256[] memory tokenAmounts = new uint256[](length); uint256 tokenCount; for (uint256 i = 0; i < length; i++) { bytes32 postIdHash = _postIdToHash(postIds[i]); Reward storage reward = postRewards[postIdHash]; if (reward.amount == 0) revert NoRewardAvailable(); if (reward.claimed) revert RewardAlreadyClaimed(); if (!reward.claimable) revert RewardNotClaimable(); if (reward.token == address(0)) { totalNativeAmount += reward.amount; } else { bool found = false; for (uint256 j = 0; j < tokenCount; j++) { if (tokenAddresses[j] == reward.token) { tokenAmounts[j] += reward.amount; found = true; break; } } if (!found) { tokenAddresses[tokenCount] = reward.token; tokenAmounts[tokenCount] = reward.amount; tokenCount++; } } reward.claimable = false; } if (totalNativeAmount > 0) { (bool success, ) = msg.sender.call{value: totalNativeAmount}(""); if (!success) revert TransferFailed(); } for (uint256 i = 0; i < tokenCount; i++) { if (!IERC20(tokenAddresses[i]).transfer(msg.sender, tokenAmounts[i])) { revert TransferFailed(); } } } else { for (uint256 i = 0; i < length; i++) { bytes32 postIdHash = _postIdToHash(postIds[i]); Reward storage reward = postRewards[postIdHash]; if (reward.amount == 0) revert NoRewardAvailable(); if (reward.claimed) revert RewardAlreadyClaimed(); if (!reward.claimable) revert RewardNotClaimable(); reward.claimable = false; } } for (uint256 i = 0; i < length; i++) { emit RewardRemoved(_postIdToHash(postIds[i]), postIds[i]); } } /** * @dev Claims a reward for a social media post * @notice Verifies proof using Reclaim Protocol before processing claim * @param postId ID of the post to claim reward for * @param username Username of the claimer * @param proof Proof of post ownership from Reclaim Protocol */ function claimReward( string calldata postId, string calldata username, IReclaim.Proof memory proof ) external nonReentrant whenNotPaused { if (bytes(proof.claimInfo.context).length == 0) revert InvalidProofData(); // Try to verify the proof, revert with custom error if it fails try IReclaim(reclaimAddress).verifyProof(proof) { bytes32 postIdHash = _postIdToHash(postId); Reward storage reward = postRewards[postIdHash]; if (reward.amount == 0) revert NoRewardAvailable(); if (reward.claimed) revert RewardAlreadyClaimed(); if (!reward.claimable) revert RewardNotClaimable(); if (block.timestamp > reward.expiresAt) revert RewardExpired(); // Extract and verify username string memory proofUsername; try IReclaim(reclaimAddress).extractFieldFromContext( proof.claimInfo.context, '"screen_name":"' ) returns (string memory extractedUsername) { proofUsername = extractedUsername; } catch { revert UsernameVerificationFailed(); } if (keccak256(abi.encodePacked(proofUsername)) != keccak256(abi.encodePacked(username))) revert InvalidUsername(); reward.claimed = true; if (reward.token == address(0)) { if (address(this).balance < reward.amount) revert InsufficientContractBalance(); (bool success, ) = msg.sender.call{value: reward.amount}(""); if (!success) revert TransferFailed(); } else { IERC20 token = IERC20(reward.token); if (token.balanceOf(address(this)) < reward.amount) revert InsufficientContractBalance(); if (!token.transfer(msg.sender, reward.amount)) revert TransferFailed(); } emit RewardClaimed(postIdHash, postId, username, reward.token, reward.amount); } catch { revert ProofVerificationFailed(); } } function getReward( string calldata postId ) external view returns (Reward memory) { return postRewards[_postIdToHash(postId)]; } /** * @dev Emergency withdrawal function * @notice Allows owner to withdraw tokens in case of emergency * @param token Address of token to withdraw (address(0) for ETH) * @param amount Amount to withdraw */ function emergencyWithdraw( address token, uint256 amount ) external onlyAdminRole { if (amount == 0) revert ZeroAmount(); if (token == address(0)) { if (address(this).balance < amount) revert InsufficientContractBalance(); (bool success, ) = msg.sender.call{value: amount}(""); if (!success) revert TransferFailed(); } else { IERC20 tokenContract = IERC20(token); if (tokenContract.balanceOf(address(this)) < amount) revert InsufficientContractBalance(); if (!tokenContract.transfer(msg.sender, amount)) revert TransferFailed(); } } /** * @dev Updates the default expiration duration * @param newDefaultExpirationDuration New default duration in seconds */ function updateDefaultExpirationDuration(uint256 newDefaultExpirationDuration) external onlyAdminRole { if (newDefaultExpirationDuration == 0) revert InvalidLength(); defaultExpirationDuration = newDefaultExpirationDuration; } /// @dev Allows contract to receive ETH receive() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.20; interface IReclaim { struct CompleteClaimData { bytes32 identifier; address owner; uint32 timestampS; uint32 epoch; } struct ClaimInfo { string provider; string parameters; string context; } struct SignedClaim { CompleteClaimData claim; bytes[] signatures; } struct Proof { ClaimInfo claimInfo; SignedClaim signedClaim; } function verifyProof(Proof memory proof) external view; function extractFieldFromContext( string memory data, string memory target ) external pure returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/AccessControl.sol) pragma solidity ^0.8.20; import {IAccessControl} from "./IAccessControl.sol"; import {Context} from "../utils/Context.sol"; import {ERC165} from "../utils/introspection/ERC165.sol"; /** * @dev Contract module that allows children to implement role-based access * control mechanisms. This is a lightweight version that doesn't allow enumerating role * members except through off-chain means by accessing the contract event logs. Some * applications may benefit from on-chain enumerability, for those cases see * {AccessControlEnumerable}. * * Roles are referred to by their `bytes32` identifier. These should be exposed * in the external API and be unique. The best way to achieve this is by * using `public constant` hash digests: * * ```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 AccessControl is Context, IAccessControl, ERC165 { struct RoleData { mapping(address account => bool) hasRole; bytes32 adminRole; } mapping(bytes32 role => RoleData) private _roles; bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; /** * @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); _; } /** * @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) { 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) { 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 { 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) { 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) { 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.1.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @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 ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; import {Context} from "../utils/Context.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 Pausable is Context { bool private _paused; /** * @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. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { 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 { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } }
// 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.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } 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 "./IERC165.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 ERC165 is IERC165 { /** * @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) (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); }
{ "optimizer": { "enabled": true, "mode": "3", "runs": 200 }, "evmVersion": "paris", "outputSelection": { "*": { "*": [ "abi" ] } }, "detectMissingLibraries": false, "forceEVMLA": false, "enableEraVMExtensions": false, "libraries": {} }
[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"},{"internalType":"address","name":"reclaimAddress_","type":"address"},{"internalType":"uint256","name":"initialMaxPostIdLength","type":"uint256"},{"internalType":"uint256","name":"initialMaxUsernameLength","type":"uint256"},{"internalType":"uint256","name":"initialMaxBulkOperations","type":"uint256"},{"internalType":"uint256","name":"initialDefaultExpirationDuration","type":"uint256"}],"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":"ArrayLengthMismatch","type":"error"},{"inputs":[],"name":"EmptyArray","type":"error"},{"inputs":[],"name":"EmptyPostId","type":"error"},{"inputs":[],"name":"EmptyUsername","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExceedsMaxBulkOperations","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"IncorrectNativeTokenAmount","type":"error"},{"inputs":[],"name":"InsufficientContractBalance","type":"error"},{"inputs":[],"name":"InvalidExpiration","type":"error"},{"inputs":[],"name":"InvalidLength","type":"error"},{"inputs":[],"name":"InvalidProof","type":"error"},{"inputs":[],"name":"InvalidProofData","type":"error"},{"inputs":[],"name":"InvalidTokenAddress","type":"error"},{"inputs":[],"name":"InvalidUsername","type":"error"},{"inputs":[],"name":"NativeTokenNotNeeded","type":"error"},{"inputs":[],"name":"NoRewardAvailable","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"PostIdAlreadyRewarded","type":"error"},{"inputs":[],"name":"ProofVerificationFailed","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","type":"error"},{"inputs":[],"name":"RewardAlreadyClaimed","type":"error"},{"inputs":[],"name":"RewardExpired","type":"error"},{"inputs":[],"name":"RewardNotClaimable","type":"error"},{"inputs":[],"name":"StringTooLong","type":"error"},{"inputs":[],"name":"TransferFailed","type":"error"},{"inputs":[],"name":"UsernameVerificationFailed","type":"error"},{"inputs":[],"name":"ZeroAddress","type":"error"},{"inputs":[],"name":"ZeroAmount","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AdminAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"AdminRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"ContractPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"ContractUnpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxPostIdLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxUsernameLength","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxBulkOperations","type":"uint256"}],"name":"LimitsUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"},{"indexed":true,"internalType":"address","name":"newAddress","type":"address"}],"name":"ReclaimAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"postIdHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"postId","type":"string"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"postIdHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"postId","type":"string"},{"indexed":false,"internalType":"string","name":"username","type":"string"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RewardCreatorAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RewardCreatorRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"postIdHash","type":"bytes32"},{"indexed":false,"internalType":"string","name":"postId","type":"string"}],"name":"RewardRemoved","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":"ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"REWARD_CREATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"postIds","type":"string[]"},{"internalType":"string[]","name":"usernames","type":"string[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"expirationTimestamps","type":"uint256[]"}],"name":"addBulkRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"postId","type":"string"},{"internalType":"string","name":"username","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"expirationTimestamp","type":"uint256"}],"name":"addReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"postId","type":"string"},{"internalType":"string","name":"username","type":"string"},{"components":[{"components":[{"internalType":"string","name":"provider","type":"string"},{"internalType":"string","name":"parameters","type":"string"},{"internalType":"string","name":"context","type":"string"}],"internalType":"struct IReclaim.ClaimInfo","name":"claimInfo","type":"tuple"},{"components":[{"components":[{"internalType":"bytes32","name":"identifier","type":"bytes32"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint32","name":"timestampS","type":"uint32"},{"internalType":"uint32","name":"epoch","type":"uint32"}],"internalType":"struct IReclaim.CompleteClaimData","name":"claim","type":"tuple"},{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"internalType":"struct IReclaim.SignedClaim","name":"signedClaim","type":"tuple"}],"internalType":"struct IReclaim.Proof","name":"proof","type":"tuple"}],"name":"claimReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultExpirationDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"emergencyWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"postId","type":"string"}],"name":"getReward","outputs":[{"components":[{"internalType":"string","name":"postId","type":"string"},{"internalType":"string","name":"username","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"}],"internalType":"struct DynamicRewards.Reward","name":"","type":"tuple"}],"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":"address","name":"account","type":"address"}],"name":"grantAdminRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"grantRewardCreatorRole","outputs":[],"stateMutability":"nonpayable","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":[],"name":"maxBulkOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPostIdLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxUsernameLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"name":"postRewards","outputs":[{"internalType":"string","name":"postId","type":"string"},{"internalType":"string","name":"username","type":"string"},{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"claimed","type":"bool"},{"internalType":"bool","name":"claimable","type":"bool"},{"internalType":"uint256","name":"createdAt","type":"uint256"},{"internalType":"uint256","name":"expiresAt","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reclaimAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string[]","name":"postIds","type":"string[]"},{"internalType":"bool","name":"withTransfer","type":"bool"}],"name":"removeBulkRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"postId","type":"string"},{"internalType":"bool","name":"withTransfer","type":"bool"}],"name":"removeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeAdminRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"revokeRewardCreatorRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDefaultExpirationDuration","type":"uint256"}],"name":"updateDefaultExpirationDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxPostIdLength","type":"uint256"},{"internalType":"uint256","name":"newMaxUsernameLength","type":"uint256"},{"internalType":"uint256","name":"newMaxBulkOperations","type":"uint256"}],"name":"updateLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newReclaimAddress","type":"address"}],"name":"updateReclaimAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
9c4d535b0000000000000000000000000000000000000000000000000000000000000000010006996c428e14695d04e1fc6e9575602c125af6fccb03bf0a394bf066ee90000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000036615cf349d7f6344891b1e7ca7c72883f5dc049000000000000000000000000760de1fed5889052a2c01ea7823d930060d4af4d0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000093a80
Deployed Bytecode
0x00020000000000020011000000000002000000000302001900010000000103550000006002100270000006000020019d000006000220019700000001003001900000004f0000c13d000000a003000039000000400030043f000000040020008c000000810000413d000000000301043b000000e0033002700000060f0030009c000000850000a13d000006100030009c000000da0000213d0000061d0030009c000001480000a13d0000061e0030009c000003790000a13d0000061f0030009c000008c70000613d000006200030009c000007290000613d000006210030009c000009da0000c13d000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b001100000001001d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000000480000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d0000001102000029000000000002004b000009740000613d0000000701000039000000000021041b0000000001000019000017fc0001042e0000000003000416000000000003004b000009da0000c13d0000001f0320003900000601033001970000008003300039000000400030043f0000001f0420018f00000602052001980000008003500039000000600000613d0000008006000039000000000701034f000000007807043c0000000006860436000000000036004b0000005c0000c13d000000000004004b0000006d0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000c00020008c000009da0000413d000000800600043d000006030060009c000009da0000213d000000a00400043d000006030040009c000009da0000213d000000000006004b000002ee0000c13d000000400100043d0000060d02000041000000000021043500000004021000390000000000020435000006000010009c000006000100804100000040011002100000060e011001c7000017fd00010430000000000002004b000009da0000c13d0000000001000019000017fc0001042e000006290030009c0000012f0000a13d0000062a0030009c000001b80000a13d0000062b0030009c0000043f0000a13d0000062c0030009c000008e20000613d0000062d0030009c000007d50000613d0000062e0030009c000009da0000c13d0000000001000416000000000001004b000009da0000c13d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000000b70000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d0000000301000039000000000201041a000000ff0020019000000fc60000c13d000006890220019700000001022001bf000000000021041b000000400100043d00000000020004110000000000210435000006000010009c000006000100804100000040011002100000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000673011001c70000800d020000390000000103000039000006740400004117fb17f10000040f0000000100200190000009da0000613d0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d02000039000000020300003900000675040000410000000005000411000009cb0000013d000006110030009c0000019c0000a13d000006120030009c000003fc0000a13d000006130030009c000008cd0000613d000006140030009c000007320000613d000006150030009c000009da0000c13d000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b000000000010043f0000000901000039000000200010043f0000004002000039000000000100001917fb17dc0000040f001100000001001d17fb13aa0000040f000c00000001001d0000001101000029000000010110003917fb13aa0000040f00000011030000290000000202300039000000000202041a001000000002001d0000000302300039000000000202041a000f00000002001d0000000402300039000000000202041a000e00000002001d0000000502300039000000000202041a000d00000002001d0000000602300039000000000202041a000b00000002001d0000010002000039000000400300043d001100000003001d0000000002230436000900000002001d000a00000001001d00000100023000390000000c0100002917fb138d0000040f0000000002010019000000110120006a000000090300002900000000001304350000000a0100002917fb138d0000040f0000001104000029000000e0024000390000000b030000290000000000320435000000c0024000390000000d0300002900000000003204350000000e050000290000ff00005001900000000002000039000000010200c039000000a0034000390000000000230435000000ff005001900000000002000039000000010200c0390000008003400039000000000023043500000060024000390000000f0300002900000000003204350000001002000029000006030220019700000040034000390000085d0000013d000006360030009c000001c30000213d0000063c0030009c000004570000213d0000063f0030009c000007dc0000613d000006400030009c000009da0000c13d000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b0000068600100198000009da0000c13d000006870010009c00000000020000390000000102006039000006880010009c00000001022061bf000000a00020043f0000066b01000041000017fc0001042e000006240030009c000003170000213d000006270030009c000004750000613d000006280030009c000009da0000c13d000000440020008c000009da0000413d0000000003000416000000000003004b000009da0000c13d0000000403100370000000000303043b000f00000003001d000006410030009c000009da0000213d0000000f030000290000002303300039000000000023004b000009da0000813d0000000f030000290000000403300039000000000331034f000000000303043b000e00000003001d000006410030009c000009da0000213d0000000f0300002900000024043000390000000e030000290000000503300210001100000004001d001000000003001d0000000003430019000000000023004b000009da0000213d0000002401100370000000000201043b000000000002004b0000000001000039000000010100c039000d00000002001d000000000012004b000009da0000c13d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000001970000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d0000000e0000006b00000b140000c13d000000400100043d0000068502000041000009760000013d000006180030009c000003510000213d0000061b0030009c0000047a0000613d0000061c0030009c000009da0000c13d000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b001100000001001d000006030010009c000009da0000213d000000000100041a00000603021001970000000001000411000000000012004b0000096a0000c13d0000001101000029000000000001004b000009910000c13d0000065001000041000000a00010043f0000066801000041000017fd00010430000006310030009c000003700000213d000006340030009c000006160000613d000006350030009c000009da0000c13d0000000001000416000000000001004b000009da0000c13d00000005010000390000087a0000013d000006370030009c000004600000213d0000063a0030009c000008670000613d0000063b0030009c000009da0000c13d000000a40020008c000009da0000413d0000000003000416000000000003004b000009da0000c13d0000000403100370000000000303043b001100000003001d000006410030009c000009da0000213d00000011030000290000002303300039000000000023004b000009da0000813d00000011030000290000000403300039000000000331034f000000000303043b001000000003001d000006410030009c000009da0000213d0000001103000029000e00240030003d000000100300002900000005033002100000000e03300029000000000023004b000009da0000213d0000002403100370000000000303043b000f00000003001d000006410030009c000009da0000213d0000000f030000290000002303300039000000000023004b000009da0000813d0000000f030000290000000403300039000000000331034f000000000303043b000d00000003001d000006410030009c000009da0000213d0000000f03000029000c00240030003d0000000d0300002900000005033002100000000c03300029000000000023004b000009da0000213d0000004403100370000000000303043b000006410030009c000009da0000213d0000002304300039000000000024004b000009da0000813d0000000404300039000000000441034f000000000404043b000800000004001d000006410040009c000009da0000213d000b00240030003d000000080300002900000005033002100000000b03300029000000000023004b000009da0000213d0000006403100370000000000303043b000006410030009c000009da0000213d0000002304300039000000000024004b000009da0000813d0000000404300039000000000441034f000000000404043b000700000004001d000006410040009c000009da0000213d000a00240030003d000000070300002900000005033002100000000a03300029000000000023004b000009da0000213d0000008403100370000000000303043b000006410030009c000009da0000213d0000002304300039000000000024004b000009da0000813d0000000404300039000000000141034f000000000101043b000600000001001d000006410010009c000009da0000213d000900240030003d000000060100002900000005011002100000000901100029000000000021004b000009da0000213d0000064e01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000002760000c13d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000002760000c13d000000000100041a00000603011001970000000002000411000000000021004b00000f5f0000c13d0000000301000039000000000101041a000000ff0010019000000fc60000c13d000000100000006b000001990000613d0000000601000039000000000101041a000000100010006b00000b180000213d0000000d02000029000000100020006b00000f5c0000c13d0000000802000029000000100020006b00000f5c0000c13d0000000702000029000000100020006b00000f5c0000c13d0000000602000029000000100020006b00000f5c0000c13d000d00000000001d0000000d0100002900000005061002100000000e016000290000000101100367000000000101043b0000000003000031000000110230006a000000430220008a00000656042001970000065605100197000000000745013f000000000045004b00000000040000190000065604004041000000000021004b00000000020000190000065602008041000006560070009c000000000402c019000000000004004b000009da0000c13d0000000e011000290000000102100367000000000202043b000006410020009c000009da0000213d0000000004230049000000200110003900000656054001970000065607100197000000000857013f000000000057004b00000000050000190000065605004041000000000041004b00000000040000190000065604002041000006560080009c000000000504c019000000000005004b000009da0000c13d0000000f0530006a0000000c046000290000000104400367000000000404043b000000430550008a00000656075001970000065608400197000000000978013f000000000078004b00000000070000190000065607004041000000000054004b00000000050000190000065605008041000006560090009c000000000705c019000000000007004b000009da0000c13d0000000c054000290000000104500367000000000404043b000006410040009c000009da0000213d0000000007430049000000200350003900000656057001970000065608300197000000000958013f000000000058004b00000000050000190000065605004041000000000073004b00000000070000190000065607002041000006560090009c000000000507c019000000000005004b000009da0000c13d0000000b056000290000000105500367000000000505043b000006030050009c000009da0000213d00000009076000290000000a0660002900000001066003670000000107700367000000000707043b000000000606043b17fb14990000040f0000000d020000290000000102200039000d00000002001d000000100020006c0000028d0000413d000000830000013d000001200100043d000c00000001001d000001000100043d000d00000001001d000000e00100043d000e00000001001d000000c00100043d000f00000001001d000000000100041a0000060402100197000000000262019f000000000020041b00000000020004140000060305100197000006000020009c0000060002008041000000c00120021000000605011001c70000800d020000390000000303000039001000000004001d0000060604000041001100000006001d000000110600002917fb17f10000040f000000110400002900000010030000290000000100200190000009da0000613d00000001010000390000000202000039000000000012041b0000000305000039000000000105041a0000068901100197000000000015041b000000000003004b000008e90000c13d000000400100043d0000065002000041000009760000013d000006250030009c000004a40000613d000006260030009c000009da0000c13d000000440020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000402100370000000000202043b001100000002001d000006030020009c000009da0000213d0000002401100370000000000101043b001000000001001d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff001001900000034b0000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d000000100000006b000000110200002900000a390000c13d000000400100043d0000066e02000041000009760000013d000006190030009c000004bd0000613d0000061a0030009c000009da0000c13d000000440020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000002402100370000000000202043b001100000002001d000006030020009c000009da0000213d0000000401100370000000000101043b001000000001001d000000000010043f0000000101000039000000200010043f0000004002000039000000000100001917fb17dc0000040f0000000101100039000000000101041a17fb13f70000040f0000001001000029000000110200002917fb14270000040f0000000001000019000017fc0001042e000006320030009c000006690000613d000006330030009c000009da0000c13d0000000001000416000000000001004b000009da0000c13d00000006010000390000087a0000013d000006220030009c000006960000613d000006230030009c000009da0000c13d000000a40020008c000009da0000413d0000000003000416000000000003004b000009da0000c13d0000000403100370000000000303043b000006410030009c000009da0000213d0000002304300039000000000024004b000009da0000813d0000000404300039000000000441034f000000000404043b001100000004001d000006410040009c000009da0000213d0000002404300039001000000004001d0000001103400029000000000023004b000009da0000213d0000002403100370000000000303043b000006410030009c000009da0000213d0000002304300039000000000024004b000009da0000813d0000000404300039000000000441034f000000000404043b000f00000004001d000006410040009c000009da0000213d0000002404300039000e00000004001d0000000f03400029000000000023004b000009da0000213d0000004401100370000000000101043b000d00000001001d000006030010009c000009da0000213d0000064e01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff01100190000003ed0000c13d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff01100190000003ed0000c13d000000000100041a00000603011001970000000002000411000000000021004b0000000001000039000000010100603917fb14850000040f17fb14780000040f00000001010003670000006402100370000000000602043b0000008401100370000000000701043b000000100100002900000011020000290000000e030000290000000f040000290000000d0500002917fb14990000040f0000000001000019000017fc0001042e000006160030009c000006c00000613d000006170030009c000009da0000c13d000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b001100000001001d000006030010009c000009da0000213d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff001001900000042d0000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d0000001106000029000000000006004b000003140000613d0000000801000039000000000201041a0000060403200197000000000363019f000000000031041b00000000010004140000060305200197000006000010009c0000060001008041000000c00110021000000605011001c70000800d0200003900000003030000390000064c04000041000009d70000013d0000062f0030009c000007ca0000613d000006300030009c000009da0000c13d0000000001000416000000000001004b000009da0000c13d000000000100041a00000603051001970000000002000411000000000025004b0000096f0000c13d0000060401100197000000000010041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d02000039000000030300003900000606040000410000000006000019000009d70000013d0000063d0030009c000008760000613d0000063e0030009c000009da0000c13d0000000001000416000000000001004b000009da0000c13d00000007010000390000087a0000013d000006380030009c0000087e0000613d000006390030009c000009da0000c13d000000440020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000002402100370000000000302043b000006030030009c000009da0000213d0000000002000411000000000023004b0000098d0000c13d0000000401100370000000000101043b17fb14270000040f0000000001000019000017fc0001042e0000000001000416000000000001004b000009da0000c13d000000000100041a0000072e0000013d000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b001100000001001d000006030010009c000009da0000213d000000000100041a00000603021001970000000001000411000000000012004b0000096a0000c13d001000000002001d0000001101000029000000000010043f0000064d01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000009f90000c13d0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d0200003900000002030000390000066a04000041000009ca0000013d000000440020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000002402100370000000000202043b001100000002001d000006030020009c000009da0000213d0000000401100370000000000101043b000000000010043f0000000101000039000000200010043f0000004002000039000000000100001917fb17dc0000040f0000001102000029000000000020043f000000200010043f0000000001000019000000400200003917fb17dc0000040f000007ce0000013d000000640020008c000009da0000413d0000000003000416000000000003004b000009da0000c13d0000000403100370000000000303043b000006410030009c000009da0000213d0000002304300039000000000024004b000009da0000813d0000000404300039000000000441034f000000000404043b001100000004001d000006410040009c000009da0000213d0000002404300039001000000004001d0000001103400029000000000023004b000009da0000213d0000002403100370000000000303043b000006410030009c000009da0000213d0000002304300039000000000024004b000009da0000813d0000000404300039000000000441034f000000000404043b000f00000004001d000006410040009c000009da0000213d0000002404300039000e00000004001d0000000f03400029000000000023004b000009da0000213d0000004403100370000000000403043b000006410040009c000009da0000213d0000000003420049000006510030009c000009da0000213d000000440030008c000009da0000413d000000e005000039000000400050043f0000000403400039000000000631034f000000000606043b000006410060009c000009da0000213d00000000064600190000000007620049000006510070009c000009da0000213d000000640070008c000009da0000413d0000014007000039000000400070043f0000000408600039000000000981034f000000000909043b000006410090009c000009da0000213d000000000b6900190000002309b00039000000000029004b000009da0000813d000000040ab000390000000009a1034f000000000909043b000006410090009c000013550000213d0000001f0c9000390000068a0cc001970000003f0cc000390000068a0cc001970000065200c0009c000013550000213d000000240bb00039000001400cc000390000004000c0043f000001400090043f000000000bb9001900000000002b004b000009da0000213d000000200aa00039000d000000a103530000068a0c9001980000001f0d90018f000001600ac00039000005250000613d000001600e0000390000000d0f00035f00000000fb0f043c000000000ebe04360000000000ae004b000005210000c13d00000000000d004b000005320000613d0000000d0bc0035f000000030cd00210000000000d0a0433000000000dcd01cf000000000dcd022f000000000b0b043b000001000cc00089000000000bcb022f000000000bcb01cf000000000bdb019f0000000000ba043500000160099000390000000000090435000000e00070043f0000002007800039000000000871034f000000000808043b000006410080009c000009da0000213d000000000a6800190000002308a00039000000000028004b000009da0000813d000000040ba000390000000008b1034f000000000808043b000006410080009c000013550000213d0000001f098000390000068a099001970000003f099000390000068a0c900197000000400900043d000000000cc9001900000000009c004b000000000d000039000000010d0040390000064100c0009c000013550000213d0000000100d00190000013550000c13d000000240aa000390000004000c0043f000000000c890436000000000aa8001900000000002a004b000009da0000213d000000200ab00039000d000000a10353000c068a0080019c0000001f0e80018f0000000c0bc00029000005620000613d0000000d0f00035f000000000a0c001900000000fd0f043c000000000ada04360000000000ba004b0000055e0000c13d00000000000e004b000005700000613d0000000c0d0000290000000d0ad0035f000000030de00210000000000e0b0433000000000ede01cf000000000ede022f000000000a0a043b000001000dd00089000000000ada022f000000000ada01cf000000000aea019f0000000000ab043500000000088c00190000000000080435000001000090043f0000002007700039000000000771034f000000000707043b000006410070009c000009da0000213d00000000086700190000002306800039000000000026004b000009da0000813d0000000409800039000000000691034f000000000606043b000006410060009c000013550000213d0000001f076000390000068a077001970000003f077000390000068a0a700197000000400700043d000000000aa7001900000000007a004b000000000b000039000000010b0040390000064100a0009c000013550000213d0000000100b00190000013550000c13d000000240b8000390000004000a0043f0000000008670436000000000ab6001900000000002a004b000009da0000213d0000002009900039000000000a91034f0000068a0b6001980000001f0c60018f0000000009b80019000005a00000613d000000000d0a034f000000000e08001900000000df0d043c000000000efe043600000000009e004b0000059c0000c13d00000000000c004b000005ad0000613d000000000aba034f000000030bc00210000000000c090433000000000cbc01cf000000000cbc022f000000000a0a043b000001000bb00089000000000aba022f000000000aba01cf000000000aca019f0000000000a9043500000000066800190000000000060435000001200070043f000000a00050043f0000002407400039000000000571034f000000000805043b000006410080009c000009da0000213d00000000058400190000000004520049000006510040009c000009da0000213d000000a40040008c000009da0000413d000000400400043d000d00000004001d000006530040009c000013550000213d0000000d040000290000004006400039000000400060043f000006540040009c000013550000213d0000000d04000029000000c009400039000000400090043f0000000003830019000000000331034f000000000303043b00000000003604350000000003870019000000000331034f000000000303043b000006030030009c000009da0000213d0000000d04000029000000600740003900000000003704350000004403500039000000000331034f000000000303043b000006000030009c000009da0000213d0000000d04000029000000800740003900000000003704350000006403500039000000000331034f000000000303043b000006000030009c000009da0000213d0000000d040000290000000006640436000c00000006001d000000a00640003900000000003604350000008403500039000000000331034f000000000303043b000006410030009c000009da0000213d00000000053500190000002303500039000000000023004b000009da0000813d0000000403500039000000000331034f000000000903043b000006410090009c000013550000213d00000005089002100000003f038000390000065503300197000000400400043d0000000006340019000b00000004001d000000000046004b00000000030000390000000103004039000006410060009c000013550000213d0000000100300190000013550000c13d000000400060043f0000000b03000029000000000093043500000024075000390000000008780019000000000028004b000009da0000213d000000000009004b00000f6c0000c13d0000000c010000290000000b0200002900000000002104350000000d01000029000000c00010043f0000000201000039000000000101041a000000020010008c00000fb70000c13d000000400100043d0000066602000041000009760000013d000000640020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000004402100370000000000202043b001000000002001d0000002402100370000000000202043b001100000002001d0000000401100370000000000101043b000f00000001001d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000006470000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d0000000f05000029000000000005004b00000011030000290000001004000029000009740000613d000000000003004b000009740000613d000000000004004b000009740000613d0000000401000039000000000051041b0000000501000039000000000031041b0000000601000039000000000041041b000000400100043d00000040021000390000000000420435000000200210003900000000003204350000000000510435000006000010009c000006000100804100000040011002100000000002000414000006000020009c0000060002008041000000c002200210000000000112019f0000067c011001c70000800d0200003900000001030000390000067d04000041000009cb0000013d0000000001000416000000000001004b000009da0000c13d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff001001900000068f0000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d000000400100043d0000000302000039000000000302041a000000ff00300190000009dc0000c13d0000067802000041000009760000013d000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b001100000001001d000006030010009c000009da0000213d000000000100041a00000603021001970000000001000411000000000012004b0000096a0000c13d001000000002001d0000001101000029000000000010043f0000060a01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff0010019000000a190000c13d0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d0200003900000002030000390000066c04000041000009ca0000013d000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b001100000001001d000006030010009c000009da0000213d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000006ed0000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d0000001101000029000000000001004b000003140000613d000000000010043f0000064d01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000007200000c13d0000001101000029000000000010043f0000064d01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000201041a000006890220019700000001022001bf000000000021041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d02000039000000040300003900000609040000410000064e050000410000001106000029000000000700041117fb17f10000040f0000000100200190000009da0000613d0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d0200003900000002030000390000064f04000041000009ca0000013d0000000001000416000000000001004b000009da0000c13d0000000801000039000000000101041a0000060301100197000000a00010043f0000066b01000041000017fc0001042e000000440020008c000009da0000413d0000000003000416000000000003004b000009da0000c13d0000000403100370000000000303043b000006410030009c000009da0000213d0000002304300039000000000024004b000009da0000813d001000040030003d0000001004100360000000000404043b001100000004001d000006410040009c000009da0000213d00000011033000290000002403300039000000000023004b000009da0000213d0000002401100370000000000201043b000000000002004b0000000001000039000000010100c039000f00000002001d000000000012004b000009da0000c13d0000060b01000041000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000007730000c13d000000000100041a00000603011001970000000002000411000000000021004b0000097c0000c13d00000011010000290000068a03100198000e001f00100193000000400100043d0000002002100039000d00000003001d000000000332001900000010040000290000002004400039001000000004001d0000000104400367000007850000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b000007810000c13d0000000e0000006b000007930000613d0000000d044003600000000e050000290000000305500210000000000603043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f000000000043043500000011040000290000000003420019000000000003043500000000004104350000003f034000390000068a033001970000000003310019000000000013004b00000000040000390000000104004039000006410030009c000013550000213d0000000100400190000013550000c13d000000400030043f000006000020009c000006000200804100000040022002100000000001010433000006000010009c00000600010080410000006001100210000000000121019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000c00000001001d000000000010043f0000000901000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000302100039000000000302041a000000000003004b00000dc20000c13d000000400100043d0000067202000041000009760000013d0000000001000416000000000001004b000009da0000c13d0000000301000039000000000101041a000000ff001001900000000001000039000000010100c039000000a00010043f0000066b01000041000017fc0001042e0000000001000416000000000001004b000009da0000c13d0000064e01000041000000a00010043f0000066b01000041000017fc0001042e000000240020008c000009da0000413d0000000003000416000000000003004b000009da0000c13d0000000401100370000000000101043b000006410010009c000009da0000213d000000040110003917fb13730000040f000001a003000039000000400030043f0000006003000039000000a00030043f000000c00030043f000000e00000043f000001000000043f000001200000043f000001400000043f000001600000043f000001800000043f17fb17970000040f000000000010043f0000000901000039000000200010043f0000004002000039000000000100001917fb17dc0000040f001100000001001d000000400100043d000f00000001001d17fb139f0000040f000000110100002917fb13aa0000040f0000000f020000290000000001120436001000000001001d0000001101000029000000010110003917fb13aa0000040f0000001002000029000000000012043500000011050000290000000201500039000000000101041a00000603011001970000000f030000290000004002300039000e00000002001d00000000001204350000000301500039000000000101041a0000006002300039000d00000002001d00000000001204350000000401500039000000000101041a000000ff001001900000000002000039000000010200c0390000008004300039000900000004001d00000000002404350000ff00001001900000000001000039000000010100c039000000a002300039000b00000002001d00000000001204350000000501500039000000000101041a000000c002300039000c00000002001d00000000001204350000000601500039000000000101041a000000e002300039000a00000002001d00000000001204350000002001000039000000400400043d001100000004001d0000000002140436000000000103043300000100030000390000000000320435000001200240003917fb138d0000040f000000000201001900000011040000290000000001410049000000200310008a000000100100002900000000010104330000004004400039000000000034043517fb138d0000040f0000000e02000029000000000202043300000603022001970000001104000029000000600340003900000000002304350000000d0200002900000000020204330000008003400039000000000023043500000009020000290000000002020433000000000002004b0000000002000039000000010200c039000000a00340003900000000002304350000000b020000290000000002020433000000000002004b0000000002000039000000010200c039000000c00340003900000000002304350000000c020000290000000002020433000000e00340003900000000002304350000000a020000290000000002020433000001000340003900000000002304350000000001410049000006000040009c00000600040080410000004002400210000006000010009c00000600010080410000006001100210000000000121019f000017fc0001042e000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000101043b000000000010043f0000000101000039000000200010043f0000004002000039000000000100001917fb17dc0000040f00000001011000390000087a0000013d0000000001000416000000000001004b000009da0000c13d0000000401000039000000000101041a000000a00010043f0000066b01000041000017fc0001042e000000440020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000402100370000000000202043b001100000002001d0000002401100370000000000101043b001000000001001d000006030010009c000009da0000213d0000001101000029000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000101100039000000000101041a000f00000001001d000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff0010019000000a4e0000c13d000000400100043d00000024021000390000000f03000029000000000032043500000680020000410000000000210435000000040210003900000000030004110000000000320435000006000010009c0000060001008041000000400110021000000643011001c7000017fd000104300000000001000416000000000001004b000009da0000c13d000000a00000043f0000066b01000041000017fc0001042e000000240020008c000009da0000413d0000000002000416000000000002004b000009da0000c13d0000000401100370000000000601043b000006030060009c000009da0000213d000000000100041a00000603051001970000000002000411000000000025004b0000096f0000c13d000000000006004b000009cc0000c13d0000060d01000041000000a00010043f000000a40000043f0000064b01000041000017fd000104300000000001000416000000000001004b000009da0000c13d0000060b01000041000000a00010043f0000066b01000041000017fc0001042e0000000f0000006b000009740000613d0000000e0000006b000009740000613d0000000d0000006b000009740000613d0000000c0000006b000009740000613d000000000040043f0000060701000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f00000011030000290000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000009220000c13d000000000030043f0000060701000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000201041a000006890220019700000001022001bf000000000021041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d020000390000000403000039000000000700041100000609040000410000000005000019000000110600002917fb17f10000040f00000011030000290000000100200190000009da0000613d000000000030043f0000060a01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f000000110400002900000010030000290000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000009540000c13d000000000040043f0000060a01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f00000011060000290000000100200190000009da0000613d000000000101043b000000000201041a000006890220019700000001022001bf000000000021041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d020000390000000403000039000000000700041100000609040000410000060b0500004117fb17f10000040f00000010030000290000000100200190000009da0000613d0000000801000039000000000201041a0000060402200197000000000232019f000000000021041b00000004010000390000000f02000029000000000021041b00000005010000390000000e02000029000000000021041b00000006010000390000000d02000029000000000021041b00000007010000390000000c02000029000000000021041b0000002001000039000001000010044300000120000004430000060c01000041000017fc0001042e0000064a02000041000000a00020043f000000a40010043f0000064b01000041000017fd000104300000064a01000041000000a00010043f000000a40020043f0000064b01000041000017fd00010430000000400100043d0000067e020000410000000000210435000006000010009c0000060001008041000000400110021000000645011001c7000017fd00010430000000400100043d0000004402100039000006790300004100000000003204350000002402100039000000160300003900000000003204350000067a020000410000000000210435000000040210003900000020030000390000000000320435000006000010009c000006000100804100000040011002100000067b011001c7000017fd000104300000067f01000041000000a00010043f0000066801000041000017fd00010430001000000002001d000000000010043f0000060a01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000009c20000c13d0000001101000029000000000010043f0000060a01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000201041a000006890220019700000001022001bf000000000021041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d02000039000000040300003900000609040000410000060b050000410000001106000029000000100700002917fb17f10000040f0000000100200190000009da0000613d0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d02000039000000020300003900000667040000410000001105000029000009d70000013d0000060401100197000000000161019f000000000010041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d020000390000000303000039000006060400004117fb17f10000040f0000000100200190000000830000c13d0000000001000019000017fd000104300000068903300197000000000032041b00000000020004110000000000210435000006000010009c000006000100804100000040011002100000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000673011001c70000800d020000390000000103000039000006760400004117fb17f10000040f0000000100200190000009da0000613d0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d02000039000000020300003900000677040000410000000005000411000009cb0000013d0000001101000029000000000010043f0000064d01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000201041a0000068902200197000000000021041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d02000039000000040300003900000669040000410000064e050000410000001106000029000000100700002917fb17f10000040f00000001002001900000049b0000c13d000009da0000013d0000001101000029000000000010043f0000060a01000041000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000201041a0000068902200197000000000021041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d02000039000000040300003900000669040000410000060b050000410000001106000029000000100700002917fb17f10000040f0000000100200190000006b70000c13d000009da0000013d0000000001000410000000000002004b00000a9a0000c13d0000066202000041000000000020044300000004001004430000000001000414000006000010009c0000060001008041000000c00110021000000658011001c70000800a0200003917fb17f60000040f0000000100200190000012330000613d000000000101043b000000100010006c00000b020000813d000000400100043d0000066d02000041000009760000013d0000001101000029000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000001002000029000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000101041a000000ff00100190000000830000c13d0000001101000029000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000001002000029000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000201041a000006890220019700000001022001bf000000000021041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d020000390000000403000039000006090400004100000011050000290000001006000029000000000700041117fb17f10000040f0000000100200190000000830000c13d000009da0000013d000000400400043d000f00000004001d0000066103000041000000000034043500000004034000390000000000130435000006000040009c0000060001000041000000000104401900000040011002100000000003000414000006000030009c0000060003008041000000c003300210000000000113019f0000060e011001c717fb17f60000040f00000060031002700000060003300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000f0b0000290000000f0570002900000abb0000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000ab70000c13d000000000006004b00000ac80000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000ae40000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000e00000002001d000006410020009c000013550000213d0000000100100190000013550000c13d0000000e01000029000000400010043f000000200030008c000009da0000413d00000000010b0433000000100010006c00000c8a0000813d0000066d010000410000000e020000290000000000120435000006000020009c0000060002008041000000400120021000000645011001c7000017fd000104300000001f0530018f0000060206300198000000400200043d000000000462001900000aef0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000aeb0000c13d000000000005004b00000afc0000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000006000020009c00000600020080410000004002200210000000000112019f000017fd000104300000000001000414000006000010009c0000060001008041000000c00110021000000605011001c7000080090200003900000010030000290000000004000411000000000500001917fb17f10000040f0000006003100270000006000330019800000b1b0000c13d0000000100200190000000830000c13d000000400100043d0000064402000041000009760000013d0000000601000039000000000101041a0000000e0010006b00000b410000a13d000000400100043d0000068402000041000009760000013d0000001f0430003900000601044001970000003f044000390000064604400197000000400500043d0000000004450019000000000054004b00000000060000390000000106004039000006410040009c000013550000213d0000000100600190000013550000c13d000000400040043f0000001f0430018f00000000063504360000060205300198000000000356001900000b330000613d000000000701034f000000007807043c0000000006860436000000000036004b00000b2f0000c13d000000000004004b00000b0f0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f000000000013043500000b0f0000013d0000000d0000006b00000cd10000c13d0000000002000019001000000002001d000000050120021000000011011000290000000101100367000000000101043b00000000020000310000000f0320006a000000430330008a00000656043001970000065605100197000000000645013f000000000045004b00000000040000190000065604004041000000000031004b00000000030000190000065603008041000006560060009c000000000403c019000000000004004b000009da0000c13d00000011031000290000000101300367000000000101043b000006410010009c000009da0000213d0000000004120049000000200230003900000656034001970000065605200197000000000635013f000000000035004b00000000030000190000065603004041000000000042004b00000000040000190000065604002041000006560060009c000000000304c019000000000003004b000009da0000c13d0000068a051001980000000106200367000000400200043d0000002003200039000000000453001900000b790000613d000000000706034f0000000008030019000000007907043c0000000008980436000000000048004b00000b750000c13d0000001f0710019000000b860000613d000000000556034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000004130019000000000004043500000000001204350000003f011000390000068a011001970000000001120019000000000021004b00000000040000390000000104004039000006410010009c000013550000213d0000000100400190000013550000c13d000000400010043f000006000030009c000006000300804100000040013002100000000002020433000006000020009c00000600020080410000006002200210000000000112019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000010043f0000000901000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000302100039000000000202041a000000000002004b000007c70000613d0000000401100039000000000201041a000000ff00200190000010cb0000c13d0000ff0000200190000010c80000613d0000068b02200197000000000021041b000000100200002900000001022000390000000e0020006c00000b440000413d001000000000001d00000010010000290000000501100210000000110a1000290000000101a00367000000000101043b00000000020000310000000f0320006a000000430330008a00000656043001970000065605100197000000000645013f000000000045004b00000000040000190000065604004041000000000031004b00000000030000190000065603008041000006560060009c000000000403c019000000000004004b000009da0000c13d00000011031000290000000101300367000000000101043b000006410010009c000009da0000213d0000000004120049000000200230003900000656034001970000065605200197000000000635013f000000000035004b00000000030000190000065603004041000000000042004b00000000040000190000065604002041000006560060009c000000000304c019000000000003004b000009da0000c13d0000068a051001980000000106200367000000400200043d0000002003200039000000000453001900000bfa0000613d000000000706034f0000000008030019000000007907043c0000000008980436000000000048004b00000bf60000c13d0000001f0710019000000c070000613d000000000556034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f0000000000540435000d0000000a001d0000000004130019000000000004043500000000001204350000003f011000390000068a011001970000000001120019000000000021004b00000000040000390000000104004039000006410010009c000013550000213d0000000100400190000013550000c13d000000400010043f000006000030009c000006000300804100000040013002100000000002020433000006000020009c00000600020080410000006002200210000000000112019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f00000001002001900000000d03000029000009da0000613d0000000102000367000000000332034f000000000403043b00000000030000310000000f0530006a000000430550008a00000656065001970000065607400197000000000867013f000000000067004b00000000060000190000065606004041000000000054004b00000000050000190000065605008041000006560080009c000000000605c019000000000501043b000000000006004b000009da0000c13d0000001104400029000000000142034f000000000101043b000006410010009c000009da0000213d0000000006130049000000200340003900000656046001970000065607300197000000000847013f000000000047004b00000000040000190000065604004041000000000063004b00000000060000190000065606002041000006560080009c000000000406c019000000000004004b000009da0000c13d000000000632034f000000400200043d0000002003000039000000000332043600000000001304350000068a071001980000004003200039000000000473001900000c600000613d000000000806034f0000000009030019000000008a08043c0000000009a90436000000000049004b00000c5c0000c13d0000001f0810019000000c6d0000613d000000000676034f0000000307800210000000000804043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000640435000000000313001900000000000304350000001f011000390000068a01100197000006470010009c00000647010080410000006001100210000006000020009c00000600020080410000004002200210000000000121019f0000000002000414000006000020009c0000060002008041000000c002200210000000000121019f000006480110009a0000800d020000390000000203000039000006490400004117fb17f10000040f0000000100200190000009da0000613d00000010020000290000000102200039001000000002001d0000000e0020006c00000bc50000413d000000830000013d0000000e03000029000000240130003900000010020000290000000000210435000006420100004100000000001304350000000001000411000006030110019700000004023000390000000000120435000006000030009c0000060001000041000000000103401900000040011002100000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000643011001c7000000110200002917fb17f10000040f00000060031002700000060003300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000e0570002900000caf0000613d000000000801034f0000000e09000029000000008a08043c0000000009a90436000000000059004b00000cab0000c13d000000000006004b00000cbc0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000e040000613d0000001f01400039000000600110018f0000000e01100029000006410010009c000013550000213d000000400010043f000000200030008c000009da0000413d0000000e020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000009da0000c13d000000000002004b000000830000c13d0000064402000041000009760000013d00000010010000290000003f011000390000065503100197000000400200043d0000000001320019000a00000002001d000000000021004b00000000020000390000000102004039000006410010009c000013550000213d0000000100200190000013550000c13d000000400010043f0000000e010000290000000a020000290000000001120436000b00000001001d00000010040000290000001f0140018f00000000020000310000000102200367000000000004004b00000cf00000613d0000000b060000290000001004600029000000000502034f000000005705043c0000000006760436000000000046004b00000cec0000c13d000000000001004b000000400400043d0000000003340019000900000004001d000000000043004b00000000040000390000000104004039000006410030009c000013550000213d0000000100400190000013550000c13d000000400030043f0000000e0300002900000009040000290000000003340436000800000003001d000000100000006b00000d080000613d00000008040000290000001003400029000000002502043c0000000004540436000000000034004b00000d040000c13d000000000001004b0000000002000019001000000000001d000c00000000001d00000d170000013d000000080450002900000000003404350000000109900039001000000009001d0000068b02200197000000000021041b0000000d0200002900000001022000390000000e0020006c00000eb30000813d000d00000002001d000000050120021000000011011000290000000101100367000000000101043b00000000020000310000000f0320006a000000430330008a00000656043001970000065605100197000000000645013f000000000045004b00000000040000190000065604004041000000000031004b00000000030000190000065603008041000006560060009c000000000403c019000000000004004b000009da0000c13d00000011031000290000000101300367000000000101043b000006410010009c000009da0000213d0000000004120049000000200230003900000656034001970000065605200197000000000635013f000000000035004b00000000030000190000065603004041000000000042004b00000000040000190000065604002041000006560060009c000000000304c019000000000003004b000009da0000c13d0000068a051001980000000106200367000000400200043d0000002003200039000000000453001900000d4c0000613d000000000706034f0000000008030019000000007907043c0000000008980436000000000048004b00000d480000c13d0000001f0710019000000d590000613d000000000556034f0000000306700210000000000704043300000000076701cf000000000767022f000000000505043b0000010006600089000000000565022f00000000056501cf000000000575019f00000000005404350000000004130019000000000004043500000000001204350000003f011000390000068a011001970000000001120019000000000021004b00000000040000390000000104004039000006410010009c000013550000213d0000000100400190000013550000c13d000000400010043f000006000030009c000006000300804100000040013002100000000002020433000006000020009c00000600020080410000006002200210000000000112019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000000000010043f0000000901000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000401043b0000000301400039000000000301041a000000000003004b000007c70000613d0000000401400039000000000201041a000000ff002001900000001009000029000010cb0000c13d0000ff00002001900000000b0a000029000010c80000613d0000060305000041000000800050043f0000000204400039000000000404041a000006030440019800000db30000613d0000000a050000290000000005050433000000000009004b00000da90000613d0000000006000019000000000065004b00000f4a0000a13d00000005076002100000000008a7001900000000080804330000060308800197000000000048004b00000db70000613d0000000106600039000000000096004b00000d9e0000413d000000000095004b00000f4a0000a13d00000005059002100000000006a50019000000000046043500000009040000290000000004040433000000000094004b00000d0d0000213d00000f4a0000013d0000000c0030002a00000f660000413d000c000c0030002d00000d100000013d00000009040000290000000004040433000000000064004b00000f4a0000a13d00000008047000290000000005040433000000000035001a00000f660000413d0000000003350019000000000034043500000d100000013d0000000402100039000b00000002001d000000000202041a000000ff00200190000010cb0000c13d0000000f0000006b00000e100000c13d000000400300043d0000000b04000029000000000104041a0000068b01100197000000000014041b0000002001300039000000110200002900000000002104350000002001000039000000000013043500000040013000390000000d02100029000000100400002900000001044003670000000d0000006b00000ddf0000613d000000000504034f0000000006010019000000005705043c0000000006760436000000000026004b00000ddb0000c13d0000000e0000006b00000ded0000613d0000000d044003600000000e050000290000000305500210000000000602043300000000065601cf000000000656022f000000000404043b0000010005500089000000000454022f00000000045401cf000000000464019f00000000004204350000001102000029000000000121001900000000000104350000001f012000390000068a01100197000006470010009c00000647010080410000006001100210000006000030009c00000600030080410000004002300210000000000121019f0000000002000414000006000020009c0000060002008041000000c002200210000000000121019f000006480110009a0000800d02000039000000020300003900000649040000410000000c05000029000009cb0000013d0000001f0530018f0000060206300198000000400200043d000000000462001900000aef0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000e0b0000c13d00000aef0000013d0000000201100039000000000101041a000006030210019800000e4f0000c13d0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c700008009020000390000000004000411000000000500001917fb17f10000040f000000400300043d0000006004100270000006000540019800000e460000613d0000001f0450003900000601044001970000003f0440003900000646064001970000000004360019000000000064004b00000000060000390000000106004039000006410040009c000013550000213d0000000100600190000013550000c13d000000400040043f0000001f0450018f00000000065304360000060205500198000000000356001900000e380000613d000000000701034f000000007807043c0000000006860436000000000036004b00000e340000c13d000000000004004b00000e450000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000400300043d000000010020019000000dca0000c13d00000644010000410000000000130435000006000030009c0000060003008041000000400130021000000645011001c7000017fd00010430000000400400043d000f00000004001d00000024014000390000000000310435000006420100004100000000001404350000000001000411000006030110019700000004034000390000000000130435000006000040009c0000060001000041000000000104401900000040011002100000000003000414000006000030009c0000060003008041000000c003300210000000000113019f00000643011001c717fb17f10000040f00000060031002700000060004300197000000200040008c000000200300003900000000030440190000001f0630018f00000020073001900000000f0b0000290000000f0570002900000e740000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b00000e700000c13d000000000006004b00000e810000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f0000000000650435000000010020019000000e990000613d0000001f01300039000000600110018f0000000003b10019000000000013004b00000000010000390000000101004039000006410030009c000013550000213d0000000100100190000013550000c13d000000400030043f000000200040008c000009da0000413d00000000010b0433000000000001004b0000000002000039000000010200c039000000000021004b000009da0000c13d000000000001004b00000dca0000c13d00000e480000013d0000001f0540018f0000060206400198000000400200043d000000000362001900000ea40000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000038004b00000ea00000c13d000000000005004b00000eb10000613d000000000161034f0000000305500210000000000603043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f0000000000130435000000600140021000000afd0000013d0000000c0000006b00000ee90000613d0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c700008009020000390000000c030000290000000004000411000000000500001917fb17f10000040f0000006003100270000006000330019800000ee70000613d0000001f0430003900000601044001970000003f044000390000064604400197000000400500043d0000000004450019000000000054004b00000000060000390000000106004039000006410040009c000013550000213d0000000100600190000013550000c13d000000400040043f0000001f0430018f00000000063504360000060205300198000000000356001900000eda0000613d000000000701034f000000007807043c0000000006860436000000000036004b00000ed60000c13d000000000004004b00000ee70000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000010020019000000b110000613d000000100000006b00000bc40000613d0000000001000411000b06030010019b00000000020000190000000a010000290000000001010433000000000021004b00000f4a0000a13d00000009010000290000000001010433000000000021004b00000f4a0000a13d000c00000002001d0000000501200210000000200110003900000009021000290000000a0110002900000000010104330000000002020433000000400400043d000d00000004001d000000240340003900000000002304350000064202000041000000000024043500000004024000390000000b030000290000000000320435000006000040009c0000060002000041000000000204401900000040022002100000000003000414000006000030009c0000060003008041000000c003300210000000000323019f000006030210019700000643013001c717fb17f10000040f0000000d0a00002900000060031002700000060003300197000000200030008c00000020040000390000000004034019000000200640019000000000056a001900000f210000613d000000000701034f00000000080a0019000000007907043c0000000008980436000000000058004b00000f1d0000c13d0000001f0740019000000f2e0000613d000000000661034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f0000000000650435000000010020019000000f500000613d0000001f01400039000000600210018f0000000001a20019000000000021004b00000000020000390000000102004039000006410010009c000013550000213d0000000100200190000013550000c13d000000400010043f000000200030008c000009da0000413d00000000020a0433000000000002004b0000000003000039000000010300c039000000000032004b000009da0000c13d000000000002004b00000ccf0000613d0000000c020000290000000102200039000000100020006c00000eee0000413d00000bc40000013d0000066f01000041000000000010043f0000003201000039000000040010043f0000060e01000041000017fd000104300000001f0530018f0000060206300198000000400200043d000000000462001900000aef0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b00000f570000c13d00000aef0000013d000000400100043d0000068302000041000009760000013d000000400100043d00000044021000390000068103000041000000000032043500000024021000390000001e03000039000009820000013d0000066f01000041000000000010043f0000001101000039000000040010043f0000060e01000041000017fd000104300000000b0900002900000f750000013d00000020099000390000000003a3001900000000000304350000000000b904350000002007700039000000000087004b0000060a0000813d000000000371034f000000000303043b000006410030009c000009da0000213d000000000c5300190000004303c00039000000000023004b000000000600001900000656060080410000065603300197000000000003004b000000000a000019000006560a004041000006560030009c000000000a06c01900000000000a004b000009da0000c13d000000240dc000390000000003d1034f000000000a03043b0000064100a0009c000013550000213d0000001f03a000390000068a033001970000003f033000390000068a03300197000000400b00043d000000000e3b00190000000000be004b000000000300003900000001030040390000064100e0009c000013550000213d0000000100300190000013550000c13d0000004406c000390000004000e0043f0000000003ab043600000000066a0019000000000026004b000009da0000213d0000002006d00039000000000661034f0000068a0fa00198000000000df3001900000fa90000613d000000000e06034f000000000c03001900000000e40e043c000000000c4c04360000000000dc004b00000fa50000c13d0000001f0ca0019000000f6e0000613d0000000004f6034f0000000306c00210000000000c0d0433000000000c6c01cf000000000c6c022f000000000404043b0000010006600089000000000464022f00000000046401cf0000000004c4019f00000000004d043500000f6e0000013d0000000201000039000000000011041b0000000301000039000000000101041a000000ff0010019000000fc60000c13d000000a00100043d000000400110003900000000010104330000000001010433000000000001004b00000fc90000c13d000000400100043d0000066502000041000009760000013d000000400100043d0000068202000041000009760000013d0000000801000039000000000101041a000006570200004100000000002004430000060301100197000500000001001d00000004001004430000000001000414000006000010009c0000060001008041000000c00110021000000658011001c7000080020200003917fb17f60000040f0000000100200190000012330000613d000000000101043b000000000001004b000009da0000613d000000400700043d00000659010000410000000001170436000c00000001001d0000000401700039000000200200003900000000002104350000002402700039000000a00100043d000000400300003900000000003204350000000023010434000000640470003900000060050000390000000000540435000000c40670003900000000540304340000000000460435000d00000007001d000000e403700039000000000004004b00000ffa0000613d000000000600001900000000073600190000000008650019000000000808043300000000008704350000002006600039000000000046004b00000ff30000413d000000000534001900000000000504350000001f044000390000068a0440019700000000020204330000000d05000029000000840550003900000080064000390000000000650435000000000534001900000000430204340000000002350436000000000003004b000010100000613d000000000500001900000000062500190000000007540019000000000707043300000000007604350000002005500039000000000035004b000010090000413d000000000423001900000000000404350000001f033000390000068a0330019700000000042300190000000d030000290000000002340049000000640220008a00000040011000390000000001010433000000a403300039000000000023043500000000320104340000000001240436000000000002004b000010280000613d000000000400001900000000051400190000000006430019000000000606043300000000006504350000002004400039000000000024004b000010210000413d000000000312001900000000000304350000001f022000390000068a0220019700000000011200190000000d030000290000000002310049000000240220008a0000004403300039000000c00400043d0000000000230435000000003204043400000000540204340000000004410436000000000505043300000603055001970000000000540435000000400420003900000000040404330000060004400197000000400510003900000000004504350000006002200039000000000202043300000600022001970000006004100039000000000024043500000000020304330000008003100039000000a0040000390000000000430435000000a00410003900000000030204330000000000340435000000c00410003900000005053002100000000006450019000000000003004b000010ce0000c13d0000000d030000290000000001360049000006000010009c000006000100804100000060011002100000000002000414000006000020009c0000060002008041000000c002200210000000000121019f000006000030009c000006000200004100000000020340190000004002200210000000000121019f000000050200002917fb17f60000040f0000000100200190000010ea0000613d0000000d01000029000006410010009c000013550000213d00000011010000290000068a021001980009001f001001930000000d01000029000000400010043f000b00000002001d0000000c0120002900000010020000290000000102200367000010750000613d000000000302034f0000000c04000029000000003503043c0000000004540436000000000014004b000010710000c13d0000000903000029000000000003004b0008000300300218000010840000613d0000000b022003600000000003010433000000080400002900000000034301cf000000000343022f000000000202043b0000010004400089000000000242022f00000000024201cf000000000232019f000000000021043500000011020000290000000c0120002900000000000104350000000d0300002900000000002304350000003f012000390000068a011001970000000001130019000000000031004b00000000020000390000000102004039000006410010009c000013550000213d0000000100200190000013550000c13d000000400010043f0000000c01000029000006000010009c000006000100804100000040011002100000000d020000290000000002020433000006000020009c00000600020080410000006002200210000000000112019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000200000001001d000000000010043f0000000901000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b000a00000001001d0000000301100039000700000001001d000000000101041a000600000001001d000000000001004b000007c70000613d0000000a010000290000000401100039000100000001001d000000000101041a000300000001001d000000ff00100190000010cb0000c13d00000003010000290000ff0000100190000010ed0000c13d000000400100043d0000067102000041000009760000013d000000400100043d0000067002000041000009760000013d0000000005000019000010d80000013d0000001f087000390000068a088001970000000007670019000000000007043500000000066800190000000105500039000000000035004b0000104f0000813d0000000007160049000000c00770008a00000000047404360000002002200039000000000702043300000000870704340000000006760436000000000007004b000010d00000613d0000000009000019000000000a690019000000000b980019000000000b0b04330000000000ba04350000002009900039000000000079004b000010e20000413d000010d00000013d000000400100043d0000065a02000041000009760000013d0000000a010000290000000601100039000000000101041a000c00000001001d0000065b0100004100000000001004430000000001000414000006000010009c0000060001008041000000c0011002100000065c011001c70000800b0200003917fb17f60000040f0000000100200190000012330000613d000000400200043d000d00000002001d000000000101043b0000000c0010006c000011040000a13d00000664010000410000000d0200002900000ade0000013d000000a00100043d000000400110003900000000010104330000065d020000410000000d0400002900000000002404350000000402400039000000400300003900000000003204350000004402400039000000003101043400000000001204350000006402400039000000000001004b0000111b0000613d000000000400001900000000052400190000000006430019000000000606043300000000006504350000002004400039000000000014004b000011140000413d000000000321001900000000000304350000001f011000390000068a0110019700000000012100190000000d050000290000000002510049000000040320008a0000002404500039000000000034043500000020031000390000065e0400004100000000004304350000000f0300003900000000003104350000004001200039000006000010009c00000600010080410000006001100210000006000050009c000006000200004100000000020540190000004002200210000000000121019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f000000050200002917fb17f60000040f00000001002001900000118c0000613d000000600210027000000600022001970000001f0420018f00000602052001980000000d03500029000011480000613d000000000601034f0000000d07000029000000006806043c0000000007870436000000000037004b000011440000c13d000000000004004b000011550000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f00000000001304350000001f0120003900000601031001970000000d01300029000000000031004b00000000030000390000000103004039000006410010009c000013550000213d0000000100300190000013550000c13d000000400010043f000000200020008c000009da0000413d0000000d030000290000000003030433000006410030009c000009da0000213d0000000d033000290000000d0520002900000656025001970000001f043000390000065606400197000000000726013f000000000026004b00000000020000190000065602004041000000000054004b00000000040000190000065604008041000006560070009c000000000204c019000000000002004b000009da0000c13d0000000032030434000006410020009c000013550000213d0000001f042000390000068a044001970000003f044000390000068a044001970000000004140019000006410040009c000013550000213d000000400040043f00000000042104360000000006320019000000000056004b000009da0000213d000000000002004b0000118f0000c13d0000000000040435000000400200043d00000020032000390000000001000019000011a80000013d000000400100043d0000065f02000041000009760000013d000000000500001900000000064500190000000007350019000000000707043300000000007604350000002005500039000000000025004b000011900000413d00000000024200190000000000020435000000400200043d00000020032000390000000001010433000000000001004b000011a00000c13d0000000001000019000011a80000013d000000000500001900000000063500190000000007450019000000000707043300000000007604350000002005500039000000000015004b000011a10000413d0000000004310019000000000004043500000000001204350000003f011000390000068a041001970000000001240019000000000041004b00000000040000390000000104004039000006410010009c000013550000213d0000000100400190000013550000c13d000000400010043f000006000030009c000006000300804100000040013002100000000002020433000006000020009c00000600020080410000006002200210000000000112019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d0000000f020000290000068a032001980005001f002001930000000e020000290000000104200367000000000101043b000d00000001001d000000400100043d0000002002100039000c00000003001d0000000003320019000011da0000613d000000000504034f0000000006020019000000005705043c0000000006760436000000000036004b000011d60000c13d0000000505000029000000000005004b0004000300500218000011e90000613d0000000c044003600000000005030433000000040600002900000000056501cf000000000565022f000000000404043b0000010006600089000000000464022f00000000046401cf000000000454019f00000000004304350000000f040000290000000003420019000000000003043500000000004104350000003f034000390000068a033001970000000003310019000000000013004b00000000040000390000000104004039000006410030009c000013550000213d0000000100400190000013550000c13d000000400030043f000006000020009c000006000200804100000040022002100000000001010433000006000010009c00000600010080410000006001100210000000000121019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f0000000100200190000009da0000613d000000000101043b0000000d0010006b000012340000c13d000001000100008a000000030110017f00000001011001bf0000000102000029000000000012041b00000000010004100000000a020000290000000202200039000300000002001d000000000202041a000a06030020019c000012370000c13d0000066202000041000000000020044300000004001004430000000001000414000006000010009c0000060001008041000000c00110021000000658011001c70000800a0200003917fb17f60000040f0000000100200190000012330000613d0000000702000029000000000302041a000000000101043b000000000031004b00000a4b0000413d00000000040004110000000001000414000006000010009c0000060001008041000000c001100210000000000003004b000012c00000c13d0000000002040019000012c30000013d000000000001042f000000400100043d0000066002000041000009760000013d000000400300043d000100000003001d0000066102000041000000000023043500000004023000390000000000120435000006000030009c0000060001000041000000000103401900000040011002100000000002000414000006000020009c0000060002008041000000c002200210000000000112019f0000060e011001c70000000a0200002917fb17f60000040f00000060031002700000060003300197000000200030008c000000200400003900000000040340190000001f0640018f0000002007400190000000010b0000290000000105700029000012590000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000012550000c13d000000000006004b000012660000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f000000000065043500000001002001900000135b0000613d0000001f01400039000000600110018f0000000002b10019000000000012004b00000000010000390000000101004039000d00000002001d000006410020009c000013550000213d0000000100100190000013550000c13d0000000d01000029000000400010043f000000200030008c000009da0000413d00000000010b0433000000060010006c00000a4b0000413d0000000d03000029000000240130003900000006020000290000000000210435000006420100004100000000001304350000000001000411000006030110019700000004023000390000000000120435000006000030009c0000060001000041000000000103401900000040011002100000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000643011001c70000000a0200002917fb17f10000040f00000060031002700000060003300197000000200030008c000000200400003900000000040340190000001f0640018f00000020074001900000000d057000290000129f0000613d000000000801034f0000000d09000029000000008a08043c0000000009a90436000000000059004b0000129b0000c13d000000000006004b000012ac0000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000013670000613d0000001f01400039000000600110018f0000000d01100029000006410010009c000013550000213d000000400010043f000000200030008c000009da0000413d0000000d020000290000000002020433000000000002004b0000000003000039000000010300c039000000000032004b000009da0000c13d000000000002004b00000ccf0000613d000012ef0000013d00000605011001c70000800902000039000000000500001917fb17f10000040f00000060031002700000060003300198000012ec0000613d0000001f0430003900000601044001970000003f044000390000064604400197000000400500043d0000000004450019000000000054004b00000000060000390000000106004039000006410040009c000013550000213d0000000100600190000013550000c13d000000400040043f0000001f0430018f000000000635043600000602053001980000000003560019000012df0000613d000000000701034f000000007807043c0000000006860436000000000036004b000012db0000c13d000000000004004b000012ec0000613d000000000151034f0000000304400210000000000503043300000000054501cf000000000545022f000000000101043b0000010004400089000000000141022f00000000014101cf000000000151019f0000000000130435000000400100043d000000010020019000000ccf0000613d0000000702000029000000000202041a0000000303000029000000000303041a0000006004100039000000110500002900000000005404350000006004000039000000000441043600000080061000390000000b07600029000000010500036700000010085003600000000b0000006b000013040000613d000000000908034f000000000a060019000000009b09043c000000000aba043600000000007a004b000013000000c13d000000090000006b000013110000613d0000000b088003600000000009070433000000080a0000290000000009a901cf0000000009a9022f000000000808043b000001000aa000890000000008a8022f0000000008a801cf000000000898019f00000000008704350000001108000029000000000786001900000000000704350000001f078000390000068a077001970000000006760019000000000716004900000000007404350000000f0400002900000000044604360000000e075003600000000c054000290000000c0000006b000013250000613d000000000607034f0000000008040019000000006906043c0000000008980436000000000058004b000013210000c13d0000060306300197000000050000006b000013330000613d0000000c037003600000000007050433000000040800002900000000078701cf000000000787022f000000000303043b0000010008800089000000000383022f00000000038301cf000000000373019f00000000003504350000000f0500002900000000035400190000000000030435000000400310003900000000002304350000001f025000390000068a0220019700000000021200490000000002420019000006000020009c00000600020080410000006002200210000006000010009c00000600010080410000004001100210000000000112019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c70000800d0200003900000003030000390000066304000041000000020500002917fb17f10000040f0000000100200190000009da0000613d00000001010000390000000202000039000000000012041b0000000001000019000017fc0001042e0000066f01000041000000000010043f0000004101000039000000040010043f0000060e01000041000017fd000104300000001f0530018f0000060206300198000000400200043d000000000462001900000aef0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000013620000c13d00000aef0000013d0000001f0530018f0000060206300198000000400200043d000000000462001900000aef0000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b0000136e0000c13d00000aef0000013d0000001f03100039000000000023004b0000000004000019000006560400404100000656052001970000065603300197000000000653013f000000000053004b00000000030000190000065603002041000006560060009c000000000304c019000000000003004b0000138b0000613d0000000103100367000000000303043b000006410030009c0000138b0000213d00000020011000390000000004310019000000000024004b0000138b0000213d0000000002030019000000000001042d0000000001000019000017fd0001043000000000430104340000000001320436000000000003004b000013990000613d000000000200001900000000051200190000000006240019000000000606043300000000006504350000002002200039000000000032004b000013920000413d000000000213001900000000000204350000001f023000390000068a022001970000000001210019000000000001042d0000068c0010009c000013a40000813d0000010001100039000000400010043f000000000001042d0000066f01000041000000000010043f0000004101000039000000040010043f0000060e01000041000017fd000104300003000000000002000000000201041a000000010320019000000001062002700000007f0660618f0000001f0060008c00000000040000390000000104002039000000000043004b000013e90000c13d000000400500043d0000000004650436000000000003004b000013d40000613d000100000004001d000300000006001d000200000005001d000000000010043f0000000001000414000006000010009c0000060001008041000000c00110021000000673011001c7000080100200003917fb17f60000040f0000000100200190000013f50000613d0000000306000029000000000006004b000013da0000613d000000000201043b0000000001000019000000020500002900000001070000290000000003170019000000000402041a000000000043043500000001022000390000002001100039000000000061004b000013cc0000413d000013dc0000013d00000689012001970000000000140435000000000006004b00000020010000390000000001006039000013dc0000013d000000000100001900000002050000290000003f011000390000068a021001970000000001520019000000000021004b00000000020000390000000102004039000006410010009c000013ef0000213d0000000100200190000013ef0000c13d000000400010043f0000000001050019000000000001042d0000066f01000041000000000010043f0000002201000039000000040010043f0000060e01000041000017fd000104300000066f01000041000000000010043f0000004101000039000000040010043f0000060e01000041000017fd000104300000000001000019000017fd000104300001000000000002000100000001001d000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000014170000613d000000000101043b0000000002000411000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000014170000613d000000000101043b000000000101041a000000ff00100190000014190000613d000000000001042d0000000001000019000017fd00010430000000400100043d00000024021000390000000103000029000000000032043500000680020000410000000000210435000000040210003900000000030004110000000000320435000006000010009c0000060001008041000000400110021000000643011001c7000017fd000104300002000000000002000100000002001d000200000001001d000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000014760000613d000000000101043b00000001020000290000060302200197000100000002001d000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000014760000613d000000000101043b000000000101041a000000ff00100190000014750000613d0000000201000029000000000010043f0000000101000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000014760000613d000000000101043b0000000102000029000000000020043f000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000014760000613d000000000101043b000000000201041a0000068902200197000000000021041b0000000001000414000006000010009c0000060001008041000000c00110021000000605011001c70000800d020000390000000403000039000000000700041100000669040000410000000205000029000000010600002917fb17f10000040f0000000100200190000014760000613d000000000001042d0000000001000019000017fd000104300000000301000039000000000101041a000000ff001001900000147d0000c13d000000000001042d000000400100043d00000682020000410000000000210435000006000010009c0000060001008041000000400110021000000645011001c7000017fd00010430000000000001004b000014880000613d000000000001042d000000400100043d00000044021000390000068103000041000000000032043500000024021000390000001e0300003900000000003204350000067a020000410000000000210435000000040210003900000020030000390000000000320435000006000010009c000006000100804100000040011002100000067b011001c7000017fd000104300015000000000002001300000007001d000f00000003001d001500000001001d000e00000006001d000000000006004b0000175d0000613d000000000002004b000017600000613d0000000009040019000000000004004b000017630000613d0000000401000039000000000101041a000000000021004b000017540000413d0000000501000039000000000101041a000000000091004b000017540000413d000000000a0500190000068a032001980011001f0020019300000015010000290000000104100367000000400100043d0000002008100039001400000003001d0000000003380019000014bd0000613d000000000504034f0000000006080019000000005705043c0000000006760436000000000036004b000014b90000c13d0000001105000029000000000005004b0000000307500210000014cb0000613d0000001404400360000000000503043300000000057501cf000000000575022f000000000404043b0000010006700089000000000464022f00000000046401cf000000000454019f000000000043043500120000000a001d000a00000007001d0000000003280019000000000003043500000000002104350000003f032000390000068a033001970000000003310019000000000013004b00000000040000390000000104004039000006410030009c0000174b0000213d00000001004001900000174b0000c13d001000000002001d000000400030043f000006000080009c000006000800804100000040028002100000000001010433000006000010009c00000600010080410000006001100210000000000121019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c70000801002000039000b00000009001d17fb17f60000040f0000000100200190000017510000613d000000000101043b000d00000001001d000000000010043f0000000901000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f0000000100200190000017510000613d000000000101043b0000000301100039000000000101041a000000000001004b000017660000c13d000000130000006b000015120000613d0000065b0100004100000000001004430000000001000414000006000010009c0000060001008041000000c0011002100000065c011001c70000800b0200003917fb17f60000040f0000000100200190000017530000613d000000000101043b000000130010006c000015270000c13d0000000701000039000000000101041a001300000001001d0000065b0100004100000000001004430000000001000414000006000010009c0000060001008041000000c0011002100000065c011001c70000800b0200003917fb17f60000040f0000000100200190000017530000613d000000000101043b0000001302000029000000000021001a000017910000413d001300000021001d0000000b0a000029000015360000013d0000065b0100004100000000001004430000000001000414000006000010009c0000060001008041000000c0011002100000065c011001c70000800b0200003917fb17f60000040f0000000100200190000017530000613d000000000101043b000000130010006c0000000b0a000029000017890000813d000000400b00043d00000012010000290000060302100198000c00000002001d0000157a0000613d0000068f0100004100000000001b04350000060000b0009c000006000100004100000000010b401900000040011002100000000003000414000006000030009c0000060003008041000000c003300210000000000113019f00000645011001c700120000000b001d17fb17f60000040f000000120b00002900000060031002700000060003300197000000200030008c000000200400003900000000040340190000001f0640018f000000200740019000000000057b0019000015590000613d000000000801034f00000000090b0019000000008a08043c0000000009a90436000000000059004b000015550000c13d000000000006004b0000000b0a000029000015670000613d000000000771034f0000000306600210000000000805043300000000086801cf000000000868022f000000000707043b0000010006600089000000000767022f00000000066701cf000000000686019f00000000006504350000000100200190000017690000613d0000001f01400039000000600210018f0000000001b20019000000000021004b00000000020000390000000102004039000006410010009c0000174b0000213d00000001002001900000174b0000c13d000000400010043f000000200030008c000017510000413d00000000020b0433000000000002004b000017870000613d000000000b01001900000010040000290000069100b0009c0000174b0000213d0000010003b00039000000400030043f000006410040009c0000174b0000213d0000001f014000390000068a01100197000900000001001d0000003f011000390000068a011001970000000002130019000006410020009c0000174b0000213d0000000001000031000000400020043f00000000004304350000001502400029000000000012004b000017510000213d000000010200036700000015062003600000012004b000390000001405400029000000140000006b0000159b0000613d000000000706034f0000000008040019000000007907043c0000000008980436000000000058004b000015970000c13d000000110000006b000015a80000613d000000140660036000000000070504330000000a0800002900000000078701cf000000000787022f000000000606043b0000010008800089000000000686022f00000000068601cf000000000676019f00000000006504350000001004400029000000000004043500000000033b0436000b00000003001d0000064100a0009c0000174b0000213d0000001f03a000390000068a033001970000003f033000390000068a04300197000000400300043d0000000004430019000000000034004b00000000050000390000000105004039000006410040009c0000174b0000213d00000001005001900000174b0000c13d000000400040043f0000000004a304360000000f05a00029000000000015004b000017510000213d0000000f022003600000068a05a001980000001f06a0018f0000000001540019000015cb0000613d000000000702034f0000000008040019000000007907043c0000000008980436000000000018004b000015c70000c13d000000000006004b000015d80000613d000000000252034f0000000305600210000000000601043300000000065601cf000000000656022f000000000202043b0000010005500089000000000252022f00000000025201cf000000000262019f00000000002104350000000001a400190000000000010435000000a002b000390000000101000039000f00000002001d00000000001204350000006002b000390000000e01000029000800000002001d00000000001204350000004002b000390000000c01000029000600000002001d00000000001204350000000b0100002900000000003104350000008001b00039000700000001001d00000000000104350000065b0100004100000000001004430000000001000414000006000010009c0000060001008041000000c0011002100000065c011001c70000800b0200003900120000000b001d17fb17f60000040f0000000100200190000017530000613d000000000101043b0000001204000029000000e0034000390000001302000029000500000003001d0000000000230435000000c002400039000400000002001d00000000001204350000000d01000029000000000010043f0000000901000039000000200010043f0000000001000414000006000010009c0000060001008041000000c00110021000000608011001c7000080100200003917fb17f60000040f00000001002001900000001202000029000017510000613d000000000601043b00000000030204330000000054030434000006410040009c0000174b0000213d000000000106041a000000010210019000000001071002700000007f0770618f0000001f0070008c00000000010000390000000101002039000000000012004b000017570000c13d000000200070008c001300000006001d001200000004001d000300000003001d000016400000413d000100000007001d000200000005001d000000000060043f0000000001000414000006000010009c0000060001008041000000c00110021000000673011001c7000080100200003917fb17f60000040f0000000100200190000017510000613d00000012040000290000001f024000390000000502200270000000200040008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b00000013060000290000000205000029000016400000813d000000000002041b0000000102200039000000000012004b0000163c0000413d0000001f0040008c0000166b0000a13d000000000060043f0000000001000414000006000010009c0000060001008041000000c00110021000000673011001c7000080100200003917fb17f60000040f0000000100200190000017510000613d00000012070000290000068a03700198000000000101043b0000000308000029000016dd0000613d000000010230008a0000000502200270000000000421001900000020020000390000000104400039000000130600002900000000058200190000000005050433000000000051041b00000020022000390000000101100039000000000041004b000016570000c13d000000000073004b000016680000813d0000000303700210000000f80330018f000006970330027f000006970330016700000000028200190000000002020433000000000232016f000000000021041b000000010170021000000001011001bf000016760000013d000000000004004b0000166f0000613d0000000001050433000016700000013d00000000010000190000000302400210000006970220027f0000069702200167000000000121016f0000000102400210000000000121019f000000000016041b0000000b0100002900000000030104330000000075030434000006410050009c0000174b0000213d0000000104600039000000000104041a000000010010019000000001081002700000007f0880618f0000001f0080008c00000000020000390000000102002039000000000121013f0000000100100190000017570000c13d000000200080008c001200000004001d000b00000005001d000300000003001d000016ac0000413d000100000008001d000200000007001d000000000040043f0000000001000414000006000010009c0000060001008041000000c00110021000000673011001c7000080100200003917fb17f60000040f0000000100200190000017510000613d0000000b050000290000001f025000390000000502200270000000200050008c0000000002004019000000000301043b00000001010000290000001f01100039000000050110027000000000011300190000000002230019000000000012004b000000130600002900000012040000290000000207000029000016ac0000813d000000000002041b0000000102200039000000000012004b000016a80000413d0000001f0050008c000016d90000a13d000000000040043f0000000001000414000006000010009c0000060001008041000000c00110021000000673011001c7000080100200003917fb17f60000040f0000000100200190000017510000613d0000000b070000290000068a03700198000000000101043b0000000308000029000017450000613d000000010230008a0000000502200270000000000421001900000020020000390000000104400039000000130600002900000000058200190000000005050433000000000051041b00000020022000390000000101100039000000000041004b000016c30000c13d000000000073004b0000001009000029000016d50000813d0000000303700210000000f80330018f000006970330027f000006970330016700000000028200190000000002020433000000000232016f000000000021041b000000010170021000000001011001bf0000001204000029000016ea0000013d000000000005004b000016e20000613d0000000001070433000016e30000013d00000020020000390000001306000029000000000073004b000016600000413d000016680000013d000000000100001900000010090000290000000302500210000006970220027f0000069702200167000000000121016f0000000102500210000000000121019f000000000014041b0000000601000029000000000101043300000603011001970000000202600039000000000302041a0000060403300197000000000113019f000000000012041b000000080100002900000000010104330000000302600039000000000012041b00000007010000290000000001010433000000000001004b0000000401600039000000000201041a0000069202200197000000010220c1bf0000000f030000290000000003030433000000000003004b000001000220c1bf000000000021041b000000040100002900000000010104330000000502600039000000000012041b000000060160003900000005020000290000000002020433000000000021041b000000400100043d00000040021000390000000000920435000000400200003900000000022104360000006003100039000000140430002900000015050000290000000105500367000000140000006b0000171c0000613d000000000605034f0000000007030019000000006806043c0000000007870436000000000047004b000017180000c13d000000110000006b000017290000613d000000140550036000000000060404330000000a0700002900000000067601cf000000000676022f000000000505043b0000010007700089000000000575022f00000000057501cf000000000565019f0000000000540435000000000393001900000000000304350000000e030000290000000000320435000006000010009c0000060001008041000000400110021000000009020000290000006002200039000006000020009c00000600020080410000006002200210000000000112019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c70000800d02000039000000030300003900000693040000410000000d050000290000000c0600002917fb17f10000040f0000000100200190000017510000613d000000000001042d00000020020000390000001306000029000000000073004b0000001009000029000016cd0000413d000016d50000013d0000066f01000041000000000010043f0000004101000039000000040010043f0000060e01000041000017fd000104300000000001000019000017fd00010430000000000001042f000000400100043d00000694020000410000178b0000013d0000066f01000041000000000010043f0000002201000039000000040010043f0000060e01000041000017fd00010430000000400100043d0000066e020000410000178b0000013d000000400100043d00000696020000410000178b0000013d000000400100043d00000695020000410000178b0000013d000000400100043d0000068d020000410000178b0000013d0000001f0530018f0000060206300198000000400200043d0000000004620019000017740000613d000000000701034f0000000008020019000000007907043c0000000008980436000000000048004b000017700000c13d000000000005004b000017810000613d000000000161034f0000000305500210000000000604043300000000065601cf000000000656022f000000000101043b0000010005500089000000000151022f00000000015101cf000000000161019f00000000001404350000006001300210000006000020009c00000600020080410000004002200210000000000112019f000017fd0001043000000690020000410000178b0000013d000000400100043d0000068e020000410000000000210435000006000010009c0000060001008041000000400110021000000645011001c7000017fd000104300000066f01000041000000000010043f0000001101000039000000040010043f0000060e01000041000017fd000104300000068a062001980000001f0720018f0000000108100367000000400100043d00000020031000390000000005630019000017a40000613d000000000908034f000000000a030019000000009b09043c000000000aba043600000000005a004b000017a00000c13d000000000007004b000017b10000613d000000000668034f0000000307700210000000000805043300000000087801cf000000000878022f000000000606043b0000010007700089000000000676022f00000000067601cf000000000686019f00000000006504350000000005230019000000000005043500000000002104350000003f022000390000068a022001970000000002210019000000000012004b00000000040000390000000104004039000006410020009c000017d30000213d0000000100400190000017d30000c13d000000400020043f000006000030009c000006000300804100000040023002100000000001010433000006000010009c00000600010080410000006001100210000000000121019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f0000000100200190000017d90000613d000000000101043b000000000001042d0000066f01000041000000000010043f0000004101000039000000040010043f0000060e01000041000017fd000104300000000001000019000017fd00010430000000000001042f000006000010009c00000600010080410000004001100210000006000020009c00000600020080410000006002200210000000000112019f0000000002000414000006000020009c0000060002008041000000c002200210000000000112019f00000605011001c7000080100200003917fb17f60000040f0000000100200190000017ef0000613d000000000101043b000000000001042d0000000001000019000017fd00010430000017f4002104210000000102000039000000000001042d0000000002000019000000000001042d000017f9002104230000000102000039000000000001042d0000000002000019000000000001042d000017fb00000432000017fc0001042e000017fd000104300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000000000000000000001ffffffe000000000000000000000000000000000000000000000000000000000ffffffe0000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000008be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4902000000000000000000000000000000000000400000000000000000000000002f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d50efbde2d46c37e9785f1791697f77e94bb7b701e19f1930a668820722d37694a49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177500000002000000000000000000000000000000400000010000000000000000001e4fbdf7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000000000000000000000000000000000000000000000000000000000000000000000000000008da5cb5a00000000000000000000000000000000000000000000000000000000bdab1b6800000000000000000000000000000000000000000000000000000000da3d5f1600000000000000000000000000000000000000000000000000000000f2fde38a00000000000000000000000000000000000000000000000000000000f2fde38b00000000000000000000000000000000000000000000000000000000f961e73400000000000000000000000000000000000000000000000000000000fba0ce4200000000000000000000000000000000000000000000000000000000da3d5f1700000000000000000000000000000000000000000000000000000000e55e2a5100000000000000000000000000000000000000000000000000000000cb687b8700000000000000000000000000000000000000000000000000000000cb687b8800000000000000000000000000000000000000000000000000000000d547741f00000000000000000000000000000000000000000000000000000000bdab1b6900000000000000000000000000000000000000000000000000000000c634b78e000000000000000000000000000000000000000000000000000000009a19c7af00000000000000000000000000000000000000000000000000000000a217fdde00000000000000000000000000000000000000000000000000000000a217fddf00000000000000000000000000000000000000000000000000000000aeade0e600000000000000000000000000000000000000000000000000000000b4b8bd5c000000000000000000000000000000000000000000000000000000009a19c7b0000000000000000000000000000000000000000000000000000000009e8249c40000000000000000000000000000000000000000000000000000000091d148530000000000000000000000000000000000000000000000000000000091d148540000000000000000000000000000000000000000000000000000000095ccea67000000000000000000000000000000000000000000000000000000008da5cb5b000000000000000000000000000000000000000000000000000000008f3b72010000000000000000000000000000000000000000000000000000000036a0f8a4000000000000000000000000000000000000000000000000000000005c975aba0000000000000000000000000000000000000000000000000000000075b238fb0000000000000000000000000000000000000000000000000000000075b238fc00000000000000000000000000000000000000000000000000000000826f9ccc000000000000000000000000000000000000000000000000000000008456cb59000000000000000000000000000000000000000000000000000000005c975abb00000000000000000000000000000000000000000000000000000000715018a6000000000000000000000000000000000000000000000000000000003f4ba839000000000000000000000000000000000000000000000000000000003f4ba83a0000000000000000000000000000000000000000000000000000000043ac84240000000000000000000000000000000000000000000000000000000036a0f8a5000000000000000000000000000000000000000000000000000000003cf3596b00000000000000000000000000000000000000000000000000000000248a9ca2000000000000000000000000000000000000000000000000000000002f2ff15c000000000000000000000000000000000000000000000000000000002f2ff15d0000000000000000000000000000000000000000000000000000000036568abe00000000000000000000000000000000000000000000000000000000248a9ca3000000000000000000000000000000000000000000000000000000002ec69ce10000000000000000000000000000000000000000000000000000000002d25da50000000000000000000000000000000000000000000000000000000002d25da6000000000000000000000000000000000000000000000000000000000924945800000000000000000000000000000000000000000000000000000000010262b40000000000000000000000000000000000000000000000000000000001ffc9a7000000000000000000000000000000000000000000000000ffffffffffffffffa9059cbb00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004400000000000000000000000090b8ec1800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000003ffffffe000000000000000000000000000000000000000000000000000000000ffffffbffdffffffffffffffffffffffffffffffffffffc00000000000000000000000008d0c04386b7d7072a7dae2ec5654e4f363c9a3c90f77fe0ca47679de16102da8118cdaa7000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024000000a00000000000000000fe4388e5c957d0d27239bb3eb6914b1ff0dfb2063457754edc8e323e5a21b00189b7b2d796de87072def0a9887259ad781ccd910c7710a3ac174e5e4ffb985f66abfc86bc7e3a194c210ef1b650cb01fcf08797e66502baf25a28c11b2b394562bcfa859ba24e94bad71fddeff900b280c6a1d110430303f5a50c8b7024025b0d92e233d000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000fffffffffffffebf000000000000000000000000000000000000000000000000ffffffffffffffbf000000000000000000000000000000000000000000000000ffffffffffffff3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe080000000000000000000000000000000000000000000000000000000000000001806aa1896bbf26568e884a7374b41e002500962caba6a15023a8d90e8508b830200000200000000000000000000000000000024000000000000000000000000a960e69e00000000000000000000000000000000000000000000000000000000d611c31800000000000000000000000000000000000000000000000000000000796b89b91644bc98cd93958e4c9038275d622183e25ac5af08cc6b5d9553913202000002000000000000000000000000000000040000000000000000000000003755667e000000000000000000000000000000000000000000000000000000002273637265656e5f6e616d65223a2200000000000000000000000000000000000d2030470000000000000000000000000000000000000000000000000000000050ef32880000000000000000000000000000000000000000000000000000000070a08231000000000000000000000000000000000000000000000000000000009cc7f708afc65944829bd487b90b72536b1951864fbfc14e125fc972a6507f394d659d99bef645e5b0b015c11fcba03d2688d63a08664047fac50bcf239a70097eced8bc00000000000000000000000000000000000000000000000000000000e3e94326000000000000000000000000000000000000000000000000000000003ee5aeb50000000000000000000000000000000000000000000000000000000044d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e3390000000000000000000000000000000000000004000000a00000000000000000f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9b42ec5823a53458879069be7536ba7025199e1525268dfe22d49e1fa3ea72030000000000000000000000000000000000000020000000a00000000000000000a3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f786e0a99000000000000000000000000000000000000000000000000000000001f2a2005000000000000000000000000000000000000000000000000000000004e487b7100000000000000000000000000000000000000000000000000000000b3f8c0dc00000000000000000000000000000000000000000000000000000000d58597c6000000000000000000000000000000000000000000000000000000006d363c4500000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000002000000000000000000000000062e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25881990fd9a5c552b8e3677917d8a03c07678f0d2cb68f88b634aca2022e9bd19f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa5b65b0c1363b3003db9bcc5e1fd8805a6d6bf5bf6dc9d3431ee4494cd7d117668dfc202b0000000000000000000000000000000000000000000000000000000043616c6c6572206973206e6f7420616e2061646d696e0000000000000000000008c379a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000640000000000000000000000000200000000000000000000000000000000000060000000000000000000000000aa2ef8ba434f2f6bdaad3fcc2d5c35f02b08a47173c94877259407614bc46b55947d5a84000000000000000000000000000000000000000000000000000000006697b23200000000000000000000000000000000000000000000000000000000e2517d3f0000000000000000000000000000000000000000000000000000000043616c6c6572206973206e6f742061207265776172642063726561746f720000d93c066500000000000000000000000000000000000000000000000000000000a24a13a60000000000000000000000000000000000000000000000000000000016886f2b00000000000000000000000000000000000000000000000000000000521299a90000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffc9a7000000000000000000000000000000000000000000000000000000007965db0b00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff000000000000000000000000000000000000000000000000ffffffffffffff0023124c3900000000000000000000000000000000000000000000000000000000fb2a67520000000000000000000000000000000000000000000000000000000018160ddd000000000000000000000000000000000000000000000000000000001eb00b0600000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000b9341144868ef38af420e3d220534b250d434aa3b11ef35269e46b54a7b11d9fb11b2ad800000000000000000000000000000000000000000000000000000000999bf96a000000000000000000000000000000000000000000000000000000002806db8e00000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2ccb9d5532646fe9221ce682e099cddf77d3fe822e4edb81deed1264676fb006
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000036615cf349d7f6344891b1e7ca7c72883f5dc049000000000000000000000000760de1fed5889052a2c01ea7823d930060d4af4d0000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000003200000000000000000000000000000000000000000000000000000000000000320000000000000000000000000000000000000000000000000000000000093a80
-----Decoded View---------------
Arg [0] : initialOwner (address): 0x36615Cf349d7F6344891B1e7CA7C72883F5dc049
Arg [1] : reclaimAddress_ (address): 0x760dE1FEd5889052a2C01ea7823d930060D4Af4d
Arg [2] : initialMaxPostIdLength (uint256): 100
Arg [3] : initialMaxUsernameLength (uint256): 50
Arg [4] : initialMaxBulkOperations (uint256): 50
Arg [5] : initialDefaultExpirationDuration (uint256): 604800
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 00000000000000000000000036615cf349d7f6344891b1e7ca7c72883f5dc049
Arg [1] : 000000000000000000000000760de1fed5889052a2c01ea7823d930060d4af4d
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [5] : 0000000000000000000000000000000000000000000000000000000000093a80
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ 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.