Indexing Tokens - We're indexing this chain right now. Some of the counts may be inaccurate.

Contract Address Details

0xe5a7C5d908EE8996332F488cE5f636d4EBff8522

Contract Name
ContractResolver
Creator
0x046bf7–da7b9c at 0x4a9d6f–38b8f4
Balance
0 LIT
Tokens
Fetching tokens...
Transactions
23 Transactions
Transfers
0 Transfers
Gas Used
1,088,354
Last Balance Update
2793510
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
ContractResolver




Optimization enabled
false
Compiler version
v0.8.17+commit.8df45f5f




Verified at
2023-11-23T04:05:42.070340Z

Constructor Arguments

0000000000000000000000000000000000000000000000000000000000000002

Arg [0] (uint8) : 2

              

contracts/lit-core/ContractResolver.sol

// SPDX-License-Identifier: GPL-3.0-or-later
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/access/AccessControl.sol";
import "hardhat/console.sol";
contract ContractResolver is AccessControl {
/* ========== TYPE DEFINITIONS ========== */
// the comments following each one of these are the keccak256 hashes of the string values
// this is very useful if you have to manually set any of these, so that you
// don't have to calculate the hahes yourself.
bytes32 public constant ADMIN_ROLE = keccak256("ADMIN"); // 0xdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42
bytes32 public constant RELEASE_REGISTER_CONTRACT =
keccak256("RELEASE_REGISTER"); // 0x3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec
bytes32 public constant STAKING_CONTRACT = keccak256("STAKING"); // 0x080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b
bytes32 public constant STAKING_BALANCES_CONTRACT =
keccak256("STAKING_BALANCES"); // 0xaa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d72
bytes32 public constant MULTI_SENDER_CONTRACT = keccak256("MULTI_SENDER"); // 0xdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da7243
bytes32 public constant LIT_TOKEN_CONTRACT = keccak256("LIT_TOKEN");
bytes32 public constant PUB_KEY_ROUTER_CONTRACT =
keccak256("PUB_KEY_ROUTER"); // 0xb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f7
bytes32 public constant PKP_NFT_CONTRACT = keccak256("PKP_NFT"); // 0xb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b0
bytes32 public constant RATE_LIMIT_NFT_CONTRACT =
keccak256("RATE_LIMIT_NFT"); // 0xb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a918
bytes32 public constant PKP_HELPER_CONTRACT = keccak256("PKP_HELPER"); // 0x27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b44388755765
bytes32 public constant PKP_PERMISSIONS_CONTRACT =
keccak256("PKP_PERMISSIONS"); // 0x54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe
bytes32 public constant PKP_NFT_METADATA_CONTRACT =
keccak256("PKP_NFT_METADATA"); // 0xf14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a
bytes32 public constant ALLOWLIST_CONTRACT = keccak256("ALLOWLIST"); // 0x74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca
bytes32 public constant DOMAIN_WALLET_ORACLE =
keccak256("DOMAIN_WALLET_ORACLE");
bytes32 public constant DOMAIN_WALLET_REGISTRY =
keccak256("DOMAIN_WALLET_REGISTRY");
bytes32 public constant HD_KEY_DERIVER_CONTRACT =
keccak256("HD_KEY_DERIVER");
bytes32 public constant BACKUP_RECOVERY_CONTRACT =
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/access/AccessControl.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (access/AccessControl.sol)
pragma solidity ^0.8.0;
import "./IAccessControl.sol";
import "../utils/Context.sol";
import "../utils/Strings.sol";
import "../utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```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
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/access/IAccessControl.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)
pragma solidity ^0.8.0;
/**
* @dev External interface of AccessControl declared to support ERC165 detection.
*/
interface IAccessControl {
/**
* @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`
*
* `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite
* {RoleAdminChanged} not being emitted signaling this.
*
* _Available since v3.1._
*/
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
/**
* @dev Emitted when `account` is granted `role`.
*
* `sender` is the account that originated the contract call, an admin role
* bearer except when using {AccessControl-_setupRole}.
*/
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Emitted when `account` is revoked `role`.
*
* `sender` is the account that originated the contract call:
* - if using `revokeRole`, it is the admin role bearer
* - if using `renounceRole`, it is the role bearer (i.e. `account`)
*/
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
/**
* @dev Returns `true` if `account` has been granted `role`.
*/
function hasRole(bytes32 role, address account) external view returns (bool);
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@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;
}
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/Strings.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
import "./math/Math.sol";
import "./math/SignedMath.sol";
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
/**
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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

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

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

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

@openzeppelin/contracts/utils/math/Math.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard math utilities missing in the Solidity language.
*/
library Math {
enum Rounding {
Down, // Toward negative infinity
Up, // Toward infinity
Zero // Toward zero
}
/**
* @dev Returns the largest of two numbers.
*/
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two numbers.
*/
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two numbers. The result is rounded towards
* zero.
*/
function average(uint256 a, uint256 b) internal pure returns (uint256) {
// (a + b) / 2 can overflow.
return (a & b) + (a ^ b) / 2;
}
/**
* @dev Returns the ceiling of the division of two numbers.
*
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

@openzeppelin/contracts/utils/math/SignedMath.sol

// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol)
pragma solidity ^0.8.0;
/**
* @dev Standard signed math utilities missing in the Solidity language.
*/
library SignedMath {
/**
* @dev Returns the largest of two signed numbers.
*/
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
/**
* @dev Returns the smallest of two signed numbers.
*/
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
/**
* @dev Returns the average of two signed numbers without overflow.
* The result is rounded towards zero.
*/
function average(int256 a, int256 b) internal pure returns (int256) {
// Formula from the book "Hacker's Delight"
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
/**
* @dev Returns the absolute unsigned value of a signed value.
*/
function abs(int256 n) internal pure returns (uint256) {
unchecked {
// must be unchecked in order to support `n = type(int256).min`
return uint256(n >= 0 ? n : -n);
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

hardhat/console.sol

// SPDX-License-Identifier: MIT
pragma 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-assembly
assembly {
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));
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[{"type":"uint8","name":"env","internalType":"enum ContractResolver.Env"}]},{"type":"error","name":"AdminRoleRequired","inputs":[]},{"type":"event","name":"AllowedEnvAdded","inputs":[{"type":"uint8","name":"env","internalType":"enum ContractResolver.Env","indexed":false}],"anonymous":false},{"type":"event","name":"AllowedEnvRemoved","inputs":[{"type":"uint8","name":"env","internalType":"enum ContractResolver.Env","indexed":false}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"previousAdminRole","internalType":"bytes32","indexed":true},{"type":"bytes32","name":"newAdminRole","internalType":"bytes32","indexed":true}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32","indexed":true},{"type":"address","name":"account","internalType":"address","indexed":true},{"type":"address","name":"sender","internalType":"address","indexed":true}],"anonymous":false},{"type":"event","name":"SetContract","inputs":[{"type":"bytes32","name":"typ","internalType":"bytes32","indexed":false},{"type":"uint8","name":"env","internalType":"enum ContractResolver.Env","indexed":false},{"type":"address","name":"addr","internalType":"address","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"ADMIN_ROLE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"ALLOWLIST_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"BACKUP_RECOVERY_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DEFAULT_ADMIN_ROLE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_WALLET_ORACLE","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"DOMAIN_WALLET_REGISTRY","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"HD_KEY_DERIVER_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"LIT_TOKEN_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"MULTI_SENDER_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PKP_HELPER_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PKP_NFT_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PKP_NFT_METADATA_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PKP_PERMISSIONS_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"PUB_KEY_ROUTER_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"RATE_LIMIT_NFT_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"RELEASE_REGISTER_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"STAKING_BALANCES_CONTRACT","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"STAKING_CONTRACT","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addAdmin","inputs":[{"type":"address","name":"newAdmin","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"addAllowedEnv","inputs":[{"type":"uint8","name":"env","internalType":"enum ContractResolver.Env"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getContract","inputs":[{"type":"bytes32","name":"typ","internalType":"bytes32"},{"type":"uint8","name":"env","internalType":"enum ContractResolver.Env"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bytes32","name":"","internalType":"bytes32"}],"name":"getRoleAdmin","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"grantRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"hasRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeAdmin","inputs":[{"type":"address","name":"adminBeingRemoved","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"removeAllowedEnv","inputs":[{"type":"uint8","name":"env","internalType":"enum ContractResolver.Env"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"renounceRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"revokeRole","inputs":[{"type":"bytes32","name":"role","internalType":"bytes32"},{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setContract","inputs":[{"type":"bytes32","name":"typ","internalType":"bytes32"},{"type":"uint8","name":"env","internalType":"enum ContractResolver.Env"},{"type":"address","name":"addr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"supportsInterface","inputs":[{"type":"bytes4","name":"interfaceId","internalType":"bytes4"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"typeAddresses","inputs":[{"type":"bytes32","name":"","internalType":"bytes32"},{"type":"uint8","name":"","internalType":"enum ContractResolver.Env"}]}]
            

Contract Creation Code

0x60806040523480156200001157600080fd5b506040516200220238038062002202833981810160405281019062000037919062000358565b620000697fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42336200013060201b60201c565b6200009b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42806200014660201b60201c565b6001806000836002811115620000b657620000b56200038a565b5b6002811115620000cb57620000ca6200038a565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece8015816040516200012191906200040a565b60405180910390a15062000427565b620001428282620001a960201b60201c565b5050565b600062000159836200029a60201b60201c565b905081600080858152602001908152602001600020600101819055508181847fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff60405160405180910390a4505050565b620001bb8282620002b960201b60201c565b6200029657600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200023b6200032360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6000806000838152602001908152602001600020600101549050919050565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600033905090565b600080fd5b600381106200033e57600080fd5b50565b600081519050620003528162000330565b92915050565b6000602082840312156200037157620003706200032b565b5b6000620003818482850162000341565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60038110620003cd57620003cc6200038a565b5b50565b6000819050620003e082620003b9565b919050565b6000620003f282620003d0565b9050919050565b6200040481620003e5565b82525050565b6000602082019050620004216000830184620003f9565b92915050565b611dcb80620004376000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806375b238fc1161010f57806391d14854116100a2578063d547741f11610071578063d547741f14610560578063da19ddfb1461057c578063df3806931461059a578063f8ae93b4146105b8576101e5565b806391d14854146104d6578063977a807014610506578063a217fddf14610524578063ad1c8a8614610542576101e5565b80638c1536df116100de5780638c1536df1461044e5780638deb38931461046c5780638e8dfd16146104885780639072f838146104b8576101e5565b806375b238fc146103d65780637cadf69f146103f45780637d4a03bd1461041257806385cb119114610430576101e5565b80632f2ff15d1161018757806351ad0a801161015657806351ad0a8014610364578063704802751461038057806372823fa71461039c57806374bc8139146103ba576101e5565b80632f2ff15d146102de57806336568abe146102fa5780633ebf7985146103165780634216e73a14610346576101e5565b8063248a9ca3116101c3578063248a9ca3146102545780632668f305146102845780632c0b8bf7146102a25780632e4885e8146102c0576101e5565b806301ffc9a7146101ea57806316f76bbf1461021a5780631785f53c14610238575b600080fd5b61020460048036038101906101ff91906114ea565b6105d6565b6040516102119190611532565b60405180910390f35b610222610650565b60405161022f9190611566565b60405180910390f35b610252600480360381019061024d91906115df565b610674565b005b61026e60048036038101906102699190611638565b61073a565b60405161027b9190611566565b60405180910390f35b61028c610759565b6040516102999190611566565b60405180910390f35b6102aa61077d565b6040516102b79190611566565b60405180910390f35b6102c86107a1565b6040516102d59190611566565b60405180910390f35b6102f860048036038101906102f39190611665565b6107c5565b005b610314600480360381019061030f9190611665565b6107e6565b005b610330600480360381019061032b91906116ca565b610869565b60405161033d9190611719565b60405180910390f35b61034e6108ab565b60405161035b9190611566565b60405180910390f35b61037e60048036038101906103799190611734565b6108cf565b005b61039a600480360381019061039591906115df565b610a81565b005b6103a4610ad9565b6040516103b19190611566565b60405180910390f35b6103d460048036038101906103cf9190611787565b610afd565b005b6103de610be6565b6040516103eb9190611566565b60405180910390f35b6103fc610c0a565b6040516104099190611566565b60405180910390f35b61041a610c2e565b6040516104279190611566565b60405180910390f35b610438610c52565b6040516104459190611566565b60405180910390f35b610456610c76565b6040516104639190611566565b60405180910390f35b61048660048036038101906104819190611787565b610c9a565b005b6104a2600480360381019061049d91906116ca565b610d7b565b6040516104af9190611719565b60405180910390f35b6104c0610dee565b6040516104cd9190611566565b60405180910390f35b6104f060048036038101906104eb9190611665565b610e12565b6040516104fd9190611532565b60405180910390f35b61050e610e7c565b60405161051b9190611566565b60405180910390f35b61052c610ea0565b6040516105399190611566565b60405180910390f35b61054a610ea7565b6040516105579190611566565b60405180910390f35b61057a60048036038101906105759190611665565b610ecb565b005b610584610eec565b6040516105919190611566565b60405180910390f35b6105a2610f10565b6040516105af9190611566565b60405180910390f35b6105c0610f34565b6040516105cd9190611566565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610649575061064882610f58565b5b9050919050565b7ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261069e81610fc2565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361070c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070390611837565b60405180910390fd5b6107367fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4283610fd6565b5050565b6000806000838152602001908152602001600020600101549050919050565b7fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b7fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b7fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b6107ce8261073a565b6107d781610fc2565b6107e183836110b7565b505050565b6107ee611197565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461085b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610852906118c9565b60405180910390fd5b6108658282610fd6565b5050565b60026020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6108f97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610e12565b61092f576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600115156001600084600281111561094a576109496118e9565b5b600281111561095c5761095b6118e9565b5b815260200190815260200160002060009054906101000a900460ff161515146109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b19061198a565b60405180910390fd5b806002600085815260200190815260200160002060008460028111156109e3576109e26118e9565b5b60028111156109f5576109f46118e9565b5b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d838383604051610a74939291906119f2565b60405180910390a1505050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42610aab81610fc2565b610ad57fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42836110b7565b5050565b7fc293b28944ab4199ad0f77d42d49e33b15d60cc12ed2a0b94a0db1d0b719f56181565b610b277fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610e12565b610b5d576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001806000836002811115610b7557610b746118e9565b5b6002811115610b8757610b866118e9565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610bdb9190611a29565b60405180910390a150565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b7f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b7fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b7faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b610cc47fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610e12565b610cfa576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000826002811115610d1157610d106118e9565b5b6002811115610d2357610d226118e9565b5b815260200190815260200160002060006101000a81549060ff02191690557f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4781604051610d709190611a29565b60405180910390a150565b6000600260008481526020019081526020016000206000836002811115610da557610da46118e9565b5b6002811115610db757610db66118e9565b5b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b7f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b6000801b81565b7f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b610ed48261073a565b610edd81610fc2565b610ee78383610fd6565b505050565b7f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b7fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b7fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610fd381610fce611197565b61119f565b50565b610fe08282610e12565b156110b357600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611058611197565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6110c18282610e12565b61119357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611138611197565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b6111a98282610e12565b611220576111b681611224565b6111c48360001c6020611251565b6040516020016111d5929190611b4d565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112179190611bd1565b60405180910390fd5b5050565b606061124a8273ffffffffffffffffffffffffffffffffffffffff16601460ff16611251565b9050919050565b6060600060028360026112649190611c2c565b61126e9190611c6e565b67ffffffffffffffff81111561128757611286611ca2565b5b6040519080825280601f01601f1916602001820160405280156112b95781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106112f1576112f0611cd1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061135557611354611cd1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026113959190611c2c565b61139f9190611c6e565b90505b600181111561143f577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106113e1576113e0611cd1565b5b1a60f81b8282815181106113f8576113f7611cd1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061143890611d00565b90506113a2565b5060008414611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90611d75565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6114c781611492565b81146114d257600080fd5b50565b6000813590506114e4816114be565b92915050565b600060208284031215611500576114ff61148d565b5b600061150e848285016114d5565b91505092915050565b60008115159050919050565b61152c81611517565b82525050565b60006020820190506115476000830184611523565b92915050565b6000819050919050565b6115608161154d565b82525050565b600060208201905061157b6000830184611557565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115ac82611581565b9050919050565b6115bc816115a1565b81146115c757600080fd5b50565b6000813590506115d9816115b3565b92915050565b6000602082840312156115f5576115f461148d565b5b6000611603848285016115ca565b91505092915050565b6116158161154d565b811461162057600080fd5b50565b6000813590506116328161160c565b92915050565b60006020828403121561164e5761164d61148d565b5b600061165c84828501611623565b91505092915050565b6000806040838503121561167c5761167b61148d565b5b600061168a85828601611623565b925050602061169b858286016115ca565b9150509250929050565b600381106116b257600080fd5b50565b6000813590506116c4816116a5565b92915050565b600080604083850312156116e1576116e061148d565b5b60006116ef85828601611623565b9250506020611700858286016116b5565b9150509250929050565b611713816115a1565b82525050565b600060208201905061172e600083018461170a565b92915050565b60008060006060848603121561174d5761174c61148d565b5b600061175b86828701611623565b935050602061176c868287016116b5565b925050604061177d868287016115ca565b9150509250925092565b60006020828403121561179d5761179c61148d565b5b60006117ab848285016116b5565b91505092915050565b600082825260208201905092915050565b7f43616e6e6f742072656d6f76652073656c662061732061646d696e2e2020486160008201527f766520746865206e65772061646d696e20646f2069742e000000000000000000602082015250565b60006118216037836117b4565b915061182c826117c5565b604082019050919050565b6000602082019050818103600083015261185081611814565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006118b3602f836117b4565b91506118be82611857565b604082019050919050565b600060208201905081810360008301526118e2816118a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f5468652070726f766964656420456e76206973206e6f742076616c696420666f60008201527f72207468697320636f6e74726163740000000000000000000000000000000000602082015250565b6000611974602f836117b4565b915061197f82611918565b604082019050919050565b600060208201905081810360008301526119a381611967565b9050919050565b600381106119bb576119ba6118e9565b5b50565b60008190506119cc826119aa565b919050565b60006119dc826119be565b9050919050565b6119ec816119d1565b82525050565b6000606082019050611a076000830186611557565b611a1460208301856119e3565b611a21604083018461170a565b949350505050565b6000602082019050611a3e60008301846119e3565b92915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611a85601783611a44565b9150611a9082611a4f565b601782019050919050565b600081519050919050565b60005b83811015611ac4578082015181840152602081019050611aa9565b60008484015250505050565b6000611adb82611a9b565b611ae58185611a44565b9350611af5818560208601611aa6565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611b37601183611a44565b9150611b4282611b01565b601182019050919050565b6000611b5882611a78565b9150611b648285611ad0565b9150611b6f82611b2a565b9150611b7b8284611ad0565b91508190509392505050565b6000601f19601f8301169050919050565b6000611ba382611a9b565b611bad81856117b4565b9350611bbd818560208601611aa6565b611bc681611b87565b840191505092915050565b60006020820190508181036000830152611beb8184611b98565b905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c3782611bf3565b9150611c4283611bf3565b9250828202611c5081611bf3565b91508282048414831517611c6757611c66611bfd565b5b5092915050565b6000611c7982611bf3565b9150611c8483611bf3565b9250828201905080821115611c9c57611c9b611bfd565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611d0b82611bf3565b915060008203611d1e57611d1d611bfd565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000611d5f6020836117b4565b9150611d6a82611d29565b602082019050919050565b60006020820190508181036000830152611d8e81611d52565b905091905056fea2646970667358221220272ef551600b48d46f70864d580d574b8b47aa87dea11ffc36357294290b4a6764736f6c634300081100330000000000000000000000000000000000000000000000000000000000000002

Deployed ByteCode

0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806375b238fc1161010f57806391d14854116100a2578063d547741f11610071578063d547741f14610560578063da19ddfb1461057c578063df3806931461059a578063f8ae93b4146105b8576101e5565b806391d14854146104d6578063977a807014610506578063a217fddf14610524578063ad1c8a8614610542576101e5565b80638c1536df116100de5780638c1536df1461044e5780638deb38931461046c5780638e8dfd16146104885780639072f838146104b8576101e5565b806375b238fc146103d65780637cadf69f146103f45780637d4a03bd1461041257806385cb119114610430576101e5565b80632f2ff15d1161018757806351ad0a801161015657806351ad0a8014610364578063704802751461038057806372823fa71461039c57806374bc8139146103ba576101e5565b80632f2ff15d146102de57806336568abe146102fa5780633ebf7985146103165780634216e73a14610346576101e5565b8063248a9ca3116101c3578063248a9ca3146102545780632668f305146102845780632c0b8bf7146102a25780632e4885e8146102c0576101e5565b806301ffc9a7146101ea57806316f76bbf1461021a5780631785f53c14610238575b600080fd5b61020460048036038101906101ff91906114ea565b6105d6565b6040516102119190611532565b60405180910390f35b610222610650565b60405161022f9190611566565b60405180910390f35b610252600480360381019061024d91906115df565b610674565b005b61026e60048036038101906102699190611638565b61073a565b60405161027b9190611566565b60405180910390f35b61028c610759565b6040516102999190611566565b60405180910390f35b6102aa61077d565b6040516102b79190611566565b60405180910390f35b6102c86107a1565b6040516102d59190611566565b60405180910390f35b6102f860048036038101906102f39190611665565b6107c5565b005b610314600480360381019061030f9190611665565b6107e6565b005b610330600480360381019061032b91906116ca565b610869565b60405161033d9190611719565b60405180910390f35b61034e6108ab565b60405161035b9190611566565b60405180910390f35b61037e60048036038101906103799190611734565b6108cf565b005b61039a600480360381019061039591906115df565b610a81565b005b6103a4610ad9565b6040516103b19190611566565b60405180910390f35b6103d460048036038101906103cf9190611787565b610afd565b005b6103de610be6565b6040516103eb9190611566565b60405180910390f35b6103fc610c0a565b6040516104099190611566565b60405180910390f35b61041a610c2e565b6040516104279190611566565b60405180910390f35b610438610c52565b6040516104459190611566565b60405180910390f35b610456610c76565b6040516104639190611566565b60405180910390f35b61048660048036038101906104819190611787565b610c9a565b005b6104a2600480360381019061049d91906116ca565b610d7b565b6040516104af9190611719565b60405180910390f35b6104c0610dee565b6040516104cd9190611566565b60405180910390f35b6104f060048036038101906104eb9190611665565b610e12565b6040516104fd9190611532565b60405180910390f35b61050e610e7c565b60405161051b9190611566565b60405180910390f35b61052c610ea0565b6040516105399190611566565b60405180910390f35b61054a610ea7565b6040516105579190611566565b60405180910390f35b61057a60048036038101906105759190611665565b610ecb565b005b610584610eec565b6040516105919190611566565b60405180910390f35b6105a2610f10565b6040516105af9190611566565b60405180910390f35b6105c0610f34565b6040516105cd9190611566565b60405180910390f35b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610649575061064882610f58565b5b9050919050565b7ff14f431dadc82e7dbc5e379f71234e5735c9187e4327a7c6ac014d55d1b7727a81565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4261069e81610fc2565b3373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361070c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161070390611837565b60405180910390fd5b6107367fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4283610fd6565b5050565b6000806000838152602001908152602001600020600101549050919050565b7fb1f79813bc7630a52ae948bc99781397e409d0dd3521953bf7d8d7a2db6147f781565b7fb7b4fde9944d3c13e9a78835431c33a5084d90a7f0c73def76d7886315fe87b081565b7fb931b2719aeb2a65a5035fa0a190bfdc4c8622ce8cbff7a3d1ab42531fb1a91881565b6107ce8261073a565b6107d781610fc2565b6107e183836110b7565b505050565b6107ee611197565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161461085b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610852906118c9565b60405180910390fd5b6108658282610fd6565b5050565b60026020528160005260406000206020528060005260406000206000915091509054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b7f4c41ae454beb6bbbe9be50accc957a3b1536e48b835a86919af981b5244db75581565b6108f97fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610e12565b61092f576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600115156001600084600281111561094a576109496118e9565b5b600281111561095c5761095b6118e9565b5b815260200190815260200160002060009054906101000a900460ff161515146109ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b19061198a565b60405180910390fd5b806002600085815260200190815260200160002060008460028111156109e3576109e26118e9565b5b60028111156109f5576109f46118e9565b5b815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f33f014890f109229bbcf8dd47204c153a2c0ff1c572a61de220d10336530f53d838383604051610a74939291906119f2565b60405180910390a1505050565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42610aab81610fc2565b610ad57fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec42836110b7565b5050565b7fc293b28944ab4199ad0f77d42d49e33b15d60cc12ed2a0b94a0db1d0b719f56181565b610b277fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610e12565b610b5d576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001806000836002811115610b7557610b746118e9565b5b6002811115610b8757610b866118e9565b5b815260200190815260200160002060006101000a81548160ff0219169083151502179055507f839ad2743d4062df579edf3818f642b71ee0688a35d6bc4438ef5314cece801581604051610bdb9190611a29565b60405180910390a150565b7fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4281565b7f74845de37cfabd357633214b47fa91ccd19b05b7c5a08ac22c187f811fb62bca81565b7f9f35ef3e0c2652a8bb8747d92f407fcd39a7768dacc7f16581c7a71f103e556281565b7fae79a935737012d066e7183032692e521ffe1ade2beda267e23e02b1d6e9118781565b7faa06d108dbd7bf976b16b7bf5adb29d2d0ef2c385ca8b9d833cc802f33942d7281565b610cc47fdf8b4c520ffe197c5343c6f5aec59570151ef9a492f2c624fd45ddde6135ec4233610e12565b610cfa576040517fc890f84a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016000826002811115610d1157610d106118e9565b5b6002811115610d2357610d226118e9565b5b815260200190815260200160002060006101000a81549060ff02191690557f3f178f17dae6caf8ca09c4857502baf7744e8597de42d6596476fe9e06b8ad4781604051610d709190611a29565b60405180910390a150565b6000600260008481526020019081526020016000206000836002811115610da557610da46118e9565b5b6002811115610db757610db66118e9565b5b815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905092915050565b7f54953c23068b8fc4c0736301b50f10027d6b469327de1fd42841a5072b1bcebe81565b600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b7f27d764ea2a4a3865434bbf4a391110149644be31448f3479fd15b4438875576581565b6000801b81565b7f3a68dbfd8bbb64015c42bc131c388dea7965e28c1004d09b39f59500c3a763ec81565b610ed48261073a565b610edd81610fc2565b610ee78383610fd6565b505050565b7f080909c18c958ce5a2d36481697824e477319323d03154ceba3b78f28a61887b81565b7fb4bf999b68d8085dbbf7a0ec2f5a2d660873935bdf1ed08eb421ac6dcbc0036281565b7fdd5b9b8a5e8e01f2962ed7e983d58fe32e1f66aa88dd7ab30770fa9b77da724381565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610fd381610fce611197565b61119f565b50565b610fe08282610e12565b156110b357600080600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611058611197565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6110c18282610e12565b61119357600160008084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611138611197565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b600033905090565b6111a98282610e12565b611220576111b681611224565b6111c48360001c6020611251565b6040516020016111d5929190611b4d565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112179190611bd1565b60405180910390fd5b5050565b606061124a8273ffffffffffffffffffffffffffffffffffffffff16601460ff16611251565b9050919050565b6060600060028360026112649190611c2c565b61126e9190611c6e565b67ffffffffffffffff81111561128757611286611ca2565b5b6040519080825280601f01601f1916602001820160405280156112b95781602001600182028036833780820191505090505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106112f1576112f0611cd1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061135557611354611cd1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600060018460026113959190611c2c565b61139f9190611c6e565b90505b600181111561143f577f3031323334353637383961626364656600000000000000000000000000000000600f8616601081106113e1576113e0611cd1565b5b1a60f81b8282815181106113f8576113f7611cd1565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508061143890611d00565b90506113a2565b5060008414611483576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147a90611d75565b60405180910390fd5b8091505092915050565b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6114c781611492565b81146114d257600080fd5b50565b6000813590506114e4816114be565b92915050565b600060208284031215611500576114ff61148d565b5b600061150e848285016114d5565b91505092915050565b60008115159050919050565b61152c81611517565b82525050565b60006020820190506115476000830184611523565b92915050565b6000819050919050565b6115608161154d565b82525050565b600060208201905061157b6000830184611557565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115ac82611581565b9050919050565b6115bc816115a1565b81146115c757600080fd5b50565b6000813590506115d9816115b3565b92915050565b6000602082840312156115f5576115f461148d565b5b6000611603848285016115ca565b91505092915050565b6116158161154d565b811461162057600080fd5b50565b6000813590506116328161160c565b92915050565b60006020828403121561164e5761164d61148d565b5b600061165c84828501611623565b91505092915050565b6000806040838503121561167c5761167b61148d565b5b600061168a85828601611623565b925050602061169b858286016115ca565b9150509250929050565b600381106116b257600080fd5b50565b6000813590506116c4816116a5565b92915050565b600080604083850312156116e1576116e061148d565b5b60006116ef85828601611623565b9250506020611700858286016116b5565b9150509250929050565b611713816115a1565b82525050565b600060208201905061172e600083018461170a565b92915050565b60008060006060848603121561174d5761174c61148d565b5b600061175b86828701611623565b935050602061176c868287016116b5565b925050604061177d868287016115ca565b9150509250925092565b60006020828403121561179d5761179c61148d565b5b60006117ab848285016116b5565b91505092915050565b600082825260208201905092915050565b7f43616e6e6f742072656d6f76652073656c662061732061646d696e2e2020486160008201527f766520746865206e65772061646d696e20646f2069742e000000000000000000602082015250565b60006118216037836117b4565b915061182c826117c5565b604082019050919050565b6000602082019050818103600083015261185081611814565b9050919050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b60006118b3602f836117b4565b91506118be82611857565b604082019050919050565b600060208201905081810360008301526118e2816118a6565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f5468652070726f766964656420456e76206973206e6f742076616c696420666f60008201527f72207468697320636f6e74726163740000000000000000000000000000000000602082015250565b6000611974602f836117b4565b915061197f82611918565b604082019050919050565b600060208201905081810360008301526119a381611967565b9050919050565b600381106119bb576119ba6118e9565b5b50565b60008190506119cc826119aa565b919050565b60006119dc826119be565b9050919050565b6119ec816119d1565b82525050565b6000606082019050611a076000830186611557565b611a1460208301856119e3565b611a21604083018461170a565b949350505050565b6000602082019050611a3e60008301846119e3565b92915050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000611a85601783611a44565b9150611a9082611a4f565b601782019050919050565b600081519050919050565b60005b83811015611ac4578082015181840152602081019050611aa9565b60008484015250505050565b6000611adb82611a9b565b611ae58185611a44565b9350611af5818560208601611aa6565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000611b37601183611a44565b9150611b4282611b01565b601182019050919050565b6000611b5882611a78565b9150611b648285611ad0565b9150611b6f82611b2a565b9150611b7b8284611ad0565b91508190509392505050565b6000601f19601f8301169050919050565b6000611ba382611a9b565b611bad81856117b4565b9350611bbd818560208601611aa6565b611bc681611b87565b840191505092915050565b60006020820190508181036000830152611beb8184611b98565b905092915050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c3782611bf3565b9150611c4283611bf3565b9250828202611c5081611bf3565b91508282048414831517611c6757611c66611bfd565b5b5092915050565b6000611c7982611bf3565b9150611c8483611bf3565b9250828201905080821115611c9c57611c9b611bfd565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000611d0b82611bf3565b915060008203611d1e57611d1d611bfd565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000611d5f6020836117b4565b9150611d6a82611d29565b602082019050919050565b60006020820190508181036000830152611d8e81611d52565b905091905056fea2646970667358221220272ef551600b48d46f70864d580d574b8b47aa87dea11ffc36357294290b4a6764736f6c63430008110033