- Contract name:
- Allowlist
- Optimization enabled
- false
- Compiler version
- v0.8.17+commit.8df45f5f
- Verified at
- 2024-03-06T07:06:42.260144Z
contracts/lit-node/Allowlist.sol
//SPDX-License-Identifier: GPL-3.0-or-laterpragma solidity ^0.8.17;import { Ownable } from "@openzeppelin/contracts/access/Ownable.sol";import { ReentrancyGuard } from "@openzeppelin/contracts/security/ReentrancyGuard.sol";import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol";import "hardhat/console.sol";contract Allowlist is Ownable, ReentrancyGuard {using EnumerableSet for EnumerableSet.AddressSet;/* ========== STATE VARIABLES ========== */mapping(bytes32 => bool) public allowedItems;EnumerableSet.AddressSet admins;bool public allowAll;/* ========== CONSTRUCTOR ========== */constructor() {admins.add(msg.sender);}/* ========== VIEWS ========== */function isAllowed(bytes32 key) external view returns (bool) {if (allowAll) {return true;}return allowedItems[key];}/* ========== MUTATIVE FUNCTIONS ========== */function setAllowed(bytes32 key) external {require(admins.contains(msg.sender), "Not an admin");allowedItems[key] = true;emit ItemAllowed(key);}function setNotAllowed(bytes32 key) external {
@openzeppelin/contracts/access/Ownable.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)pragma solidity ^0.8.0;import "../utils/Context.sol";/*** @dev Contract module which provides a basic access control mechanism, where* there is an account (an owner) that can be granted exclusive access to* specific functions.** By default, the owner account will be the one that deploys the contract. This* can later be changed with {transferOwnership}.** This module is used through inheritance. It will make available the modifier* `onlyOwner`, which can be applied to your functions to restrict their use to* the owner.*/abstract contract Ownable is Context {address private _owner;event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);/*** @dev Initializes the contract setting the deployer as the initial owner.*/constructor() {_transferOwnership(_msgSender());}/*** @dev Throws if called by any account other than the owner.*/modifier onlyOwner() {_checkOwner();_;}/*** @dev Returns the address of the current owner.
@openzeppelin/contracts/security/ReentrancyGuard.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)pragma solidity ^0.8.0;/*** @dev Contract module that helps prevent reentrant calls to a function.** Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier* available, which can be applied to functions to make sure there are no nested* (reentrant) calls to them.** Note that because there is a single `nonReentrant` guard, functions marked as* `nonReentrant` may not call one another. This can be worked around by making* those functions `private`, and then adding `external` `nonReentrant` entry* points to them.** TIP: If you would like to learn more about reentrancy and alternative ways* to protect against it, check out our blog post* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].*/abstract contract ReentrancyGuard {// Booleans are more expensive than uint256 or any type that takes up a full// word because each write operation emits an extra SLOAD to first read the// slot's contents, replace the bits taken up by the boolean, and then write// back. This is the compiler's defense against contract upgrades and// pointer aliasing, and it cannot be disabled.// The values being non-zero value makes deployment a bit more expensive,// but in exchange the refund on every call to nonReentrant will be lower in// amount. Since refunds are capped to a percentage of the total// transaction's gas, it is best to keep them low in cases like this one, to// increase the likelihood of the full refund coming into effect.uint256 private constant _NOT_ENTERED = 1;uint256 private constant _ENTERED = 2;uint256 private _status;constructor() {_status = _NOT_ENTERED;}
@openzeppelin/contracts/utils/Context.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)pragma solidity ^0.8.0;/*** @dev Provides information about the current execution context, including the* sender of the transaction and its data. While these are generally available* via msg.sender and msg.data, they should not be accessed in such a direct* manner, since when dealing with meta-transactions the account sending and* paying for execution may not be the actual sender (as far as an application* is concerned).** This contract is only required for intermediate, library-like contracts.*/abstract contract Context {function _msgSender() internal view virtual returns (address) {return msg.sender;}function _msgData() internal view virtual returns (bytes calldata) {return msg.data;}}
@openzeppelin/contracts/utils/structs/EnumerableSet.sol
// SPDX-License-Identifier: MIT// OpenZeppelin Contracts (last updated v4.9.0) (utils/structs/EnumerableSet.sol)// This file was procedurally generated from scripts/generate/templates/EnumerableSet.js.pragma solidity ^0.8.0;/*** @dev Library for managing* https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive* types.** Sets have the following properties:** - Elements are added, removed, and checked for existence in constant time* (O(1)).* - Elements are enumerated in O(n). No guarantees are made on the ordering.** ```solidity* contract Example {* // Add the library methods* using EnumerableSet for EnumerableSet.AddressSet;** // Declare a set state variable* EnumerableSet.AddressSet private mySet;* }* ```** As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)* and `uint256` (`UintSet`) are supported.** [WARNING]* ====* Trying to delete such a structure from storage will likely result in data corruption, rendering the structure* unusable.* See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info.** In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an* array of EnumerableSet.* ====*/library EnumerableSet {
hardhat/console.sol
// SPDX-License-Identifier: MITpragma solidity >=0.4.22 <0.9.0;library console {address constant CONSOLE_ADDRESS =0x000000000000000000636F6e736F6c652e6c6f67;function _sendLogPayloadImplementation(bytes memory payload) internal view {address consoleAddress = CONSOLE_ADDRESS;/// @solidity memory-safe-assemblyassembly {pop(staticcall(gas(),consoleAddress,add(payload, 32),mload(payload),0,0))}}function _castToPure(function(bytes memory) internal view fnIn) internal pure returns (function(bytes memory) pure fnOut) {assembly {fnOut := fnIn}}function _sendLogPayload(bytes memory payload) internal pure {_castToPure(_sendLogPayloadImplementation)(payload);}function log() internal pure {_sendLogPayload(abi.encodeWithSignature("log()"));}function logInt(int256 p0) internal pure {_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
Contract ABI
[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"AdminAdded","inputs":[{"type":"address","name":"newAdmin","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"AdminRemoved","inputs":[{"type":"address","name":"newAdmin","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"ItemAllowed","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"ItemNotAllowed","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"previousOwner","internalType":"address","indexed":true},{"type":"address","name":"newOwner","internalType":"address","indexed":true}],"anonymous":false},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addAdmin","inputs":[{"type":"address","name":"newAdmin","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"allowAll","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"allowedItems","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAllowed","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"owner","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeAdmin","inputs":[{"type":"address","name":"newAdmin","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceOwnership","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAllowAll","inputs":[{"type":"bool","name":"_allowAll","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setAllowed","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setNotAllowed","inputs":[{"type":"bytes32","name":"key","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"newOwner","internalType":"address"}]}]
Contract Creation Code
0x608060405234801561001057600080fd5b5061002d61002261005260201b60201c565b61005a60201b60201c565b6001808190555061004c33600361011e60201b6105811790919060201c565b506101ed565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061014c836000018373ffffffffffffffffffffffffffffffffffffffff1660001b61015460201b60201c565b905092915050565b600061016683836101ca60201b60201c565b6101bf5782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506101c4565b600090505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b610d2a806101fc6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a614610150578063787552951461015a578063865815971461018a5780638767d9aa146101a65780638da5cb5b146101c2578063f2fde38b146101e0576100a9565b80631785f53c146100ae5780634d7d9c01146100ca5780634ee643a5146100e657806352f97536146101045780637048027514610134575b600080fd5b6100c860048036038101906100c39190610965565b6101fc565b005b6100e460048036038101906100df91906109ca565b61025f565b005b6100ee610284565b6040516100fb9190610a06565b60405180910390f35b61011e60048036038101906101199190610a57565b610297565b60405161012b9190610a06565b60405180910390f35b61014e60048036038101906101499190610965565b6102b7565b005b61015861031a565b005b610174600480360381019061016f9190610a57565b61032e565b6040516101819190610a06565b60405180910390f35b6101a4600480360381019061019f9190610a57565b610377565b005b6101c060048036038101906101bb9190610a57565b610426565b005b6101ca6104d5565b6040516101d79190610a93565b60405180910390f35b6101fa60048036038101906101f59190610965565b6104fe565b005b6102046105b1565b61021881600361062f90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f60405160405180910390a250565b6102676105b1565b80600560006101000a81548160ff02191690831515021790555050565b600560009054906101000a900460ff1681565b60026020528060005260406000206000915054906101000a900460ff1681565b6102bf6105b1565b6102d381600361058190919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a250565b6103226105b1565b61032c600061065f565b565b6000600560009054906101000a900460ff161561034e5760019050610372565b6002600083815260200190815260200160002060009054906101000a900460ff1690505b919050565b61038b33600361072390919063ffffffff16565b6103ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c190610b0b565b60405180910390fd5b60016002600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fe4be98886a3c8cd9027fdb44065f6b81514c5cf5a1dab85eb7733beb531580ef60405160405180910390a250565b61043a33600361072390919063ffffffff16565b610479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047090610b0b565b60405180910390fd5b60006002600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fa676ee7eed1b9e9e90c0ce1964919b8a084b891bafa6b778b64571f338c0cd9560405160405180910390a250565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105066105b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056c90610b9d565b60405180910390fd5b61057e8161065f565b50565b60006105a9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610753565b905092915050565b6105b96107c3565b73ffffffffffffffffffffffffffffffffffffffff166105d76104d5565b73ffffffffffffffffffffffffffffffffffffffff161461062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c09565b60405180910390fd5b565b6000610657836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6107cb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061074b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6108df565b905092915050565b600061075f83836108df565b6107b85782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506107bd565b600090505b92915050565b600033905090565b600080836001016000848152602001908152602001600020549050600081146108d35760006001826107fd9190610c62565b90506000600186600001805490506108159190610c62565b905081811461088457600086600001828154811061083657610835610c96565b5b906000526020600020015490508087600001848154811061085a57610859610c96565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061089857610897610cc5565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108d9565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061093282610907565b9050919050565b61094281610927565b811461094d57600080fd5b50565b60008135905061095f81610939565b92915050565b60006020828403121561097b5761097a610902565b5b600061098984828501610950565b91505092915050565b60008115159050919050565b6109a781610992565b81146109b257600080fd5b50565b6000813590506109c48161099e565b92915050565b6000602082840312156109e0576109df610902565b5b60006109ee848285016109b5565b91505092915050565b610a0081610992565b82525050565b6000602082019050610a1b60008301846109f7565b92915050565b6000819050919050565b610a3481610a21565b8114610a3f57600080fd5b50565b600081359050610a5181610a2b565b92915050565b600060208284031215610a6d57610a6c610902565b5b6000610a7b84828501610a42565b91505092915050565b610a8d81610927565b82525050565b6000602082019050610aa86000830184610a84565b92915050565b600082825260208201905092915050565b7f4e6f7420616e2061646d696e0000000000000000000000000000000000000000600082015250565b6000610af5600c83610aae565b9150610b0082610abf565b602082019050919050565b60006020820190508181036000830152610b2481610ae8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b87602683610aae565b9150610b9282610b2b565b604082019050919050565b60006020820190508181036000830152610bb681610b7a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610bf3602083610aae565b9150610bfe82610bbd565b602082019050919050565b60006020820190508181036000830152610c2281610be6565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610c6d82610c29565b9150610c7883610c29565b9250828203905081811115610c9057610c8f610c33565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207e1a6af37beb947dc95a513aa50f619bbd1bae2ab94b93ebf9e3d8c1b5b0876464736f6c63430008110033
Deployed ByteCode
0x608060405234801561001057600080fd5b50600436106100a95760003560e01c8063715018a611610071578063715018a614610150578063787552951461015a578063865815971461018a5780638767d9aa146101a65780638da5cb5b146101c2578063f2fde38b146101e0576100a9565b80631785f53c146100ae5780634d7d9c01146100ca5780634ee643a5146100e657806352f97536146101045780637048027514610134575b600080fd5b6100c860048036038101906100c39190610965565b6101fc565b005b6100e460048036038101906100df91906109ca565b61025f565b005b6100ee610284565b6040516100fb9190610a06565b60405180910390f35b61011e60048036038101906101199190610a57565b610297565b60405161012b9190610a06565b60405180910390f35b61014e60048036038101906101499190610965565b6102b7565b005b61015861031a565b005b610174600480360381019061016f9190610a57565b61032e565b6040516101819190610a06565b60405180910390f35b6101a4600480360381019061019f9190610a57565b610377565b005b6101c060048036038101906101bb9190610a57565b610426565b005b6101ca6104d5565b6040516101d79190610a93565b60405180910390f35b6101fa60048036038101906101f59190610965565b6104fe565b005b6102046105b1565b61021881600361062f90919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167fa3b62bc36326052d97ea62d63c3d60308ed4c3ea8ac079dd8499f1e9c4f80c0f60405160405180910390a250565b6102676105b1565b80600560006101000a81548160ff02191690831515021790555050565b600560009054906101000a900460ff1681565b60026020528060005260406000206000915054906101000a900460ff1681565b6102bf6105b1565b6102d381600361058190919063ffffffff16565b508073ffffffffffffffffffffffffffffffffffffffff167f44d6d25963f097ad14f29f06854a01f575648a1ef82f30e562ccd3889717e33960405160405180910390a250565b6103226105b1565b61032c600061065f565b565b6000600560009054906101000a900460ff161561034e5760019050610372565b6002600083815260200190815260200160002060009054906101000a900460ff1690505b919050565b61038b33600361072390919063ffffffff16565b6103ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103c190610b0b565b60405180910390fd5b60016002600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fe4be98886a3c8cd9027fdb44065f6b81514c5cf5a1dab85eb7733beb531580ef60405160405180910390a250565b61043a33600361072390919063ffffffff16565b610479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047090610b0b565b60405180910390fd5b60006002600083815260200190815260200160002060006101000a81548160ff021916908315150217905550807fa676ee7eed1b9e9e90c0ce1964919b8a084b891bafa6b778b64571f338c0cd9560405160405180910390a250565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6105066105b1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056c90610b9d565b60405180910390fd5b61057e8161065f565b50565b60006105a9836000018373ffffffffffffffffffffffffffffffffffffffff1660001b610753565b905092915050565b6105b96107c3565b73ffffffffffffffffffffffffffffffffffffffff166105d76104d5565b73ffffffffffffffffffffffffffffffffffffffff161461062d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161062490610c09565b60405180910390fd5b565b6000610657836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6107cb565b905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061074b836000018373ffffffffffffffffffffffffffffffffffffffff1660001b6108df565b905092915050565b600061075f83836108df565b6107b85782600001829080600181540180825580915050600190039060005260206000200160009091909190915055826000018054905083600101600084815260200190815260200160002081905550600190506107bd565b600090505b92915050565b600033905090565b600080836001016000848152602001908152602001600020549050600081146108d35760006001826107fd9190610c62565b90506000600186600001805490506108159190610c62565b905081811461088457600086600001828154811061083657610835610c96565b5b906000526020600020015490508087600001848154811061085a57610859610c96565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b8560000180548061089857610897610cc5565b5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506108d9565b60009150505b92915050565b600080836001016000848152602001908152602001600020541415905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061093282610907565b9050919050565b61094281610927565b811461094d57600080fd5b50565b60008135905061095f81610939565b92915050565b60006020828403121561097b5761097a610902565b5b600061098984828501610950565b91505092915050565b60008115159050919050565b6109a781610992565b81146109b257600080fd5b50565b6000813590506109c48161099e565b92915050565b6000602082840312156109e0576109df610902565b5b60006109ee848285016109b5565b91505092915050565b610a0081610992565b82525050565b6000602082019050610a1b60008301846109f7565b92915050565b6000819050919050565b610a3481610a21565b8114610a3f57600080fd5b50565b600081359050610a5181610a2b565b92915050565b600060208284031215610a6d57610a6c610902565b5b6000610a7b84828501610a42565b91505092915050565b610a8d81610927565b82525050565b6000602082019050610aa86000830184610a84565b92915050565b600082825260208201905092915050565b7f4e6f7420616e2061646d696e0000000000000000000000000000000000000000600082015250565b6000610af5600c83610aae565b9150610b0082610abf565b602082019050919050565b60006020820190508181036000830152610b2481610ae8565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000610b87602683610aae565b9150610b9282610b2b565b604082019050919050565b60006020820190508181036000830152610bb681610b7a565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000610bf3602083610aae565b9150610bfe82610bbd565b602082019050919050565b60006020820190508181036000830152610c2281610be6565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000610c6d82610c29565b9150610c7883610c29565b9250828203905081811115610c9057610c8f610c33565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212207e1a6af37beb947dc95a513aa50f619bbd1bae2ab94b93ebf9e3d8c1b5b0876464736f6c63430008110033