Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save fabiconcept/2982e510f2f8301bb6398586d68c273e to your computer and use it in GitHub Desktop.
Save fabiconcept/2982e510f2f8301bb6398586d68c273e to your computer and use it in GitHub Desktop.
Created using remix-ide: Realtime Ethereum Contract Compiler and Runtime. Load this file by pasting this gists URL or ID at https://remix.ethereum.org/#version=soljson-v0.8.17+commit.8df45f5f.js&optimize=false&runs=200&gist=
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)
pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol";
/**
* @dev Contract module that allows children to implement role-based access
* control mechanisms. This is a lightweight version that doesn't allow enumerating role
* members except through off-chain means by accessing the contract event logs. Some
* applications may benefit from on-chain enumerability, for those cases see
* {AccessControlEnumerable}.
*
* Roles are referred to by their `bytes32` identifier. These should be exposed
* in the external API and be unique. The best way to achieve this is by
* using `public constant` hash digests:
*
* ```
* bytes32 public constant MY_ROLE = keccak256("MY_ROLE");
* ```
*
* Roles can be used to represent a set of permissions. To restrict access to a
* function call, use {hasRole}:
*
* ```
* function foo() public {
* require(hasRole(MY_ROLE, msg.sender));
* ...
* }
* ```
*
* Roles can be granted and revoked dynamically via the {grantRole} and
* {revokeRole} functions. Each role has an associated admin role, and only
* accounts that have a role's admin role can call {grantRole} and {revokeRole}.
*
* By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means
* that only accounts with this role will be able to grant or revoke other
* roles. More complex role relationships can be created by using
* {_setRoleAdmin}.
*
* WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to
* grant and revoke this role. Extra precautions should be taken to secure
* accounts that have been granted it.
*/
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address => bool) members;
bytes32 adminRole;
}
mapping(bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
/**
* @dev Modifier that checks that an account has a specific role. Reverts
* with a standardized message including the required role.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*
* _Available since v4.1._
*/
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
/**
* @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 override returns (bool) {
return _roles[role].members[account];
}
/**
* @dev Revert with a standard message if `_msgSender()` is missing `role`.
* Overriding this function changes the behavior of the {onlyRole} modifier.
*
* Format of the revert message is described in {_checkRole}.
*
* _Available since v4.6._
*/
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
/**
* @dev Revert with a standard message if `account` is missing `role`.
*
* The format of the revert reason is given by the following regular expression:
*
* /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/
*/
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert(
string(
abi.encodePacked(
"AccessControl: account ",
Strings.toHexString(account),
" is missing role ",
Strings.toHexString(uint256(role), 32)
)
)
);
}
}
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
return _roles[role].adminRole;
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleGranted} event.
*/
function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*
* May emit a {RoleRevoked} event.
*/
function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been revoked `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*
* May emit a {RoleRevoked} event.
*/
function renounceRole(bytes32 role, address account) public virtual override {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event. Note that unlike {grantRole}, this function doesn't perform any
* checks on the calling account.
*
* May emit a {RoleGranted} event.
*
* [WARNING]
* ====
* This function should only be called from the constructor when setting
* up the initial roles for the system.
*
* Using this function in any other way is effectively circumventing the admin
* system imposed by {AccessControl}.
* ====
*
* NOTE: This function is deprecated in favor of {_grantRole}.
*/
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
/**
* @dev Sets `adminRole` as ``role``'s admin role.
*
* Emits a {RoleAdminChanged} event.
*/
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
/**
* @dev Grants `role` to `account`.
*
* Internal function without access restriction.
*
* May emit a {RoleGranted} event.
*/
function _grantRole(bytes32 role, address account) internal virtual {
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
/**
* @dev Revokes `role` from `account`.
*
* Internal function without access restriction.
*
* May emit a {RoleRevoked} event.
*/
function _revokeRole(bytes32 role, address account) internal virtual {
if (hasRole(role, account)) {
_roles[role].members[account] = false;
emit RoleRevoked(role, account, _msgSender());
}
}
}
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"methodIdentifiers": {
"DEFAULT_ADMIN_ROLE()": "a217fddf",
"getRoleAdmin(bytes32)": "248a9ca3",
"grantRole(bytes32,address)": "2f2ff15d",
"hasRole(bytes32,address)": "91d14854",
"renounceRole(bytes32,address)": "36568abe",
"revokeRole(bytes32,address)": "d547741f",
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
]
}
{
"compiler": {
"version": "0.8.17+commit.8df45f5f"
},
"language": "Solidity",
"output": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ``` bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ``` function foo() public { require(hasRole(MY_ROLE, msg.sender)); ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it.",
"kind": "dev",
"methods": {
"getRoleAdmin(bytes32)": {
"details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
},
"grantRole(bytes32,address)": {
"details": "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."
},
"hasRole(bytes32,address)": {
"details": "Returns `true` if `account` has been granted `role`."
},
"renounceRole(bytes32,address)": {
"details": "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 `account`. May emit a {RoleRevoked} event."
},
"revokeRole(bytes32,address)": {
"details": "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."
},
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
},
"settings": {
"compilationTarget": {
".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol": "AccessControl"
},
"evmVersion": "london",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
},
"sources": {
".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol": {
"keccak256": "0xc6aeb9f1673d5380dc76e9ce85962ccf3a05fac9a1f10d2a51d3c3814e12e9a2",
"license": "MIT",
"urls": [
"bzz-raw://566492414470a188702c2ad47f57b58855638da935261700bd2f0c2320498940",
"dweb:/ipfs/QmQUKa1MyCz7149VJUW66xBJyj9omdp79QugKFi2U92W47"
]
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol": {
"keccak256": "0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57",
"license": "MIT",
"urls": [
"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a",
"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh"
]
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol": {
"keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7",
"license": "MIT",
"urls": [
"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92",
"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3"
]
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol": {
"keccak256": "0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a",
"license": "MIT",
"urls": [
"bzz-raw://8c969013129ba9e651a20735ef659fef6d8a1139ea3607bd4b26ddea2d645634",
"dweb:/ipfs/QmVhVa6LGuzAcB8qgDtVHRkucn4ihj5UZr8xBLcJkP6ucb"
]
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol": {
"keccak256": "0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b",
"license": "MIT",
"urls": [
"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d",
"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43"
]
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol": {
"keccak256": "0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1",
"license": "MIT",
"urls": [
"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f",
"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy"
]
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol": {
"keccak256": "0xba1ae0497d71bf30f3710c38aba13a5b68c31d81ff04dd73e5dd55a05a9c903d",
"license": "MIT",
"urls": [
"bzz-raw://d77f4aee3f6534fe2dbc6583385fc123340f8ccb9bf3c8c04555e538a3d9a4b5",
"dweb:/ipfs/QmVtP4Fz9tB2DFvMHJaSFbLxnEHE1NKDA92fviV7jDkEnL"
]
}
},
"version": 1
}
{
"id": "c9b05aa2d921dcd97dade753fc02457e",
"_format": "hh-sol-build-info-1",
"solcVersion": "0.8.17",
"solcLongVersion": "0.8.17+commit.8df45f5f",
"input": {
"language": "Solidity",
"sources": {
".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (access/AccessControl.sol)\n\npragma solidity ^0.8.0;\n\nimport \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol\";\nimport \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol\";\nimport \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol\";\nimport \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol\";\n\n/**\n * @dev Contract module that allows children to implement role-based access\n * control mechanisms. This is a lightweight version that doesn't allow enumerating role\n * members except through off-chain means by accessing the contract event logs. Some\n * applications may benefit from on-chain enumerability, for those cases see\n * {AccessControlEnumerable}.\n *\n * Roles are referred to by their `bytes32` identifier. These should be exposed\n * in the external API and be unique. The best way to achieve this is by\n * using `public constant` hash digests:\n *\n * ```\n * bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n * ```\n *\n * Roles can be used to represent a set of permissions. To restrict access to a\n * function call, use {hasRole}:\n *\n * ```\n * function foo() public {\n * require(hasRole(MY_ROLE, msg.sender));\n * ...\n * }\n * ```\n *\n * Roles can be granted and revoked dynamically via the {grantRole} and\n * {revokeRole} functions. Each role has an associated admin role, and only\n * accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n *\n * By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n * that only accounts with this role will be able to grant or revoke other\n * roles. More complex role relationships can be created by using\n * {_setRoleAdmin}.\n *\n * WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n * grant and revoke this role. Extra precautions should be taken to secure\n * accounts that have been granted it.\n */\nabstract contract AccessControl is Context, IAccessControl, ERC165 {\n struct RoleData {\n mapping(address => bool) members;\n bytes32 adminRole;\n }\n\n mapping(bytes32 => RoleData) private _roles;\n\n bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;\n\n /**\n * @dev Modifier that checks that an account has a specific role. Reverts\n * with a standardized message including the required role.\n *\n * The format of the revert reason is given by the following regular expression:\n *\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n *\n * _Available since v4.1._\n */\n modifier onlyRole(bytes32 role) {\n _checkRole(role);\n _;\n }\n\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);\n }\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) public view virtual override returns (bool) {\n return _roles[role].members[account];\n }\n\n /**\n * @dev Revert with a standard message if `_msgSender()` is missing `role`.\n * Overriding this function changes the behavior of the {onlyRole} modifier.\n *\n * Format of the revert message is described in {_checkRole}.\n *\n * _Available since v4.6._\n */\n function _checkRole(bytes32 role) internal view virtual {\n _checkRole(role, _msgSender());\n }\n\n /**\n * @dev Revert with a standard message if `account` is missing `role`.\n *\n * The format of the revert reason is given by the following regular expression:\n *\n * /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n */\n function _checkRole(bytes32 role, address account) internal view virtual {\n if (!hasRole(role, account)) {\n revert(\n string(\n abi.encodePacked(\n \"AccessControl: account \",\n Strings.toHexString(account),\n \" is missing role \",\n Strings.toHexString(uint256(role), 32)\n )\n )\n );\n }\n }\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {\n return _roles[role].adminRole;\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n *\n * May emit a {RoleGranted} event.\n */\n function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\n _grantRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n *\n * May emit a {RoleRevoked} event.\n */\n function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {\n _revokeRole(role, account);\n }\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been revoked `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n *\n * May emit a {RoleRevoked} event.\n */\n function renounceRole(bytes32 role, address account) public virtual override {\n require(account == _msgSender(), \"AccessControl: can only renounce roles for self\");\n\n _revokeRole(role, account);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event. Note that unlike {grantRole}, this function doesn't perform any\n * checks on the calling account.\n *\n * May emit a {RoleGranted} event.\n *\n * [WARNING]\n * ====\n * This function should only be called from the constructor when setting\n * up the initial roles for the system.\n *\n * Using this function in any other way is effectively circumventing the admin\n * system imposed by {AccessControl}.\n * ====\n *\n * NOTE: This function is deprecated in favor of {_grantRole}.\n */\n function _setupRole(bytes32 role, address account) internal virtual {\n _grantRole(role, account);\n }\n\n /**\n * @dev Sets `adminRole` as ``role``'s admin role.\n *\n * Emits a {RoleAdminChanged} event.\n */\n function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {\n bytes32 previousAdminRole = getRoleAdmin(role);\n _roles[role].adminRole = adminRole;\n emit RoleAdminChanged(role, previousAdminRole, adminRole);\n }\n\n /**\n * @dev Grants `role` to `account`.\n *\n * Internal function without access restriction.\n *\n * May emit a {RoleGranted} event.\n */\n function _grantRole(bytes32 role, address account) internal virtual {\n if (!hasRole(role, account)) {\n _roles[role].members[account] = true;\n emit RoleGranted(role, account, _msgSender());\n }\n }\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * Internal function without access restriction.\n *\n * May emit a {RoleRevoked} event.\n */\n function _revokeRole(bytes32 role, address account) internal virtual {\n if (hasRole(role, account)) {\n _roles[role].members[account] = false;\n emit RoleRevoked(role, account, _msgSender());\n }\n }\n}\n"
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IERC165.sol\";\n\n/**\n * @dev Implementation of the {IERC165} interface.\n *\n * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n * for the additional interface id that will be supported. For example:\n *\n * ```solidity\n * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n * }\n * ```\n *\n * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.\n */\nabstract contract ERC165 is IERC165 {\n /**\n * @dev See {IERC165-supportsInterface}.\n */\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(IERC165).interfaceId;\n }\n}\n"
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./math/Math.sol\";\n\n/**\n * @dev String operations.\n */\nlibrary Strings {\n bytes16 private constant _SYMBOLS = \"0123456789abcdef\";\n uint8 private constant _ADDRESS_LENGTH = 20;\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` decimal representation.\n */\n function toString(uint256 value) internal pure returns (string memory) {\n unchecked {\n uint256 length = Math.log10(value) + 1;\n string memory buffer = new string(length);\n uint256 ptr;\n /// @solidity memory-safe-assembly\n assembly {\n ptr := add(buffer, add(32, length))\n }\n while (true) {\n ptr--;\n /// @solidity memory-safe-assembly\n assembly {\n mstore8(ptr, byte(mod(value, 10), _SYMBOLS))\n }\n value /= 10;\n if (value == 0) break;\n }\n return buffer;\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.\n */\n function toHexString(uint256 value) internal pure returns (string memory) {\n unchecked {\n return toHexString(value, Math.log256(value) + 1);\n }\n }\n\n /**\n * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.\n */\n function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {\n bytes memory buffer = new bytes(2 * length + 2);\n buffer[0] = \"0\";\n buffer[1] = \"x\";\n for (uint256 i = 2 * length + 1; i > 1; --i) {\n buffer[i] = _SYMBOLS[value & 0xf];\n value >>= 4;\n }\n require(value == 0, \"Strings: hex length insufficient\");\n return string(buffer);\n }\n\n /**\n * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation.\n */\n function toHexString(address addr) internal pure returns (string memory) {\n return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);\n }\n}\n"
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n"
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/IAccessControl.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev External interface of AccessControl declared to support ERC165 detection.\n */\ninterface IAccessControl {\n /**\n * @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n *\n * `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n * {RoleAdminChanged} not being emitted signaling this.\n *\n * _Available since v3.1._\n */\n event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);\n\n /**\n * @dev Emitted when `account` is granted `role`.\n *\n * `sender` is the account that originated the contract call, an admin role\n * bearer except when using {AccessControl-_setupRole}.\n */\n event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Emitted when `account` is revoked `role`.\n *\n * `sender` is the account that originated the contract call:\n * - if using `revokeRole`, it is the admin role bearer\n * - if using `renounceRole`, it is the role bearer (i.e. `account`)\n */\n event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);\n\n /**\n * @dev Returns `true` if `account` has been granted `role`.\n */\n function hasRole(bytes32 role, address account) external view returns (bool);\n\n /**\n * @dev Returns the admin role that controls `role`. See {grantRole} and\n * {revokeRole}.\n *\n * To change a role's admin, use {AccessControl-_setRoleAdmin}.\n */\n function getRoleAdmin(bytes32 role) external view returns (bytes32);\n\n /**\n * @dev Grants `role` to `account`.\n *\n * If `account` had not been already granted `role`, emits a {RoleGranted}\n * event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function grantRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from `account`.\n *\n * If `account` had been granted `role`, emits a {RoleRevoked} event.\n *\n * Requirements:\n *\n * - the caller must have ``role``'s admin role.\n */\n function revokeRole(bytes32 role, address account) external;\n\n /**\n * @dev Revokes `role` from the calling account.\n *\n * Roles are often managed via {grantRole} and {revokeRole}: this function's\n * purpose is to provide a mechanism for accounts to lose their privileges\n * if they are compromised (such as when a trusted device is misplaced).\n *\n * If the calling account had been granted `role`, emits a {RoleRevoked}\n * event.\n *\n * Requirements:\n *\n * - the caller must be `account`.\n */\n function renounceRole(bytes32 role, address account) external;\n}\n"
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC165 standard, as defined in the\n * https://eips.ethereum.org/EIPS/eip-165[EIP].\n *\n * Implementers can declare support of contract interfaces, which can then be\n * queried by others ({ERC165Checker}).\n *\n * For an implementation, see {ERC165}.\n */\ninterface IERC165 {\n /**\n * @dev Returns true if this contract implements the interface defined by\n * `interfaceId`. See the corresponding\n * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n * to learn more about how these ids are created.\n *\n * This function call must use less than 30 000 gas.\n */\n function supportsInterface(bytes4 interfaceId) external view returns (bool);\n}\n"
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol": {
"content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n enum Rounding {\n Down, // Toward negative infinity\n Up, // Toward infinity\n Zero // Toward zero\n }\n\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a > b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a == 0 ? 0 : (a - 1) / b + 1;\n }\n\n /**\n * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n * with further edits by Uniswap Labs also under MIT license.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator\n ) internal pure returns (uint256 result) {\n unchecked {\n // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use\n // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256\n // variables such that product = prod1 * 2^256 + prod0.\n uint256 prod0; // Least significant 256 bits of the product\n uint256 prod1; // Most significant 256 bits of the product\n assembly {\n let mm := mulmod(x, y, not(0))\n prod0 := mul(x, y)\n prod1 := sub(sub(mm, prod0), lt(mm, prod0))\n }\n\n // Handle non-overflow cases, 256 by 256 division.\n if (prod1 == 0) {\n return prod0 / denominator;\n }\n\n // Make sure the result is less than 2^256. Also prevents denominator == 0.\n require(denominator > prod1, \"Math: mulDiv overflow\");\n\n ///////////////////////////////////////////////\n // 512 by 256 division.\n ///////////////////////////////////////////////\n\n // Make division exact by subtracting the remainder from [prod1 prod0].\n uint256 remainder;\n assembly {\n // Compute remainder using mulmod.\n remainder := mulmod(x, y, denominator)\n\n // Subtract 256 bit number from 512 bit number.\n prod1 := sub(prod1, gt(remainder, prod0))\n prod0 := sub(prod0, remainder)\n }\n\n // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1.\n // See https://cs.stackexchange.com/q/138556/92363.\n\n // Does not overflow because the denominator cannot be zero at this stage in the function.\n uint256 twos = denominator & (~denominator + 1);\n assembly {\n // Divide denominator by twos.\n denominator := div(denominator, twos)\n\n // Divide [prod1 prod0] by twos.\n prod0 := div(prod0, twos)\n\n // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.\n twos := add(div(sub(0, twos), twos), 1)\n }\n\n // Shift in bits from prod1 into prod0.\n prod0 |= prod1 * twos;\n\n // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such\n // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for\n // four bits. That is, denominator * inv = 1 mod 2^4.\n uint256 inverse = (3 * denominator) ^ 2;\n\n // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works\n // in modular arithmetic, doubling the correct bits in each step.\n inverse *= 2 - denominator * inverse; // inverse mod 2^8\n inverse *= 2 - denominator * inverse; // inverse mod 2^16\n inverse *= 2 - denominator * inverse; // inverse mod 2^32\n inverse *= 2 - denominator * inverse; // inverse mod 2^64\n inverse *= 2 - denominator * inverse; // inverse mod 2^128\n inverse *= 2 - denominator * inverse; // inverse mod 2^256\n\n // Because the division is now exact we can divide by multiplying with the modular inverse of denominator.\n // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is\n // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1\n // is no longer required.\n result = prod0 * inverse;\n return result;\n }\n }\n\n /**\n * @notice Calculates x * y / denominator with full precision, following the selected rounding direction.\n */\n function mulDiv(\n uint256 x,\n uint256 y,\n uint256 denominator,\n Rounding rounding\n ) internal pure returns (uint256) {\n uint256 result = mulDiv(x, y, denominator);\n if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {\n result += 1;\n }\n return result;\n }\n\n /**\n * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n *\n * Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11).\n */\n function sqrt(uint256 a) internal pure returns (uint256) {\n if (a == 0) {\n return 0;\n }\n\n // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target.\n //\n // We know that the \"msb\" (most significant bit) of our target number `a` is a power of 2 such that we have\n // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`.\n //\n // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)`\n // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\n // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)`\n //\n // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit.\n uint256 result = 1 << (log2(a) >> 1);\n\n // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128,\n // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at\n // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision\n // into the expected uint128 result.\n unchecked {\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n result = (result + a / result) >> 1;\n return min(result, a / result);\n }\n }\n\n /**\n * @notice Calculates sqrt(a), following the selected rounding direction.\n */\n function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = sqrt(a);\n return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 2, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 128;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 64;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 32;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 16;\n }\n if (value >> 8 > 0) {\n value >>= 8;\n result += 8;\n }\n if (value >> 4 > 0) {\n value >>= 4;\n result += 4;\n }\n if (value >> 2 > 0) {\n value >>= 2;\n result += 2;\n }\n if (value >> 1 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log2(value);\n return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 10, rounded down, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >= 10**64) {\n value /= 10**64;\n result += 64;\n }\n if (value >= 10**32) {\n value /= 10**32;\n result += 32;\n }\n if (value >= 10**16) {\n value /= 10**16;\n result += 16;\n }\n if (value >= 10**8) {\n value /= 10**8;\n result += 8;\n }\n if (value >= 10**4) {\n value /= 10**4;\n result += 4;\n }\n if (value >= 10**2) {\n value /= 10**2;\n result += 2;\n }\n if (value >= 10**1) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log10(value);\n return result + (rounding == Rounding.Up && 10**result < value ? 1 : 0);\n }\n }\n\n /**\n * @dev Return the log in base 256, rounded down, of a positive value.\n * Returns 0 if given 0.\n *\n * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string.\n */\n function log256(uint256 value) internal pure returns (uint256) {\n uint256 result = 0;\n unchecked {\n if (value >> 128 > 0) {\n value >>= 128;\n result += 16;\n }\n if (value >> 64 > 0) {\n value >>= 64;\n result += 8;\n }\n if (value >> 32 > 0) {\n value >>= 32;\n result += 4;\n }\n if (value >> 16 > 0) {\n value >>= 16;\n result += 2;\n }\n if (value >> 8 > 0) {\n result += 1;\n }\n }\n return result;\n }\n\n /**\n * @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n * Returns 0 if given 0.\n */\n function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {\n unchecked {\n uint256 result = log256(value);\n return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);\n }\n }\n}\n"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"": [
"ast"
],
"*": [
"abi",
"metadata",
"devdoc",
"userdoc",
"storageLayout",
"evm.legacyAssembly",
"evm.bytecode",
"evm.deployedBytecode",
"evm.methodIdentifiers",
"evm.gasEstimates",
"evm.assembly"
]
}
}
}
},
"output": {
"contracts": {
".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol": {
"AccessControl": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ``` bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ``` function foo() public { require(hasRole(MY_ROLE, msg.sender)); ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it.",
"kind": "dev",
"methods": {
"getRoleAdmin(bytes32)": {
"details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
},
"grantRole(bytes32,address)": {
"details": "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."
},
"hasRole(bytes32,address)": {
"details": "Returns `true` if `account` has been granted `role`."
},
"renounceRole(bytes32,address)": {
"details": "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 `account`. May emit a {RoleRevoked} event."
},
"revokeRole(bytes32,address)": {
"details": "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."
},
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"DEFAULT_ADMIN_ROLE()": "a217fddf",
"getRoleAdmin(bytes32)": "248a9ca3",
"grantRole(bytes32,address)": "2f2ff15d",
"hasRole(bytes32,address)": "91d14854",
"renounceRole(bytes32,address)": "36568abe",
"revokeRole(bytes32,address)": "d547741f",
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module that allows children to implement role-based access control mechanisms. This is a lightweight version that doesn't allow enumerating role members except through off-chain means by accessing the contract event logs. Some applications may benefit from on-chain enumerability, for those cases see {AccessControlEnumerable}. Roles are referred to by their `bytes32` identifier. These should be exposed in the external API and be unique. The best way to achieve this is by using `public constant` hash digests: ``` bytes32 public constant MY_ROLE = keccak256(\\\"MY_ROLE\\\"); ``` Roles can be used to represent a set of permissions. To restrict access to a function call, use {hasRole}: ``` function foo() public { require(hasRole(MY_ROLE, msg.sender)); ... } ``` Roles can be granted and revoked dynamically via the {grantRole} and {revokeRole} functions. Each role has an associated admin role, and only accounts that have a role's admin role can call {grantRole} and {revokeRole}. By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means that only accounts with this role will be able to grant or revoke other roles. More complex role relationships can be created by using {_setRoleAdmin}. WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to grant and revoke this role. Extra precautions should be taken to secure accounts that have been granted it.\",\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"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 `account`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"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.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol\":\"AccessControl\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xc6aeb9f1673d5380dc76e9ce85962ccf3a05fac9a1f10d2a51d3c3814e12e9a2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://566492414470a188702c2ad47f57b58855638da935261700bd2f0c2320498940\",\"dweb:/ipfs/QmQUKa1MyCz7149VJUW66xBJyj9omdp79QugKFi2U92W47\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol\":{\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c969013129ba9e651a20735ef659fef6d8a1139ea3607bd4b26ddea2d645634\",\"dweb:/ipfs/QmVhVa6LGuzAcB8qgDtVHRkucn4ihj5UZr8xBLcJkP6ucb\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xba1ae0497d71bf30f3710c38aba13a5b68c31d81ff04dd73e5dd55a05a9c903d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d77f4aee3f6534fe2dbc6583385fc123340f8ccb9bf3c8c04555e538a3d9a4b5\",\"dweb:/ipfs/QmVtP4Fz9tB2DFvMHJaSFbLxnEHE1NKDA92fviV7jDkEnL\"]}},\"version\":1}",
"storageLayout": {
"storage": [
{
"astId": 24,
"contract": ".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol:AccessControl",
"label": "_roles",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_bytes32,t_struct(RoleData)19_storage)"
}
],
"types": {
"t_address": {
"encoding": "inplace",
"label": "address",
"numberOfBytes": "20"
},
"t_bool": {
"encoding": "inplace",
"label": "bool",
"numberOfBytes": "1"
},
"t_bytes32": {
"encoding": "inplace",
"label": "bytes32",
"numberOfBytes": "32"
},
"t_mapping(t_address,t_bool)": {
"encoding": "mapping",
"key": "t_address",
"label": "mapping(address => bool)",
"numberOfBytes": "32",
"value": "t_bool"
},
"t_mapping(t_bytes32,t_struct(RoleData)19_storage)": {
"encoding": "mapping",
"key": "t_bytes32",
"label": "mapping(bytes32 => struct AccessControl.RoleData)",
"numberOfBytes": "32",
"value": "t_struct(RoleData)19_storage"
},
"t_struct(RoleData)19_storage": {
"encoding": "inplace",
"label": "struct AccessControl.RoleData",
"members": [
{
"astId": 16,
"contract": ".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol:AccessControl",
"label": "members",
"offset": 0,
"slot": "0",
"type": "t_mapping(t_address,t_bool)"
},
{
"astId": 18,
"contract": ".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol:AccessControl",
"label": "adminRole",
"offset": 0,
"slot": "1",
"type": "t_bytes32"
}
],
"numberOfBytes": "64"
}
}
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol": {
"IAccessControl": {
"abi": [
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"devdoc": {
"details": "External interface of AccessControl declared to support ERC165 detection.",
"events": {
"RoleAdminChanged(bytes32,bytes32,bytes32)": {
"details": "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._"
},
"RoleGranted(bytes32,address,address)": {
"details": "Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}."
},
"RoleRevoked(bytes32,address,address)": {
"details": "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`)"
}
},
"kind": "dev",
"methods": {
"getRoleAdmin(bytes32)": {
"details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}."
},
"grantRole(bytes32,address)": {
"details": "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."
},
"hasRole(bytes32,address)": {
"details": "Returns `true` if `account` has been granted `role`."
},
"renounceRole(bytes32,address)": {
"details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`."
},
"revokeRole(bytes32,address)": {
"details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"getRoleAdmin(bytes32)": "248a9ca3",
"grantRole(bytes32,address)": "2f2ff15d",
"hasRole(bytes32,address)": "91d14854",
"renounceRole(bytes32,address)": "36568abe",
"revokeRole(bytes32,address)": "d547741f"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"External interface of AccessControl declared to support ERC165 detection.\",\"events\":{\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"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._\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"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`)\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {AccessControl-_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"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.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `account`.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://bb2c137c343ef0c4c7ce7b18c1d108afdc9d315a04e48307288d2d05adcbde3a\",\"dweb:/ipfs/QmUxhrAQM3MM3FF5j7AtcXLXguWCJBHJ14BRdVtuoQc8Fh\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol": {
"Context": {
"abi": [],
"devdoc": {
"details": "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.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"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.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol": {
"Strings": {
"abi": [],
"devdoc": {
"details": "String operations.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol\":188:2253 library Strings {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol\":188:2253 library Strings {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa26469706673582212206d227f80733c39c10e51052619b17c75804f4542685928226f9dd473612d96a364736f6c63430008110033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206d227f80733c39c10e51052619b17c75804f4542685928226f9dd473612d96a364736f6c63430008110033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH14 0x227F80733C39C10E51052619B17C PUSH22 0x804F4542685928226F9DD473612D96A364736F6C6343 STOP ADDMOD GT STOP CALLER ",
"sourceMap": "188:2065:3:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206d227f80733c39c10e51052619b17c75804f4542685928226f9dd473612d96a364736f6c63430008110033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH14 0x227F80733C39C10E51052619B17C PUSH22 0x804F4542685928226F9DD473612D96A364736F6C6343 STOP ADDMOD GT STOP CALLER ",
"sourceMap": "188:2065:3:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"toHexString(address)": "infinite",
"toHexString(uint256)": "infinite",
"toHexString(uint256,uint256)": "infinite",
"toString(uint256)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 188,
"end": 2253,
"name": "PUSH #[$]",
"source": 3,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 188,
"end": 2253,
"name": "PUSH [$]",
"source": 3,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "B"
},
{
"begin": 188,
"end": 2253,
"name": "DUP3",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "DUP3",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "DUP3",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "CODECOPY",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "DUP1",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "MLOAD",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 188,
"end": 2253,
"name": "BYTE",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "73"
},
{
"begin": 188,
"end": 2253,
"name": "EQ",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH [tag]",
"source": 3,
"value": "1"
},
{
"begin": 188,
"end": 2253,
"name": "JUMPI",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 188,
"end": 2253,
"name": "MSTORE",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "4"
},
{
"begin": 188,
"end": 2253,
"name": "MSTORE",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "24"
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 188,
"end": 2253,
"name": "REVERT",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "tag",
"source": 3,
"value": "1"
},
{
"begin": 188,
"end": 2253,
"name": "JUMPDEST",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "ADDRESS",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 188,
"end": 2253,
"name": "MSTORE",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "73"
},
{
"begin": 188,
"end": 2253,
"name": "DUP2",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "MSTORE8",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "DUP3",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "DUP2",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "RETURN",
"source": 3
}
],
".data": {
"0": {
".auxdata": "a26469706673582212206d227f80733c39c10e51052619b17c75804f4542685928226f9dd473612d96a364736f6c63430008110033",
".code": [
{
"begin": 188,
"end": 2253,
"name": "PUSHDEPLOYADDRESS",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "ADDRESS",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "EQ",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "80"
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "40"
},
{
"begin": 188,
"end": 2253,
"name": "MSTORE",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "PUSH",
"source": 3,
"value": "0"
},
{
"begin": 188,
"end": 2253,
"name": "DUP1",
"source": 3
},
{
"begin": 188,
"end": 2253,
"name": "REVERT",
"source": 3
}
]
}
},
"sourceList": [
".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol",
"#utility.yul"
]
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol\":{\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8c969013129ba9e651a20735ef659fef6d8a1139ea3607bd4b26ddea2d645634\",\"dweb:/ipfs/QmVhVa6LGuzAcB8qgDtVHRkucn4ihj5UZr8xBLcJkP6ucb\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xba1ae0497d71bf30f3710c38aba13a5b68c31d81ff04dd73e5dd55a05a9c903d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d77f4aee3f6534fe2dbc6583385fc123340f8ccb9bf3c8c04555e538a3d9a4b5\",\"dweb:/ipfs/QmVtP4Fz9tB2DFvMHJaSFbLxnEHE1NKDA92fviV7jDkEnL\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol": {
"ERC165": {
"abi": [
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "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.",
"kind": "dev",
"methods": {
"supportsInterface(bytes4)": {
"details": "See {IERC165-supportsInterface}."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fb0048dee081f6fffa5f74afc3fb328483c2a30504e94a0ddd2a5114d731ec4d\",\"dweb:/ipfs/QmZptt1nmYoA5SgjwnSgWqgUSDgm4q52Yos3xhnMv3MV43\"]},\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol": {
"IERC165": {
"abi": [
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
}
],
"devdoc": {
"details": "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}.",
"kind": "dev",
"methods": {
"supportsInterface(bytes4)": {
"details": "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."
}
},
"version": 1
},
"evm": {
"assembly": "",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "",
"opcodes": "",
"sourceMap": ""
},
"gasEstimates": null,
"legacyAssembly": null,
"methodIdentifiers": {
"supportsInterface(bytes4)": "01ffc9a7"
}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"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}.\",\"kind\":\"dev\",\"methods\":{\"supportsInterface(bytes4)\":{\"details\":\"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.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be161e54f24e5c6fae81a12db1a8ae87bc5ae1b0ddc805d82a1440a68455088f\",\"dweb:/ipfs/QmP7C3CHdY9urF4dEMb9wmsp1wMxHF6nhA2yQE5SKiPAdy\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol": {
"Math": {
"abi": [],
"devdoc": {
"details": "Standard math utilities missing in the Solidity language.",
"kind": "dev",
"methods": {},
"version": 1
},
"evm": {
"assembly": " /* \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol\":202:12530 library Math {... */\n dataSize(sub_0)\n dataOffset(sub_0)\n 0x0b\n dup3\n dup3\n dup3\n codecopy\n dup1\n mload\n 0x00\n byte\n 0x73\n eq\n tag_1\n jumpi\n mstore(0x00, 0x4e487b7100000000000000000000000000000000000000000000000000000000)\n mstore(0x04, 0x00)\n revert(0x00, 0x24)\ntag_1:\n mstore(0x00, address)\n 0x73\n dup2\n mstore8\n dup3\n dup2\n return\nstop\n\nsub_0: assembly {\n /* \"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol\":202:12530 library Math {... */\n eq(address, deployTimeAddress())\n mstore(0x40, 0x80)\n 0x00\n dup1\n revert\n\n auxdata: 0xa264697066735822122027187657f5796c05915fe48cc2f3032897ef0bb5fefe211eb584556c19b822e964736f6c63430008110033\n}\n",
"bytecode": {
"functionDebugData": {},
"generatedSources": [],
"linkReferences": {},
"object": "60566050600b82828239805160001a6073146043577f4e487b7100000000000000000000000000000000000000000000000000000000600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122027187657f5796c05915fe48cc2f3032897ef0bb5fefe211eb584556c19b822e964736f6c63430008110033",
"opcodes": "PUSH1 0x56 PUSH1 0x50 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x43 JUMPI PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x0 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST ADDRESS PUSH1 0x0 MSTORE PUSH1 0x73 DUP2 MSTORE8 DUP3 DUP2 RETURN INVALID PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x27 XOR PUSH23 0x57F5796C05915FE48CC2F3032897EF0BB5FEFE211EB584 SSTORE PUSH13 0x19B822E964736F6C6343000811 STOP CALLER ",
"sourceMap": "202:12328:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
},
"deployedBytecode": {
"functionDebugData": {},
"generatedSources": [],
"immutableReferences": {},
"linkReferences": {},
"object": "73000000000000000000000000000000000000000030146080604052600080fdfea264697066735822122027187657f5796c05915fe48cc2f3032897ef0bb5fefe211eb584556c19b822e964736f6c63430008110033",
"opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0x27 XOR PUSH23 0x57F5796C05915FE48CC2F3032897EF0BB5FEFE211EB584 SSTORE PUSH13 0x19B822E964736F6C6343000811 STOP CALLER ",
"sourceMap": "202:12328:6:-:0;;;;;;;;"
},
"gasEstimates": {
"creation": {
"codeDepositCost": "17200",
"executionCost": "97",
"totalCost": "17297"
},
"internal": {
"average(uint256,uint256)": "infinite",
"ceilDiv(uint256,uint256)": "infinite",
"log10(uint256)": "infinite",
"log10(uint256,enum Math.Rounding)": "infinite",
"log2(uint256)": "infinite",
"log2(uint256,enum Math.Rounding)": "infinite",
"log256(uint256)": "infinite",
"log256(uint256,enum Math.Rounding)": "infinite",
"max(uint256,uint256)": "infinite",
"min(uint256,uint256)": "infinite",
"mulDiv(uint256,uint256,uint256)": "infinite",
"mulDiv(uint256,uint256,uint256,enum Math.Rounding)": "infinite",
"sqrt(uint256)": "infinite",
"sqrt(uint256,enum Math.Rounding)": "infinite"
}
},
"legacyAssembly": {
".code": [
{
"begin": 202,
"end": 12530,
"name": "PUSH #[$]",
"source": 6,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12530,
"name": "PUSH [$]",
"source": 6,
"value": "0000000000000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "B"
},
{
"begin": 202,
"end": 12530,
"name": "DUP3",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "DUP3",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "DUP3",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "CODECOPY",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "DUP1",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "MLOAD",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "0"
},
{
"begin": 202,
"end": 12530,
"name": "BYTE",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "73"
},
{
"begin": 202,
"end": 12530,
"name": "EQ",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH [tag]",
"source": 6,
"value": "1"
},
{
"begin": 202,
"end": 12530,
"name": "JUMPI",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "4E487B7100000000000000000000000000000000000000000000000000000000"
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "0"
},
{
"begin": 202,
"end": 12530,
"name": "MSTORE",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "0"
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "4"
},
{
"begin": 202,
"end": 12530,
"name": "MSTORE",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "24"
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "0"
},
{
"begin": 202,
"end": 12530,
"name": "REVERT",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "tag",
"source": 6,
"value": "1"
},
{
"begin": 202,
"end": 12530,
"name": "JUMPDEST",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "ADDRESS",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "0"
},
{
"begin": 202,
"end": 12530,
"name": "MSTORE",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "73"
},
{
"begin": 202,
"end": 12530,
"name": "DUP2",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "MSTORE8",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "DUP3",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "DUP2",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "RETURN",
"source": 6
}
],
".data": {
"0": {
".auxdata": "a264697066735822122027187657f5796c05915fe48cc2f3032897ef0bb5fefe211eb584556c19b822e964736f6c63430008110033",
".code": [
{
"begin": 202,
"end": 12530,
"name": "PUSHDEPLOYADDRESS",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "ADDRESS",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "EQ",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "80"
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "40"
},
{
"begin": 202,
"end": 12530,
"name": "MSTORE",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "PUSH",
"source": 6,
"value": "0"
},
{
"begin": 202,
"end": 12530,
"name": "DUP1",
"source": 6
},
{
"begin": 202,
"end": 12530,
"name": "REVERT",
"source": 6
}
]
}
},
"sourceList": [
".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol",
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol",
"#utility.yul"
]
},
"methodIdentifiers": {}
},
"metadata": "{\"compiler\":{\"version\":\"0.8.17+commit.8df45f5f\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Standard math utilities missing in the Solidity language.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xba1ae0497d71bf30f3710c38aba13a5b68c31d81ff04dd73e5dd55a05a9c903d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d77f4aee3f6534fe2dbc6583385fc123340f8ccb9bf3c8c04555e538a3d9a4b5\",\"dweb:/ipfs/QmVtP4Fz9tB2DFvMHJaSFbLxnEHE1NKDA92fviV7jDkEnL\"]}},\"version\":1}",
"storageLayout": {
"storage": [],
"types": null
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}
}
},
"sources": {
".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol": {
"ast": {
"absolutePath": ".deps/github/OpenZeppelin/openzeppelin-contracts/contracts/access/AccessControl.sol",
"exportedSymbols": {
"AccessControl": [
315
],
"Context": [
410
],
"ERC165": [
609
],
"IAccessControl": [
388
],
"IERC165": [
621
],
"Math": [
1487
],
"Strings": [
585
]
},
"id": 316,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 1,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "108:23:0"
},
{
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol",
"file": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol",
"id": 2,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 316,
"sourceUnit": 389,
"src": "133:112:0",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol",
"file": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol",
"id": 3,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 316,
"sourceUnit": 411,
"src": "246:104:0",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol",
"file": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol",
"id": 4,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 316,
"sourceUnit": 586,
"src": "351:104:0",
"symbolAliases": [],
"unitAlias": ""
},
{
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol",
"file": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol",
"id": 5,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 316,
"sourceUnit": 610,
"src": "456:117:0",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": true,
"baseContracts": [
{
"baseName": {
"id": 7,
"name": "Context",
"nameLocations": [
"2145:7:0"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 410,
"src": "2145:7:0"
},
"id": 8,
"nodeType": "InheritanceSpecifier",
"src": "2145:7:0"
},
{
"baseName": {
"id": 9,
"name": "IAccessControl",
"nameLocations": [
"2154:14:0"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 388,
"src": "2154:14:0"
},
"id": 10,
"nodeType": "InheritanceSpecifier",
"src": "2154:14:0"
},
{
"baseName": {
"id": 11,
"name": "ERC165",
"nameLocations": [
"2170:6:0"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 609,
"src": "2170:6:0"
},
"id": 12,
"nodeType": "InheritanceSpecifier",
"src": "2170:6:0"
}
],
"canonicalName": "AccessControl",
"contractDependencies": [],
"contractKind": "contract",
"documentation": {
"id": 6,
"nodeType": "StructuredDocumentation",
"src": "575:1534:0",
"text": " @dev Contract module that allows children to implement role-based access\n control mechanisms. This is a lightweight version that doesn't allow enumerating role\n members except through off-chain means by accessing the contract event logs. Some\n applications may benefit from on-chain enumerability, for those cases see\n {AccessControlEnumerable}.\n Roles are referred to by their `bytes32` identifier. These should be exposed\n in the external API and be unique. The best way to achieve this is by\n using `public constant` hash digests:\n ```\n bytes32 public constant MY_ROLE = keccak256(\"MY_ROLE\");\n ```\n Roles can be used to represent a set of permissions. To restrict access to a\n function call, use {hasRole}:\n ```\n function foo() public {\n require(hasRole(MY_ROLE, msg.sender));\n ...\n }\n ```\n Roles can be granted and revoked dynamically via the {grantRole} and\n {revokeRole} functions. Each role has an associated admin role, and only\n accounts that have a role's admin role can call {grantRole} and {revokeRole}.\n By default, the admin role for all roles is `DEFAULT_ADMIN_ROLE`, which means\n that only accounts with this role will be able to grant or revoke other\n roles. More complex role relationships can be created by using\n {_setRoleAdmin}.\n WARNING: The `DEFAULT_ADMIN_ROLE` is also its own admin: it has permission to\n grant and revoke this role. Extra precautions should be taken to secure\n accounts that have been granted it."
},
"fullyImplemented": true,
"id": 315,
"linearizedBaseContracts": [
315,
609,
621,
388,
410
],
"name": "AccessControl",
"nameLocation": "2128:13:0",
"nodeType": "ContractDefinition",
"nodes": [
{
"canonicalName": "AccessControl.RoleData",
"id": 19,
"members": [
{
"constant": false,
"id": 16,
"mutability": "mutable",
"name": "members",
"nameLocation": "2234:7:0",
"nodeType": "VariableDeclaration",
"scope": 19,
"src": "2209:32:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
"typeString": "mapping(address => bool)"
},
"typeName": {
"id": 15,
"keyType": {
"id": 13,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2217:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "Mapping",
"src": "2209:24:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
"typeString": "mapping(address => bool)"
},
"valueType": {
"id": 14,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2228:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 18,
"mutability": "mutable",
"name": "adminRole",
"nameLocation": "2259:9:0",
"nodeType": "VariableDeclaration",
"scope": 19,
"src": "2251:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 17,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2251:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"name": "RoleData",
"nameLocation": "2190:8:0",
"nodeType": "StructDefinition",
"scope": 315,
"src": "2183:92:0",
"visibility": "public"
},
{
"constant": false,
"id": 24,
"mutability": "mutable",
"name": "_roles",
"nameLocation": "2318:6:0",
"nodeType": "VariableDeclaration",
"scope": 315,
"src": "2281:43:0",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$19_storage_$",
"typeString": "mapping(bytes32 => struct AccessControl.RoleData)"
},
"typeName": {
"id": 23,
"keyType": {
"id": 20,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2289:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "Mapping",
"src": "2281:28:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$19_storage_$",
"typeString": "mapping(bytes32 => struct AccessControl.RoleData)"
},
"valueType": {
"id": 22,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 21,
"name": "RoleData",
"nameLocations": [
"2300:8:0"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 19,
"src": "2300:8:0"
},
"referencedDeclaration": 19,
"src": "2300:8:0",
"typeDescriptions": {
"typeIdentifier": "t_struct$_RoleData_$19_storage_ptr",
"typeString": "struct AccessControl.RoleData"
}
}
},
"visibility": "private"
},
{
"constant": true,
"functionSelector": "a217fddf",
"id": 27,
"mutability": "constant",
"name": "DEFAULT_ADMIN_ROLE",
"nameLocation": "2355:18:0",
"nodeType": "VariableDeclaration",
"scope": 315,
"src": "2331:49:0",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 25,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2331:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"value": {
"hexValue": "30783030",
"id": 26,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2376:4:0",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0x00"
},
"visibility": "public"
},
{
"body": {
"id": 37,
"nodeType": "Block",
"src": "2799:44:0",
"statements": [
{
"expression": {
"arguments": [
{
"id": 33,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 30,
"src": "2820:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 32,
"name": "_checkRole",
"nodeType": "Identifier",
"overloadedDeclarations": [
92,
131
],
"referencedDeclaration": 92,
"src": "2809:10:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$__$",
"typeString": "function (bytes32) view"
}
},
"id": 34,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2809:16:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 35,
"nodeType": "ExpressionStatement",
"src": "2809:16:0"
},
{
"id": 36,
"nodeType": "PlaceholderStatement",
"src": "2835:1:0"
}
]
},
"documentation": {
"id": 28,
"nodeType": "StructuredDocumentation",
"src": "2387:375:0",
"text": " @dev Modifier that checks that an account has a specific role. Reverts\n with a standardized message including the required role.\n The format of the revert reason is given by the following regular expression:\n /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/\n _Available since v4.1._"
},
"id": 38,
"name": "onlyRole",
"nameLocation": "2776:8:0",
"nodeType": "ModifierDefinition",
"parameters": {
"id": 31,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 30,
"mutability": "mutable",
"name": "role",
"nameLocation": "2793:4:0",
"nodeType": "VariableDeclaration",
"scope": 38,
"src": "2785:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 29,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2785:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"src": "2784:14:0"
},
"src": "2767:76:0",
"virtual": false,
"visibility": "internal"
},
{
"baseFunctions": [
608
],
"body": {
"id": 59,
"nodeType": "Block",
"src": "3001:111:0",
"statements": [
{
"expression": {
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 57,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"id": 52,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 47,
"name": "interfaceId",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 41,
"src": "3018:11:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"expression": {
"arguments": [
{
"id": 49,
"name": "IAccessControl",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 388,
"src": "3038:14:0",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IAccessControl_$388_$",
"typeString": "type(contract IAccessControl)"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_type$_t_contract$_IAccessControl_$388_$",
"typeString": "type(contract IAccessControl)"
}
],
"id": 48,
"name": "type",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967269,
"src": "3033:4:0",
"typeDescriptions": {
"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
"typeString": "function () pure"
}
},
"id": 50,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "3033:20:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_magic_meta_type_t_contract$_IAccessControl_$388",
"typeString": "type(contract IAccessControl)"
}
},
"id": 51,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "3054:11:0",
"memberName": "interfaceId",
"nodeType": "MemberAccess",
"src": "3033:32:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"src": "3018:47:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "||",
"rightExpression": {
"arguments": [
{
"id": 55,
"name": "interfaceId",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 41,
"src": "3093:11:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
],
"expression": {
"id": 53,
"name": "super",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967271,
"src": "3069:5:0",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_super$_AccessControl_$315_$",
"typeString": "type(contract super AccessControl)"
}
},
"id": 54,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "3075:17:0",
"memberName": "supportsInterface",
"nodeType": "MemberAccess",
"referencedDeclaration": 608,
"src": "3069:23:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes4_$returns$_t_bool_$",
"typeString": "function (bytes4) view returns (bool)"
}
},
"id": 56,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "3069:36:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "3018:87:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 46,
"id": 58,
"nodeType": "Return",
"src": "3011:94:0"
}
]
},
"documentation": {
"id": 39,
"nodeType": "StructuredDocumentation",
"src": "2849:56:0",
"text": " @dev See {IERC165-supportsInterface}."
},
"functionSelector": "01ffc9a7",
"id": 60,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "supportsInterface",
"nameLocation": "2919:17:0",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 43,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "2977:8:0"
},
"parameters": {
"id": 42,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 41,
"mutability": "mutable",
"name": "interfaceId",
"nameLocation": "2944:11:0",
"nodeType": "VariableDeclaration",
"scope": 60,
"src": "2937:18:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 40,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "2937:6:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"visibility": "internal"
}
],
"src": "2936:20:0"
},
"returnParameters": {
"id": 46,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 45,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 60,
"src": "2995:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 44,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "2995:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "2994:6:0"
},
"scope": 315,
"src": "2910:202:0",
"stateMutability": "view",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
355
],
"body": {
"id": 78,
"nodeType": "Block",
"src": "3291:53:0",
"statements": [
{
"expression": {
"baseExpression": {
"expression": {
"baseExpression": {
"id": 71,
"name": "_roles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 24,
"src": "3308:6:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$19_storage_$",
"typeString": "mapping(bytes32 => struct AccessControl.RoleData storage ref)"
}
},
"id": 73,
"indexExpression": {
"id": 72,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 63,
"src": "3315:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3308:12:0",
"typeDescriptions": {
"typeIdentifier": "t_struct$_RoleData_$19_storage",
"typeString": "struct AccessControl.RoleData storage ref"
}
},
"id": 74,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "3321:7:0",
"memberName": "members",
"nodeType": "MemberAccess",
"referencedDeclaration": 16,
"src": "3308:20:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
"typeString": "mapping(address => bool)"
}
},
"id": 76,
"indexExpression": {
"id": 75,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 65,
"src": "3329:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "3308:29:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 70,
"id": 77,
"nodeType": "Return",
"src": "3301:36:0"
}
]
},
"documentation": {
"id": 61,
"nodeType": "StructuredDocumentation",
"src": "3118:76:0",
"text": " @dev Returns `true` if `account` has been granted `role`."
},
"functionSelector": "91d14854",
"id": 79,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "hasRole",
"nameLocation": "3208:7:0",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 67,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "3267:8:0"
},
"parameters": {
"id": 66,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 63,
"mutability": "mutable",
"name": "role",
"nameLocation": "3224:4:0",
"nodeType": "VariableDeclaration",
"scope": 79,
"src": "3216:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 62,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "3216:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 65,
"mutability": "mutable",
"name": "account",
"nameLocation": "3238:7:0",
"nodeType": "VariableDeclaration",
"scope": 79,
"src": "3230:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 64,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "3230:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "3215:31:0"
},
"returnParameters": {
"id": 70,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 69,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 79,
"src": "3285:4:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 68,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "3285:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "3284:6:0"
},
"scope": 315,
"src": "3199:145:0",
"stateMutability": "view",
"virtual": true,
"visibility": "public"
},
{
"body": {
"id": 91,
"nodeType": "Block",
"src": "3694:47:0",
"statements": [
{
"expression": {
"arguments": [
{
"id": 86,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 82,
"src": "3715:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 87,
"name": "_msgSender",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 400,
"src": "3721:10:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
"typeString": "function () view returns (address)"
}
},
"id": 88,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "3721:12:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 85,
"name": "_checkRole",
"nodeType": "Identifier",
"overloadedDeclarations": [
92,
131
],
"referencedDeclaration": 131,
"src": "3704:10:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$__$",
"typeString": "function (bytes32,address) view"
}
},
"id": 89,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "3704:30:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 90,
"nodeType": "ExpressionStatement",
"src": "3704:30:0"
}
]
},
"documentation": {
"id": 80,
"nodeType": "StructuredDocumentation",
"src": "3350:283:0",
"text": " @dev Revert with a standard message if `_msgSender()` is missing `role`.\n Overriding this function changes the behavior of the {onlyRole} modifier.\n Format of the revert message is described in {_checkRole}.\n _Available since v4.6._"
},
"id": 92,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_checkRole",
"nameLocation": "3647:10:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 83,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 82,
"mutability": "mutable",
"name": "role",
"nameLocation": "3666:4:0",
"nodeType": "VariableDeclaration",
"scope": 92,
"src": "3658:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 81,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "3658:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"src": "3657:14:0"
},
"returnParameters": {
"id": 84,
"nodeType": "ParameterList",
"parameters": [],
"src": "3694:0:0"
},
"scope": 315,
"src": "3638:103:0",
"stateMutability": "view",
"virtual": true,
"visibility": "internal"
},
{
"body": {
"id": 130,
"nodeType": "Block",
"src": "4095:406:0",
"statements": [
{
"condition": {
"id": 104,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "4109:23:0",
"subExpression": {
"arguments": [
{
"id": 101,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 95,
"src": "4118:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 102,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 97,
"src": "4124:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 100,
"name": "hasRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 79,
"src": "4110:7:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
"typeString": "function (bytes32,address) view returns (bool)"
}
},
"id": 103,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "4110:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 129,
"nodeType": "IfStatement",
"src": "4105:390:0",
"trueBody": {
"id": 128,
"nodeType": "Block",
"src": "4134:361:0",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"hexValue": "416363657373436f6e74726f6c3a206163636f756e7420",
"id": 110,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4242:25:0",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874",
"typeString": "literal_string \"AccessControl: account \""
},
"value": "AccessControl: account "
},
{
"arguments": [
{
"id": 113,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 97,
"src": "4313:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"expression": {
"id": 111,
"name": "Strings",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 585,
"src": "4293:7:0",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_Strings_$585_$",
"typeString": "type(library Strings)"
}
},
"id": 112,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "4301:11:0",
"memberName": "toHexString",
"nodeType": "MemberAccess",
"referencedDeclaration": 584,
"src": "4293:19:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$",
"typeString": "function (address) pure returns (string memory)"
}
},
"id": 114,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "4293:28:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
},
{
"hexValue": "206973206d697373696e6720726f6c6520",
"id": 115,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4347:19:0",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69",
"typeString": "literal_string \" is missing role \""
},
"value": " is missing role "
},
{
"arguments": [
{
"arguments": [
{
"id": 120,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 95,
"src": "4420:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 119,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4412:7:0",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 118,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4412:7:0",
"typeDescriptions": {}
}
},
"id": 121,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "4412:13:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"hexValue": "3332",
"id": 122,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4427:2:0",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
}
],
"expression": {
"id": 116,
"name": "Strings",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 585,
"src": "4392:7:0",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_Strings_$585_$",
"typeString": "type(library Strings)"
}
},
"id": 117,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "4400:11:0",
"memberName": "toHexString",
"nodeType": "MemberAccess",
"referencedDeclaration": 564,
"src": "4392:19:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
"typeString": "function (uint256,uint256) pure returns (string memory)"
}
},
"id": 123,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "4392:38:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874",
"typeString": "literal_string \"AccessControl: account \""
},
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
},
{
"typeIdentifier": "t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69",
"typeString": "literal_string \" is missing role \""
},
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"expression": {
"id": 108,
"name": "abi",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967295,
"src": "4200:3:0",
"typeDescriptions": {
"typeIdentifier": "t_magic_abi",
"typeString": "abi"
}
},
"id": 109,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "4204:12:0",
"memberName": "encodePacked",
"nodeType": "MemberAccess",
"src": "4200:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
"typeString": "function () pure returns (bytes memory)"
}
},
"id": 124,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "4200:252:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 107,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "4172:6:0",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_string_storage_ptr_$",
"typeString": "type(string storage pointer)"
},
"typeName": {
"id": 106,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "4172:6:0",
"typeDescriptions": {}
}
},
"id": 125,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "4172:298:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
],
"id": 105,
"name": "revert",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967277,
4294967277
],
"referencedDeclaration": 4294967277,
"src": "4148:6:0",
"typeDescriptions": {
"typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
"typeString": "function (string memory) pure"
}
},
"id": 126,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "4148:336:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 127,
"nodeType": "ExpressionStatement",
"src": "4148:336:0"
}
]
}
}
]
},
"documentation": {
"id": 93,
"nodeType": "StructuredDocumentation",
"src": "3747:270:0",
"text": " @dev Revert with a standard message if `account` is missing `role`.\n The format of the revert reason is given by the following regular expression:\n /^AccessControl: account (0x[0-9a-f]{40}) is missing role (0x[0-9a-f]{64})$/"
},
"id": 131,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_checkRole",
"nameLocation": "4031:10:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 98,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 95,
"mutability": "mutable",
"name": "role",
"nameLocation": "4050:4:0",
"nodeType": "VariableDeclaration",
"scope": 131,
"src": "4042:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 94,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "4042:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 97,
"mutability": "mutable",
"name": "account",
"nameLocation": "4064:7:0",
"nodeType": "VariableDeclaration",
"scope": 131,
"src": "4056:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 96,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "4056:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "4041:31:0"
},
"returnParameters": {
"id": 99,
"nodeType": "ParameterList",
"parameters": [],
"src": "4095:0:0"
},
"scope": 315,
"src": "4022:479:0",
"stateMutability": "view",
"virtual": true,
"visibility": "internal"
},
{
"baseFunctions": [
363
],
"body": {
"id": 145,
"nodeType": "Block",
"src": "4765:46:0",
"statements": [
{
"expression": {
"expression": {
"baseExpression": {
"id": 140,
"name": "_roles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 24,
"src": "4782:6:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$19_storage_$",
"typeString": "mapping(bytes32 => struct AccessControl.RoleData storage ref)"
}
},
"id": 142,
"indexExpression": {
"id": 141,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 134,
"src": "4789:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "4782:12:0",
"typeDescriptions": {
"typeIdentifier": "t_struct$_RoleData_$19_storage",
"typeString": "struct AccessControl.RoleData storage ref"
}
},
"id": 143,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "4795:9:0",
"memberName": "adminRole",
"nodeType": "MemberAccess",
"referencedDeclaration": 18,
"src": "4782:22:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"functionReturnParameters": 139,
"id": 144,
"nodeType": "Return",
"src": "4775:29:0"
}
]
},
"documentation": {
"id": 132,
"nodeType": "StructuredDocumentation",
"src": "4507:170:0",
"text": " @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {_setRoleAdmin}."
},
"functionSelector": "248a9ca3",
"id": 146,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "getRoleAdmin",
"nameLocation": "4691:12:0",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 136,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "4738:8:0"
},
"parameters": {
"id": 135,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 134,
"mutability": "mutable",
"name": "role",
"nameLocation": "4712:4:0",
"nodeType": "VariableDeclaration",
"scope": 146,
"src": "4704:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 133,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "4704:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"src": "4703:14:0"
},
"returnParameters": {
"id": 139,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 138,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 146,
"src": "4756:7:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 137,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "4756:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"src": "4755:9:0"
},
"scope": 315,
"src": "4682:129:0",
"stateMutability": "view",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
371
],
"body": {
"id": 165,
"nodeType": "Block",
"src": "5210:42:0",
"statements": [
{
"expression": {
"arguments": [
{
"id": 161,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 149,
"src": "5231:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 162,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 151,
"src": "5237:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 160,
"name": "_grantRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 283,
"src": "5220:10:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
"typeString": "function (bytes32,address)"
}
},
"id": 163,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5220:25:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 164,
"nodeType": "ExpressionStatement",
"src": "5220:25:0"
}
]
},
"documentation": {
"id": 147,
"nodeType": "StructuredDocumentation",
"src": "4817:285:0",
"text": " @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role.\n May emit a {RoleGranted} event."
},
"functionSelector": "2f2ff15d",
"id": 166,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"arguments": [
{
"id": 156,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 149,
"src": "5203:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 155,
"name": "getRoleAdmin",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 146,
"src": "5190:12:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
"typeString": "function (bytes32) view returns (bytes32)"
}
},
"id": 157,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5190:18:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"id": 158,
"kind": "modifierInvocation",
"modifierName": {
"id": 154,
"name": "onlyRole",
"nameLocations": [
"5181:8:0"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 38,
"src": "5181:8:0"
},
"nodeType": "ModifierInvocation",
"src": "5181:28:0"
}
],
"name": "grantRole",
"nameLocation": "5116:9:0",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 153,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "5172:8:0"
},
"parameters": {
"id": 152,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 149,
"mutability": "mutable",
"name": "role",
"nameLocation": "5134:4:0",
"nodeType": "VariableDeclaration",
"scope": 166,
"src": "5126:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 148,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "5126:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 151,
"mutability": "mutable",
"name": "account",
"nameLocation": "5148:7:0",
"nodeType": "VariableDeclaration",
"scope": 166,
"src": "5140:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 150,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5140:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "5125:31:0"
},
"returnParameters": {
"id": 159,
"nodeType": "ParameterList",
"parameters": [],
"src": "5210:0:0"
},
"scope": 315,
"src": "5107:145:0",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
379
],
"body": {
"id": 185,
"nodeType": "Block",
"src": "5636:43:0",
"statements": [
{
"expression": {
"arguments": [
{
"id": 181,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 169,
"src": "5658:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 182,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 171,
"src": "5664:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 180,
"name": "_revokeRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 314,
"src": "5646:11:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
"typeString": "function (bytes32,address)"
}
},
"id": 183,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5646:26:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 184,
"nodeType": "ExpressionStatement",
"src": "5646:26:0"
}
]
},
"documentation": {
"id": 167,
"nodeType": "StructuredDocumentation",
"src": "5258:269:0",
"text": " @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role.\n May emit a {RoleRevoked} event."
},
"functionSelector": "d547741f",
"id": 186,
"implemented": true,
"kind": "function",
"modifiers": [
{
"arguments": [
{
"arguments": [
{
"id": 176,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 169,
"src": "5629:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 175,
"name": "getRoleAdmin",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 146,
"src": "5616:12:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
"typeString": "function (bytes32) view returns (bytes32)"
}
},
"id": 177,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5616:18:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"id": 178,
"kind": "modifierInvocation",
"modifierName": {
"id": 174,
"name": "onlyRole",
"nameLocations": [
"5607:8:0"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 38,
"src": "5607:8:0"
},
"nodeType": "ModifierInvocation",
"src": "5607:28:0"
}
],
"name": "revokeRole",
"nameLocation": "5541:10:0",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 173,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "5598:8:0"
},
"parameters": {
"id": 172,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 169,
"mutability": "mutable",
"name": "role",
"nameLocation": "5560:4:0",
"nodeType": "VariableDeclaration",
"scope": 186,
"src": "5552:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 168,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "5552:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 171,
"mutability": "mutable",
"name": "account",
"nameLocation": "5574:7:0",
"nodeType": "VariableDeclaration",
"scope": 186,
"src": "5566:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 170,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "5566:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "5551:31:0"
},
"returnParameters": {
"id": 179,
"nodeType": "ParameterList",
"parameters": [],
"src": "5636:0:0"
},
"scope": 315,
"src": "5532:147:0",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"baseFunctions": [
387
],
"body": {
"id": 208,
"nodeType": "Block",
"src": "6293:137:0",
"statements": [
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"id": 199,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 196,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 191,
"src": "6311:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 197,
"name": "_msgSender",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 400,
"src": "6322:10:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
"typeString": "function () view returns (address)"
}
},
"id": 198,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "6322:12:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"src": "6311:23:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66",
"id": 200,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6336:49:0",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b",
"typeString": "literal_string \"AccessControl: can only renounce roles for self\""
},
"value": "AccessControl: can only renounce roles for self"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b",
"typeString": "literal_string \"AccessControl: can only renounce roles for self\""
}
],
"id": 195,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "6303:7:0",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 201,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "6303:83:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 202,
"nodeType": "ExpressionStatement",
"src": "6303:83:0"
},
{
"expression": {
"arguments": [
{
"id": 204,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 189,
"src": "6409:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 205,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 191,
"src": "6415:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 203,
"name": "_revokeRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 314,
"src": "6397:11:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
"typeString": "function (bytes32,address)"
}
},
"id": 206,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "6397:26:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 207,
"nodeType": "ExpressionStatement",
"src": "6397:26:0"
}
]
},
"documentation": {
"id": 187,
"nodeType": "StructuredDocumentation",
"src": "5685:526:0",
"text": " @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been revoked `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `account`.\n May emit a {RoleRevoked} event."
},
"functionSelector": "36568abe",
"id": 209,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "renounceRole",
"nameLocation": "6225:12:0",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 193,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "6284:8:0"
},
"parameters": {
"id": 192,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 189,
"mutability": "mutable",
"name": "role",
"nameLocation": "6246:4:0",
"nodeType": "VariableDeclaration",
"scope": 209,
"src": "6238:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 188,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "6238:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 191,
"mutability": "mutable",
"name": "account",
"nameLocation": "6260:7:0",
"nodeType": "VariableDeclaration",
"scope": 209,
"src": "6252:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 190,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "6252:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "6237:31:0"
},
"returnParameters": {
"id": 194,
"nodeType": "ParameterList",
"parameters": [],
"src": "6293:0:0"
},
"scope": 315,
"src": "6216:214:0",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "public"
},
{
"body": {
"id": 222,
"nodeType": "Block",
"src": "7183:42:0",
"statements": [
{
"expression": {
"arguments": [
{
"id": 218,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 212,
"src": "7204:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 219,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 214,
"src": "7210:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 217,
"name": "_grantRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 283,
"src": "7193:10:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$",
"typeString": "function (bytes32,address)"
}
},
"id": 220,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7193:25:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 221,
"nodeType": "ExpressionStatement",
"src": "7193:25:0"
}
]
},
"documentation": {
"id": 210,
"nodeType": "StructuredDocumentation",
"src": "6436:674:0",
"text": " @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event. Note that unlike {grantRole}, this function doesn't perform any\n checks on the calling account.\n May emit a {RoleGranted} event.\n [WARNING]\n ====\n This function should only be called from the constructor when setting\n up the initial roles for the system.\n Using this function in any other way is effectively circumventing the admin\n system imposed by {AccessControl}.\n ====\n NOTE: This function is deprecated in favor of {_grantRole}."
},
"id": 223,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_setupRole",
"nameLocation": "7124:10:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 215,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 212,
"mutability": "mutable",
"name": "role",
"nameLocation": "7143:4:0",
"nodeType": "VariableDeclaration",
"scope": 223,
"src": "7135:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 211,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "7135:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 214,
"mutability": "mutable",
"name": "account",
"nameLocation": "7157:7:0",
"nodeType": "VariableDeclaration",
"scope": 223,
"src": "7149:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 213,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "7149:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "7134:31:0"
},
"returnParameters": {
"id": 216,
"nodeType": "ParameterList",
"parameters": [],
"src": "7183:0:0"
},
"scope": 315,
"src": "7115:110:0",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "internal"
},
{
"body": {
"id": 250,
"nodeType": "Block",
"src": "7423:174:0",
"statements": [
{
"assignments": [
232
],
"declarations": [
{
"constant": false,
"id": 232,
"mutability": "mutable",
"name": "previousAdminRole",
"nameLocation": "7441:17:0",
"nodeType": "VariableDeclaration",
"scope": 250,
"src": "7433:25:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 231,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "7433:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"id": 236,
"initialValue": {
"arguments": [
{
"id": 234,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 226,
"src": "7474:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 233,
"name": "getRoleAdmin",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 146,
"src": "7461:12:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
"typeString": "function (bytes32) view returns (bytes32)"
}
},
"id": 235,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7461:18:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "7433:46:0"
},
{
"expression": {
"id": 242,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"expression": {
"baseExpression": {
"id": 237,
"name": "_roles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 24,
"src": "7489:6:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$19_storage_$",
"typeString": "mapping(bytes32 => struct AccessControl.RoleData storage ref)"
}
},
"id": 239,
"indexExpression": {
"id": 238,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 226,
"src": "7496:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "7489:12:0",
"typeDescriptions": {
"typeIdentifier": "t_struct$_RoleData_$19_storage",
"typeString": "struct AccessControl.RoleData storage ref"
}
},
"id": 240,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"memberLocation": "7502:9:0",
"memberName": "adminRole",
"nodeType": "MemberAccess",
"referencedDeclaration": 18,
"src": "7489:22:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"id": 241,
"name": "adminRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "7514:9:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"src": "7489:34:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"id": 243,
"nodeType": "ExpressionStatement",
"src": "7489:34:0"
},
{
"eventCall": {
"arguments": [
{
"id": 245,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 226,
"src": "7555:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 246,
"name": "previousAdminRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 232,
"src": "7561:17:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 247,
"name": "adminRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 228,
"src": "7580:9:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
],
"id": 244,
"name": "RoleAdminChanged",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 327,
"src": "7538:16:0",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$",
"typeString": "function (bytes32,bytes32,bytes32)"
}
},
"id": 248,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7538:52:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 249,
"nodeType": "EmitStatement",
"src": "7533:57:0"
}
]
},
"documentation": {
"id": 224,
"nodeType": "StructuredDocumentation",
"src": "7231:114:0",
"text": " @dev Sets `adminRole` as ``role``'s admin role.\n Emits a {RoleAdminChanged} event."
},
"id": 251,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_setRoleAdmin",
"nameLocation": "7359:13:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 229,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 226,
"mutability": "mutable",
"name": "role",
"nameLocation": "7381:4:0",
"nodeType": "VariableDeclaration",
"scope": 251,
"src": "7373:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 225,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "7373:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 228,
"mutability": "mutable",
"name": "adminRole",
"nameLocation": "7395:9:0",
"nodeType": "VariableDeclaration",
"scope": 251,
"src": "7387:17:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 227,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "7387:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"src": "7372:33:0"
},
"returnParameters": {
"id": 230,
"nodeType": "ParameterList",
"parameters": [],
"src": "7423:0:0"
},
"scope": 315,
"src": "7350:247:0",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "internal"
},
{
"body": {
"id": 282,
"nodeType": "Block",
"src": "7833:165:0",
"statements": [
{
"condition": {
"id": 263,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "!",
"prefix": true,
"src": "7847:23:0",
"subExpression": {
"arguments": [
{
"id": 260,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 254,
"src": "7856:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 261,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 256,
"src": "7862:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 259,
"name": "hasRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 79,
"src": "7848:7:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
"typeString": "function (bytes32,address) view returns (bool)"
}
},
"id": 262,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7848:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 281,
"nodeType": "IfStatement",
"src": "7843:149:0",
"trueBody": {
"id": 280,
"nodeType": "Block",
"src": "7872:120:0",
"statements": [
{
"expression": {
"id": 271,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"baseExpression": {
"expression": {
"baseExpression": {
"id": 264,
"name": "_roles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 24,
"src": "7886:6:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$19_storage_$",
"typeString": "mapping(bytes32 => struct AccessControl.RoleData storage ref)"
}
},
"id": 266,
"indexExpression": {
"id": 265,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 254,
"src": "7893:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "7886:12:0",
"typeDescriptions": {
"typeIdentifier": "t_struct$_RoleData_$19_storage",
"typeString": "struct AccessControl.RoleData storage ref"
}
},
"id": 267,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "7899:7:0",
"memberName": "members",
"nodeType": "MemberAccess",
"referencedDeclaration": 16,
"src": "7886:20:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
"typeString": "mapping(address => bool)"
}
},
"id": 269,
"indexExpression": {
"id": 268,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 256,
"src": "7907:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "7886:29:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "74727565",
"id": 270,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7918:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"src": "7886:36:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 272,
"nodeType": "ExpressionStatement",
"src": "7886:36:0"
},
{
"eventCall": {
"arguments": [
{
"id": 274,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 254,
"src": "7953:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 275,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 256,
"src": "7959:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 276,
"name": "_msgSender",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 400,
"src": "7968:10:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
"typeString": "function () view returns (address)"
}
},
"id": 277,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7968:12:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 273,
"name": "RoleGranted",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 336,
"src": "7941:11:0",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$",
"typeString": "function (bytes32,address,address)"
}
},
"id": 278,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7941:40:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 279,
"nodeType": "EmitStatement",
"src": "7936:45:0"
}
]
}
}
]
},
"documentation": {
"id": 252,
"nodeType": "StructuredDocumentation",
"src": "7603:157:0",
"text": " @dev Grants `role` to `account`.\n Internal function without access restriction.\n May emit a {RoleGranted} event."
},
"id": 283,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_grantRole",
"nameLocation": "7774:10:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 257,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 254,
"mutability": "mutable",
"name": "role",
"nameLocation": "7793:4:0",
"nodeType": "VariableDeclaration",
"scope": 283,
"src": "7785:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 253,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "7785:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 256,
"mutability": "mutable",
"name": "account",
"nameLocation": "7807:7:0",
"nodeType": "VariableDeclaration",
"scope": 283,
"src": "7799:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 255,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "7799:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "7784:31:0"
},
"returnParameters": {
"id": 258,
"nodeType": "ParameterList",
"parameters": [],
"src": "7833:0:0"
},
"scope": 315,
"src": "7765:233:0",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "internal"
},
{
"body": {
"id": 313,
"nodeType": "Block",
"src": "8238:165:0",
"statements": [
{
"condition": {
"arguments": [
{
"id": 292,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 286,
"src": "8260:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 293,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 288,
"src": "8266:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 291,
"name": "hasRole",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 79,
"src": "8252:7:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$",
"typeString": "function (bytes32,address) view returns (bool)"
}
},
"id": 294,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8252:22:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 312,
"nodeType": "IfStatement",
"src": "8248:149:0",
"trueBody": {
"id": 311,
"nodeType": "Block",
"src": "8276:121:0",
"statements": [
{
"expression": {
"id": 302,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"baseExpression": {
"expression": {
"baseExpression": {
"id": 295,
"name": "_roles",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 24,
"src": "8290:6:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_RoleData_$19_storage_$",
"typeString": "mapping(bytes32 => struct AccessControl.RoleData storage ref)"
}
},
"id": 297,
"indexExpression": {
"id": 296,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 286,
"src": "8297:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "8290:12:0",
"typeDescriptions": {
"typeIdentifier": "t_struct$_RoleData_$19_storage",
"typeString": "struct AccessControl.RoleData storage ref"
}
},
"id": 298,
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": false,
"memberLocation": "8303:7:0",
"memberName": "members",
"nodeType": "MemberAccess",
"referencedDeclaration": 16,
"src": "8290:20:0",
"typeDescriptions": {
"typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
"typeString": "mapping(address => bool)"
}
},
"id": 300,
"indexExpression": {
"id": 299,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 288,
"src": "8311:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "8290:29:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "66616c7365",
"id": 301,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8322:5:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "false"
},
"src": "8290:37:0",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 303,
"nodeType": "ExpressionStatement",
"src": "8290:37:0"
},
{
"eventCall": {
"arguments": [
{
"id": 305,
"name": "role",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 286,
"src": "8358:4:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
{
"id": 306,
"name": "account",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 288,
"src": "8364:7:0",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
{
"arguments": [],
"expression": {
"argumentTypes": [],
"id": 307,
"name": "_msgSender",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 400,
"src": "8373:10:0",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
"typeString": "function () view returns (address)"
}
},
"id": 308,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8373:12:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
},
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 304,
"name": "RoleRevoked",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 345,
"src": "8346:11:0",
"typeDescriptions": {
"typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$",
"typeString": "function (bytes32,address,address)"
}
},
"id": 309,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8346:40:0",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 310,
"nodeType": "EmitStatement",
"src": "8341:45:0"
}
]
}
}
]
},
"documentation": {
"id": 284,
"nodeType": "StructuredDocumentation",
"src": "8004:160:0",
"text": " @dev Revokes `role` from `account`.\n Internal function without access restriction.\n May emit a {RoleRevoked} event."
},
"id": 314,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_revokeRole",
"nameLocation": "8178:11:0",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 289,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 286,
"mutability": "mutable",
"name": "role",
"nameLocation": "8198:4:0",
"nodeType": "VariableDeclaration",
"scope": 314,
"src": "8190:12:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 285,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "8190:7:0",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 288,
"mutability": "mutable",
"name": "account",
"nameLocation": "8212:7:0",
"nodeType": "VariableDeclaration",
"scope": 314,
"src": "8204:15:0",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 287,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "8204:7:0",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "8189:31:0"
},
"returnParameters": {
"id": 290,
"nodeType": "ParameterList",
"parameters": [],
"src": "8238:0:0"
},
"scope": 315,
"src": "8169:234:0",
"stateMutability": "nonpayable",
"virtual": true,
"visibility": "internal"
}
],
"scope": 316,
"src": "2110:6295:0",
"usedErrors": []
}
],
"src": "108:8298:0"
},
"id": 0
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol": {
"ast": {
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/IAccessControl.sol",
"exportedSymbols": {
"IAccessControl": [
388
]
},
"id": 389,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 317,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "94:23:1"
},
{
"abstract": false,
"baseContracts": [],
"canonicalName": "IAccessControl",
"contractDependencies": [],
"contractKind": "interface",
"documentation": {
"id": 318,
"nodeType": "StructuredDocumentation",
"src": "119:89:1",
"text": " @dev External interface of AccessControl declared to support ERC165 detection."
},
"fullyImplemented": false,
"id": 388,
"linearizedBaseContracts": [
388
],
"name": "IAccessControl",
"nameLocation": "219:14:1",
"nodeType": "ContractDefinition",
"nodes": [
{
"anonymous": false,
"documentation": {
"id": 319,
"nodeType": "StructuredDocumentation",
"src": "240:292:1",
"text": " @dev Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole`\n `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite\n {RoleAdminChanged} not being emitted signaling this.\n _Available since v3.1._"
},
"eventSelector": "bd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff",
"id": 327,
"name": "RoleAdminChanged",
"nameLocation": "543:16:1",
"nodeType": "EventDefinition",
"parameters": {
"id": 326,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 321,
"indexed": true,
"mutability": "mutable",
"name": "role",
"nameLocation": "576:4:1",
"nodeType": "VariableDeclaration",
"scope": 327,
"src": "560:20:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 320,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "560:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 323,
"indexed": true,
"mutability": "mutable",
"name": "previousAdminRole",
"nameLocation": "598:17:1",
"nodeType": "VariableDeclaration",
"scope": 327,
"src": "582:33:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 322,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "582:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 325,
"indexed": true,
"mutability": "mutable",
"name": "newAdminRole",
"nameLocation": "633:12:1",
"nodeType": "VariableDeclaration",
"scope": 327,
"src": "617:28:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 324,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "617:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"src": "559:87:1"
},
"src": "537:110:1"
},
{
"anonymous": false,
"documentation": {
"id": 328,
"nodeType": "StructuredDocumentation",
"src": "653:212:1",
"text": " @dev Emitted when `account` is granted `role`.\n `sender` is the account that originated the contract call, an admin role\n bearer except when using {AccessControl-_setupRole}."
},
"eventSelector": "2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d",
"id": 336,
"name": "RoleGranted",
"nameLocation": "876:11:1",
"nodeType": "EventDefinition",
"parameters": {
"id": 335,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 330,
"indexed": true,
"mutability": "mutable",
"name": "role",
"nameLocation": "904:4:1",
"nodeType": "VariableDeclaration",
"scope": 336,
"src": "888:20:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 329,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "888:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 332,
"indexed": true,
"mutability": "mutable",
"name": "account",
"nameLocation": "926:7:1",
"nodeType": "VariableDeclaration",
"scope": 336,
"src": "910:23:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 331,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "910:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 334,
"indexed": true,
"mutability": "mutable",
"name": "sender",
"nameLocation": "951:6:1",
"nodeType": "VariableDeclaration",
"scope": 336,
"src": "935:22:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 333,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "935:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "887:71:1"
},
"src": "870:89:1"
},
{
"anonymous": false,
"documentation": {
"id": 337,
"nodeType": "StructuredDocumentation",
"src": "965:275:1",
"text": " @dev Emitted when `account` is revoked `role`.\n `sender` is the account that originated the contract call:\n - if using `revokeRole`, it is the admin role bearer\n - if using `renounceRole`, it is the role bearer (i.e. `account`)"
},
"eventSelector": "f6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b",
"id": 345,
"name": "RoleRevoked",
"nameLocation": "1251:11:1",
"nodeType": "EventDefinition",
"parameters": {
"id": 344,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 339,
"indexed": true,
"mutability": "mutable",
"name": "role",
"nameLocation": "1279:4:1",
"nodeType": "VariableDeclaration",
"scope": 345,
"src": "1263:20:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 338,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1263:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 341,
"indexed": true,
"mutability": "mutable",
"name": "account",
"nameLocation": "1301:7:1",
"nodeType": "VariableDeclaration",
"scope": 345,
"src": "1285:23:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 340,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1285:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 343,
"indexed": true,
"mutability": "mutable",
"name": "sender",
"nameLocation": "1326:6:1",
"nodeType": "VariableDeclaration",
"scope": 345,
"src": "1310:22:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 342,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1310:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1262:71:1"
},
"src": "1245:89:1"
},
{
"documentation": {
"id": 346,
"nodeType": "StructuredDocumentation",
"src": "1340:76:1",
"text": " @dev Returns `true` if `account` has been granted `role`."
},
"functionSelector": "91d14854",
"id": 355,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "hasRole",
"nameLocation": "1430:7:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 351,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 348,
"mutability": "mutable",
"name": "role",
"nameLocation": "1446:4:1",
"nodeType": "VariableDeclaration",
"scope": 355,
"src": "1438:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 347,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1438:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 350,
"mutability": "mutable",
"name": "account",
"nameLocation": "1460:7:1",
"nodeType": "VariableDeclaration",
"scope": 355,
"src": "1452:15:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 349,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "1452:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "1437:31:1"
},
"returnParameters": {
"id": 354,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 353,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 355,
"src": "1492:4:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 352,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "1492:4:1",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "1491:6:1"
},
"scope": 388,
"src": "1421:77:1",
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"documentation": {
"id": 356,
"nodeType": "StructuredDocumentation",
"src": "1504:184:1",
"text": " @dev Returns the admin role that controls `role`. See {grantRole} and\n {revokeRole}.\n To change a role's admin, use {AccessControl-_setRoleAdmin}."
},
"functionSelector": "248a9ca3",
"id": 363,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "getRoleAdmin",
"nameLocation": "1702:12:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 359,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 358,
"mutability": "mutable",
"name": "role",
"nameLocation": "1723:4:1",
"nodeType": "VariableDeclaration",
"scope": 363,
"src": "1715:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 357,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1715:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"src": "1714:14:1"
},
"returnParameters": {
"id": 362,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 361,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 363,
"src": "1752:7:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 360,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "1752:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
}
],
"src": "1751:9:1"
},
"scope": 388,
"src": "1693:68:1",
"stateMutability": "view",
"virtual": false,
"visibility": "external"
},
{
"documentation": {
"id": 364,
"nodeType": "StructuredDocumentation",
"src": "1767:239:1",
"text": " @dev Grants `role` to `account`.\n If `account` had not been already granted `role`, emits a {RoleGranted}\n event.\n Requirements:\n - the caller must have ``role``'s admin role."
},
"functionSelector": "2f2ff15d",
"id": 371,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "grantRole",
"nameLocation": "2020:9:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 369,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 366,
"mutability": "mutable",
"name": "role",
"nameLocation": "2038:4:1",
"nodeType": "VariableDeclaration",
"scope": 371,
"src": "2030:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 365,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2030:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 368,
"mutability": "mutable",
"name": "account",
"nameLocation": "2052:7:1",
"nodeType": "VariableDeclaration",
"scope": 371,
"src": "2044:15:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 367,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2044:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "2029:31:1"
},
"returnParameters": {
"id": 370,
"nodeType": "ParameterList",
"parameters": [],
"src": "2069:0:1"
},
"scope": 388,
"src": "2011:59:1",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"documentation": {
"id": 372,
"nodeType": "StructuredDocumentation",
"src": "2076:223:1",
"text": " @dev Revokes `role` from `account`.\n If `account` had been granted `role`, emits a {RoleRevoked} event.\n Requirements:\n - the caller must have ``role``'s admin role."
},
"functionSelector": "d547741f",
"id": 379,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "revokeRole",
"nameLocation": "2313:10:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 377,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 374,
"mutability": "mutable",
"name": "role",
"nameLocation": "2332:4:1",
"nodeType": "VariableDeclaration",
"scope": 379,
"src": "2324:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 373,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2324:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 376,
"mutability": "mutable",
"name": "account",
"nameLocation": "2346:7:1",
"nodeType": "VariableDeclaration",
"scope": 379,
"src": "2338:15:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 375,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2338:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "2323:31:1"
},
"returnParameters": {
"id": 378,
"nodeType": "ParameterList",
"parameters": [],
"src": "2363:0:1"
},
"scope": 388,
"src": "2304:60:1",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
},
{
"documentation": {
"id": 380,
"nodeType": "StructuredDocumentation",
"src": "2370:480:1",
"text": " @dev Revokes `role` from the calling account.\n Roles are often managed via {grantRole} and {revokeRole}: this function's\n purpose is to provide a mechanism for accounts to lose their privileges\n if they are compromised (such as when a trusted device is misplaced).\n If the calling account had been granted `role`, emits a {RoleRevoked}\n event.\n Requirements:\n - the caller must be `account`."
},
"functionSelector": "36568abe",
"id": 387,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "renounceRole",
"nameLocation": "2864:12:1",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 385,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 382,
"mutability": "mutable",
"name": "role",
"nameLocation": "2885:4:1",
"nodeType": "VariableDeclaration",
"scope": 387,
"src": "2877:12:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
},
"typeName": {
"id": 381,
"name": "bytes32",
"nodeType": "ElementaryTypeName",
"src": "2877:7:1",
"typeDescriptions": {
"typeIdentifier": "t_bytes32",
"typeString": "bytes32"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 384,
"mutability": "mutable",
"name": "account",
"nameLocation": "2899:7:1",
"nodeType": "VariableDeclaration",
"scope": 387,
"src": "2891:15:1",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 383,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2891:7:1",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "2876:31:1"
},
"returnParameters": {
"id": 386,
"nodeType": "ParameterList",
"parameters": [],
"src": "2916:0:1"
},
"scope": 388,
"src": "2855:62:1",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "external"
}
],
"scope": 389,
"src": "209:2710:1",
"usedErrors": []
}
],
"src": "94:2826:1"
},
"id": 1
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol": {
"ast": {
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol",
"exportedSymbols": {
"Context": [
410
]
},
"id": 411,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 390,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "86:23:2"
},
{
"abstract": true,
"baseContracts": [],
"canonicalName": "Context",
"contractDependencies": [],
"contractKind": "contract",
"documentation": {
"id": 391,
"nodeType": "StructuredDocumentation",
"src": "111:496:2",
"text": " @dev Provides information about the current execution context, including the\n sender of the transaction and its data. While these are generally available\n via msg.sender and msg.data, they should not be accessed in such a direct\n manner, since when dealing with meta-transactions the account sending and\n paying for execution may not be the actual sender (as far as an application\n is concerned).\n This contract is only required for intermediate, library-like contracts."
},
"fullyImplemented": true,
"id": 410,
"linearizedBaseContracts": [
410
],
"name": "Context",
"nameLocation": "626:7:2",
"nodeType": "ContractDefinition",
"nodes": [
{
"body": {
"id": 399,
"nodeType": "Block",
"src": "702:34:2",
"statements": [
{
"expression": {
"expression": {
"id": 396,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967281,
"src": "719:3:2",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 397,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "723:6:2",
"memberName": "sender",
"nodeType": "MemberAccess",
"src": "719:10:2",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"functionReturnParameters": 395,
"id": 398,
"nodeType": "Return",
"src": "712:17:2"
}
]
},
"id": 400,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_msgSender",
"nameLocation": "649:10:2",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 392,
"nodeType": "ParameterList",
"parameters": [],
"src": "659:2:2"
},
"returnParameters": {
"id": 395,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 394,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 400,
"src": "693:7:2",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 393,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "693:7:2",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "692:9:2"
},
"scope": 410,
"src": "640:96:2",
"stateMutability": "view",
"virtual": true,
"visibility": "internal"
},
{
"body": {
"id": 408,
"nodeType": "Block",
"src": "809:32:2",
"statements": [
{
"expression": {
"expression": {
"id": 405,
"name": "msg",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967281,
"src": "826:3:2",
"typeDescriptions": {
"typeIdentifier": "t_magic_message",
"typeString": "msg"
}
},
"id": 406,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "830:4:2",
"memberName": "data",
"nodeType": "MemberAccess",
"src": "826:8:2",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes calldata"
}
},
"functionReturnParameters": 404,
"id": 407,
"nodeType": "Return",
"src": "819:15:2"
}
]
},
"id": 409,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "_msgData",
"nameLocation": "751:8:2",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 401,
"nodeType": "ParameterList",
"parameters": [],
"src": "759:2:2"
},
"returnParameters": {
"id": 404,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 403,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 409,
"src": "793:14:2",
"stateVariable": false,
"storageLocation": "calldata",
"typeDescriptions": {
"typeIdentifier": "t_bytes_calldata_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 402,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "793:5:2",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"src": "792:16:2"
},
"scope": 410,
"src": "742:99:2",
"stateMutability": "view",
"virtual": true,
"visibility": "internal"
}
],
"scope": 411,
"src": "608:235:2",
"usedErrors": []
}
],
"src": "86:758:2"
},
"id": 2
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol": {
"ast": {
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Strings.sol",
"exportedSymbols": {
"Math": [
1487
],
"Strings": [
585
]
},
"id": 586,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 412,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "101:23:3"
},
{
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol",
"file": "./math/Math.sol",
"id": 413,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 586,
"sourceUnit": 1488,
"src": "126:25:3",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [],
"canonicalName": "Strings",
"contractDependencies": [],
"contractKind": "library",
"documentation": {
"id": 414,
"nodeType": "StructuredDocumentation",
"src": "153:34:3",
"text": " @dev String operations."
},
"fullyImplemented": true,
"id": 585,
"linearizedBaseContracts": [
585
],
"name": "Strings",
"nameLocation": "196:7:3",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": true,
"id": 417,
"mutability": "constant",
"name": "_SYMBOLS",
"nameLocation": "235:8:3",
"nodeType": "VariableDeclaration",
"scope": 585,
"src": "210:54:3",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes16",
"typeString": "bytes16"
},
"typeName": {
"id": 415,
"name": "bytes16",
"nodeType": "ElementaryTypeName",
"src": "210:7:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes16",
"typeString": "bytes16"
}
},
"value": {
"hexValue": "30313233343536373839616263646566",
"id": 416,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "246:18:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f",
"typeString": "literal_string \"0123456789abcdef\""
},
"value": "0123456789abcdef"
},
"visibility": "private"
},
{
"constant": true,
"id": 420,
"mutability": "constant",
"name": "_ADDRESS_LENGTH",
"nameLocation": "293:15:3",
"nodeType": "VariableDeclaration",
"scope": 585,
"src": "270:43:3",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
},
"typeName": {
"id": 418,
"name": "uint8",
"nodeType": "ElementaryTypeName",
"src": "270:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"value": {
"hexValue": "3230",
"id": 419,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "311:2:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_20_by_1",
"typeString": "int_const 20"
},
"value": "20"
},
"visibility": "private"
},
{
"body": {
"id": 467,
"nodeType": "Block",
"src": "486:625:3",
"statements": [
{
"id": 466,
"nodeType": "UncheckedBlock",
"src": "496:609:3",
"statements": [
{
"assignments": [
429
],
"declarations": [
{
"constant": false,
"id": 429,
"mutability": "mutable",
"name": "length",
"nameLocation": "528:6:3",
"nodeType": "VariableDeclaration",
"scope": 466,
"src": "520:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 428,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "520:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 436,
"initialValue": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 435,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"arguments": [
{
"id": 432,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 423,
"src": "548:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 430,
"name": "Math",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1487,
"src": "537:4:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_Math_$1487_$",
"typeString": "type(library Math)"
}
},
"id": 431,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "542:5:3",
"memberName": "log10",
"nodeType": "MemberAccess",
"referencedDeclaration": 1324,
"src": "537:10:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 433,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "537:17:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"hexValue": "31",
"id": 434,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "557:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "537:21:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "520:38:3"
},
{
"assignments": [
438
],
"declarations": [
{
"constant": false,
"id": 438,
"mutability": "mutable",
"name": "buffer",
"nameLocation": "586:6:3",
"nodeType": "VariableDeclaration",
"scope": 466,
"src": "572:20:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 437,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "572:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"id": 443,
"initialValue": {
"arguments": [
{
"id": 441,
"name": "length",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 429,
"src": "606:6:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 440,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "NewExpression",
"src": "595:10:3",
"typeDescriptions": {
"typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
"typeString": "function (uint256) pure returns (string memory)"
},
"typeName": {
"id": 439,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "599:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
}
},
"id": 442,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "595:18:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "572:41:3"
},
{
"assignments": [
445
],
"declarations": [
{
"constant": false,
"id": 445,
"mutability": "mutable",
"name": "ptr",
"nameLocation": "635:3:3",
"nodeType": "VariableDeclaration",
"scope": 466,
"src": "627:11:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 444,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "627:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 446,
"nodeType": "VariableDeclarationStatement",
"src": "627:11:3"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "708:67:3",
"statements": [
{
"nodeType": "YulAssignment",
"src": "726:35:3",
"value": {
"arguments": [
{
"name": "buffer",
"nodeType": "YulIdentifier",
"src": "737:6:3"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "749:2:3",
"type": "",
"value": "32"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "753:6:3"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "745:3:3"
},
"nodeType": "YulFunctionCall",
"src": "745:15:3"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "733:3:3"
},
"nodeType": "YulFunctionCall",
"src": "733:28:3"
},
"variableNames": [
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "726:3:3"
}
]
}
]
},
"documentation": "@solidity memory-safe-assembly",
"evmVersion": "london",
"externalReferences": [
{
"declaration": 438,
"isOffset": false,
"isSlot": false,
"src": "737:6:3",
"valueSize": 1
},
{
"declaration": 429,
"isOffset": false,
"isSlot": false,
"src": "753:6:3",
"valueSize": 1
},
{
"declaration": 445,
"isOffset": false,
"isSlot": false,
"src": "726:3:3",
"valueSize": 1
}
],
"id": 447,
"nodeType": "InlineAssembly",
"src": "699:76:3"
},
{
"body": {
"id": 462,
"nodeType": "Block",
"src": "801:267:3",
"statements": [
{
"expression": {
"id": 450,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "--",
"prefix": false,
"src": "819:5:3",
"subExpression": {
"id": 449,
"name": "ptr",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 445,
"src": "819:3:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 451,
"nodeType": "ExpressionStatement",
"src": "819:5:3"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "902:84:3",
"statements": [
{
"expression": {
"arguments": [
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "932:3:3"
},
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "946:5:3"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "953:2:3",
"type": "",
"value": "10"
}
],
"functionName": {
"name": "mod",
"nodeType": "YulIdentifier",
"src": "942:3:3"
},
"nodeType": "YulFunctionCall",
"src": "942:14:3"
},
{
"name": "_SYMBOLS",
"nodeType": "YulIdentifier",
"src": "958:8:3"
}
],
"functionName": {
"name": "byte",
"nodeType": "YulIdentifier",
"src": "937:4:3"
},
"nodeType": "YulFunctionCall",
"src": "937:30:3"
}
],
"functionName": {
"name": "mstore8",
"nodeType": "YulIdentifier",
"src": "924:7:3"
},
"nodeType": "YulFunctionCall",
"src": "924:44:3"
},
"nodeType": "YulExpressionStatement",
"src": "924:44:3"
}
]
},
"documentation": "@solidity memory-safe-assembly",
"evmVersion": "london",
"externalReferences": [
{
"declaration": 417,
"isOffset": false,
"isSlot": false,
"src": "958:8:3",
"valueSize": 1
},
{
"declaration": 445,
"isOffset": false,
"isSlot": false,
"src": "932:3:3",
"valueSize": 1
},
{
"declaration": 423,
"isOffset": false,
"isSlot": false,
"src": "946:5:3",
"valueSize": 1
}
],
"id": 452,
"nodeType": "InlineAssembly",
"src": "893:93:3"
},
{
"expression": {
"id": 455,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 453,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 423,
"src": "1003:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "/=",
"rightHandSide": {
"hexValue": "3130",
"id": 454,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1012:2:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"src": "1003:11:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 456,
"nodeType": "ExpressionStatement",
"src": "1003:11:3"
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 459,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 457,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 423,
"src": "1036:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 458,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1045:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "1036:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 461,
"nodeType": "IfStatement",
"src": "1032:21:3",
"trueBody": {
"id": 460,
"nodeType": "Break",
"src": "1048:5:3"
}
}
]
},
"condition": {
"hexValue": "74727565",
"id": 448,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "bool",
"lValueRequested": false,
"nodeType": "Literal",
"src": "795:4:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"value": "true"
},
"id": 463,
"nodeType": "WhileStatement",
"src": "788:280:3"
},
{
"expression": {
"id": 464,
"name": "buffer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 438,
"src": "1088:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
},
"functionReturnParameters": 427,
"id": 465,
"nodeType": "Return",
"src": "1081:13:3"
}
]
}
]
},
"documentation": {
"id": 421,
"nodeType": "StructuredDocumentation",
"src": "320:90:3",
"text": " @dev Converts a `uint256` to its ASCII `string` decimal representation."
},
"id": 468,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "toString",
"nameLocation": "424:8:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 424,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 423,
"mutability": "mutable",
"name": "value",
"nameLocation": "441:5:3",
"nodeType": "VariableDeclaration",
"scope": 468,
"src": "433:13:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 422,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "433:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "432:15:3"
},
"returnParameters": {
"id": 427,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 426,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 468,
"src": "471:13:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 425,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "471:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "470:15:3"
},
"scope": 585,
"src": "415:696:3",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 487,
"nodeType": "Block",
"src": "1290:100:3",
"statements": [
{
"id": 486,
"nodeType": "UncheckedBlock",
"src": "1300:84:3",
"statements": [
{
"expression": {
"arguments": [
{
"id": 477,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 471,
"src": "1343:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 483,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"arguments": [
{
"id": 480,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 471,
"src": "1362:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"expression": {
"id": 478,
"name": "Math",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1487,
"src": "1350:4:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_Math_$1487_$",
"typeString": "type(library Math)"
}
},
"id": 479,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"memberLocation": "1355:6:3",
"memberName": "log256",
"nodeType": "MemberAccess",
"referencedDeclaration": 1447,
"src": "1350:11:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 481,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "1350:18:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"hexValue": "31",
"id": 482,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1371:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "1350:22:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 476,
"name": "toHexString",
"nodeType": "Identifier",
"overloadedDeclarations": [
488,
564,
584
],
"referencedDeclaration": 564,
"src": "1331:11:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
"typeString": "function (uint256,uint256) pure returns (string memory)"
}
},
"id": 484,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "1331:42:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
},
"functionReturnParameters": 475,
"id": 485,
"nodeType": "Return",
"src": "1324:49:3"
}
]
}
]
},
"documentation": {
"id": 469,
"nodeType": "StructuredDocumentation",
"src": "1117:94:3",
"text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."
},
"id": 488,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "toHexString",
"nameLocation": "1225:11:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 472,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 471,
"mutability": "mutable",
"name": "value",
"nameLocation": "1245:5:3",
"nodeType": "VariableDeclaration",
"scope": 488,
"src": "1237:13:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 470,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1237:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "1236:15:3"
},
"returnParameters": {
"id": 475,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 474,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 488,
"src": "1275:13:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 473,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "1275:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "1274:15:3"
},
"scope": 585,
"src": "1216:174:3",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 563,
"nodeType": "Block",
"src": "1603:347:3",
"statements": [
{
"assignments": [
499
],
"declarations": [
{
"constant": false,
"id": 499,
"mutability": "mutable",
"name": "buffer",
"nameLocation": "1626:6:3",
"nodeType": "VariableDeclaration",
"scope": 563,
"src": "1613:19:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes"
},
"typeName": {
"id": 498,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "1613:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
},
"visibility": "internal"
}
],
"id": 508,
"initialValue": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 506,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 504,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 502,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1645:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 503,
"name": "length",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 493,
"src": "1649:6:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "1645:10:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"hexValue": "32",
"id": 505,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1658:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "1645:14:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 501,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "NewExpression",
"src": "1635:9:3",
"typeDescriptions": {
"typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$",
"typeString": "function (uint256) pure returns (bytes memory)"
},
"typeName": {
"id": 500,
"name": "bytes",
"nodeType": "ElementaryTypeName",
"src": "1639:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_storage_ptr",
"typeString": "bytes"
}
}
},
"id": 507,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "1635:25:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "1613:47:3"
},
{
"expression": {
"id": 513,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"baseExpression": {
"id": 509,
"name": "buffer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 499,
"src": "1670:6:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"id": 511,
"indexExpression": {
"hexValue": "30",
"id": 510,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1677:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "1670:9:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes1",
"typeString": "bytes1"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "30",
"id": 512,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1682:3:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d",
"typeString": "literal_string \"0\""
},
"value": "0"
},
"src": "1670:15:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes1",
"typeString": "bytes1"
}
},
"id": 514,
"nodeType": "ExpressionStatement",
"src": "1670:15:3"
},
{
"expression": {
"id": 519,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"baseExpression": {
"id": 515,
"name": "buffer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 499,
"src": "1695:6:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"id": 517,
"indexExpression": {
"hexValue": "31",
"id": 516,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1702:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "1695:9:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes1",
"typeString": "bytes1"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"hexValue": "78",
"id": 518,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1707:3:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83",
"typeString": "literal_string \"x\""
},
"value": "x"
},
"src": "1695:15:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes1",
"typeString": "bytes1"
}
},
"id": 520,
"nodeType": "ExpressionStatement",
"src": "1695:15:3"
},
{
"body": {
"id": 549,
"nodeType": "Block",
"src": "1765:83:3",
"statements": [
{
"expression": {
"id": 543,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"baseExpression": {
"id": 535,
"name": "buffer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 499,
"src": "1779:6:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
},
"id": 537,
"indexExpression": {
"id": 536,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 522,
"src": "1786:1:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": true,
"isPure": false,
"lValueRequested": true,
"nodeType": "IndexAccess",
"src": "1779:9:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes1",
"typeString": "bytes1"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"baseExpression": {
"id": 538,
"name": "_SYMBOLS",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 417,
"src": "1791:8:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes16",
"typeString": "bytes16"
}
},
"id": 542,
"indexExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 541,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 539,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 491,
"src": "1800:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "&",
"rightExpression": {
"hexValue": "307866",
"id": 540,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1808:3:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_15_by_1",
"typeString": "int_const 15"
},
"value": "0xf"
},
"src": "1800:11:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "IndexAccess",
"src": "1791:21:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes1",
"typeString": "bytes1"
}
},
"src": "1779:33:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes1",
"typeString": "bytes1"
}
},
"id": 544,
"nodeType": "ExpressionStatement",
"src": "1779:33:3"
},
{
"expression": {
"id": 547,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 545,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 491,
"src": "1826:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "34",
"id": 546,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1836:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_4_by_1",
"typeString": "int_const 4"
},
"value": "4"
},
"src": "1826:11:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 548,
"nodeType": "ExpressionStatement",
"src": "1826:11:3"
}
]
},
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 531,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 529,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 522,
"src": "1753:1:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "31",
"id": 530,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1757:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "1753:5:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 550,
"initializationExpression": {
"assignments": [
522
],
"declarations": [
{
"constant": false,
"id": 522,
"mutability": "mutable",
"name": "i",
"nameLocation": "1733:1:3",
"nodeType": "VariableDeclaration",
"scope": 550,
"src": "1725:9:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 521,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1725:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 528,
"initialValue": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 527,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 525,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 523,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1737:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 524,
"name": "length",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 493,
"src": "1741:6:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "1737:10:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"hexValue": "31",
"id": 526,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1750:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "1737:14:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "1725:26:3"
},
"loopExpression": {
"expression": {
"id": 533,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "--",
"prefix": true,
"src": "1760:3:3",
"subExpression": {
"id": 532,
"name": "i",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 522,
"src": "1762:1:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 534,
"nodeType": "ExpressionStatement",
"src": "1760:3:3"
},
"nodeType": "ForStatement",
"src": "1720:128:3"
},
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 554,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 552,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 491,
"src": "1865:5:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 553,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1874:1:3",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "1865:10:3",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "537472696e67733a20686578206c656e67746820696e73756666696369656e74",
"id": 555,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1877:34:3",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
"typeString": "literal_string \"Strings: hex length insufficient\""
},
"value": "Strings: hex length insufficient"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2",
"typeString": "literal_string \"Strings: hex length insufficient\""
}
],
"id": 551,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "1857:7:3",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 556,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "1857:55:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 557,
"nodeType": "ExpressionStatement",
"src": "1857:55:3"
},
{
"expression": {
"arguments": [
{
"id": 560,
"name": "buffer",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 499,
"src": "1936:6:3",
"typeDescriptions": {
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bytes_memory_ptr",
"typeString": "bytes memory"
}
],
"id": 559,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "1929:6:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_string_storage_ptr_$",
"typeString": "type(string storage pointer)"
},
"typeName": {
"id": 558,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "1929:6:3",
"typeDescriptions": {}
}
},
"id": 561,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "1929:14:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
},
"functionReturnParameters": 497,
"id": 562,
"nodeType": "Return",
"src": "1922:21:3"
}
]
},
"documentation": {
"id": 489,
"nodeType": "StructuredDocumentation",
"src": "1396:112:3",
"text": " @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."
},
"id": 564,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "toHexString",
"nameLocation": "1522:11:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 494,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 491,
"mutability": "mutable",
"name": "value",
"nameLocation": "1542:5:3",
"nodeType": "VariableDeclaration",
"scope": 564,
"src": "1534:13:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 490,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1534:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 493,
"mutability": "mutable",
"name": "length",
"nameLocation": "1557:6:3",
"nodeType": "VariableDeclaration",
"scope": 564,
"src": "1549:14:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 492,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1549:7:3",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "1533:31:3"
},
"returnParameters": {
"id": 497,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 496,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 564,
"src": "1588:13:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 495,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "1588:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "1587:15:3"
},
"scope": 585,
"src": "1513:437:3",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 583,
"nodeType": "Block",
"src": "2175:76:3",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"id": 577,
"name": "addr",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 567,
"src": "2220:4:3",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_address",
"typeString": "address"
}
],
"id": 576,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2212:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint160_$",
"typeString": "type(uint160)"
},
"typeName": {
"id": 575,
"name": "uint160",
"nodeType": "ElementaryTypeName",
"src": "2212:7:3",
"typeDescriptions": {}
}
},
"id": 578,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2212:13:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint160",
"typeString": "uint160"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint160",
"typeString": "uint160"
}
],
"id": 574,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"nodeType": "ElementaryTypeNameExpression",
"src": "2204:7:3",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_uint256_$",
"typeString": "type(uint256)"
},
"typeName": {
"id": 573,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2204:7:3",
"typeDescriptions": {}
}
},
"id": 579,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "typeConversion",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2204:22:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 580,
"name": "_ADDRESS_LENGTH",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 420,
"src": "2228:15:3",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
],
"id": 572,
"name": "toHexString",
"nodeType": "Identifier",
"overloadedDeclarations": [
488,
564,
584
],
"referencedDeclaration": 564,
"src": "2192:11:3",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$",
"typeString": "function (uint256,uint256) pure returns (string memory)"
}
},
"id": 581,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2192:52:3",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string memory"
}
},
"functionReturnParameters": 571,
"id": 582,
"nodeType": "Return",
"src": "2185:59:3"
}
]
},
"documentation": {
"id": 565,
"nodeType": "StructuredDocumentation",
"src": "1956:141:3",
"text": " @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation."
},
"id": 584,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "toHexString",
"nameLocation": "2111:11:3",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 568,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 567,
"mutability": "mutable",
"name": "addr",
"nameLocation": "2131:4:3",
"nodeType": "VariableDeclaration",
"scope": 584,
"src": "2123:12:3",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
},
"typeName": {
"id": 566,
"name": "address",
"nodeType": "ElementaryTypeName",
"src": "2123:7:3",
"stateMutability": "nonpayable",
"typeDescriptions": {
"typeIdentifier": "t_address",
"typeString": "address"
}
},
"visibility": "internal"
}
],
"src": "2122:14:3"
},
"returnParameters": {
"id": 571,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 570,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 584,
"src": "2160:13:3",
"stateVariable": false,
"storageLocation": "memory",
"typeDescriptions": {
"typeIdentifier": "t_string_memory_ptr",
"typeString": "string"
},
"typeName": {
"id": 569,
"name": "string",
"nodeType": "ElementaryTypeName",
"src": "2160:6:3",
"typeDescriptions": {
"typeIdentifier": "t_string_storage_ptr",
"typeString": "string"
}
},
"visibility": "internal"
}
],
"src": "2159:15:3"
},
"scope": 585,
"src": "2102:149:3",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
}
],
"scope": 586,
"src": "188:2065:3",
"usedErrors": []
}
],
"src": "101:2153:3"
},
"id": 3
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol": {
"ast": {
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/ERC165.sol",
"exportedSymbols": {
"ERC165": [
609
],
"IERC165": [
621
]
},
"id": 610,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 587,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "99:23:4"
},
{
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol",
"file": "./IERC165.sol",
"id": 588,
"nameLocation": "-1:-1:-1",
"nodeType": "ImportDirective",
"scope": 610,
"sourceUnit": 622,
"src": "124:23:4",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": true,
"baseContracts": [
{
"baseName": {
"id": 590,
"name": "IERC165",
"nameLocations": [
"754:7:4"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 621,
"src": "754:7:4"
},
"id": 591,
"nodeType": "InheritanceSpecifier",
"src": "754:7:4"
}
],
"canonicalName": "ERC165",
"contractDependencies": [],
"contractKind": "contract",
"documentation": {
"id": 589,
"nodeType": "StructuredDocumentation",
"src": "149:576:4",
"text": " @dev Implementation of the {IERC165} interface.\n Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check\n for the additional interface id that will be supported. For example:\n ```solidity\n function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {\n return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);\n }\n ```\n Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation."
},
"fullyImplemented": true,
"id": 609,
"linearizedBaseContracts": [
609,
621
],
"name": "ERC165",
"nameLocation": "744:6:4",
"nodeType": "ContractDefinition",
"nodes": [
{
"baseFunctions": [
620
],
"body": {
"id": 607,
"nodeType": "Block",
"src": "920:64:4",
"statements": [
{
"expression": {
"commonType": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"id": 605,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 600,
"name": "interfaceId",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 594,
"src": "937:11:4",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"expression": {
"arguments": [
{
"id": 602,
"name": "IERC165",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 621,
"src": "957:7:4",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_IERC165_$621_$",
"typeString": "type(contract IERC165)"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_type$_t_contract$_IERC165_$621_$",
"typeString": "type(contract IERC165)"
}
],
"id": 601,
"name": "type",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967269,
"src": "952:4:4",
"typeDescriptions": {
"typeIdentifier": "t_function_metatype_pure$__$returns$__$",
"typeString": "function () pure"
}
},
"id": 603,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "952:13:4",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_magic_meta_type_t_contract$_IERC165_$621",
"typeString": "type(contract IERC165)"
}
},
"id": 604,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "966:11:4",
"memberName": "interfaceId",
"nodeType": "MemberAccess",
"src": "952:25:4",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"src": "937:40:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"functionReturnParameters": 599,
"id": 606,
"nodeType": "Return",
"src": "930:47:4"
}
]
},
"documentation": {
"id": 592,
"nodeType": "StructuredDocumentation",
"src": "768:56:4",
"text": " @dev See {IERC165-supportsInterface}."
},
"functionSelector": "01ffc9a7",
"id": 608,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "supportsInterface",
"nameLocation": "838:17:4",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 596,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "896:8:4"
},
"parameters": {
"id": 595,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 594,
"mutability": "mutable",
"name": "interfaceId",
"nameLocation": "863:11:4",
"nodeType": "VariableDeclaration",
"scope": 608,
"src": "856:18:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 593,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "856:6:4",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"visibility": "internal"
}
],
"src": "855:20:4"
},
"returnParameters": {
"id": 599,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 598,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 608,
"src": "914:4:4",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 597,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "914:4:4",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "913:6:4"
},
"scope": 609,
"src": "829:155:4",
"stateMutability": "view",
"virtual": true,
"visibility": "public"
}
],
"scope": 610,
"src": "726:260:4",
"usedErrors": []
}
],
"src": "99:888:4"
},
"id": 4
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol": {
"ast": {
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/introspection/IERC165.sol",
"exportedSymbols": {
"IERC165": [
621
]
},
"id": 622,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 611,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "100:23:5"
},
{
"abstract": false,
"baseContracts": [],
"canonicalName": "IERC165",
"contractDependencies": [],
"contractKind": "interface",
"documentation": {
"id": 612,
"nodeType": "StructuredDocumentation",
"src": "125:279:5",
"text": " @dev Interface of the ERC165 standard, as defined in the\n https://eips.ethereum.org/EIPS/eip-165[EIP].\n Implementers can declare support of contract interfaces, which can then be\n queried by others ({ERC165Checker}).\n For an implementation, see {ERC165}."
},
"fullyImplemented": false,
"id": 621,
"linearizedBaseContracts": [
621
],
"name": "IERC165",
"nameLocation": "415:7:5",
"nodeType": "ContractDefinition",
"nodes": [
{
"documentation": {
"id": 613,
"nodeType": "StructuredDocumentation",
"src": "429:340:5",
"text": " @dev Returns true if this contract implements the interface defined by\n `interfaceId`. See the corresponding\n https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]\n to learn more about how these ids are created.\n This function call must use less than 30 000 gas."
},
"functionSelector": "01ffc9a7",
"id": 620,
"implemented": false,
"kind": "function",
"modifiers": [],
"name": "supportsInterface",
"nameLocation": "783:17:5",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 616,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 615,
"mutability": "mutable",
"name": "interfaceId",
"nameLocation": "808:11:5",
"nodeType": "VariableDeclaration",
"scope": 620,
"src": "801:18:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
},
"typeName": {
"id": 614,
"name": "bytes4",
"nodeType": "ElementaryTypeName",
"src": "801:6:5",
"typeDescriptions": {
"typeIdentifier": "t_bytes4",
"typeString": "bytes4"
}
},
"visibility": "internal"
}
],
"src": "800:20:5"
},
"returnParameters": {
"id": 619,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 618,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 620,
"src": "844:4:5",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"typeName": {
"id": 617,
"name": "bool",
"nodeType": "ElementaryTypeName",
"src": "844:4:5",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"visibility": "internal"
}
],
"src": "843:6:5"
},
"scope": 621,
"src": "774:76:5",
"stateMutability": "view",
"virtual": false,
"visibility": "external"
}
],
"scope": 622,
"src": "405:447:5",
"usedErrors": []
}
],
"src": "100:753:5"
},
"id": 5
},
"https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol": {
"ast": {
"absolutePath": "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/math/Math.sol",
"exportedSymbols": {
"Math": [
1487
]
},
"id": 1488,
"license": "MIT",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 623,
"literals": [
"solidity",
"^",
"0.8",
".0"
],
"nodeType": "PragmaDirective",
"src": "103:23:6"
},
{
"abstract": false,
"baseContracts": [],
"canonicalName": "Math",
"contractDependencies": [],
"contractKind": "library",
"documentation": {
"id": 624,
"nodeType": "StructuredDocumentation",
"src": "128:73:6",
"text": " @dev Standard math utilities missing in the Solidity language."
},
"fullyImplemented": true,
"id": 1487,
"linearizedBaseContracts": [
1487
],
"name": "Math",
"nameLocation": "210:4:6",
"nodeType": "ContractDefinition",
"nodes": [
{
"canonicalName": "Math.Rounding",
"id": 628,
"members": [
{
"id": 625,
"name": "Down",
"nameLocation": "245:4:6",
"nodeType": "EnumValue",
"src": "245:4:6"
},
{
"id": 626,
"name": "Up",
"nameLocation": "287:2:6",
"nodeType": "EnumValue",
"src": "287:2:6"
},
{
"id": 627,
"name": "Zero",
"nameLocation": "318:4:6",
"nodeType": "EnumValue",
"src": "318:4:6"
}
],
"name": "Rounding",
"nameLocation": "226:8:6",
"nodeType": "EnumDefinition",
"src": "221:122:6"
},
{
"body": {
"id": 645,
"nodeType": "Block",
"src": "480:37:6",
"statements": [
{
"expression": {
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 640,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 638,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 631,
"src": "497:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"id": 639,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 633,
"src": "501:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "497:5:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"id": 642,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 633,
"src": "509:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 643,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "497:13:6",
"trueExpression": {
"id": 641,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 631,
"src": "505:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 637,
"id": 644,
"nodeType": "Return",
"src": "490:20:6"
}
]
},
"documentation": {
"id": 629,
"nodeType": "StructuredDocumentation",
"src": "349:59:6",
"text": " @dev Returns the largest of two numbers."
},
"id": 646,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "max",
"nameLocation": "422:3:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 634,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 631,
"mutability": "mutable",
"name": "a",
"nameLocation": "434:1:6",
"nodeType": "VariableDeclaration",
"scope": 646,
"src": "426:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 630,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "426:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 633,
"mutability": "mutable",
"name": "b",
"nameLocation": "445:1:6",
"nodeType": "VariableDeclaration",
"scope": 646,
"src": "437:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 632,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "437:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "425:22:6"
},
"returnParameters": {
"id": 637,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 636,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 646,
"src": "471:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 635,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "471:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "470:9:6"
},
"scope": 1487,
"src": "413:104:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 663,
"nodeType": "Block",
"src": "655:37:6",
"statements": [
{
"expression": {
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 658,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 656,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 649,
"src": "672:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"id": 657,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 651,
"src": "676:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "672:5:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"id": 660,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 651,
"src": "684:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 661,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "672:13:6",
"trueExpression": {
"id": 659,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 649,
"src": "680:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 655,
"id": 662,
"nodeType": "Return",
"src": "665:20:6"
}
]
},
"documentation": {
"id": 647,
"nodeType": "StructuredDocumentation",
"src": "523:60:6",
"text": " @dev Returns the smallest of two numbers."
},
"id": 664,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "min",
"nameLocation": "597:3:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 652,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 649,
"mutability": "mutable",
"name": "a",
"nameLocation": "609:1:6",
"nodeType": "VariableDeclaration",
"scope": 664,
"src": "601:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 648,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "601:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 651,
"mutability": "mutable",
"name": "b",
"nameLocation": "620:1:6",
"nodeType": "VariableDeclaration",
"scope": 664,
"src": "612:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 650,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "612:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "600:22:6"
},
"returnParameters": {
"id": 655,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 654,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 664,
"src": "646:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 653,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "646:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "645:9:6"
},
"scope": 1487,
"src": "588:104:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 686,
"nodeType": "Block",
"src": "876:82:6",
"statements": [
{
"expression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 684,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 676,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 674,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 667,
"src": "931:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "&",
"rightExpression": {
"id": 675,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 669,
"src": "935:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "931:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 677,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "930:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 683,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 680,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 678,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 667,
"src": "941:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "^",
"rightExpression": {
"id": 679,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 669,
"src": "945:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "941:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 681,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "940:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"hexValue": "32",
"id": 682,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "950:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "940:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "930:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 673,
"id": 685,
"nodeType": "Return",
"src": "923:28:6"
}
]
},
"documentation": {
"id": 665,
"nodeType": "StructuredDocumentation",
"src": "698:102:6",
"text": " @dev Returns the average of two numbers. The result is rounded towards\n zero."
},
"id": 687,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "average",
"nameLocation": "814:7:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 670,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 667,
"mutability": "mutable",
"name": "a",
"nameLocation": "830:1:6",
"nodeType": "VariableDeclaration",
"scope": 687,
"src": "822:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 666,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "822:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 669,
"mutability": "mutable",
"name": "b",
"nameLocation": "841:1:6",
"nodeType": "VariableDeclaration",
"scope": 687,
"src": "833:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 668,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "833:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "821:22:6"
},
"returnParameters": {
"id": 673,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 672,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 687,
"src": "867:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 671,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "867:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "866:9:6"
},
"scope": 1487,
"src": "805:153:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 711,
"nodeType": "Block",
"src": "1228:123:6",
"statements": [
{
"expression": {
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 699,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 697,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 690,
"src": "1316:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 698,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1321:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "1316:6:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 708,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 706,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 703,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 701,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 690,
"src": "1330:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"hexValue": "31",
"id": 702,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1334:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "1330:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 704,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "1329:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 705,
"name": "b",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 692,
"src": "1339:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "1329:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"hexValue": "31",
"id": 707,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1343:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "1329:15:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 709,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "1316:28:6",
"trueExpression": {
"hexValue": "30",
"id": 700,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "1325:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 696,
"id": 710,
"nodeType": "Return",
"src": "1309:35:6"
}
]
},
"documentation": {
"id": 688,
"nodeType": "StructuredDocumentation",
"src": "964:188:6",
"text": " @dev Returns the ceiling of the division of two numbers.\n This differs from standard division with `/` in that it rounds up instead\n of rounding down."
},
"id": 712,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "ceilDiv",
"nameLocation": "1166:7:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 693,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 690,
"mutability": "mutable",
"name": "a",
"nameLocation": "1182:1:6",
"nodeType": "VariableDeclaration",
"scope": 712,
"src": "1174:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 689,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1174:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 692,
"mutability": "mutable",
"name": "b",
"nameLocation": "1193:1:6",
"nodeType": "VariableDeclaration",
"scope": 712,
"src": "1185:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 691,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1185:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "1173:22:6"
},
"returnParameters": {
"id": 696,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 695,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 712,
"src": "1219:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 694,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1219:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "1218:9:6"
},
"scope": 1487,
"src": "1157:194:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 834,
"nodeType": "Block",
"src": "1795:3822:6",
"statements": [
{
"id": 833,
"nodeType": "UncheckedBlock",
"src": "1805:3806:6",
"statements": [
{
"assignments": [
725
],
"declarations": [
{
"constant": false,
"id": 725,
"mutability": "mutable",
"name": "prod0",
"nameLocation": "2134:5:6",
"nodeType": "VariableDeclaration",
"scope": 833,
"src": "2126:13:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 724,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2126:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 726,
"nodeType": "VariableDeclarationStatement",
"src": "2126:13:6"
},
{
"assignments": [
728
],
"declarations": [
{
"constant": false,
"id": 728,
"mutability": "mutable",
"name": "prod1",
"nameLocation": "2206:5:6",
"nodeType": "VariableDeclaration",
"scope": 833,
"src": "2198:13:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 727,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2198:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 729,
"nodeType": "VariableDeclarationStatement",
"src": "2198:13:6"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "2278:157:6",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "2296:30:6",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2313:1:6"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2316:1:6"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2323:1:6",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "2319:3:6"
},
"nodeType": "YulFunctionCall",
"src": "2319:6:6"
}
],
"functionName": {
"name": "mulmod",
"nodeType": "YulIdentifier",
"src": "2306:6:6"
},
"nodeType": "YulFunctionCall",
"src": "2306:20:6"
},
"variables": [
{
"name": "mm",
"nodeType": "YulTypedName",
"src": "2300:2:6",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "2343:18:6",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "2356:1:6"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "2359:1:6"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "2352:3:6"
},
"nodeType": "YulFunctionCall",
"src": "2352:9:6"
},
"variableNames": [
{
"name": "prod0",
"nodeType": "YulIdentifier",
"src": "2343:5:6"
}
]
},
{
"nodeType": "YulAssignment",
"src": "2378:43:6",
"value": {
"arguments": [
{
"arguments": [
{
"name": "mm",
"nodeType": "YulIdentifier",
"src": "2395:2:6"
},
{
"name": "prod0",
"nodeType": "YulIdentifier",
"src": "2399:5:6"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2391:3:6"
},
"nodeType": "YulFunctionCall",
"src": "2391:14:6"
},
{
"arguments": [
{
"name": "mm",
"nodeType": "YulIdentifier",
"src": "2410:2:6"
},
{
"name": "prod0",
"nodeType": "YulIdentifier",
"src": "2414:5:6"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "2407:2:6"
},
"nodeType": "YulFunctionCall",
"src": "2407:13:6"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2387:3:6"
},
"nodeType": "YulFunctionCall",
"src": "2387:34:6"
},
"variableNames": [
{
"name": "prod1",
"nodeType": "YulIdentifier",
"src": "2378:5:6"
}
]
}
]
},
"evmVersion": "london",
"externalReferences": [
{
"declaration": 725,
"isOffset": false,
"isSlot": false,
"src": "2343:5:6",
"valueSize": 1
},
{
"declaration": 725,
"isOffset": false,
"isSlot": false,
"src": "2399:5:6",
"valueSize": 1
},
{
"declaration": 725,
"isOffset": false,
"isSlot": false,
"src": "2414:5:6",
"valueSize": 1
},
{
"declaration": 728,
"isOffset": false,
"isSlot": false,
"src": "2378:5:6",
"valueSize": 1
},
{
"declaration": 715,
"isOffset": false,
"isSlot": false,
"src": "2313:1:6",
"valueSize": 1
},
{
"declaration": 715,
"isOffset": false,
"isSlot": false,
"src": "2356:1:6",
"valueSize": 1
},
{
"declaration": 717,
"isOffset": false,
"isSlot": false,
"src": "2316:1:6",
"valueSize": 1
},
{
"declaration": 717,
"isOffset": false,
"isSlot": false,
"src": "2359:1:6",
"valueSize": 1
}
],
"id": 730,
"nodeType": "InlineAssembly",
"src": "2269:166:6"
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 733,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 731,
"name": "prod1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 728,
"src": "2516:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 732,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2525:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "2516:10:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 739,
"nodeType": "IfStatement",
"src": "2512:75:6",
"trueBody": {
"id": 738,
"nodeType": "Block",
"src": "2528:59:6",
"statements": [
{
"expression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 736,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 734,
"name": "prod0",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 725,
"src": "2553:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 735,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "2561:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2553:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 723,
"id": 737,
"nodeType": "Return",
"src": "2546:26:6"
}
]
}
},
{
"expression": {
"arguments": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 743,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 741,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "2697:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"id": 742,
"name": "prod1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 728,
"src": "2711:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "2697:19:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
{
"hexValue": "4d6174683a206d756c446976206f766572666c6f77",
"id": 744,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "string",
"lValueRequested": false,
"nodeType": "Literal",
"src": "2718:23:6",
"typeDescriptions": {
"typeIdentifier": "t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851",
"typeString": "literal_string \"Math: mulDiv overflow\""
},
"value": "Math: mulDiv overflow"
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_bool",
"typeString": "bool"
},
{
"typeIdentifier": "t_stringliteral_d87093691d63b122ac2c14d1b11554b287e2431cf2b03550b3be7cffb0f86851",
"typeString": "literal_string \"Math: mulDiv overflow\""
}
],
"id": 740,
"name": "require",
"nodeType": "Identifier",
"overloadedDeclarations": [
4294967278,
4294967278
],
"referencedDeclaration": 4294967278,
"src": "2689:7:6",
"typeDescriptions": {
"typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
"typeString": "function (bool,string memory) pure"
}
},
"id": 745,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "2689:53:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_tuple$__$",
"typeString": "tuple()"
}
},
"id": 746,
"nodeType": "ExpressionStatement",
"src": "2689:53:6"
},
{
"assignments": [
748
],
"declarations": [
{
"constant": false,
"id": 748,
"mutability": "mutable",
"name": "remainder",
"nameLocation": "3006:9:6",
"nodeType": "VariableDeclaration",
"scope": 833,
"src": "2998:17:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 747,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "2998:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 749,
"nodeType": "VariableDeclarationStatement",
"src": "2998:17:6"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "3038:291:6",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3107:38:6",
"value": {
"arguments": [
{
"name": "x",
"nodeType": "YulIdentifier",
"src": "3127:1:6"
},
{
"name": "y",
"nodeType": "YulIdentifier",
"src": "3130:1:6"
},
{
"name": "denominator",
"nodeType": "YulIdentifier",
"src": "3133:11:6"
}
],
"functionName": {
"name": "mulmod",
"nodeType": "YulIdentifier",
"src": "3120:6:6"
},
"nodeType": "YulFunctionCall",
"src": "3120:25:6"
},
"variableNames": [
{
"name": "remainder",
"nodeType": "YulIdentifier",
"src": "3107:9:6"
}
]
},
{
"nodeType": "YulAssignment",
"src": "3227:41:6",
"value": {
"arguments": [
{
"name": "prod1",
"nodeType": "YulIdentifier",
"src": "3240:5:6"
},
{
"arguments": [
{
"name": "remainder",
"nodeType": "YulIdentifier",
"src": "3250:9:6"
},
{
"name": "prod0",
"nodeType": "YulIdentifier",
"src": "3261:5:6"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "3247:2:6"
},
"nodeType": "YulFunctionCall",
"src": "3247:20:6"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "3236:3:6"
},
"nodeType": "YulFunctionCall",
"src": "3236:32:6"
},
"variableNames": [
{
"name": "prod1",
"nodeType": "YulIdentifier",
"src": "3227:5:6"
}
]
},
{
"nodeType": "YulAssignment",
"src": "3285:30:6",
"value": {
"arguments": [
{
"name": "prod0",
"nodeType": "YulIdentifier",
"src": "3298:5:6"
},
{
"name": "remainder",
"nodeType": "YulIdentifier",
"src": "3305:9:6"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "3294:3:6"
},
"nodeType": "YulFunctionCall",
"src": "3294:21:6"
},
"variableNames": [
{
"name": "prod0",
"nodeType": "YulIdentifier",
"src": "3285:5:6"
}
]
}
]
},
"evmVersion": "london",
"externalReferences": [
{
"declaration": 719,
"isOffset": false,
"isSlot": false,
"src": "3133:11:6",
"valueSize": 1
},
{
"declaration": 725,
"isOffset": false,
"isSlot": false,
"src": "3261:5:6",
"valueSize": 1
},
{
"declaration": 725,
"isOffset": false,
"isSlot": false,
"src": "3285:5:6",
"valueSize": 1
},
{
"declaration": 725,
"isOffset": false,
"isSlot": false,
"src": "3298:5:6",
"valueSize": 1
},
{
"declaration": 728,
"isOffset": false,
"isSlot": false,
"src": "3227:5:6",
"valueSize": 1
},
{
"declaration": 728,
"isOffset": false,
"isSlot": false,
"src": "3240:5:6",
"valueSize": 1
},
{
"declaration": 748,
"isOffset": false,
"isSlot": false,
"src": "3107:9:6",
"valueSize": 1
},
{
"declaration": 748,
"isOffset": false,
"isSlot": false,
"src": "3250:9:6",
"valueSize": 1
},
{
"declaration": 748,
"isOffset": false,
"isSlot": false,
"src": "3305:9:6",
"valueSize": 1
},
{
"declaration": 715,
"isOffset": false,
"isSlot": false,
"src": "3127:1:6",
"valueSize": 1
},
{
"declaration": 717,
"isOffset": false,
"isSlot": false,
"src": "3130:1:6",
"valueSize": 1
}
],
"id": 750,
"nodeType": "InlineAssembly",
"src": "3029:300:6"
},
{
"assignments": [
752
],
"declarations": [
{
"constant": false,
"id": 752,
"mutability": "mutable",
"name": "twos",
"nameLocation": "3644:4:6",
"nodeType": "VariableDeclaration",
"scope": 833,
"src": "3636:12:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 751,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "3636:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 760,
"initialValue": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 759,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 753,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "3651:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "&",
"rightExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 757,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 755,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "UnaryOperation",
"operator": "~",
"prefix": true,
"src": "3666:12:6",
"subExpression": {
"id": 754,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "3667:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"hexValue": "31",
"id": 756,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "3681:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "3666:16:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 758,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "3665:18:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "3651:32:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "3636:47:6"
},
{
"AST": {
"nodeType": "YulBlock",
"src": "3706:362:6",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3771:37:6",
"value": {
"arguments": [
{
"name": "denominator",
"nodeType": "YulIdentifier",
"src": "3790:11:6"
},
{
"name": "twos",
"nodeType": "YulIdentifier",
"src": "3803:4:6"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "3786:3:6"
},
"nodeType": "YulFunctionCall",
"src": "3786:22:6"
},
"variableNames": [
{
"name": "denominator",
"nodeType": "YulIdentifier",
"src": "3771:11:6"
}
]
},
{
"nodeType": "YulAssignment",
"src": "3875:25:6",
"value": {
"arguments": [
{
"name": "prod0",
"nodeType": "YulIdentifier",
"src": "3888:5:6"
},
{
"name": "twos",
"nodeType": "YulIdentifier",
"src": "3895:4:6"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "3884:3:6"
},
"nodeType": "YulFunctionCall",
"src": "3884:16:6"
},
"variableNames": [
{
"name": "prod0",
"nodeType": "YulIdentifier",
"src": "3875:5:6"
}
]
},
{
"nodeType": "YulAssignment",
"src": "4015:39:6",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4035:1:6",
"type": "",
"value": "0"
},
{
"name": "twos",
"nodeType": "YulIdentifier",
"src": "4038:4:6"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "4031:3:6"
},
"nodeType": "YulFunctionCall",
"src": "4031:12:6"
},
{
"name": "twos",
"nodeType": "YulIdentifier",
"src": "4045:4:6"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "4027:3:6"
},
"nodeType": "YulFunctionCall",
"src": "4027:23:6"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4052:1:6",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4023:3:6"
},
"nodeType": "YulFunctionCall",
"src": "4023:31:6"
},
"variableNames": [
{
"name": "twos",
"nodeType": "YulIdentifier",
"src": "4015:4:6"
}
]
}
]
},
"evmVersion": "london",
"externalReferences": [
{
"declaration": 719,
"isOffset": false,
"isSlot": false,
"src": "3771:11:6",
"valueSize": 1
},
{
"declaration": 719,
"isOffset": false,
"isSlot": false,
"src": "3790:11:6",
"valueSize": 1
},
{
"declaration": 725,
"isOffset": false,
"isSlot": false,
"src": "3875:5:6",
"valueSize": 1
},
{
"declaration": 725,
"isOffset": false,
"isSlot": false,
"src": "3888:5:6",
"valueSize": 1
},
{
"declaration": 752,
"isOffset": false,
"isSlot": false,
"src": "3803:4:6",
"valueSize": 1
},
{
"declaration": 752,
"isOffset": false,
"isSlot": false,
"src": "3895:4:6",
"valueSize": 1
},
{
"declaration": 752,
"isOffset": false,
"isSlot": false,
"src": "4015:4:6",
"valueSize": 1
},
{
"declaration": 752,
"isOffset": false,
"isSlot": false,
"src": "4038:4:6",
"valueSize": 1
},
{
"declaration": 752,
"isOffset": false,
"isSlot": false,
"src": "4045:4:6",
"valueSize": 1
}
],
"id": 761,
"nodeType": "InlineAssembly",
"src": "3697:371:6"
},
{
"expression": {
"id": 766,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 762,
"name": "prod0",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 725,
"src": "4134:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "|=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 765,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 763,
"name": "prod1",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 728,
"src": "4143:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 764,
"name": "twos",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 752,
"src": "4151:4:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4143:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4134:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 767,
"nodeType": "ExpressionStatement",
"src": "4134:21:6"
},
{
"assignments": [
769
],
"declarations": [
{
"constant": false,
"id": 769,
"mutability": "mutable",
"name": "inverse",
"nameLocation": "4481:7:6",
"nodeType": "VariableDeclaration",
"scope": 833,
"src": "4473:15:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 768,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "4473:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 776,
"initialValue": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 775,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 772,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "33",
"id": 770,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4492:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_3_by_1",
"typeString": "int_const 3"
},
"value": "3"
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 771,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "4496:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4492:15:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 773,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "4491:17:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "^",
"rightExpression": {
"hexValue": "32",
"id": 774,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4511:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "4491:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "4473:39:6"
},
{
"expression": {
"id": 783,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 777,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "4729:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 782,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 778,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4740:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 781,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 779,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "4744:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 780,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "4758:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4744:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4740:25:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4729:36:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 784,
"nodeType": "ExpressionStatement",
"src": "4729:36:6"
},
{
"expression": {
"id": 791,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 785,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "4798:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 790,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 786,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4809:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 789,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 787,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "4813:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 788,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "4827:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4813:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4809:25:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4798:36:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 792,
"nodeType": "ExpressionStatement",
"src": "4798:36:6"
},
{
"expression": {
"id": 799,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 793,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "4868:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 798,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 794,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4879:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 797,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 795,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "4883:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 796,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "4897:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4883:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4879:25:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4868:36:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 800,
"nodeType": "ExpressionStatement",
"src": "4868:36:6"
},
{
"expression": {
"id": 807,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 801,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "4938:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 806,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 802,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "4949:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 805,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 803,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "4953:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 804,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "4967:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4953:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4949:25:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "4938:36:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 808,
"nodeType": "ExpressionStatement",
"src": "4938:36:6"
},
{
"expression": {
"id": 815,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 809,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "5008:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 814,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 810,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5019:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 813,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 811,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "5023:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 812,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "5037:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5023:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5019:25:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5008:36:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 816,
"nodeType": "ExpressionStatement",
"src": "5008:36:6"
},
{
"expression": {
"id": 823,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 817,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "5079:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "*=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 822,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "32",
"id": 818,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "5090:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"nodeType": "BinaryOperation",
"operator": "-",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 821,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 819,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 719,
"src": "5094:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 820,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "5108:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5094:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5090:25:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5079:36:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 824,
"nodeType": "ExpressionStatement",
"src": "5079:36:6"
},
{
"expression": {
"id": 829,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 825,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 722,
"src": "5549:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 828,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 826,
"name": "prod0",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 725,
"src": "5558:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 827,
"name": "inverse",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 769,
"src": "5566:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5558:15:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "5549:24:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 830,
"nodeType": "ExpressionStatement",
"src": "5549:24:6"
},
{
"expression": {
"id": 831,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 722,
"src": "5594:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 723,
"id": 832,
"nodeType": "Return",
"src": "5587:13:6"
}
]
}
]
},
"documentation": {
"id": 713,
"nodeType": "StructuredDocumentation",
"src": "1357:305:6",
"text": " @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0\n @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv)\n with further edits by Uniswap Labs also under MIT license."
},
"id": 835,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "mulDiv",
"nameLocation": "1676:6:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 720,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 715,
"mutability": "mutable",
"name": "x",
"nameLocation": "1700:1:6",
"nodeType": "VariableDeclaration",
"scope": 835,
"src": "1692:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 714,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1692:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 717,
"mutability": "mutable",
"name": "y",
"nameLocation": "1719:1:6",
"nodeType": "VariableDeclaration",
"scope": 835,
"src": "1711:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 716,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1711:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 719,
"mutability": "mutable",
"name": "denominator",
"nameLocation": "1738:11:6",
"nodeType": "VariableDeclaration",
"scope": 835,
"src": "1730:19:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 718,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1730:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "1682:73:6"
},
"returnParameters": {
"id": 723,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 722,
"mutability": "mutable",
"name": "result",
"nameLocation": "1787:6:6",
"nodeType": "VariableDeclaration",
"scope": 835,
"src": "1779:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 721,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "1779:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "1778:16:6"
},
"scope": 1487,
"src": "1667:3950:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 878,
"nodeType": "Block",
"src": "5897:189:6",
"statements": [
{
"assignments": [
851
],
"declarations": [
{
"constant": false,
"id": 851,
"mutability": "mutable",
"name": "result",
"nameLocation": "5915:6:6",
"nodeType": "VariableDeclaration",
"scope": 878,
"src": "5907:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 850,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5907:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 857,
"initialValue": {
"arguments": [
{
"id": 853,
"name": "x",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 838,
"src": "5931:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 854,
"name": "y",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 840,
"src": "5934:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 855,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 842,
"src": "5937:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 852,
"name": "mulDiv",
"nodeType": "Identifier",
"overloadedDeclarations": [
835,
879
],
"referencedDeclaration": 835,
"src": "5924:6:6",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
}
},
"id": 856,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5924:25:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "5907:42:6"
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 869,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"id": 861,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 858,
"name": "rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 845,
"src": "5963:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"expression": {
"id": 859,
"name": "Rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 628,
"src": "5975:8:6",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_enum$_Rounding_$628_$",
"typeString": "type(enum Math.Rounding)"
}
},
"id": 860,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "5984:2:6",
"memberName": "Up",
"nodeType": "MemberAccess",
"referencedDeclaration": 626,
"src": "5975:11:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"src": "5963:23:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 868,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"arguments": [
{
"id": 863,
"name": "x",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 838,
"src": "5997:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 864,
"name": "y",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 840,
"src": "6000:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"id": 865,
"name": "denominator",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 842,
"src": "6003:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 862,
"name": "mulmod",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 4294967280,
"src": "5990:6:6",
"typeDescriptions": {
"typeIdentifier": "t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256,uint256) pure returns (uint256)"
}
},
"id": 866,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "5990:25:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 867,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6018:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "5990:29:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "5963:56:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 875,
"nodeType": "IfStatement",
"src": "5959:98:6",
"trueBody": {
"id": 874,
"nodeType": "Block",
"src": "6021:36:6",
"statements": [
{
"expression": {
"id": 872,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 870,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 851,
"src": "6035:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "31",
"id": 871,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6045:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "6035:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 873,
"nodeType": "ExpressionStatement",
"src": "6035:11:6"
}
]
}
},
{
"expression": {
"id": 876,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 851,
"src": "6073:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 849,
"id": 877,
"nodeType": "Return",
"src": "6066:13:6"
}
]
},
"documentation": {
"id": 836,
"nodeType": "StructuredDocumentation",
"src": "5623:121:6",
"text": " @notice Calculates x * y / denominator with full precision, following the selected rounding direction."
},
"id": 879,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "mulDiv",
"nameLocation": "5758:6:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 846,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 838,
"mutability": "mutable",
"name": "x",
"nameLocation": "5782:1:6",
"nodeType": "VariableDeclaration",
"scope": 879,
"src": "5774:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 837,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5774:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 840,
"mutability": "mutable",
"name": "y",
"nameLocation": "5801:1:6",
"nodeType": "VariableDeclaration",
"scope": 879,
"src": "5793:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 839,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5793:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 842,
"mutability": "mutable",
"name": "denominator",
"nameLocation": "5820:11:6",
"nodeType": "VariableDeclaration",
"scope": 879,
"src": "5812:19:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 841,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5812:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 845,
"mutability": "mutable",
"name": "rounding",
"nameLocation": "5850:8:6",
"nodeType": "VariableDeclaration",
"scope": 879,
"src": "5841:17:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"typeName": {
"id": 844,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 843,
"name": "Rounding",
"nameLocations": [
"5841:8:6"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 628,
"src": "5841:8:6"
},
"referencedDeclaration": 628,
"src": "5841:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"visibility": "internal"
}
],
"src": "5764:100:6"
},
"returnParameters": {
"id": 849,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 848,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 879,
"src": "5888:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 847,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "5888:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "5887:9:6"
},
"scope": 1487,
"src": "5749:337:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 990,
"nodeType": "Block",
"src": "6362:1585:6",
"statements": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 889,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 887,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "6376:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"hexValue": "30",
"id": 888,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6381:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "6376:6:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 893,
"nodeType": "IfStatement",
"src": "6372:45:6",
"trueBody": {
"id": 892,
"nodeType": "Block",
"src": "6384:33:6",
"statements": [
{
"expression": {
"hexValue": "30",
"id": 890,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "6405:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"functionReturnParameters": 886,
"id": 891,
"nodeType": "Return",
"src": "6398:8:6"
}
]
}
},
{
"assignments": [
895
],
"declarations": [
{
"constant": false,
"id": 895,
"mutability": "mutable",
"name": "result",
"nameLocation": "7104:6:6",
"nodeType": "VariableDeclaration",
"scope": 990,
"src": "7096:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 894,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "7096:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 904,
"initialValue": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 903,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "31",
"id": 896,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7113:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"nodeType": "BinaryOperation",
"operator": "<<",
"rightExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 901,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"arguments": [
{
"id": 898,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7124:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 897,
"name": "log2",
"nodeType": "Identifier",
"overloadedDeclarations": [
1159,
1195
],
"referencedDeclaration": 1159,
"src": "7119:4:6",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 899,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7119:7:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 900,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7130:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "7119:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 902,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "7118:14:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7113:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "7096:36:6"
},
{
"id": 989,
"nodeType": "UncheckedBlock",
"src": "7533:408:6",
"statements": [
{
"expression": {
"id": 914,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 905,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7557:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 913,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 910,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 906,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7567:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 909,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 907,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7576:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 908,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7580:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7576:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7567:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 911,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "7566:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 912,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7591:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "7566:26:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7557:35:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 915,
"nodeType": "ExpressionStatement",
"src": "7557:35:6"
},
{
"expression": {
"id": 925,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 916,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7606:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 924,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 921,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 917,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7616:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 920,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 918,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7625:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 919,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7629:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7625:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7616:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 922,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "7615:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 923,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7640:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "7615:26:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7606:35:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 926,
"nodeType": "ExpressionStatement",
"src": "7606:35:6"
},
{
"expression": {
"id": 936,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 927,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7655:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 935,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 932,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 928,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7665:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 931,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 929,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7674:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 930,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7678:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7674:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7665:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 933,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "7664:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 934,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7689:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "7664:26:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7655:35:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 937,
"nodeType": "ExpressionStatement",
"src": "7655:35:6"
},
{
"expression": {
"id": 947,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 938,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7704:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 946,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 943,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 939,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7714:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 942,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 940,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7723:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 941,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7727:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7723:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7714:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 944,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "7713:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 945,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7738:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "7713:26:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7704:35:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 948,
"nodeType": "ExpressionStatement",
"src": "7704:35:6"
},
{
"expression": {
"id": 958,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 949,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7753:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 957,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 954,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 950,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7763:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 953,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 951,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7772:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 952,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7776:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7772:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7763:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 955,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "7762:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 956,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7787:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "7762:26:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7753:35:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 959,
"nodeType": "ExpressionStatement",
"src": "7753:35:6"
},
{
"expression": {
"id": 969,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 960,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7802:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 968,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 965,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 961,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7812:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 964,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 962,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7821:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 963,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7825:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7821:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7812:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 966,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "7811:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 967,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7836:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "7811:26:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7802:35:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 970,
"nodeType": "ExpressionStatement",
"src": "7802:35:6"
},
{
"expression": {
"id": 980,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 971,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7851:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 979,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 976,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 972,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7861:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 975,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 973,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7870:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 974,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7874:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7870:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7861:19:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 977,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "7860:21:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 978,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "7885:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "7860:26:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7851:35:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 981,
"nodeType": "ExpressionStatement",
"src": "7851:35:6"
},
{
"expression": {
"arguments": [
{
"id": 983,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7911:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 986,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 984,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 882,
"src": "7919:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "/",
"rightExpression": {
"id": 985,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 895,
"src": "7923:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "7919:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 982,
"name": "min",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 664,
"src": "7907:3:6",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256,uint256) pure returns (uint256)"
}
},
"id": 987,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "7907:23:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 886,
"id": 988,
"nodeType": "Return",
"src": "7900:30:6"
}
]
}
]
},
"documentation": {
"id": 880,
"nodeType": "StructuredDocumentation",
"src": "6092:208:6",
"text": " @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down.\n Inspired by Henry S. Warren, Jr.'s \"Hacker's Delight\" (Chapter 11)."
},
"id": 991,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "sqrt",
"nameLocation": "6314:4:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 883,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 882,
"mutability": "mutable",
"name": "a",
"nameLocation": "6327:1:6",
"nodeType": "VariableDeclaration",
"scope": 991,
"src": "6319:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 881,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6319:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "6318:11:6"
},
"returnParameters": {
"id": 886,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 885,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 991,
"src": "6353:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 884,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "6353:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "6352:9:6"
},
"scope": 1487,
"src": "6305:1642:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 1026,
"nodeType": "Block",
"src": "8123:161:6",
"statements": [
{
"id": 1025,
"nodeType": "UncheckedBlock",
"src": "8133:145:6",
"statements": [
{
"assignments": [
1003
],
"declarations": [
{
"constant": false,
"id": 1003,
"mutability": "mutable",
"name": "result",
"nameLocation": "8165:6:6",
"nodeType": "VariableDeclaration",
"scope": 1025,
"src": "8157:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1002,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8157:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 1007,
"initialValue": {
"arguments": [
{
"id": 1005,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 994,
"src": "8179:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1004,
"name": "sqrt",
"nodeType": "Identifier",
"overloadedDeclarations": [
991,
1027
],
"referencedDeclaration": 991,
"src": "8174:4:6",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 1006,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "8174:7:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "8157:24:6"
},
{
"expression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1023,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1008,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1003,
"src": "8202:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"components": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 1018,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"id": 1012,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1009,
"name": "rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 997,
"src": "8212:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"expression": {
"id": 1010,
"name": "Rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 628,
"src": "8224:8:6",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_enum$_Rounding_$628_$",
"typeString": "type(enum Math.Rounding)"
}
},
"id": 1011,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "8233:2:6",
"memberName": "Up",
"nodeType": "MemberAccess",
"referencedDeclaration": 626,
"src": "8224:11:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"src": "8212:23:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1017,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1015,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1013,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1003,
"src": "8239:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "*",
"rightExpression": {
"id": 1014,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1003,
"src": "8248:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "8239:15:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"id": 1016,
"name": "a",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 994,
"src": "8257:1:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "8239:19:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "8212:46:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"hexValue": "30",
"id": 1020,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8265:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"id": 1021,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "8212:54:6",
"trueExpression": {
"hexValue": "31",
"id": 1019,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8261:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"id": 1022,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "8211:56:6",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "8202:65:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1001,
"id": 1024,
"nodeType": "Return",
"src": "8195:72:6"
}
]
}
]
},
"documentation": {
"id": 992,
"nodeType": "StructuredDocumentation",
"src": "7953:89:6",
"text": " @notice Calculates sqrt(a), following the selected rounding direction."
},
"id": 1027,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "sqrt",
"nameLocation": "8056:4:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 998,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 994,
"mutability": "mutable",
"name": "a",
"nameLocation": "8069:1:6",
"nodeType": "VariableDeclaration",
"scope": 1027,
"src": "8061:9:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 993,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8061:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 997,
"mutability": "mutable",
"name": "rounding",
"nameLocation": "8081:8:6",
"nodeType": "VariableDeclaration",
"scope": 1027,
"src": "8072:17:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"typeName": {
"id": 996,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 995,
"name": "Rounding",
"nameLocations": [
"8072:8:6"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 628,
"src": "8072:8:6"
},
"referencedDeclaration": 628,
"src": "8072:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"visibility": "internal"
}
],
"src": "8060:30:6"
},
"returnParameters": {
"id": 1001,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1000,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 1027,
"src": "8114:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 999,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8114:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "8113:9:6"
},
"scope": 1487,
"src": "8047:237:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 1158,
"nodeType": "Block",
"src": "8469:922:6",
"statements": [
{
"assignments": [
1036
],
"declarations": [
{
"constant": false,
"id": 1036,
"mutability": "mutable",
"name": "result",
"nameLocation": "8487:6:6",
"nodeType": "VariableDeclaration",
"scope": 1158,
"src": "8479:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1035,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8479:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 1038,
"initialValue": {
"hexValue": "30",
"id": 1037,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8496:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "8479:18:6"
},
{
"id": 1155,
"nodeType": "UncheckedBlock",
"src": "8507:855:6",
"statements": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1043,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1041,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1039,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8535:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "313238",
"id": 1040,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8544:3:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_128_by_1",
"typeString": "int_const 128"
},
"value": "128"
},
"src": "8535:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1042,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8550:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "8535:16:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1053,
"nodeType": "IfStatement",
"src": "8531:99:6",
"trueBody": {
"id": 1052,
"nodeType": "Block",
"src": "8553:77:6",
"statements": [
{
"expression": {
"id": 1046,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1044,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8571:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "313238",
"id": 1045,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8581:3:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_128_by_1",
"typeString": "int_const 128"
},
"value": "128"
},
"src": "8571:13:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1047,
"nodeType": "ExpressionStatement",
"src": "8571:13:6"
},
{
"expression": {
"id": 1050,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1048,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "8602:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "313238",
"id": 1049,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8612:3:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_128_by_1",
"typeString": "int_const 128"
},
"value": "128"
},
"src": "8602:13:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1051,
"nodeType": "ExpressionStatement",
"src": "8602:13:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1058,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1056,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1054,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8647:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "3634",
"id": 1055,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8656:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_64_by_1",
"typeString": "int_const 64"
},
"value": "64"
},
"src": "8647:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1057,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8661:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "8647:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1068,
"nodeType": "IfStatement",
"src": "8643:96:6",
"trueBody": {
"id": 1067,
"nodeType": "Block",
"src": "8664:75:6",
"statements": [
{
"expression": {
"id": 1061,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1059,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8682:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "3634",
"id": 1060,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8692:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_64_by_1",
"typeString": "int_const 64"
},
"value": "64"
},
"src": "8682:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1062,
"nodeType": "ExpressionStatement",
"src": "8682:12:6"
},
{
"expression": {
"id": 1065,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1063,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "8712:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "3634",
"id": 1064,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8722:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_64_by_1",
"typeString": "int_const 64"
},
"value": "64"
},
"src": "8712:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1066,
"nodeType": "ExpressionStatement",
"src": "8712:12:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1073,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1071,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1069,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8756:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "3332",
"id": 1070,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8765:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
},
"src": "8756:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1072,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8770:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "8756:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1083,
"nodeType": "IfStatement",
"src": "8752:96:6",
"trueBody": {
"id": 1082,
"nodeType": "Block",
"src": "8773:75:6",
"statements": [
{
"expression": {
"id": 1076,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1074,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8791:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "3332",
"id": 1075,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8801:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
},
"src": "8791:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1077,
"nodeType": "ExpressionStatement",
"src": "8791:12:6"
},
{
"expression": {
"id": 1080,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1078,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "8821:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "3332",
"id": 1079,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8831:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
},
"src": "8821:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1081,
"nodeType": "ExpressionStatement",
"src": "8821:12:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1088,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1086,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1084,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8865:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "3136",
"id": 1085,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8874:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "8865:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1087,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8879:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "8865:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1098,
"nodeType": "IfStatement",
"src": "8861:96:6",
"trueBody": {
"id": 1097,
"nodeType": "Block",
"src": "8882:75:6",
"statements": [
{
"expression": {
"id": 1091,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1089,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8900:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "3136",
"id": 1090,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8910:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "8900:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1092,
"nodeType": "ExpressionStatement",
"src": "8900:12:6"
},
{
"expression": {
"id": 1095,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1093,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "8930:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "3136",
"id": 1094,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8940:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "8930:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1096,
"nodeType": "ExpressionStatement",
"src": "8930:12:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1103,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1101,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1099,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "8974:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "38",
"id": 1100,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8983:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "8974:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1102,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "8987:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "8974:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1113,
"nodeType": "IfStatement",
"src": "8970:93:6",
"trueBody": {
"id": 1112,
"nodeType": "Block",
"src": "8990:73:6",
"statements": [
{
"expression": {
"id": 1106,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1104,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "9008:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "38",
"id": 1105,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9018:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "9008:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1107,
"nodeType": "ExpressionStatement",
"src": "9008:11:6"
},
{
"expression": {
"id": 1110,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1108,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "9037:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "38",
"id": 1109,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9047:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "9037:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1111,
"nodeType": "ExpressionStatement",
"src": "9037:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1118,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1116,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1114,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "9080:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "34",
"id": 1115,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9089:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_4_by_1",
"typeString": "int_const 4"
},
"value": "4"
},
"src": "9080:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1117,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9093:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "9080:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1128,
"nodeType": "IfStatement",
"src": "9076:93:6",
"trueBody": {
"id": 1127,
"nodeType": "Block",
"src": "9096:73:6",
"statements": [
{
"expression": {
"id": 1121,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1119,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "9114:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "34",
"id": 1120,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9124:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_4_by_1",
"typeString": "int_const 4"
},
"value": "4"
},
"src": "9114:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1122,
"nodeType": "ExpressionStatement",
"src": "9114:11:6"
},
{
"expression": {
"id": 1125,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1123,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "9143:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "34",
"id": 1124,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9153:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_4_by_1",
"typeString": "int_const 4"
},
"value": "4"
},
"src": "9143:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1126,
"nodeType": "ExpressionStatement",
"src": "9143:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1133,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1131,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1129,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "9186:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "32",
"id": 1130,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9195:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "9186:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1132,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9199:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "9186:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1143,
"nodeType": "IfStatement",
"src": "9182:93:6",
"trueBody": {
"id": 1142,
"nodeType": "Block",
"src": "9202:73:6",
"statements": [
{
"expression": {
"id": 1136,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1134,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "9220:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "32",
"id": 1135,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9230:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "9220:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1137,
"nodeType": "ExpressionStatement",
"src": "9220:11:6"
},
{
"expression": {
"id": 1140,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1138,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "9249:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "32",
"id": 1139,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9259:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "9249:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1141,
"nodeType": "ExpressionStatement",
"src": "9249:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1148,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1146,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1144,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1030,
"src": "9292:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "31",
"id": 1145,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9301:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "9292:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1147,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9305:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "9292:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1154,
"nodeType": "IfStatement",
"src": "9288:64:6",
"trueBody": {
"id": 1153,
"nodeType": "Block",
"src": "9308:44:6",
"statements": [
{
"expression": {
"id": 1151,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1149,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "9326:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "31",
"id": 1150,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9336:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "9326:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1152,
"nodeType": "ExpressionStatement",
"src": "9326:11:6"
}
]
}
}
]
},
{
"expression": {
"id": 1156,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1036,
"src": "9378:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1034,
"id": 1157,
"nodeType": "Return",
"src": "9371:13:6"
}
]
},
"documentation": {
"id": 1028,
"nodeType": "StructuredDocumentation",
"src": "8290:113:6",
"text": " @dev Return the log in base 2, rounded down, of a positive value.\n Returns 0 if given 0."
},
"id": 1159,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "log2",
"nameLocation": "8417:4:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1031,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1030,
"mutability": "mutable",
"name": "value",
"nameLocation": "8430:5:6",
"nodeType": "VariableDeclaration",
"scope": 1159,
"src": "8422:13:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1029,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8422:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "8421:15:6"
},
"returnParameters": {
"id": 1034,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1033,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 1159,
"src": "8460:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1032,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "8460:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "8459:9:6"
},
"scope": 1487,
"src": "8408:983:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 1194,
"nodeType": "Block",
"src": "9624:165:6",
"statements": [
{
"id": 1193,
"nodeType": "UncheckedBlock",
"src": "9634:149:6",
"statements": [
{
"assignments": [
1171
],
"declarations": [
{
"constant": false,
"id": 1171,
"mutability": "mutable",
"name": "result",
"nameLocation": "9666:6:6",
"nodeType": "VariableDeclaration",
"scope": 1193,
"src": "9658:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1170,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9658:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 1175,
"initialValue": {
"arguments": [
{
"id": 1173,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1162,
"src": "9680:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1172,
"name": "log2",
"nodeType": "Identifier",
"overloadedDeclarations": [
1159,
1195
],
"referencedDeclaration": 1159,
"src": "9675:4:6",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 1174,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "9675:11:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "9658:28:6"
},
{
"expression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1191,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1176,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1171,
"src": "9707:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"components": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 1186,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"id": 1180,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1177,
"name": "rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1165,
"src": "9717:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"expression": {
"id": 1178,
"name": "Rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 628,
"src": "9729:8:6",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_enum$_Rounding_$628_$",
"typeString": "type(enum Math.Rounding)"
}
},
"id": 1179,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "9738:2:6",
"memberName": "Up",
"nodeType": "MemberAccess",
"referencedDeclaration": 626,
"src": "9729:11:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"src": "9717:23:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1185,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1183,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "31",
"id": 1181,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9744:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"nodeType": "BinaryOperation",
"operator": "<<",
"rightExpression": {
"id": 1182,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1171,
"src": "9749:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "9744:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"id": 1184,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1162,
"src": "9758:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "9744:19:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "9717:46:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"hexValue": "30",
"id": 1188,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9770:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"id": 1189,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "9717:54:6",
"trueExpression": {
"hexValue": "31",
"id": 1187,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "9766:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"id": 1190,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "9716:56:6",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "9707:65:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1169,
"id": 1192,
"nodeType": "Return",
"src": "9700:72:6"
}
]
}
]
},
"documentation": {
"id": 1160,
"nodeType": "StructuredDocumentation",
"src": "9397:142:6",
"text": " @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
},
"id": 1195,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "log2",
"nameLocation": "9553:4:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1166,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1162,
"mutability": "mutable",
"name": "value",
"nameLocation": "9566:5:6",
"nodeType": "VariableDeclaration",
"scope": 1195,
"src": "9558:13:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1161,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9558:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 1165,
"mutability": "mutable",
"name": "rounding",
"nameLocation": "9582:8:6",
"nodeType": "VariableDeclaration",
"scope": 1195,
"src": "9573:17:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"typeName": {
"id": 1164,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 1163,
"name": "Rounding",
"nameLocations": [
"9573:8:6"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 628,
"src": "9573:8:6"
},
"referencedDeclaration": 628,
"src": "9573:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"visibility": "internal"
}
],
"src": "9557:34:6"
},
"returnParameters": {
"id": 1169,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1168,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 1195,
"src": "9615:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1167,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9615:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "9614:9:6"
},
"scope": 1487,
"src": "9544:245:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 1323,
"nodeType": "Block",
"src": "9976:828:6",
"statements": [
{
"assignments": [
1204
],
"declarations": [
{
"constant": false,
"id": 1204,
"mutability": "mutable",
"name": "result",
"nameLocation": "9994:6:6",
"nodeType": "VariableDeclaration",
"scope": 1323,
"src": "9986:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1203,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9986:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 1206,
"initialValue": {
"hexValue": "30",
"id": 1205,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10003:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "9986:18:6"
},
{
"id": 1320,
"nodeType": "UncheckedBlock",
"src": "10014:761:6",
"statements": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1211,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1207,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10042:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
"typeString": "int_const 1000...(57 digits omitted)...0000"
},
"id": 1210,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1208,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10051:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "3634",
"id": 1209,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10055:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_64_by_1",
"typeString": "int_const 64"
},
"value": "64"
},
"src": "10051:6:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
"typeString": "int_const 1000...(57 digits omitted)...0000"
}
},
"src": "10042:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1223,
"nodeType": "IfStatement",
"src": "10038:99:6",
"trueBody": {
"id": 1222,
"nodeType": "Block",
"src": "10059:78:6",
"statements": [
{
"expression": {
"id": 1216,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1212,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10077:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "/=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
"typeString": "int_const 1000...(57 digits omitted)...0000"
},
"id": 1215,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1213,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10086:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "3634",
"id": 1214,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10090:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_64_by_1",
"typeString": "int_const 64"
},
"value": "64"
},
"src": "10086:6:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1",
"typeString": "int_const 1000...(57 digits omitted)...0000"
}
},
"src": "10077:15:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1217,
"nodeType": "ExpressionStatement",
"src": "10077:15:6"
},
{
"expression": {
"id": 1220,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1218,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1204,
"src": "10110:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "3634",
"id": 1219,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10120:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_64_by_1",
"typeString": "int_const 64"
},
"value": "64"
},
"src": "10110:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1221,
"nodeType": "ExpressionStatement",
"src": "10110:12:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1228,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1224,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10154:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
"typeString": "int_const 1000...(25 digits omitted)...0000"
},
"id": 1227,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1225,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10163:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "3332",
"id": 1226,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10167:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
},
"src": "10163:6:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
"typeString": "int_const 1000...(25 digits omitted)...0000"
}
},
"src": "10154:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1240,
"nodeType": "IfStatement",
"src": "10150:99:6",
"trueBody": {
"id": 1239,
"nodeType": "Block",
"src": "10171:78:6",
"statements": [
{
"expression": {
"id": 1233,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1229,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10189:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "/=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
"typeString": "int_const 1000...(25 digits omitted)...0000"
},
"id": 1232,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1230,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10198:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "3332",
"id": 1231,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10202:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
},
"src": "10198:6:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_100000000000000000000000000000000_by_1",
"typeString": "int_const 1000...(25 digits omitted)...0000"
}
},
"src": "10189:15:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1234,
"nodeType": "ExpressionStatement",
"src": "10189:15:6"
},
{
"expression": {
"id": 1237,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1235,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1204,
"src": "10222:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "3332",
"id": 1236,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10232:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
},
"src": "10222:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1238,
"nodeType": "ExpressionStatement",
"src": "10222:12:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1245,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1241,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10266:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_rational_10000000000000000_by_1",
"typeString": "int_const 10000000000000000"
},
"id": 1244,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1242,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10275:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "3136",
"id": 1243,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10279:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "10275:6:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10000000000000000_by_1",
"typeString": "int_const 10000000000000000"
}
},
"src": "10266:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1257,
"nodeType": "IfStatement",
"src": "10262:99:6",
"trueBody": {
"id": 1256,
"nodeType": "Block",
"src": "10283:78:6",
"statements": [
{
"expression": {
"id": 1250,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1246,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10301:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "/=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_rational_10000000000000000_by_1",
"typeString": "int_const 10000000000000000"
},
"id": 1249,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1247,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10310:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "3136",
"id": 1248,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10314:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "10310:6:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10000000000000000_by_1",
"typeString": "int_const 10000000000000000"
}
},
"src": "10301:15:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1251,
"nodeType": "ExpressionStatement",
"src": "10301:15:6"
},
{
"expression": {
"id": 1254,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1252,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1204,
"src": "10334:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "3136",
"id": 1253,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10344:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "10334:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1255,
"nodeType": "ExpressionStatement",
"src": "10334:12:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1262,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1258,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10378:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_rational_100000000_by_1",
"typeString": "int_const 100000000"
},
"id": 1261,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1259,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10387:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "38",
"id": 1260,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10391:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "10387:5:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_100000000_by_1",
"typeString": "int_const 100000000"
}
},
"src": "10378:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1274,
"nodeType": "IfStatement",
"src": "10374:96:6",
"trueBody": {
"id": 1273,
"nodeType": "Block",
"src": "10394:76:6",
"statements": [
{
"expression": {
"id": 1267,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1263,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10412:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "/=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_rational_100000000_by_1",
"typeString": "int_const 100000000"
},
"id": 1266,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1264,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10421:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "38",
"id": 1265,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10425:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "10421:5:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_100000000_by_1",
"typeString": "int_const 100000000"
}
},
"src": "10412:14:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1268,
"nodeType": "ExpressionStatement",
"src": "10412:14:6"
},
{
"expression": {
"id": 1271,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1269,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1204,
"src": "10444:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "38",
"id": 1270,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10454:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "10444:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1272,
"nodeType": "ExpressionStatement",
"src": "10444:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1279,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1275,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10487:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_rational_10000_by_1",
"typeString": "int_const 10000"
},
"id": 1278,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1276,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10496:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "34",
"id": 1277,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10500:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_4_by_1",
"typeString": "int_const 4"
},
"value": "4"
},
"src": "10496:5:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10000_by_1",
"typeString": "int_const 10000"
}
},
"src": "10487:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1291,
"nodeType": "IfStatement",
"src": "10483:96:6",
"trueBody": {
"id": 1290,
"nodeType": "Block",
"src": "10503:76:6",
"statements": [
{
"expression": {
"id": 1284,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1280,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10521:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "/=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_rational_10000_by_1",
"typeString": "int_const 10000"
},
"id": 1283,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1281,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10530:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "34",
"id": 1282,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10534:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_4_by_1",
"typeString": "int_const 4"
},
"value": "4"
},
"src": "10530:5:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10000_by_1",
"typeString": "int_const 10000"
}
},
"src": "10521:14:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1285,
"nodeType": "ExpressionStatement",
"src": "10521:14:6"
},
{
"expression": {
"id": 1288,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1286,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1204,
"src": "10553:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "34",
"id": 1287,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10563:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_4_by_1",
"typeString": "int_const 4"
},
"value": "4"
},
"src": "10553:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1289,
"nodeType": "ExpressionStatement",
"src": "10553:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1296,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1292,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10596:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_rational_100_by_1",
"typeString": "int_const 100"
},
"id": 1295,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1293,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10605:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "32",
"id": 1294,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10609:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "10605:5:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_100_by_1",
"typeString": "int_const 100"
}
},
"src": "10596:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1308,
"nodeType": "IfStatement",
"src": "10592:96:6",
"trueBody": {
"id": 1307,
"nodeType": "Block",
"src": "10612:76:6",
"statements": [
{
"expression": {
"id": 1301,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1297,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10630:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "/=",
"rightHandSide": {
"commonType": {
"typeIdentifier": "t_rational_100_by_1",
"typeString": "int_const 100"
},
"id": 1300,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1298,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10639:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "32",
"id": 1299,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10643:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "10639:5:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_100_by_1",
"typeString": "int_const 100"
}
},
"src": "10630:14:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1302,
"nodeType": "ExpressionStatement",
"src": "10630:14:6"
},
{
"expression": {
"id": 1305,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1303,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1204,
"src": "10662:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "32",
"id": 1304,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10672:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "10662:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1306,
"nodeType": "ExpressionStatement",
"src": "10662:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1313,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1309,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1198,
"src": "10705:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">=",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"id": 1312,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1310,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10714:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"hexValue": "31",
"id": 1311,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10718:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "10714:5:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
}
},
"src": "10705:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1319,
"nodeType": "IfStatement",
"src": "10701:64:6",
"trueBody": {
"id": 1318,
"nodeType": "Block",
"src": "10721:44:6",
"statements": [
{
"expression": {
"id": 1316,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1314,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1204,
"src": "10739:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "31",
"id": 1315,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "10749:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "10739:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1317,
"nodeType": "ExpressionStatement",
"src": "10739:11:6"
}
]
}
}
]
},
{
"expression": {
"id": 1321,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1204,
"src": "10791:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1202,
"id": 1322,
"nodeType": "Return",
"src": "10784:13:6"
}
]
},
"documentation": {
"id": 1196,
"nodeType": "StructuredDocumentation",
"src": "9795:114:6",
"text": " @dev Return the log in base 10, rounded down, of a positive value.\n Returns 0 if given 0."
},
"id": 1324,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "log10",
"nameLocation": "9923:5:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1199,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1198,
"mutability": "mutable",
"name": "value",
"nameLocation": "9937:5:6",
"nodeType": "VariableDeclaration",
"scope": 1324,
"src": "9929:13:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1197,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9929:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "9928:15:6"
},
"returnParameters": {
"id": 1202,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1201,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 1324,
"src": "9967:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1200,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "9967:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "9966:9:6"
},
"scope": 1487,
"src": "9914:890:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 1359,
"nodeType": "Block",
"src": "11039:165:6",
"statements": [
{
"id": 1358,
"nodeType": "UncheckedBlock",
"src": "11049:149:6",
"statements": [
{
"assignments": [
1336
],
"declarations": [
{
"constant": false,
"id": 1336,
"mutability": "mutable",
"name": "result",
"nameLocation": "11081:6:6",
"nodeType": "VariableDeclaration",
"scope": 1358,
"src": "11073:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1335,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "11073:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 1340,
"initialValue": {
"arguments": [
{
"id": 1338,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1327,
"src": "11096:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1337,
"name": "log10",
"nodeType": "Identifier",
"overloadedDeclarations": [
1324,
1360
],
"referencedDeclaration": 1324,
"src": "11090:5:6",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 1339,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "11090:12:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "11073:29:6"
},
{
"expression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1356,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1341,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1336,
"src": "11123:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"components": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 1351,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"id": 1345,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1342,
"name": "rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1330,
"src": "11133:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"expression": {
"id": 1343,
"name": "Rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 628,
"src": "11145:8:6",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_enum$_Rounding_$628_$",
"typeString": "type(enum Math.Rounding)"
}
},
"id": 1344,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "11154:2:6",
"memberName": "Up",
"nodeType": "MemberAccess",
"referencedDeclaration": 626,
"src": "11145:11:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"src": "11133:23:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1350,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1348,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "3130",
"id": 1346,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11160:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_10_by_1",
"typeString": "int_const 10"
},
"value": "10"
},
"nodeType": "BinaryOperation",
"operator": "**",
"rightExpression": {
"id": 1347,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1336,
"src": "11164:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "11160:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"id": 1349,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1327,
"src": "11173:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "11160:18:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "11133:45:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"hexValue": "30",
"id": 1353,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11185:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"id": 1354,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "11133:53:6",
"trueExpression": {
"hexValue": "31",
"id": 1352,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11181:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"id": 1355,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "11132:55:6",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "11123:64:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1334,
"id": 1357,
"nodeType": "Return",
"src": "11116:71:6"
}
]
}
]
},
"documentation": {
"id": 1325,
"nodeType": "StructuredDocumentation",
"src": "10810:143:6",
"text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
},
"id": 1360,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "log10",
"nameLocation": "10967:5:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1331,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1327,
"mutability": "mutable",
"name": "value",
"nameLocation": "10981:5:6",
"nodeType": "VariableDeclaration",
"scope": 1360,
"src": "10973:13:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1326,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "10973:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 1330,
"mutability": "mutable",
"name": "rounding",
"nameLocation": "10997:8:6",
"nodeType": "VariableDeclaration",
"scope": 1360,
"src": "10988:17:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"typeName": {
"id": 1329,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 1328,
"name": "Rounding",
"nameLocations": [
"10988:8:6"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 628,
"src": "10988:8:6"
},
"referencedDeclaration": 628,
"src": "10988:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"visibility": "internal"
}
],
"src": "10972:34:6"
},
"returnParameters": {
"id": 1334,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1333,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 1360,
"src": "11030:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1332,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "11030:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "11029:9:6"
},
"scope": 1487,
"src": "10958:246:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 1446,
"nodeType": "Block",
"src": "11518:600:6",
"statements": [
{
"assignments": [
1369
],
"declarations": [
{
"constant": false,
"id": 1369,
"mutability": "mutable",
"name": "result",
"nameLocation": "11536:6:6",
"nodeType": "VariableDeclaration",
"scope": 1446,
"src": "11528:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1368,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "11528:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 1371,
"initialValue": {
"hexValue": "30",
"id": 1370,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11545:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"nodeType": "VariableDeclarationStatement",
"src": "11528:18:6"
},
{
"id": 1443,
"nodeType": "UncheckedBlock",
"src": "11556:533:6",
"statements": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1376,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1374,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1372,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "11584:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "313238",
"id": 1373,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11593:3:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_128_by_1",
"typeString": "int_const 128"
},
"value": "128"
},
"src": "11584:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1375,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11599:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "11584:16:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1386,
"nodeType": "IfStatement",
"src": "11580:98:6",
"trueBody": {
"id": 1385,
"nodeType": "Block",
"src": "11602:76:6",
"statements": [
{
"expression": {
"id": 1379,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1377,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "11620:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "313238",
"id": 1378,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11630:3:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_128_by_1",
"typeString": "int_const 128"
},
"value": "128"
},
"src": "11620:13:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1380,
"nodeType": "ExpressionStatement",
"src": "11620:13:6"
},
{
"expression": {
"id": 1383,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1381,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1369,
"src": "11651:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "3136",
"id": 1382,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11661:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "11651:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1384,
"nodeType": "ExpressionStatement",
"src": "11651:12:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1391,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1389,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1387,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "11695:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "3634",
"id": 1388,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11704:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_64_by_1",
"typeString": "int_const 64"
},
"value": "64"
},
"src": "11695:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1390,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11709:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "11695:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1401,
"nodeType": "IfStatement",
"src": "11691:95:6",
"trueBody": {
"id": 1400,
"nodeType": "Block",
"src": "11712:74:6",
"statements": [
{
"expression": {
"id": 1394,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1392,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "11730:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "3634",
"id": 1393,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11740:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_64_by_1",
"typeString": "int_const 64"
},
"value": "64"
},
"src": "11730:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1395,
"nodeType": "ExpressionStatement",
"src": "11730:12:6"
},
{
"expression": {
"id": 1398,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1396,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1369,
"src": "11760:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "38",
"id": 1397,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11770:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "11760:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1399,
"nodeType": "ExpressionStatement",
"src": "11760:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1406,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1404,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1402,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "11803:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "3332",
"id": 1403,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11812:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
},
"src": "11803:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1405,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11817:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "11803:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1416,
"nodeType": "IfStatement",
"src": "11799:95:6",
"trueBody": {
"id": 1415,
"nodeType": "Block",
"src": "11820:74:6",
"statements": [
{
"expression": {
"id": 1409,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1407,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "11838:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "3332",
"id": 1408,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11848:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_32_by_1",
"typeString": "int_const 32"
},
"value": "32"
},
"src": "11838:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1410,
"nodeType": "ExpressionStatement",
"src": "11838:12:6"
},
{
"expression": {
"id": 1413,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1411,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1369,
"src": "11868:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "34",
"id": 1412,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11878:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_4_by_1",
"typeString": "int_const 4"
},
"value": "4"
},
"src": "11868:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1414,
"nodeType": "ExpressionStatement",
"src": "11868:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1421,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1419,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1417,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "11911:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "3136",
"id": 1418,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11920:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "11911:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1420,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11925:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "11911:15:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1431,
"nodeType": "IfStatement",
"src": "11907:95:6",
"trueBody": {
"id": 1430,
"nodeType": "Block",
"src": "11928:74:6",
"statements": [
{
"expression": {
"id": 1424,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1422,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "11946:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": ">>=",
"rightHandSide": {
"hexValue": "3136",
"id": 1423,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11956:2:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_16_by_1",
"typeString": "int_const 16"
},
"value": "16"
},
"src": "11946:12:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1425,
"nodeType": "ExpressionStatement",
"src": "11946:12:6"
},
{
"expression": {
"id": 1428,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1426,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1369,
"src": "11976:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "32",
"id": 1427,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "11986:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_2_by_1",
"typeString": "int_const 2"
},
"value": "2"
},
"src": "11976:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1429,
"nodeType": "ExpressionStatement",
"src": "11976:11:6"
}
]
}
},
{
"condition": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1436,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1434,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1432,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1363,
"src": "12019:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">>",
"rightExpression": {
"hexValue": "38",
"id": 1433,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12028:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_8_by_1",
"typeString": "int_const 8"
},
"value": "8"
},
"src": "12019:10:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": ">",
"rightExpression": {
"hexValue": "30",
"id": 1435,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12032:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "12019:14:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"id": 1442,
"nodeType": "IfStatement",
"src": "12015:64:6",
"trueBody": {
"id": 1441,
"nodeType": "Block",
"src": "12035:44:6",
"statements": [
{
"expression": {
"id": 1439,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"id": 1437,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1369,
"src": "12053:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "+=",
"rightHandSide": {
"hexValue": "31",
"id": 1438,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12063:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"src": "12053:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 1440,
"nodeType": "ExpressionStatement",
"src": "12053:11:6"
}
]
}
}
]
},
{
"expression": {
"id": 1444,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1369,
"src": "12105:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1367,
"id": 1445,
"nodeType": "Return",
"src": "12098:13:6"
}
]
},
"documentation": {
"id": 1361,
"nodeType": "StructuredDocumentation",
"src": "11210:240:6",
"text": " @dev Return the log in base 256, rounded down, of a positive value.\n Returns 0 if given 0.\n Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string."
},
"id": 1447,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "log256",
"nameLocation": "11464:6:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1364,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1363,
"mutability": "mutable",
"name": "value",
"nameLocation": "11479:5:6",
"nodeType": "VariableDeclaration",
"scope": 1447,
"src": "11471:13:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1362,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "11471:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "11470:15:6"
},
"returnParameters": {
"id": 1367,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1366,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 1447,
"src": "11509:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1365,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "11509:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "11508:9:6"
},
"scope": 1487,
"src": "11455:663:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 1485,
"nodeType": "Block",
"src": "12354:174:6",
"statements": [
{
"id": 1484,
"nodeType": "UncheckedBlock",
"src": "12364:158:6",
"statements": [
{
"assignments": [
1459
],
"declarations": [
{
"constant": false,
"id": 1459,
"mutability": "mutable",
"name": "result",
"nameLocation": "12396:6:6",
"nodeType": "VariableDeclaration",
"scope": 1484,
"src": "12388:14:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1458,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "12388:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"id": 1463,
"initialValue": {
"arguments": [
{
"id": 1461,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1450,
"src": "12412:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"expression": {
"argumentTypes": [
{
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
],
"id": 1460,
"name": "log256",
"nodeType": "Identifier",
"overloadedDeclarations": [
1447,
1486
],
"referencedDeclaration": 1447,
"src": "12405:6:6",
"typeDescriptions": {
"typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$_t_uint256_$",
"typeString": "function (uint256) pure returns (uint256)"
}
},
"id": 1462,
"isConstant": false,
"isLValue": false,
"isPure": false,
"kind": "functionCall",
"lValueRequested": false,
"nameLocations": [],
"names": [],
"nodeType": "FunctionCall",
"src": "12405:13:6",
"tryCall": false,
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "VariableDeclarationStatement",
"src": "12388:30:6"
},
{
"expression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1482,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1464,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1459,
"src": "12439:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "+",
"rightExpression": {
"components": [
{
"condition": {
"commonType": {
"typeIdentifier": "t_bool",
"typeString": "bool"
},
"id": 1477,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"id": 1468,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1465,
"name": "rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1453,
"src": "12449:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"nodeType": "BinaryOperation",
"operator": "==",
"rightExpression": {
"expression": {
"id": 1466,
"name": "Rounding",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 628,
"src": "12461:8:6",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_enum$_Rounding_$628_$",
"typeString": "type(enum Math.Rounding)"
}
},
"id": 1467,
"isConstant": false,
"isLValue": false,
"isPure": true,
"lValueRequested": false,
"memberLocation": "12470:2:6",
"memberName": "Up",
"nodeType": "MemberAccess",
"referencedDeclaration": 626,
"src": "12461:11:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"src": "12449:23:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"nodeType": "BinaryOperation",
"operator": "&&",
"rightExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1476,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1474,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"hexValue": "31",
"id": 1469,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12476:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"nodeType": "BinaryOperation",
"operator": "<<",
"rightExpression": {
"components": [
{
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 1472,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"id": 1470,
"name": "result",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1459,
"src": "12482:6:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<<",
"rightExpression": {
"hexValue": "33",
"id": 1471,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12492:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_3_by_1",
"typeString": "int_const 3"
},
"value": "3"
},
"src": "12482:11:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
}
],
"id": 1473,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "12481:13:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "12476:18:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "<",
"rightExpression": {
"id": 1475,
"name": "value",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 1450,
"src": "12497:5:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "12476:26:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"src": "12449:53:6",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"hexValue": "30",
"id": 1479,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12509:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"id": 1480,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "12449:61:6",
"trueExpression": {
"hexValue": "31",
"id": 1478,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "12505:1:6",
"typeDescriptions": {
"typeIdentifier": "t_rational_1_by_1",
"typeString": "int_const 1"
},
"value": "1"
},
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
}
],
"id": 1481,
"isConstant": false,
"isInlineArray": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "TupleExpression",
"src": "12448:63:6",
"typeDescriptions": {
"typeIdentifier": "t_uint8",
"typeString": "uint8"
}
},
"src": "12439:72:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 1457,
"id": 1483,
"nodeType": "Return",
"src": "12432:79:6"
}
]
}
]
},
"documentation": {
"id": 1448,
"nodeType": "StructuredDocumentation",
"src": "12124:143:6",
"text": " @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."
},
"id": 1486,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "log256",
"nameLocation": "12281:6:6",
"nodeType": "FunctionDefinition",
"parameters": {
"id": 1454,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1450,
"mutability": "mutable",
"name": "value",
"nameLocation": "12296:5:6",
"nodeType": "VariableDeclaration",
"scope": 1486,
"src": "12288:13:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1449,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "12288:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
},
{
"constant": false,
"id": 1453,
"mutability": "mutable",
"name": "rounding",
"nameLocation": "12312:8:6",
"nodeType": "VariableDeclaration",
"scope": 1486,
"src": "12303:17:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
},
"typeName": {
"id": 1452,
"nodeType": "UserDefinedTypeName",
"pathNode": {
"id": 1451,
"name": "Rounding",
"nameLocations": [
"12303:8:6"
],
"nodeType": "IdentifierPath",
"referencedDeclaration": 628,
"src": "12303:8:6"
},
"referencedDeclaration": 628,
"src": "12303:8:6",
"typeDescriptions": {
"typeIdentifier": "t_enum$_Rounding_$628",
"typeString": "enum Math.Rounding"
}
},
"visibility": "internal"
}
],
"src": "12287:34:6"
},
"returnParameters": {
"id": 1457,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 1456,
"mutability": "mutable",
"name": "",
"nameLocation": "-1:-1:-1",
"nodeType": "VariableDeclaration",
"scope": 1486,
"src": "12345:7:6",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 1455,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "12345:7:6",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"visibility": "internal"
}
],
"src": "12344:9:6"
},
"scope": 1487,
"src": "12272:256:6",
"stateMutability": "pure",
"virtual": false,
"visibility": "internal"
}
],
"scope": 1488,
"src": "202:12328:6",
"usedErrors": []
}
],
"src": "103:12428:6"
},
"id": 6
}
}
}
}
// 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);
/**
* @dev Returns the admin role that controls `role`. See {grantRole} and
* {revokeRole}.
*
* To change a role's admin, use {AccessControl-_setRoleAdmin}.
*/
function getRoleAdmin(bytes32 role) external view returns (bytes32);
/**
* @dev Grants `role` to `account`.
*
* If `account` had not been already granted `role`, emits a {RoleGranted}
* event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function grantRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from `account`.
*
* If `account` had been granted `role`, emits a {RoleRevoked} event.
*
* Requirements:
*
* - the caller must have ``role``'s admin role.
*/
function revokeRole(bytes32 role, address account) external;
/**
* @dev Revokes `role` from the calling account.
*
* Roles are often managed via {grantRole} and {revokeRole}: this function's
* purpose is to provide a mechanism for accounts to lose their privileges
* if they are compromised (such as when a trusted device is misplaced).
*
* If the calling account had been granted `role`, emits a {RoleRevoked}
* event.
*
* Requirements:
*
* - the caller must be `account`.
*/
function renounceRole(bytes32 role, address account) external;
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC20/ERC20.sol)
pragma solidity ^0.8.0;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/IERC20.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/utils/Context.sol";
/**
* @dev Implementation of the {IERC20} interface.
*
* This implementation is agnostic to the way tokens are created. This means
* that a supply mechanism has to be added in a derived contract using {_mint}.
* For a generic mechanism see {ERC20PresetMinterPauser}.
*
* TIP: For a detailed writeup see our guide
* https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
* to implement supply mechanisms].
*
* We have followed general OpenZeppelin Contracts guidelines: functions revert
* instead returning `false` on failure. This behavior is nonetheless
* conventional and does not conflict with the expectations of ERC20
* applications.
*
* Additionally, an {Approval} event is emitted on calls to {transferFrom}.
* This allows applications to reconstruct the allowance for all accounts just
* by listening to said events. Other implementations of the EIP may not emit
* these events, as it isn't required by the specification.
*
* Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
* functions have been added to mitigate the well-known issues around setting
* allowances. See {IERC20-approve}.
*/
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
/**
* @dev Sets the values for {name} and {symbol}.
*
* The default value of {decimals} is 18. To select a different value for
* {decimals} you should overload it.
*
* All two of these values are immutable: they can only be set once during
* construction.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @dev Returns the name of the token.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev Returns the symbol of the token, usually a shorter version of the
* name.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev Returns the number of decimals used to get its user representation.
* For example, if `decimals` equals `2`, a balance of `505` tokens should
* be displayed to a user as `5.05` (`505 / 10 ** 2`).
*
* Tokens usually opt for a value of 18, imitating the relationship between
* Ether and Wei. This is the value {ERC20} uses, unless this function is
* overridden;
*
* NOTE: This information is only used for _display_ purposes: it in
* no way affects any of the arithmetic of the contract, including
* {IERC20-balanceOf} and {IERC20-transfer}.
*/
function decimals() public view virtual override returns (uint8) {
return 18;
}
/**
* @dev See {IERC20-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
/**
* @dev See {IERC20-balanceOf}.
*/
function balanceOf(address account) public view virtual override returns (uint256) {
return _balances[account];
}
/**
* @dev See {IERC20-transfer}.
*
* Requirements:
*
* - `to` cannot be the zero address.
* - the caller must have a balance of at least `amount`.
*/
function transfer(address to, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_transfer(owner, to, amount);
return true;
}
/**
* @dev See {IERC20-allowance}.
*/
function allowance(address owner, address spender) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
/**
* @dev See {IERC20-approve}.
*
* NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
* `transferFrom`. This is semantically equivalent to an infinite approval.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function approve(address spender, uint256 amount) public virtual override returns (bool) {
address owner = _msgSender();
_approve(owner, spender, amount);
return true;
}
/**
* @dev See {IERC20-transferFrom}.
*
* Emits an {Approval} event indicating the updated allowance. This is not
* required by the EIP. See the note at the beginning of {ERC20}.
*
* NOTE: Does not update the allowance if the current allowance
* is the maximum `uint256`.
*
* Requirements:
*
* - `from` and `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
* - the caller must have allowance for ``from``'s tokens of at least
* `amount`.
*/
function transferFrom(
address from,
address to,
uint256 amount
) public virtual override returns (bool) {
address spender = _msgSender();
_spendAllowance(from, spender, amount);
_transfer(from, to, amount);
return true;
}
/**
* @dev Atomically increases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
*/
function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
address owner = _msgSender();
_approve(owner, spender, allowance(owner, spender) + addedValue);
return true;
}
/**
* @dev Atomically decreases the allowance granted to `spender` by the caller.
*
* This is an alternative to {approve} that can be used as a mitigation for
* problems described in {IERC20-approve}.
*
* Emits an {Approval} event indicating the updated allowance.
*
* Requirements:
*
* - `spender` cannot be the zero address.
* - `spender` must have allowance for the caller of at least
* `subtractedValue`.
*/
function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
address owner = _msgSender();
uint256 currentAllowance = allowance(owner, spender);
require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
unchecked {
_approve(owner, spender, currentAllowance - subtractedValue);
}
return true;
}
/**
* @dev Moves `amount` of tokens from `from` to `to`.
*
* This internal function is equivalent to {transfer}, and can be used to
* e.g. implement automatic token fees, slashing mechanisms, etc.
*
* Emits a {Transfer} event.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `from` must have a balance of at least `amount`.
*/
function _transfer(
address from,
address to,
uint256 amount
) internal virtual {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
_beforeTokenTransfer(from, to, amount);
uint256 fromBalance = _balances[from];
require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
unchecked {
_balances[from] = fromBalance - amount;
// Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
// decrementing then incrementing.
_balances[to] += amount;
}
emit Transfer(from, to, amount);
_afterTokenTransfer(from, to, amount);
}
/** @dev Creates `amount` tokens and assigns them to `account`, increasing
* the total supply.
*
* Emits a {Transfer} event with `from` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
*/
function _mint(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_beforeTokenTransfer(address(0), account, amount);
_totalSupply += amount;
unchecked {
// Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
_balances[account] += amount;
}
emit Transfer(address(0), account, amount);
_afterTokenTransfer(address(0), account, amount);
}
/**
* @dev Destroys `amount` tokens from `account`, reducing the
* total supply.
*
* Emits a {Transfer} event with `to` set to the zero address.
*
* Requirements:
*
* - `account` cannot be the zero address.
* - `account` must have at least `amount` tokens.
*/
function _burn(address account, uint256 amount) internal virtual {
require(account != address(0), "ERC20: burn from the zero address");
_beforeTokenTransfer(account, address(0), amount);
uint256 accountBalance = _balances[account];
require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
unchecked {
_balances[account] = accountBalance - amount;
// Overflow not possible: amount <= accountBalance <= totalSupply.
_totalSupply -= amount;
}
emit Transfer(account, address(0), amount);
_afterTokenTransfer(account, address(0), amount);
}
/**
* @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
*
* This internal function is equivalent to `approve`, and can be used to
* e.g. set automatic allowances for certain subsystems, etc.
*
* Emits an {Approval} event.
*
* Requirements:
*
* - `owner` cannot be the zero address.
* - `spender` cannot be the zero address.
*/
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
/**
* @dev Updates `owner` s allowance for `spender` based on spent `amount`.
*
* Does not update the allowance amount in case of infinite allowance.
* Revert if not enough allowance is available.
*
* Might emit an {Approval} event.
*/
function _spendAllowance(
address owner,
address spender,
uint256 amount
) internal virtual {
uint256 currentAllowance = allowance(owner, spender);
if (currentAllowance != type(uint256).max) {
require(currentAllowance >= amount, "ERC20: insufficient allowance");
unchecked {
_approve(owner, spender, currentAllowance - amount);
}
}
}
/**
* @dev Hook that is called before any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* will be transferred to `to`.
* - when `from` is zero, `amount` tokens will be minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
/**
* @dev Hook that is called after any transfer of tokens. This includes
* minting and burning.
*
* Calling conditions:
*
* - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
* has been transferred to `to`.
* - when `from` is zero, `amount` tokens have been minted for `to`.
* - when `to` is zero, `amount` of ``from``'s tokens have been burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _afterTokenTransfer(
address from,
address to,
uint256 amount
) internal virtual {}
}
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC20 standard as defined in the EIP.
*/
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 amount of tokens in existence.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns the amount of tokens owned by `account`.
*/
function balanceOf(address account) external view returns (uint256);
/**
* @dev Moves `amount` 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 amount) 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 `amount` 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 amount) external returns (bool);
/**
* @dev Moves `amount` tokens from `from` to `to` using the
* allowance mechanism. `amount` 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 amount
) external returns (bool);
}
This file has been truncated, but you can view the full file.
{
"deploy": {
"VM:-": {
"linkReferences": {},
"autoDeployLib": true
},
"main:1": {
"linkReferences": {},
"autoDeployLib": true
},
"ropsten:3": {
"linkReferences": {},
"autoDeployLib": true
},
"rinkeby:4": {
"linkReferences": {},
"autoDeployLib": true
},
"kovan:42": {
"linkReferences": {},
"autoDeployLib": true
},
"goerli:5": {
"linkReferences": {},
"autoDeployLib": true
},
"Custom": {
"linkReferences": {},
"autoDeployLib": true
}
},
"data": {
"bytecode": {
"functionDebugData": {
"@_44": {
"entryPoint": null,
"id": 44,
"parameterSlots": 2,
"returnSlots": 0
},
"abi_decode_available_length_t_string_memory_ptr_fromMemory": {
"entryPoint": 376,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"abi_decode_t_string_memory_ptr_fromMemory": {
"entryPoint": 451,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory": {
"entryPoint": 502,
"id": null,
"parameterSlots": 2,
"returnSlots": 2
},
"allocate_memory": {
"entryPoint": 247,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"allocate_unbounded": {
"entryPoint": 99,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
},
"array_allocation_size_t_string_memory_ptr": {
"entryPoint": 278,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_dataslot_t_string_storage": {
"entryPoint": 746,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"array_length_t_string_memory_ptr": {
"entryPoint": 635,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"clean_up_bytearray_end_slots_t_string_storage": {
"entryPoint": 1067,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"cleanup_t_uint256": {
"entryPoint": 882,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"clear_storage_range_t_bytes1": {
"entryPoint": 1028,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"convert_t_uint256_to_t_uint256": {
"entryPoint": 902,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"copy_byte_array_to_storage_from_t_string_memory_ptr_to_t_string_storage": {
"entryPoint": 1222,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"copy_memory_to_memory_with_cleanup": {
"entryPoint": 332,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"divide_by_32_ceil": {
"entryPoint": 767,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"extract_byte_array_length": {
"entryPoint": 693,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"extract_used_part_and_set_length_of_short_byte_array": {
"entryPoint": 1192,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"finalize_allocation": {
"entryPoint": 193,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"identity": {
"entryPoint": 892,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"mask_bytes_dynamic": {
"entryPoint": 1160,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"panic_error_0x22": {
"entryPoint": 646,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"panic_error_0x41": {
"entryPoint": 146,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"prepare_store_t_uint256": {
"entryPoint": 942,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d": {
"entryPoint": 119,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae": {
"entryPoint": 124,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db": {
"entryPoint": 114,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b": {
"entryPoint": 109,
"id": null,
"parameterSlots": 0,
"returnSlots": 0
},
"round_up_to_mul_of_32": {
"entryPoint": 129,
"id": null,
"parameterSlots": 1,
"returnSlots": 1
},
"shift_left_dynamic": {
"entryPoint": 783,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"shift_right_unsigned_dynamic": {
"entryPoint": 1147,
"id": null,
"parameterSlots": 2,
"returnSlots": 1
},
"storage_set_to_zero_t_uint256": {
"entryPoint": 1000,
"id": null,
"parameterSlots": 2,
"returnSlots": 0
},
"update_byte_slice_dynamic32": {
"entryPoint": 796,
"id": null,
"parameterSlots": 3,
"returnSlots": 1
},
"update_storage_value_t_uint256_to_t_uint256": {
"entryPoint": 952,
"id": null,
"parameterSlots": 3,
"returnSlots": 0
},
"zero_value_for_split_t_uint256": {
"entryPoint": 995,
"id": null,
"parameterSlots": 0,
"returnSlots": 1
}
},
"generatedSources": [
{
"ast": {
"nodeType": "YulBlock",
"src": "0:8574:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "47:35:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "57:19:4",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "73:2:4",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "67:5:4"
},
"nodeType": "YulFunctionCall",
"src": "67:9:4"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "57:6:4"
}
]
}
]
},
"name": "allocate_unbounded",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "40:6:4",
"type": ""
}
],
"src": "7:75:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "177:28:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "194:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "197:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "187:6:4"
},
"nodeType": "YulFunctionCall",
"src": "187:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "187:12:4"
}
]
},
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulFunctionDefinition",
"src": "88:117:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "300:28:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "317:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "320:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "310:6:4"
},
"nodeType": "YulFunctionCall",
"src": "310:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "310:12:4"
}
]
},
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulFunctionDefinition",
"src": "211:117:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "423:28:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "440:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "443:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "433:6:4"
},
"nodeType": "YulFunctionCall",
"src": "433:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "433:12:4"
}
]
},
"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
"nodeType": "YulFunctionDefinition",
"src": "334:117:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "546:28:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "563:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "566:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "556:6:4"
},
"nodeType": "YulFunctionCall",
"src": "556:12:4"
},
"nodeType": "YulExpressionStatement",
"src": "556:12:4"
}
]
},
"name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
"nodeType": "YulFunctionDefinition",
"src": "457:117:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "628:54:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "638:38:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "656:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "663:2:4",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "652:3:4"
},
"nodeType": "YulFunctionCall",
"src": "652:14:4"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "672:2:4",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "668:3:4"
},
"nodeType": "YulFunctionCall",
"src": "668:7:4"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "648:3:4"
},
"nodeType": "YulFunctionCall",
"src": "648:28:4"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "638:6:4"
}
]
}
]
},
"name": "round_up_to_mul_of_32",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "611:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "621:6:4",
"type": ""
}
],
"src": "580:102:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "716:152:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "733:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "736:77:4",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "726:6:4"
},
"nodeType": "YulFunctionCall",
"src": "726:88:4"
},
"nodeType": "YulExpressionStatement",
"src": "726:88:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "830:1:4",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "833:4:4",
"type": "",
"value": "0x41"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "823:6:4"
},
"nodeType": "YulFunctionCall",
"src": "823:15:4"
},
"nodeType": "YulExpressionStatement",
"src": "823:15:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "854:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "857:4:4",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "847:6:4"
},
"nodeType": "YulFunctionCall",
"src": "847:15:4"
},
"nodeType": "YulExpressionStatement",
"src": "847:15:4"
}
]
},
"name": "panic_error_0x41",
"nodeType": "YulFunctionDefinition",
"src": "688:180:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "917:238:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "927:58:4",
"value": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "949:6:4"
},
{
"arguments": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "979:4:4"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "957:21:4"
},
"nodeType": "YulFunctionCall",
"src": "957:27:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "945:3:4"
},
"nodeType": "YulFunctionCall",
"src": "945:40:4"
},
"variables": [
{
"name": "newFreePtr",
"nodeType": "YulTypedName",
"src": "931:10:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1096:22:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "1098:16:4"
},
"nodeType": "YulFunctionCall",
"src": "1098:18:4"
},
"nodeType": "YulExpressionStatement",
"src": "1098:18:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "1039:10:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1051:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "1036:2:4"
},
"nodeType": "YulFunctionCall",
"src": "1036:34:4"
},
{
"arguments": [
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "1075:10:4"
},
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "1087:6:4"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "1072:2:4"
},
"nodeType": "YulFunctionCall",
"src": "1072:22:4"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "1033:2:4"
},
"nodeType": "YulFunctionCall",
"src": "1033:62:4"
},
"nodeType": "YulIf",
"src": "1030:88:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1134:2:4",
"type": "",
"value": "64"
},
{
"name": "newFreePtr",
"nodeType": "YulIdentifier",
"src": "1138:10:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1127:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1127:22:4"
},
"nodeType": "YulExpressionStatement",
"src": "1127:22:4"
}
]
},
"name": "finalize_allocation",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "903:6:4",
"type": ""
},
{
"name": "size",
"nodeType": "YulTypedName",
"src": "911:4:4",
"type": ""
}
],
"src": "874:281:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1202:88:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1212:30:4",
"value": {
"arguments": [],
"functionName": {
"name": "allocate_unbounded",
"nodeType": "YulIdentifier",
"src": "1222:18:4"
},
"nodeType": "YulFunctionCall",
"src": "1222:20:4"
},
"variableNames": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "1212:6:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "memPtr",
"nodeType": "YulIdentifier",
"src": "1271:6:4"
},
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "1279:4:4"
}
],
"functionName": {
"name": "finalize_allocation",
"nodeType": "YulIdentifier",
"src": "1251:19:4"
},
"nodeType": "YulFunctionCall",
"src": "1251:33:4"
},
"nodeType": "YulExpressionStatement",
"src": "1251:33:4"
}
]
},
"name": "allocate_memory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "1186:4:4",
"type": ""
}
],
"returnVariables": [
{
"name": "memPtr",
"nodeType": "YulTypedName",
"src": "1195:6:4",
"type": ""
}
],
"src": "1161:129:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1363:241:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "1468:22:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "1470:16:4"
},
"nodeType": "YulFunctionCall",
"src": "1470:18:4"
},
"nodeType": "YulExpressionStatement",
"src": "1470:18:4"
}
]
},
"condition": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "1440:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1448:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "1437:2:4"
},
"nodeType": "YulFunctionCall",
"src": "1437:30:4"
},
"nodeType": "YulIf",
"src": "1434:56:4"
},
{
"nodeType": "YulAssignment",
"src": "1500:37:4",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "1530:6:4"
}
],
"functionName": {
"name": "round_up_to_mul_of_32",
"nodeType": "YulIdentifier",
"src": "1508:21:4"
},
"nodeType": "YulFunctionCall",
"src": "1508:29:4"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "1500:4:4"
}
]
},
{
"nodeType": "YulAssignment",
"src": "1574:23:4",
"value": {
"arguments": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "1586:4:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1592:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1582:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1582:15:4"
},
"variableNames": [
{
"name": "size",
"nodeType": "YulIdentifier",
"src": "1574:4:4"
}
]
}
]
},
"name": "array_allocation_size_t_string_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "1347:6:4",
"type": ""
}
],
"returnVariables": [
{
"name": "size",
"nodeType": "YulTypedName",
"src": "1358:4:4",
"type": ""
}
],
"src": "1296:308:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1672:184:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "1682:10:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "1691:1:4",
"type": "",
"value": "0"
},
"variables": [
{
"name": "i",
"nodeType": "YulTypedName",
"src": "1686:1:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "1751:63:4",
"statements": [
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "1776:3:4"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "1781:1:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1772:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1772:11:4"
},
{
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "1795:3:4"
},
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "1800:1:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1791:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1791:11:4"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "1785:5:4"
},
"nodeType": "YulFunctionCall",
"src": "1785:18:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1765:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1765:39:4"
},
"nodeType": "YulExpressionStatement",
"src": "1765:39:4"
}
]
},
"condition": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "1712:1:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "1715:6:4"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "1709:2:4"
},
"nodeType": "YulFunctionCall",
"src": "1709:13:4"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "1723:19:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1725:15:4",
"value": {
"arguments": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "1734:1:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1737:2:4",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1730:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1730:10:4"
},
"variableNames": [
{
"name": "i",
"nodeType": "YulIdentifier",
"src": "1725:1:4"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "1705:3:4",
"statements": []
},
"src": "1701:113:4"
},
{
"expression": {
"arguments": [
{
"arguments": [
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "1834:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "1839:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "1830:3:4"
},
"nodeType": "YulFunctionCall",
"src": "1830:16:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "1848:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "1823:6:4"
},
"nodeType": "YulFunctionCall",
"src": "1823:27:4"
},
"nodeType": "YulExpressionStatement",
"src": "1823:27:4"
}
]
},
"name": "copy_memory_to_memory_with_cleanup",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "1654:3:4",
"type": ""
},
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "1659:3:4",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "1664:6:4",
"type": ""
}
],
"src": "1610:246:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "1957:339:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "1967:75:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2034:6:4"
}
],
"functionName": {
"name": "array_allocation_size_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "1992:41:4"
},
"nodeType": "YulFunctionCall",
"src": "1992:49:4"
}
],
"functionName": {
"name": "allocate_memory",
"nodeType": "YulIdentifier",
"src": "1976:15:4"
},
"nodeType": "YulFunctionCall",
"src": "1976:66:4"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "1967:5:4"
}
]
},
{
"expression": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "2058:5:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2065:6:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "2051:6:4"
},
"nodeType": "YulFunctionCall",
"src": "2051:21:4"
},
"nodeType": "YulExpressionStatement",
"src": "2051:21:4"
},
{
"nodeType": "YulVariableDeclaration",
"src": "2081:27:4",
"value": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "2096:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2103:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2092:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2092:16:4"
},
"variables": [
{
"name": "dst",
"nodeType": "YulTypedName",
"src": "2085:3:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "2146:83:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_987264b3b1d58a9c7f8255e93e81c77d86d6299019c33110a076957a3e06e2ae",
"nodeType": "YulIdentifier",
"src": "2148:77:4"
},
"nodeType": "YulFunctionCall",
"src": "2148:79:4"
},
"nodeType": "YulExpressionStatement",
"src": "2148:79:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "2127:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2132:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2123:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2123:16:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "2141:3:4"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2120:2:4"
},
"nodeType": "YulFunctionCall",
"src": "2120:25:4"
},
"nodeType": "YulIf",
"src": "2117:112:4"
},
{
"expression": {
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "2273:3:4"
},
{
"name": "dst",
"nodeType": "YulIdentifier",
"src": "2278:3:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2283:6:4"
}
],
"functionName": {
"name": "copy_memory_to_memory_with_cleanup",
"nodeType": "YulIdentifier",
"src": "2238:34:4"
},
"nodeType": "YulFunctionCall",
"src": "2238:52:4"
},
"nodeType": "YulExpressionStatement",
"src": "2238:52:4"
}
]
},
"name": "abi_decode_available_length_t_string_memory_ptr_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "src",
"nodeType": "YulTypedName",
"src": "1930:3:4",
"type": ""
},
{
"name": "length",
"nodeType": "YulTypedName",
"src": "1935:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "1943:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "1951:5:4",
"type": ""
}
],
"src": "1862:434:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2389:282:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2438:83:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_1b9f4a0a5773e33b91aa01db23bf8c55fce1411167c872835e7fa00a4f17d46d",
"nodeType": "YulIdentifier",
"src": "2440:77:4"
},
"nodeType": "YulFunctionCall",
"src": "2440:79:4"
},
"nodeType": "YulExpressionStatement",
"src": "2440:79:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2417:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2425:4:4",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2413:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2413:17:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "2432:3:4"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2409:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2409:27:4"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "2402:6:4"
},
"nodeType": "YulFunctionCall",
"src": "2402:35:4"
},
"nodeType": "YulIf",
"src": "2399:122:4"
},
{
"nodeType": "YulVariableDeclaration",
"src": "2530:27:4",
"value": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2550:6:4"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2544:5:4"
},
"nodeType": "YulFunctionCall",
"src": "2544:13:4"
},
"variables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "2534:6:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "2566:99:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "2638:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2646:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2634:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2634:17:4"
},
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "2653:6:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "2661:3:4"
}
],
"functionName": {
"name": "abi_decode_available_length_t_string_memory_ptr_fromMemory",
"nodeType": "YulIdentifier",
"src": "2575:58:4"
},
"nodeType": "YulFunctionCall",
"src": "2575:90:4"
},
"variableNames": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "2566:5:4"
}
]
}
]
},
"name": "abi_decode_t_string_memory_ptr_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2367:6:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "2375:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "2383:5:4",
"type": ""
}
],
"src": "2316:355:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "2791:739:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "2837:83:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_dbdddcbe895c83990c08b3492a0e83918d802a52331272ac6fdb6a7c4aea3b1b",
"nodeType": "YulIdentifier",
"src": "2839:77:4"
},
"nodeType": "YulFunctionCall",
"src": "2839:79:4"
},
"nodeType": "YulExpressionStatement",
"src": "2839:79:4"
}
]
},
"condition": {
"arguments": [
{
"arguments": [
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "2812:7:4"
},
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2821:9:4"
}
],
"functionName": {
"name": "sub",
"nodeType": "YulIdentifier",
"src": "2808:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2808:23:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2833:2:4",
"type": "",
"value": "64"
}
],
"functionName": {
"name": "slt",
"nodeType": "YulIdentifier",
"src": "2804:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2804:32:4"
},
"nodeType": "YulIf",
"src": "2801:119:4"
},
{
"nodeType": "YulBlock",
"src": "2930:291:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "2945:38:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "2969:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "2980:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "2965:3:4"
},
"nodeType": "YulFunctionCall",
"src": "2965:17:4"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "2959:5:4"
},
"nodeType": "YulFunctionCall",
"src": "2959:24:4"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "2949:6:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3030:83:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulIdentifier",
"src": "3032:77:4"
},
"nodeType": "YulFunctionCall",
"src": "3032:79:4"
},
"nodeType": "YulExpressionStatement",
"src": "3032:79:4"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "3002:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3010:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "2999:2:4"
},
"nodeType": "YulFunctionCall",
"src": "2999:30:4"
},
"nodeType": "YulIf",
"src": "2996:117:4"
},
{
"nodeType": "YulAssignment",
"src": "3127:84:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3183:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "3194:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3179:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3179:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3203:7:4"
}
],
"functionName": {
"name": "abi_decode_t_string_memory_ptr_fromMemory",
"nodeType": "YulIdentifier",
"src": "3137:41:4"
},
"nodeType": "YulFunctionCall",
"src": "3137:74:4"
},
"variableNames": [
{
"name": "value0",
"nodeType": "YulIdentifier",
"src": "3127:6:4"
}
]
}
]
},
{
"nodeType": "YulBlock",
"src": "3231:292:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "3246:39:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3270:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3281:2:4",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3266:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3266:18:4"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3260:5:4"
},
"nodeType": "YulFunctionCall",
"src": "3260:25:4"
},
"variables": [
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "3250:6:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3332:83:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "revert_error_c1322bf8034eace5e0b5c7295db60986aa89aae5e0ea0873e4689e076861a5db",
"nodeType": "YulIdentifier",
"src": "3334:77:4"
},
"nodeType": "YulFunctionCall",
"src": "3334:79:4"
},
"nodeType": "YulExpressionStatement",
"src": "3334:79:4"
}
]
},
"condition": {
"arguments": [
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "3304:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3312:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "3301:2:4"
},
"nodeType": "YulFunctionCall",
"src": "3301:30:4"
},
"nodeType": "YulIf",
"src": "3298:117:4"
},
{
"nodeType": "YulAssignment",
"src": "3429:84:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "headStart",
"nodeType": "YulIdentifier",
"src": "3485:9:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "3496:6:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "3481:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3481:22:4"
},
{
"name": "dataEnd",
"nodeType": "YulIdentifier",
"src": "3505:7:4"
}
],
"functionName": {
"name": "abi_decode_t_string_memory_ptr_fromMemory",
"nodeType": "YulIdentifier",
"src": "3439:41:4"
},
"nodeType": "YulFunctionCall",
"src": "3439:74:4"
},
"variableNames": [
{
"name": "value1",
"nodeType": "YulIdentifier",
"src": "3429:6:4"
}
]
}
]
}
]
},
"name": "abi_decode_tuple_t_string_memory_ptrt_string_memory_ptr_fromMemory",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "headStart",
"nodeType": "YulTypedName",
"src": "2753:9:4",
"type": ""
},
{
"name": "dataEnd",
"nodeType": "YulTypedName",
"src": "2764:7:4",
"type": ""
}
],
"returnVariables": [
{
"name": "value0",
"nodeType": "YulTypedName",
"src": "2776:6:4",
"type": ""
},
{
"name": "value1",
"nodeType": "YulTypedName",
"src": "2784:6:4",
"type": ""
}
],
"src": "2677:853:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3595:40:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3606:22:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "3622:5:4"
}
],
"functionName": {
"name": "mload",
"nodeType": "YulIdentifier",
"src": "3616:5:4"
},
"nodeType": "YulFunctionCall",
"src": "3616:12:4"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3606:6:4"
}
]
}
]
},
"name": "array_length_t_string_memory_ptr",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "3578:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3588:6:4",
"type": ""
}
],
"src": "3536:99:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3669:152:4",
"statements": [
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3686:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3689:77:4",
"type": "",
"value": "35408467139433450592217433187231851964531694900788300625387963629091585785856"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3679:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3679:88:4"
},
"nodeType": "YulExpressionStatement",
"src": "3679:88:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3783:1:4",
"type": "",
"value": "4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3786:4:4",
"type": "",
"value": "0x22"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "3776:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3776:15:4"
},
"nodeType": "YulExpressionStatement",
"src": "3776:15:4"
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3807:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3810:4:4",
"type": "",
"value": "0x24"
}
],
"functionName": {
"name": "revert",
"nodeType": "YulIdentifier",
"src": "3800:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3800:15:4"
},
"nodeType": "YulExpressionStatement",
"src": "3800:15:4"
}
]
},
"name": "panic_error_0x22",
"nodeType": "YulFunctionDefinition",
"src": "3641:180:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "3878:269:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "3888:22:4",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "3902:4:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3908:1:4",
"type": "",
"value": "2"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "3898:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3898:12:4"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "3888:6:4"
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "3919:38:4",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "3949:4:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "3955:1:4",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "3945:3:4"
},
"nodeType": "YulFunctionCall",
"src": "3945:12:4"
},
"variables": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulTypedName",
"src": "3923:18:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "3996:51:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4010:27:4",
"value": {
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4024:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4032:4:4",
"type": "",
"value": "0x7f"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4020:3:4"
},
"nodeType": "YulFunctionCall",
"src": "4020:17:4"
},
"variableNames": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4010:6:4"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "3976:18:4"
}
],
"functionName": {
"name": "iszero",
"nodeType": "YulIdentifier",
"src": "3969:6:4"
},
"nodeType": "YulFunctionCall",
"src": "3969:26:4"
},
"nodeType": "YulIf",
"src": "3966:81:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4099:42:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x22",
"nodeType": "YulIdentifier",
"src": "4113:16:4"
},
"nodeType": "YulFunctionCall",
"src": "4113:18:4"
},
"nodeType": "YulExpressionStatement",
"src": "4113:18:4"
}
]
},
"condition": {
"arguments": [
{
"name": "outOfPlaceEncoding",
"nodeType": "YulIdentifier",
"src": "4063:18:4"
},
{
"arguments": [
{
"name": "length",
"nodeType": "YulIdentifier",
"src": "4086:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4094:2:4",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "4083:2:4"
},
"nodeType": "YulFunctionCall",
"src": "4083:14:4"
}
],
"functionName": {
"name": "eq",
"nodeType": "YulIdentifier",
"src": "4060:2:4"
},
"nodeType": "YulFunctionCall",
"src": "4060:38:4"
},
"nodeType": "YulIf",
"src": "4057:84:4"
}
]
},
"name": "extract_byte_array_length",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "3862:4:4",
"type": ""
}
],
"returnVariables": [
{
"name": "length",
"nodeType": "YulTypedName",
"src": "3871:6:4",
"type": ""
}
],
"src": "3827:320:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4207:87:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4217:11:4",
"value": {
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "4225:3:4"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "4217:4:4"
}
]
},
{
"expression": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4245:1:4",
"type": "",
"value": "0"
},
{
"name": "ptr",
"nodeType": "YulIdentifier",
"src": "4248:3:4"
}
],
"functionName": {
"name": "mstore",
"nodeType": "YulIdentifier",
"src": "4238:6:4"
},
"nodeType": "YulFunctionCall",
"src": "4238:14:4"
},
"nodeType": "YulExpressionStatement",
"src": "4238:14:4"
},
{
"nodeType": "YulAssignment",
"src": "4261:26:4",
"value": {
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4279:1:4",
"type": "",
"value": "0"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4282:4:4",
"type": "",
"value": "0x20"
}
],
"functionName": {
"name": "keccak256",
"nodeType": "YulIdentifier",
"src": "4269:9:4"
},
"nodeType": "YulFunctionCall",
"src": "4269:18:4"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "4261:4:4"
}
]
}
]
},
"name": "array_dataslot_t_string_storage",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "ptr",
"nodeType": "YulTypedName",
"src": "4194:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "4202:4:4",
"type": ""
}
],
"src": "4153:141:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4344:49:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4354:33:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4372:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4379:2:4",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "4368:3:4"
},
"nodeType": "YulFunctionCall",
"src": "4368:14:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4384:2:4",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "div",
"nodeType": "YulIdentifier",
"src": "4364:3:4"
},
"nodeType": "YulFunctionCall",
"src": "4364:23:4"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "4354:6:4"
}
]
}
]
},
"name": "divide_by_32_ceil",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4327:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "4337:6:4",
"type": ""
}
],
"src": "4300:93:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4452:54:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4462:37:4",
"value": {
"arguments": [
{
"name": "bits",
"nodeType": "YulIdentifier",
"src": "4487:4:4"
},
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4493:5:4"
}
],
"functionName": {
"name": "shl",
"nodeType": "YulIdentifier",
"src": "4483:3:4"
},
"nodeType": "YulFunctionCall",
"src": "4483:16:4"
},
"variableNames": [
{
"name": "newValue",
"nodeType": "YulIdentifier",
"src": "4462:8:4"
}
]
}
]
},
"name": "shift_left_dynamic",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "bits",
"nodeType": "YulTypedName",
"src": "4427:4:4",
"type": ""
},
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4433:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "newValue",
"nodeType": "YulTypedName",
"src": "4443:8:4",
"type": ""
}
],
"src": "4399:107:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4588:317:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "4598:35:4",
"value": {
"arguments": [
{
"name": "shiftBytes",
"nodeType": "YulIdentifier",
"src": "4619:10:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4631:1:4",
"type": "",
"value": "8"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "4615:3:4"
},
"nodeType": "YulFunctionCall",
"src": "4615:18:4"
},
"variables": [
{
"name": "shiftBits",
"nodeType": "YulTypedName",
"src": "4602:9:4",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "4642:109:4",
"value": {
"arguments": [
{
"name": "shiftBits",
"nodeType": "YulIdentifier",
"src": "4673:9:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "4684:66:4",
"type": "",
"value": "0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"
}
],
"functionName": {
"name": "shift_left_dynamic",
"nodeType": "YulIdentifier",
"src": "4654:18:4"
},
"nodeType": "YulFunctionCall",
"src": "4654:97:4"
},
"variables": [
{
"name": "mask",
"nodeType": "YulTypedName",
"src": "4646:4:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "4760:51:4",
"value": {
"arguments": [
{
"name": "shiftBits",
"nodeType": "YulIdentifier",
"src": "4791:9:4"
},
{
"name": "toInsert",
"nodeType": "YulIdentifier",
"src": "4802:8:4"
}
],
"functionName": {
"name": "shift_left_dynamic",
"nodeType": "YulIdentifier",
"src": "4772:18:4"
},
"nodeType": "YulFunctionCall",
"src": "4772:39:4"
},
"variableNames": [
{
"name": "toInsert",
"nodeType": "YulIdentifier",
"src": "4760:8:4"
}
]
},
{
"nodeType": "YulAssignment",
"src": "4820:30:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4833:5:4"
},
{
"arguments": [
{
"name": "mask",
"nodeType": "YulIdentifier",
"src": "4844:4:4"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "4840:3:4"
},
"nodeType": "YulFunctionCall",
"src": "4840:9:4"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4829:3:4"
},
"nodeType": "YulFunctionCall",
"src": "4829:21:4"
},
"variableNames": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4820:5:4"
}
]
},
{
"nodeType": "YulAssignment",
"src": "4859:40:4",
"value": {
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "4872:5:4"
},
{
"arguments": [
{
"name": "toInsert",
"nodeType": "YulIdentifier",
"src": "4883:8:4"
},
{
"name": "mask",
"nodeType": "YulIdentifier",
"src": "4893:4:4"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "4879:3:4"
},
"nodeType": "YulFunctionCall",
"src": "4879:19:4"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "4869:2:4"
},
"nodeType": "YulFunctionCall",
"src": "4869:30:4"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "4859:6:4"
}
]
}
]
},
"name": "update_byte_slice_dynamic32",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4549:5:4",
"type": ""
},
{
"name": "shiftBytes",
"nodeType": "YulTypedName",
"src": "4556:10:4",
"type": ""
},
{
"name": "toInsert",
"nodeType": "YulTypedName",
"src": "4568:8:4",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "4581:6:4",
"type": ""
}
],
"src": "4512:393:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "4956:32:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "4966:16:4",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "4977:5:4"
},
"variableNames": [
{
"name": "cleaned",
"nodeType": "YulIdentifier",
"src": "4966:7:4"
}
]
}
]
},
"name": "cleanup_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "4938:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "cleaned",
"nodeType": "YulTypedName",
"src": "4948:7:4",
"type": ""
}
],
"src": "4911:77:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5026:28:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5036:12:4",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "5043:5:4"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "5036:3:4"
}
]
}
]
},
"name": "identity",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "5012:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "5022:3:4",
"type": ""
}
],
"src": "4994:60:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5120:82:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5130:66:4",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "5188:5:4"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "5170:17:4"
},
"nodeType": "YulFunctionCall",
"src": "5170:24:4"
}
],
"functionName": {
"name": "identity",
"nodeType": "YulIdentifier",
"src": "5161:8:4"
},
"nodeType": "YulFunctionCall",
"src": "5161:34:4"
}
],
"functionName": {
"name": "cleanup_t_uint256",
"nodeType": "YulIdentifier",
"src": "5143:17:4"
},
"nodeType": "YulFunctionCall",
"src": "5143:53:4"
},
"variableNames": [
{
"name": "converted",
"nodeType": "YulIdentifier",
"src": "5130:9:4"
}
]
}
]
},
"name": "convert_t_uint256_to_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "5100:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "converted",
"nodeType": "YulTypedName",
"src": "5110:9:4",
"type": ""
}
],
"src": "5060:142:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5255:28:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5265:12:4",
"value": {
"name": "value",
"nodeType": "YulIdentifier",
"src": "5272:5:4"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "5265:3:4"
}
]
}
]
},
"name": "prepare_store_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "value",
"nodeType": "YulTypedName",
"src": "5241:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "5251:3:4",
"type": ""
}
],
"src": "5208:75:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5365:193:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "5375:63:4",
"value": {
"arguments": [
{
"name": "value_0",
"nodeType": "YulIdentifier",
"src": "5430:7:4"
}
],
"functionName": {
"name": "convert_t_uint256_to_t_uint256",
"nodeType": "YulIdentifier",
"src": "5399:30:4"
},
"nodeType": "YulFunctionCall",
"src": "5399:39:4"
},
"variables": [
{
"name": "convertedValue_0",
"nodeType": "YulTypedName",
"src": "5379:16:4",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "5454:4:4"
},
{
"arguments": [
{
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "5494:4:4"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "5488:5:4"
},
"nodeType": "YulFunctionCall",
"src": "5488:11:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "5501:6:4"
},
{
"arguments": [
{
"name": "convertedValue_0",
"nodeType": "YulIdentifier",
"src": "5533:16:4"
}
],
"functionName": {
"name": "prepare_store_t_uint256",
"nodeType": "YulIdentifier",
"src": "5509:23:4"
},
"nodeType": "YulFunctionCall",
"src": "5509:41:4"
}
],
"functionName": {
"name": "update_byte_slice_dynamic32",
"nodeType": "YulIdentifier",
"src": "5460:27:4"
},
"nodeType": "YulFunctionCall",
"src": "5460:91:4"
}
],
"functionName": {
"name": "sstore",
"nodeType": "YulIdentifier",
"src": "5447:6:4"
},
"nodeType": "YulFunctionCall",
"src": "5447:105:4"
},
"nodeType": "YulExpressionStatement",
"src": "5447:105:4"
}
]
},
"name": "update_storage_value_t_uint256_to_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "slot",
"nodeType": "YulTypedName",
"src": "5342:4:4",
"type": ""
},
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "5348:6:4",
"type": ""
},
{
"name": "value_0",
"nodeType": "YulTypedName",
"src": "5356:7:4",
"type": ""
}
],
"src": "5289:269:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5613:24:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5623:8:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "5630:1:4",
"type": "",
"value": "0"
},
"variableNames": [
{
"name": "ret",
"nodeType": "YulIdentifier",
"src": "5623:3:4"
}
]
}
]
},
"name": "zero_value_for_split_t_uint256",
"nodeType": "YulFunctionDefinition",
"returnVariables": [
{
"name": "ret",
"nodeType": "YulTypedName",
"src": "5609:3:4",
"type": ""
}
],
"src": "5564:73:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5696:136:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "5706:46:4",
"value": {
"arguments": [],
"functionName": {
"name": "zero_value_for_split_t_uint256",
"nodeType": "YulIdentifier",
"src": "5720:30:4"
},
"nodeType": "YulFunctionCall",
"src": "5720:32:4"
},
"variables": [
{
"name": "zero_0",
"nodeType": "YulTypedName",
"src": "5710:6:4",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "5805:4:4"
},
{
"name": "offset",
"nodeType": "YulIdentifier",
"src": "5811:6:4"
},
{
"name": "zero_0",
"nodeType": "YulIdentifier",
"src": "5819:6:4"
}
],
"functionName": {
"name": "update_storage_value_t_uint256_to_t_uint256",
"nodeType": "YulIdentifier",
"src": "5761:43:4"
},
"nodeType": "YulFunctionCall",
"src": "5761:65:4"
},
"nodeType": "YulExpressionStatement",
"src": "5761:65:4"
}
]
},
"name": "storage_set_to_zero_t_uint256",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "slot",
"nodeType": "YulTypedName",
"src": "5682:4:4",
"type": ""
},
{
"name": "offset",
"nodeType": "YulTypedName",
"src": "5688:6:4",
"type": ""
}
],
"src": "5643:189:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "5888:136:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "5955:63:4",
"statements": [
{
"expression": {
"arguments": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "5999:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6006:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "storage_set_to_zero_t_uint256",
"nodeType": "YulIdentifier",
"src": "5969:29:4"
},
"nodeType": "YulFunctionCall",
"src": "5969:39:4"
},
"nodeType": "YulExpressionStatement",
"src": "5969:39:4"
}
]
},
"condition": {
"arguments": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "5908:5:4"
},
{
"name": "end",
"nodeType": "YulIdentifier",
"src": "5915:3:4"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "5905:2:4"
},
"nodeType": "YulFunctionCall",
"src": "5905:14:4"
},
"nodeType": "YulForLoop",
"post": {
"nodeType": "YulBlock",
"src": "5920:26:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "5922:22:4",
"value": {
"arguments": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "5935:5:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "5942:1:4",
"type": "",
"value": "1"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "5931:3:4"
},
"nodeType": "YulFunctionCall",
"src": "5931:13:4"
},
"variableNames": [
{
"name": "start",
"nodeType": "YulIdentifier",
"src": "5922:5:4"
}
]
}
]
},
"pre": {
"nodeType": "YulBlock",
"src": "5902:2:4",
"statements": []
},
"src": "5898:120:4"
}
]
},
"name": "clear_storage_range_t_bytes1",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "start",
"nodeType": "YulTypedName",
"src": "5876:5:4",
"type": ""
},
{
"name": "end",
"nodeType": "YulTypedName",
"src": "5883:3:4",
"type": ""
}
],
"src": "5838:186:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6109:464:4",
"statements": [
{
"body": {
"nodeType": "YulBlock",
"src": "6135:431:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6149:54:4",
"value": {
"arguments": [
{
"name": "array",
"nodeType": "YulIdentifier",
"src": "6197:5:4"
}
],
"functionName": {
"name": "array_dataslot_t_string_storage",
"nodeType": "YulIdentifier",
"src": "6165:31:4"
},
"nodeType": "YulFunctionCall",
"src": "6165:38:4"
},
"variables": [
{
"name": "dataArea",
"nodeType": "YulTypedName",
"src": "6153:8:4",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "6216:63:4",
"value": {
"arguments": [
{
"name": "dataArea",
"nodeType": "YulIdentifier",
"src": "6239:8:4"
},
{
"arguments": [
{
"name": "startIndex",
"nodeType": "YulIdentifier",
"src": "6267:10:4"
}
],
"functionName": {
"name": "divide_by_32_ceil",
"nodeType": "YulIdentifier",
"src": "6249:17:4"
},
"nodeType": "YulFunctionCall",
"src": "6249:29:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6235:3:4"
},
"nodeType": "YulFunctionCall",
"src": "6235:44:4"
},
"variables": [
{
"name": "deleteStart",
"nodeType": "YulTypedName",
"src": "6220:11:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "6436:27:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "6438:23:4",
"value": {
"name": "dataArea",
"nodeType": "YulIdentifier",
"src": "6453:8:4"
},
"variableNames": [
{
"name": "deleteStart",
"nodeType": "YulIdentifier",
"src": "6438:11:4"
}
]
}
]
},
"condition": {
"arguments": [
{
"name": "startIndex",
"nodeType": "YulIdentifier",
"src": "6420:10:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6432:2:4",
"type": "",
"value": "32"
}
],
"functionName": {
"name": "lt",
"nodeType": "YulIdentifier",
"src": "6417:2:4"
},
"nodeType": "YulFunctionCall",
"src": "6417:18:4"
},
"nodeType": "YulIf",
"src": "6414:49:4"
},
{
"expression": {
"arguments": [
{
"name": "deleteStart",
"nodeType": "YulIdentifier",
"src": "6505:11:4"
},
{
"arguments": [
{
"name": "dataArea",
"nodeType": "YulIdentifier",
"src": "6522:8:4"
},
{
"arguments": [
{
"name": "len",
"nodeType": "YulIdentifier",
"src": "6550:3:4"
}
],
"functionName": {
"name": "divide_by_32_ceil",
"nodeType": "YulIdentifier",
"src": "6532:17:4"
},
"nodeType": "YulFunctionCall",
"src": "6532:22:4"
}
],
"functionName": {
"name": "add",
"nodeType": "YulIdentifier",
"src": "6518:3:4"
},
"nodeType": "YulFunctionCall",
"src": "6518:37:4"
}
],
"functionName": {
"name": "clear_storage_range_t_bytes1",
"nodeType": "YulIdentifier",
"src": "6476:28:4"
},
"nodeType": "YulFunctionCall",
"src": "6476:80:4"
},
"nodeType": "YulExpressionStatement",
"src": "6476:80:4"
}
]
},
"condition": {
"arguments": [
{
"name": "len",
"nodeType": "YulIdentifier",
"src": "6126:3:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6131:2:4",
"type": "",
"value": "31"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "6123:2:4"
},
"nodeType": "YulFunctionCall",
"src": "6123:11:4"
},
"nodeType": "YulIf",
"src": "6120:446:4"
}
]
},
"name": "clean_up_bytearray_end_slots_t_string_storage",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "array",
"nodeType": "YulTypedName",
"src": "6085:5:4",
"type": ""
},
{
"name": "len",
"nodeType": "YulTypedName",
"src": "6092:3:4",
"type": ""
},
{
"name": "startIndex",
"nodeType": "YulTypedName",
"src": "6097:10:4",
"type": ""
}
],
"src": "6030:543:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6642:54:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "6652:37:4",
"value": {
"arguments": [
{
"name": "bits",
"nodeType": "YulIdentifier",
"src": "6677:4:4"
},
{
"name": "value",
"nodeType": "YulIdentifier",
"src": "6683:5:4"
}
],
"functionName": {
"name": "shr",
"nodeType": "YulIdentifier",
"src": "6673:3:4"
},
"nodeType": "YulFunctionCall",
"src": "6673:16:4"
},
"variableNames": [
{
"name": "newValue",
"nodeType": "YulIdentifier",
"src": "6652:8:4"
}
]
}
]
},
"name": "shift_right_unsigned_dynamic",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "bits",
"nodeType": "YulTypedName",
"src": "6617:4:4",
"type": ""
},
{
"name": "value",
"nodeType": "YulTypedName",
"src": "6623:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "newValue",
"nodeType": "YulTypedName",
"src": "6633:8:4",
"type": ""
}
],
"src": "6579:117:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6753:118:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "6763:68:4",
"value": {
"arguments": [
{
"arguments": [
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6812:1:4",
"type": "",
"value": "8"
},
{
"name": "bytes",
"nodeType": "YulIdentifier",
"src": "6815:5:4"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "6808:3:4"
},
"nodeType": "YulFunctionCall",
"src": "6808:13:4"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "6827:1:4",
"type": "",
"value": "0"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "6823:3:4"
},
"nodeType": "YulFunctionCall",
"src": "6823:6:4"
}
],
"functionName": {
"name": "shift_right_unsigned_dynamic",
"nodeType": "YulIdentifier",
"src": "6779:28:4"
},
"nodeType": "YulFunctionCall",
"src": "6779:51:4"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "6775:3:4"
},
"nodeType": "YulFunctionCall",
"src": "6775:56:4"
},
"variables": [
{
"name": "mask",
"nodeType": "YulTypedName",
"src": "6767:4:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "6840:25:4",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "6854:4:4"
},
{
"name": "mask",
"nodeType": "YulIdentifier",
"src": "6860:4:4"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "6850:3:4"
},
"nodeType": "YulFunctionCall",
"src": "6850:15:4"
},
"variableNames": [
{
"name": "result",
"nodeType": "YulIdentifier",
"src": "6840:6:4"
}
]
}
]
},
"name": "mask_bytes_dynamic",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "6730:4:4",
"type": ""
},
{
"name": "bytes",
"nodeType": "YulTypedName",
"src": "6736:5:4",
"type": ""
}
],
"returnVariables": [
{
"name": "result",
"nodeType": "YulTypedName",
"src": "6746:6:4",
"type": ""
}
],
"src": "6702:169:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "6957:214:4",
"statements": [
{
"nodeType": "YulAssignment",
"src": "7090:37:4",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "7117:4:4"
},
{
"name": "len",
"nodeType": "YulIdentifier",
"src": "7123:3:4"
}
],
"functionName": {
"name": "mask_bytes_dynamic",
"nodeType": "YulIdentifier",
"src": "7098:18:4"
},
"nodeType": "YulFunctionCall",
"src": "7098:29:4"
},
"variableNames": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "7090:4:4"
}
]
},
{
"nodeType": "YulAssignment",
"src": "7136:29:4",
"value": {
"arguments": [
{
"name": "data",
"nodeType": "YulIdentifier",
"src": "7147:4:4"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7157:1:4",
"type": "",
"value": "2"
},
{
"name": "len",
"nodeType": "YulIdentifier",
"src": "7160:3:4"
}
],
"functionName": {
"name": "mul",
"nodeType": "YulIdentifier",
"src": "7153:3:4"
},
"nodeType": "YulFunctionCall",
"src": "7153:11:4"
}
],
"functionName": {
"name": "or",
"nodeType": "YulIdentifier",
"src": "7144:2:4"
},
"nodeType": "YulFunctionCall",
"src": "7144:21:4"
},
"variableNames": [
{
"name": "used",
"nodeType": "YulIdentifier",
"src": "7136:4:4"
}
]
}
]
},
"name": "extract_used_part_and_set_length_of_short_byte_array",
"nodeType": "YulFunctionDefinition",
"parameters": [
{
"name": "data",
"nodeType": "YulTypedName",
"src": "6938:4:4",
"type": ""
},
{
"name": "len",
"nodeType": "YulTypedName",
"src": "6944:3:4",
"type": ""
}
],
"returnVariables": [
{
"name": "used",
"nodeType": "YulTypedName",
"src": "6952:4:4",
"type": ""
}
],
"src": "6876:295:4"
},
{
"body": {
"nodeType": "YulBlock",
"src": "7268:1303:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "7279:51:4",
"value": {
"arguments": [
{
"name": "src",
"nodeType": "YulIdentifier",
"src": "7326:3:4"
}
],
"functionName": {
"name": "array_length_t_string_memory_ptr",
"nodeType": "YulIdentifier",
"src": "7293:32:4"
},
"nodeType": "YulFunctionCall",
"src": "7293:37:4"
},
"variables": [
{
"name": "newLen",
"nodeType": "YulTypedName",
"src": "7283:6:4",
"type": ""
}
]
},
{
"body": {
"nodeType": "YulBlock",
"src": "7415:22:4",
"statements": [
{
"expression": {
"arguments": [],
"functionName": {
"name": "panic_error_0x41",
"nodeType": "YulIdentifier",
"src": "7417:16:4"
},
"nodeType": "YulFunctionCall",
"src": "7417:18:4"
},
"nodeType": "YulExpressionStatement",
"src": "7417:18:4"
}
]
},
"condition": {
"arguments": [
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "7387:6:4"
},
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7395:18:4",
"type": "",
"value": "0xffffffffffffffff"
}
],
"functionName": {
"name": "gt",
"nodeType": "YulIdentifier",
"src": "7384:2:4"
},
"nodeType": "YulFunctionCall",
"src": "7384:30:4"
},
"nodeType": "YulIf",
"src": "7381:56:4"
},
{
"nodeType": "YulVariableDeclaration",
"src": "7447:52:4",
"value": {
"arguments": [
{
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "7493:4:4"
}
],
"functionName": {
"name": "sload",
"nodeType": "YulIdentifier",
"src": "7487:5:4"
},
"nodeType": "YulFunctionCall",
"src": "7487:11:4"
}
],
"functionName": {
"name": "extract_byte_array_length",
"nodeType": "YulIdentifier",
"src": "7461:25:4"
},
"nodeType": "YulFunctionCall",
"src": "7461:38:4"
},
"variables": [
{
"name": "oldLen",
"nodeType": "YulTypedName",
"src": "7451:6:4",
"type": ""
}
]
},
{
"expression": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "7592:4:4"
},
{
"name": "oldLen",
"nodeType": "YulIdentifier",
"src": "7598:6:4"
},
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "7606:6:4"
}
],
"functionName": {
"name": "clean_up_bytearray_end_slots_t_string_storage",
"nodeType": "YulIdentifier",
"src": "7546:45:4"
},
"nodeType": "YulFunctionCall",
"src": "7546:67:4"
},
"nodeType": "YulExpressionStatement",
"src": "7546:67:4"
},
{
"nodeType": "YulVariableDeclaration",
"src": "7623:18:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "7640:1:4",
"type": "",
"value": "0"
},
"variables": [
{
"name": "srcOffset",
"nodeType": "YulTypedName",
"src": "7627:9:4",
"type": ""
}
]
},
{
"nodeType": "YulAssignment",
"src": "7651:17:4",
"value": {
"kind": "number",
"nodeType": "YulLiteral",
"src": "7664:4:4",
"type": "",
"value": "0x20"
},
"variableNames": [
{
"name": "srcOffset",
"nodeType": "YulIdentifier",
"src": "7651:9:4"
}
]
},
{
"cases": [
{
"body": {
"nodeType": "YulBlock",
"src": "7715:611:4",
"statements": [
{
"nodeType": "YulVariableDeclaration",
"src": "7729:37:4",
"value": {
"arguments": [
{
"name": "newLen",
"nodeType": "YulIdentifier",
"src": "7748:6:4"
},
{
"arguments": [
{
"kind": "number",
"nodeType": "YulLiteral",
"src": "7760:4:4",
"type": "",
"value": "0x1f"
}
],
"functionName": {
"name": "not",
"nodeType": "YulIdentifier",
"src": "7756:3:4"
},
"nodeType": "YulFunctionCall",
"src": "7756:9:4"
}
],
"functionName": {
"name": "and",
"nodeType": "YulIdentifier",
"src": "7744:3:4"
},
"nodeType": "YulFunctionCall",
"src": "7744:22:4"
},
"variables": [
{
"name": "loopEnd",
"nodeType": "YulTypedName",
"src": "7733:7:4",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "7780:51:4",
"value": {
"arguments": [
{
"name": "slot",
"nodeType": "YulIdentifier",
"src": "7826:4:4"
}
],
"functionName": {
"name": "array_dataslot_t_string_storage",
"nodeType": "YulIdentifier",
"src": "7794:31:4"
},
"nodeType": "YulFunctionCall",
"src": "7794:37:4"
},
"variables": [
{
"name": "dstPtr",
"nodeType": "YulTypedName",
"src": "7784:6:4",
"type": ""
}
]
},
{
"nodeType": "YulVariableDeclaration",
"src": "7844:10:4",
"value": {
"kind
View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

View raw

(Sorry about that, but we can’t show files that are this big right now.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment