@venusprotocol/governance-contracts 1.4.0-dev.2 → 1.4.0-dev.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/artifacts/@openzeppelin/contracts/access/AccessControl.sol/AccessControl.dbg.json +1 -1
  2. package/artifacts/@openzeppelin/contracts/access/IAccessControl.sol/IAccessControl.dbg.json +1 -1
  3. package/artifacts/@openzeppelin/contracts/utils/Context.sol/Context.dbg.json +1 -1
  4. package/artifacts/@openzeppelin/contracts/utils/Strings.sol/Strings.dbg.json +1 -1
  5. package/artifacts/@openzeppelin/contracts/utils/introspection/ERC165.sol/ERC165.dbg.json +1 -1
  6. package/artifacts/@openzeppelin/contracts/utils/introspection/IERC165.sol/IERC165.dbg.json +1 -1
  7. package/artifacts/@openzeppelin/contracts/utils/math/Math.sol/Math.dbg.json +1 -1
  8. package/artifacts/@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol/Ownable2StepUpgradeable.dbg.json +1 -1
  9. package/artifacts/@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol/OwnableUpgradeable.dbg.json +1 -1
  10. package/artifacts/@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol/Initializable.dbg.json +1 -1
  11. package/artifacts/@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol/AddressUpgradeable.dbg.json +1 -1
  12. package/artifacts/@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol/ContextUpgradeable.dbg.json +1 -1
  13. package/artifacts/build-info/5c939a36c2c6b8a9a6706a808e87cc78.json +1 -0
  14. package/artifacts/contracts/Governance/AccessControlManager.sol/AccessControlManager.dbg.json +1 -1
  15. package/artifacts/contracts/Governance/AccessControlledV8.sol/AccessControlledV8.dbg.json +1 -1
  16. package/artifacts/contracts/Governance/IAccessControlManagerV8.sol/IAccessControlManagerV8.dbg.json +1 -1
  17. package/artifacts/contracts/Governance/TimelockV8.sol/TimelockV8.dbg.json +4 -0
  18. package/artifacts/contracts/Governance/TimelockV8.sol/TimelockV8.json +445 -0
  19. package/artifacts/contracts/test/MockAccessTest.sol/MockAccessTest.dbg.json +1 -1
  20. package/artifacts/contracts/test/TestTimelockV8.sol/TestTimelockV8.dbg.json +4 -0
  21. package/artifacts/contracts/test/TestTimelockV8.sol/TestTimelockV8.json +445 -0
  22. package/contracts/Governance/TimelockV8.sol +229 -0
  23. package/contracts/test/TestTimelockV8.sol +19 -0
  24. package/deploy/001-timelock.ts +69 -0
  25. package/deploy/002-access-control.ts +39 -0
  26. package/dist/deploy/{001-access-control.d.ts → 001-timelock.d.ts} +1 -1
  27. package/dist/deploy/001-timelock.d.ts.map +1 -0
  28. package/dist/deploy/001-timelock.js +71 -0
  29. package/dist/deploy/001-timelock.js.map +1 -0
  30. package/dist/deploy/002-access-control.d.ts +4 -0
  31. package/dist/deploy/002-access-control.d.ts.map +1 -0
  32. package/dist/deploy/{001-access-control.js → 002-access-control.js} +6 -7
  33. package/dist/deploy/002-access-control.js.map +1 -0
  34. package/dist/hardhat.config.d.ts +1 -2
  35. package/dist/hardhat.config.d.ts.map +1 -1
  36. package/dist/hardhat.config.js +7 -2
  37. package/dist/hardhat.config.js.map +1 -1
  38. package/dist/{deploy/helpers → helpers/deploy}/constants.d.ts +2 -1
  39. package/dist/{deploy/helpers → helpers/deploy}/constants.d.ts.map +1 -1
  40. package/dist/{deploy/helpers → helpers/deploy}/constants.js +1 -0
  41. package/dist/helpers/deploy/constants.js.map +1 -0
  42. package/dist/helpers/deploy/deploymentUtils.d.ts +5 -0
  43. package/dist/helpers/deploy/deploymentUtils.d.ts.map +1 -0
  44. package/dist/helpers/deploy/deploymentUtils.js +31 -0
  45. package/dist/helpers/deploy/deploymentUtils.js.map +1 -0
  46. package/package.json +12 -3
  47. package/artifacts/build-info/0e028ff5062f0f59a7ffef92b702c074.json +0 -1
  48. package/dist/deploy/001-access-control.d.ts.map +0 -1
  49. package/dist/deploy/001-access-control.js.map +0 -1
  50. package/dist/deploy/helpers/constants.js.map +0 -1
  51. package/dist/deploy/helpers/deploymentUtils.d.ts +0 -5
  52. package/dist/deploy/helpers/deploymentUtils.d.ts.map +0 -1
  53. package/dist/deploy/helpers/deploymentUtils.js +0 -16
  54. package/dist/deploy/helpers/deploymentUtils.js.map +0 -1
@@ -1 +0,0 @@
1
- {"id":"0e028ff5062f0f59a7ffef92b702c074","_format":"hh-sol-build-info-1","solcVersion":"0.8.13","solcLongVersion":"0.8.13+commit.abaa5c0e","input":{"language":"Solidity","sources":{"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./OwnableUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership} and {acceptOwnership}.\n *\n * This module is used through inheritance. It will make available all functions\n * from parent (Ownable).\n */\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\n function __Ownable2Step_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable2Step_init_unchained() internal onlyInitializing {\n }\n address private _pendingOwner;\n\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Returns the address of the pending owner.\n */\n function pendingOwner() public view virtual returns (address) {\n return _pendingOwner;\n }\n\n /**\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual override onlyOwner {\n _pendingOwner = newOwner;\n emit OwnershipTransferStarted(owner(), newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual override {\n delete _pendingOwner;\n super._transferOwnership(newOwner);\n }\n\n /**\n * @dev The new owner accepts the ownership transfer.\n */\n function acceptOwnership() external {\n address sender = _msgSender();\n require(pendingOwner() == sender, \"Ownable2Step: caller is not the new owner\");\n _transferOwnership(sender);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/ContextUpgradeable.sol\";\nimport \"../proxy/utils/Initializable.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n function __Ownable_init() internal onlyInitializing {\n __Ownable_init_unchained();\n }\n\n function __Ownable_init_unchained() internal onlyInitializing {\n _transferOwnership(_msgSender());\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n _checkOwner();\n _;\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if the sender is not the owner.\n */\n function _checkOwner() internal view virtual {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n}\n"},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../../utils/AddressUpgradeable.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n * reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n * case an upgrade adds a module that needs to be initialized.\n *\n * For example:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * contract MyToken is ERC20Upgradeable {\n * function initialize() initializer public {\n * __ERC20_init(\"MyToken\", \"MTK\");\n * }\n * }\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n * function initializeV2() reinitializer(2) public {\n * __ERC20Permit_init(\"MyToken\");\n * }\n * }\n * ```\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() {\n * _disableInitializers();\n * }\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n * @custom:oz-retyped-from bool\n */\n uint8 private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Triggered when the contract has been initialized or reinitialized.\n */\n event Initialized(uint8 version);\n\n /**\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n * `onlyInitializing` functions can be used to initialize parent contracts.\n *\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n * constructor.\n *\n * Emits an {Initialized} event.\n */\n modifier initializer() {\n bool isTopLevelCall = !_initializing;\n require(\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\n \"Initializable: contract is already initialized\"\n );\n _initialized = 1;\n if (isTopLevelCall) {\n _initializing = true;\n }\n _;\n if (isTopLevelCall) {\n _initializing = false;\n emit Initialized(1);\n }\n }\n\n /**\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n * used to initialize parent contracts.\n *\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\n * are added through upgrades and that require initialization.\n *\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n * cannot be nested. If one is invoked in the context of another, execution will revert.\n *\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n * a contract, executing them in the right order is up to the developer or operator.\n *\n * WARNING: setting the version to 255 will prevent any future reinitialization.\n *\n * Emits an {Initialized} event.\n */\n modifier reinitializer(uint8 version) {\n require(!_initializing && _initialized < version, \"Initializable: contract is already initialized\");\n _initialized = version;\n _initializing = true;\n _;\n _initializing = false;\n emit Initialized(version);\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n /**\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n * through proxies.\n *\n * Emits an {Initialized} event the first time it is successfully executed.\n */\n function _disableInitializers() internal virtual {\n require(!_initializing, \"Initializable: contract is initializing\");\n if (_initialized < type(uint8).max) {\n _initialized = type(uint8).max;\n emit Initialized(type(uint8).max);\n }\n }\n\n /**\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\n */\n function _getInitializedVersion() internal view returns (uint8) {\n return _initialized;\n }\n\n /**\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\n */\n function _isInitializing() internal view returns (bool) {\n return _initializing;\n }\n}\n"},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary AddressUpgradeable {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n *\n * _Available since v4.8._\n */\n function verifyCallResultFromTarget(\n address target,\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n if (success) {\n if (returndata.length == 0) {\n // only check isContract if the call was successful and the return data is empty\n // otherwise we already know that it was a contract\n require(isContract(target), \"Address: call to non-contract\");\n }\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n /**\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason or using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n _revert(returndata, errorMessage);\n }\n }\n\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n /// @solidity memory-safe-assembly\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n}\n"},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"content":"// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\nimport \"../proxy/utils/Initializable.sol\";\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 ContextUpgradeable is Initializable {\n function __Context_init() internal onlyInitializing {\n }\n\n function __Context_init_unchained() internal onlyInitializing {\n }\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 /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[50] private __gap;\n}\n"},"@openzeppelin/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 \"./IAccessControl.sol\";\nimport \"../utils/Context.sol\";\nimport \"../utils/Strings.sol\";\nimport \"../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"},"@openzeppelin/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"},"@openzeppelin/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"},"@openzeppelin/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"},"@openzeppelin/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"},"@openzeppelin/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);\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 * 8) < value ? 1 : 0);\n }\n }\n}\n"},"@openzeppelin/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"},"contracts/Governance/AccessControlledV8.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.13;\n\nimport \"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\";\nimport \"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\";\n\nimport \"./IAccessControlManagerV8.sol\";\n\n/**\n * @title AccessControlledV8\n * @author Venus\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\n */\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\n /// @notice Access control manager contract\n IAccessControlManagerV8 private _accessControlManager;\n\n /**\n * @dev This empty reserved space is put in place to allow future versions to add new\n * variables without shifting down storage in the inheritance chain.\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\n */\n uint256[49] private __gap;\n\n /// @notice Emitted when access control manager contract address is changed\n event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\n\n /// @notice Thrown when the action is prohibited by AccessControlManager\n error Unauthorized(address sender, address calledContract, string methodSignature);\n\n function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\n __Ownable2Step_init();\n __AccessControlled_init_unchained(accessControlManager_);\n }\n\n function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\n _setAccessControlManager(accessControlManager_);\n }\n\n /**\n * @notice Sets the address of AccessControlManager\n * @dev Admin function to set address of AccessControlManager\n * @param accessControlManager_ The new address of the AccessControlManager\n * @custom:event Emits NewAccessControlManager event\n * @custom:access Only Governance\n */\n function setAccessControlManager(address accessControlManager_) external onlyOwner {\n _setAccessControlManager(accessControlManager_);\n }\n\n /**\n * @notice Returns the address of the access control manager contract\n */\n function accessControlManager() external view returns (IAccessControlManagerV8) {\n return _accessControlManager;\n }\n\n /**\n * @dev Internal function to set address of AccessControlManager\n * @param accessControlManager_ The new address of the AccessControlManager\n */\n function _setAccessControlManager(address accessControlManager_) internal {\n require(address(accessControlManager_) != address(0), \"invalid acess control manager address\");\n address oldAccessControlManager = address(_accessControlManager);\n _accessControlManager = IAccessControlManagerV8(accessControlManager_);\n emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\n }\n\n /**\n * @notice Reverts if the call is not allowed by AccessControlManager\n * @param signature Method signature\n */\n function _checkAccessAllowed(string memory signature) internal view {\n bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\n\n if (!isAllowedToCall) {\n revert Unauthorized(msg.sender, address(this), signature);\n }\n }\n}\n"},"contracts/Governance/AccessControlManager.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.13;\nimport \"@openzeppelin/contracts/access/AccessControl.sol\";\nimport \"./IAccessControlManagerV8.sol\";\n\n/**\n * @title AccessControlManager\n * @author Venus\n * @dev This contract is a wrapper of OpenZeppelin AccessControl extending it in a way to standartize access control within Venus Smart Contract Ecosystem.\n * @notice Access control plays a crucial role in the Venus governance model. It is used to restrict functions so that they can only be called from one\n * account or list of accounts (EOA or Contract Accounts).\n *\n * The implementation of `AccessControlManager`(https://github.com/VenusProtocol/governance-contracts/blob/main/contracts/Governance/AccessControlManager.sol)\n * inherits the [Open Zeppelin AccessControl](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/AccessControl.sol)\n * contract as a base for role management logic. There are two role types: admin and granular permissions.\n * \n * ## Granular Roles\n * \n * Granular roles are built by hashing the contract address and its function signature. For example, given contract `Foo` with function `Foo.bar()` which\n * is guarded by ACM, calling `giveRolePermission` for account B do the following:\n * \n * 1. Compute `keccak256(contractFooAddress,functionSignatureBar)`\n * 1. Add the computed role to the roles of account B\n * 1. Account B now can call `ContractFoo.bar()`\n * \n * ## Admin Roles\n * \n * Admin roles allow for an address to call a function signature on any contract guarded by the `AccessControlManager`. This is particularly useful for\n * contracts created by factories.\n * \n * For Admin roles a null address is hashed in place of the contract address (`keccak256(0x0000000000000000000000000000000000000000,functionSignatureBar)`.\n * \n * In the previous example, giving account B the admin role, account B will have permissions to call the `bar()` function on any contract that is guarded by\n * ACM, not only contract A.\n * \n * ## Protocol Integration\n * \n * All restricted functions in Venus Protocol use a hook to ACM in order to check if the caller has the right permission to call the guarded function.\n * `AccessControlledV5` and `AccessControlledV8` abstract contract makes this integration easier. They call ACM's external method\n * `isAllowedToCall(address caller, string functionSig)`. Here is an example of how `setCollateralFactor` function in `Comptroller` is integrated with ACM:\n\n```\n contract Comptroller is [...] AccessControlledV8 {\n [...]\n function setCollateralFactor(VToken vToken, uint256 newCollateralFactorMantissa, uint256 newLiquidationThresholdMantissa) external {\n _checkAccessAllowed(\"setCollateralFactor(address,uint256,uint256)\");\n [...]\n }\n }\n```\n */\ncontract AccessControlManager is AccessControl, IAccessControlManagerV8 {\n /// @notice Emitted when an account is given a permission to a certain contract function\n /// @dev If contract address is 0x000..0 this means that the account is a default admin of this function and\n /// can call any contract function with this signature\n event PermissionGranted(address account, address contractAddress, string functionSig);\n\n /// @notice Emitted when an account is revoked a permission to a certain contract function\n event PermissionRevoked(address account, address contractAddress, string functionSig);\n\n constructor() {\n // Grant the contract deployer the default admin role: it will be able\n // to grant and revoke any roles\n _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);\n }\n\n /**\n * @notice Gives a function call permission to one single account\n * @dev this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE\n * @param contractAddress address of contract for which call permissions will be granted\n * @dev if contractAddress is zero address, the account can access the specified function\n * on **any** contract managed by this ACL\n * @param functionSig signature e.g. \"functionName(uint256,bool)\"\n * @param accountToPermit account that will be given access to the contract function\n * @custom:event Emits a {RoleGranted} and {PermissionGranted} events.\n */\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) public {\n bytes32 role = keccak256(abi.encodePacked(contractAddress, functionSig));\n grantRole(role, accountToPermit);\n emit PermissionGranted(accountToPermit, contractAddress, functionSig);\n }\n\n /**\n * @notice Revokes an account's permission to a particular function call\n * @dev this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE\n * \t\tMay emit a {RoleRevoked} event.\n * @param contractAddress address of contract for which call permissions will be revoked\n * @param functionSig signature e.g. \"functionName(uint256,bool)\"\n * @custom:event Emits {RoleRevoked} and {PermissionRevoked} events.\n */\n function revokeCallPermission(\n address contractAddress,\n string calldata functionSig,\n address accountToRevoke\n ) public {\n bytes32 role = keccak256(abi.encodePacked(contractAddress, functionSig));\n revokeRole(role, accountToRevoke);\n emit PermissionRevoked(accountToRevoke, contractAddress, functionSig);\n }\n\n /**\n * @notice Verifies if the given account can call a contract's guarded function\n * @dev Since restricted contracts using this function as a permission hook, we can get contracts address with msg.sender\n * @param account for which call permissions will be checked\n * @param functionSig restricted function signature e.g. \"functionName(uint256,bool)\"\n * @return false if the user account cannot call the particular contract function\n *\n */\n function isAllowedToCall(address account, string calldata functionSig) public view returns (bool) {\n bytes32 role = keccak256(abi.encodePacked(msg.sender, functionSig));\n\n if (hasRole(role, account)) {\n return true;\n } else {\n role = keccak256(abi.encodePacked(address(0), functionSig));\n return hasRole(role, account);\n }\n }\n\n /**\n * @notice Verifies if the given account can call a contract's guarded function\n * @dev This function is used as a view function to check permissions rather than contract hook for access restriction check.\n * @param account for which call permissions will be checked against\n * @param contractAddress address of the restricted contract\n * @param functionSig signature of the restricted function e.g. \"functionName(uint256,bool)\"\n * @return false if the user account cannot call the particular contract function\n */\n function hasPermission(\n address account,\n address contractAddress,\n string calldata functionSig\n ) public view returns (bool) {\n bytes32 role = keccak256(abi.encodePacked(contractAddress, functionSig));\n return hasRole(role, account);\n }\n}\n"},"contracts/Governance/IAccessControlManagerV8.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.13;\n\nimport \"@openzeppelin/contracts/access/IAccessControl.sol\";\n\n/**\n * @title IAccessControlManagerV8\n * @author Venus\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\n */\ninterface IAccessControlManagerV8 is IAccessControl {\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\n\n function revokeCallPermission(\n address contractAddress,\n string calldata functionSig,\n address accountToRevoke\n ) external;\n\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\n\n function hasPermission(\n address account,\n address contractAddress,\n string calldata functionSig\n ) external view returns (bool);\n}\n"},"contracts/test/MockAccessTest.sol":{"content":"// SPDX-License-Identifier: BSD-3-Clause\npragma solidity 0.8.13;\n\nimport \"../Governance/AccessControlledV8.sol\";\n\ncontract MockAccessTest is AccessControlledV8 {\n /**\n * @param accessControlManager Access control manager contract address\n */\n function initialize(address accessControlManager) external initializer {\n __AccessControlled_init_unchained(accessControlManager);\n }\n}\n"}},"settings":{"optimizer":{"enabled":true,"runs":10000},"outputSelection":{"*":{"*":["storageLayout","abi","evm.bytecode","evm.deployedBytecode","evm.methodIdentifiers","metadata","devdoc","userdoc","evm.gasEstimates"],"":["ast"]}},"metadata":{"useLiteralContent":true}}},"output":{"sources":{"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[690],"ContextUpgradeable":[732],"Initializable":[406],"Ownable2StepUpgradeable":[105],"OwnableUpgradeable":[237]},"id":106,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"107:23:0"},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","file":"./OwnableUpgradeable.sol","id":2,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":106,"sourceUnit":238,"src":"132:34:0","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":3,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":106,"sourceUnit":407,"src":"167:42:0","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":5,"name":"Initializable","nodeType":"IdentifierPath","referencedDeclaration":406,"src":"698:13:0"},"id":6,"nodeType":"InheritanceSpecifier","src":"698:13:0"},{"baseName":{"id":7,"name":"OwnableUpgradeable","nodeType":"IdentifierPath","referencedDeclaration":237,"src":"713:18:0"},"id":8,"nodeType":"InheritanceSpecifier","src":"713:18:0"}],"canonicalName":"Ownable2StepUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":4,"nodeType":"StructuredDocumentation","src":"211:441:0","text":" @dev Contract module which provides access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership} and {acceptOwnership}.\n This module is used through inheritance. It will make available all functions\n from parent (Ownable)."},"fullyImplemented":true,"id":105,"linearizedBaseContracts":[105,237,732,406],"name":"Ownable2StepUpgradeable","nameLocation":"671:23:0","nodeType":"ContractDefinition","nodes":[{"body":{"id":16,"nodeType":"Block","src":"795:43:0","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":13,"name":"__Ownable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"805:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":14,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"805:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":15,"nodeType":"ExpressionStatement","src":"805:26:0"}]},"id":17,"implemented":true,"kind":"function","modifiers":[{"id":11,"kind":"modifierInvocation","modifierName":{"id":10,"name":"onlyInitializing","nodeType":"IdentifierPath","referencedDeclaration":351,"src":"778:16:0"},"nodeType":"ModifierInvocation","src":"778:16:0"}],"name":"__Ownable2Step_init","nameLocation":"747:19:0","nodeType":"FunctionDefinition","parameters":{"id":9,"nodeType":"ParameterList","parameters":[],"src":"766:2:0"},"returnParameters":{"id":12,"nodeType":"ParameterList","parameters":[],"src":"795:0:0"},"scope":105,"src":"738:100:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":22,"nodeType":"Block","src":"911:7:0","statements":[]},"id":23,"implemented":true,"kind":"function","modifiers":[{"id":20,"kind":"modifierInvocation","modifierName":{"id":19,"name":"onlyInitializing","nodeType":"IdentifierPath","referencedDeclaration":351,"src":"894:16:0"},"nodeType":"ModifierInvocation","src":"894:16:0"}],"name":"__Ownable2Step_init_unchained","nameLocation":"853:29:0","nodeType":"FunctionDefinition","parameters":{"id":18,"nodeType":"ParameterList","parameters":[],"src":"882:2:0"},"returnParameters":{"id":21,"nodeType":"ParameterList","parameters":[],"src":"911:0:0"},"scope":105,"src":"844:74:0","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"constant":false,"id":25,"mutability":"mutable","name":"_pendingOwner","nameLocation":"939:13:0","nodeType":"VariableDeclaration","scope":105,"src":"923:29:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":24,"name":"address","nodeType":"ElementaryTypeName","src":"923:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e22700","id":31,"name":"OwnershipTransferStarted","nameLocation":"965:24:0","nodeType":"EventDefinition","parameters":{"id":30,"nodeType":"ParameterList","parameters":[{"constant":false,"id":27,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"1006:13:0","nodeType":"VariableDeclaration","scope":31,"src":"990:29:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":26,"name":"address","nodeType":"ElementaryTypeName","src":"990:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":29,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"1037:8:0","nodeType":"VariableDeclaration","scope":31,"src":"1021:24:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":28,"name":"address","nodeType":"ElementaryTypeName","src":"1021:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"989:57:0"},"src":"959:88:0"},{"body":{"id":39,"nodeType":"Block","src":"1185:37:0","statements":[{"expression":{"id":37,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25,"src":"1202:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":36,"id":38,"nodeType":"Return","src":"1195:20:0"}]},"documentation":{"id":32,"nodeType":"StructuredDocumentation","src":"1053:65:0","text":" @dev Returns the address of the pending owner."},"functionSelector":"e30c3978","id":40,"implemented":true,"kind":"function","modifiers":[],"name":"pendingOwner","nameLocation":"1132:12:0","nodeType":"FunctionDefinition","parameters":{"id":33,"nodeType":"ParameterList","parameters":[],"src":"1144:2:0"},"returnParameters":{"id":36,"nodeType":"ParameterList","parameters":[{"constant":false,"id":35,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":40,"src":"1176:7:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":34,"name":"address","nodeType":"ElementaryTypeName","src":"1176:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1175:9:0"},"scope":105,"src":"1123:99:0","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[211],"body":{"id":59,"nodeType":"Block","src":"1494:99:0","statements":[{"expression":{"id":51,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25,"src":"1504:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"1520:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1504:24:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":52,"nodeType":"ExpressionStatement","src":"1504:24:0"},{"eventCall":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":160,"src":"1568:5:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":55,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1568:7:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43,"src":"1577:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":53,"name":"OwnershipTransferStarted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":31,"src":"1543:24:0","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":57,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1543:43:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58,"nodeType":"EmitStatement","src":"1538:48:0"}]},"documentation":{"id":41,"nodeType":"StructuredDocumentation","src":"1228:182:0","text":" @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":60,"implemented":true,"kind":"function","modifiers":[{"id":47,"kind":"modifierInvocation","modifierName":{"id":46,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":151,"src":"1484:9:0"},"nodeType":"ModifierInvocation","src":"1484:9:0"}],"name":"transferOwnership","nameLocation":"1424:17:0","nodeType":"FunctionDefinition","overrides":{"id":45,"nodeType":"OverrideSpecifier","overrides":[],"src":"1475:8:0"},"parameters":{"id":44,"nodeType":"ParameterList","parameters":[{"constant":false,"id":43,"mutability":"mutable","name":"newOwner","nameLocation":"1450:8:0","nodeType":"VariableDeclaration","scope":60,"src":"1442:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":42,"name":"address","nodeType":"ElementaryTypeName","src":"1442:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1441:18:0"},"returnParameters":{"id":48,"nodeType":"ParameterList","parameters":[],"src":"1494:0:0"},"scope":105,"src":"1415:178:0","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[231],"body":{"id":76,"nodeType":"Block","src":"1849:81:0","statements":[{"expression":{"id":68,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"delete","prefix":true,"src":"1859:20:0","subExpression":{"id":67,"name":"_pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":25,"src":"1866:13:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":69,"nodeType":"ExpressionStatement","src":"1859:20:0"},{"expression":{"arguments":[{"id":73,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63,"src":"1914:8:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":70,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"1889:5:0","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_Ownable2StepUpgradeable_$105_$","typeString":"type(contract super Ownable2StepUpgradeable)"}},"id":72,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"_transferOwnership","nodeType":"MemberAccess","referencedDeclaration":231,"src":"1889:24:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":74,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1889:34:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":75,"nodeType":"ExpressionStatement","src":"1889:34:0"}]},"documentation":{"id":61,"nodeType":"StructuredDocumentation","src":"1599:173:0","text":" @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\n Internal function without access restriction."},"id":77,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"1786:18:0","nodeType":"FunctionDefinition","overrides":{"id":65,"nodeType":"OverrideSpecifier","overrides":[],"src":"1840:8:0"},"parameters":{"id":64,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63,"mutability":"mutable","name":"newOwner","nameLocation":"1813:8:0","nodeType":"VariableDeclaration","scope":77,"src":"1805:16:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62,"name":"address","nodeType":"ElementaryTypeName","src":"1805:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1804:18:0"},"returnParameters":{"id":66,"nodeType":"ParameterList","parameters":[],"src":"1849:0:0"},"scope":105,"src":"1777:153:0","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":98,"nodeType":"Block","src":"2046:170:0","statements":[{"assignments":[82],"declarations":[{"constant":false,"id":82,"mutability":"mutable","name":"sender","nameLocation":"2064:6:0","nodeType":"VariableDeclaration","scope":98,"src":"2056:14:0","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":81,"name":"address","nodeType":"ElementaryTypeName","src":"2056:7:0","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":85,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":83,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":717,"src":"2073:10:0","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":84,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2073:12:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2056:29:0"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":90,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":87,"name":"pendingOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40,"src":"2103:12: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,"names":[],"nodeType":"FunctionCall","src":"2103:14:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":89,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":82,"src":"2121:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2103:24:0","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206e6577206f776e6572","id":91,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2129:43:0","typeDescriptions":{"typeIdentifier":"t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","typeString":"literal_string \"Ownable2Step: caller is not the new owner\""},"value":"Ownable2Step: caller is not the new owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc","typeString":"literal_string \"Ownable2Step: caller is not the new owner\""}],"id":86,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2095:7:0","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":92,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2095:78:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":93,"nodeType":"ExpressionStatement","src":"2095:78:0"},{"expression":{"arguments":[{"id":95,"name":"sender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":82,"src":"2202:6:0","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":94,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[77],"referencedDeclaration":77,"src":"2183:18:0","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":96,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2183:26:0","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":97,"nodeType":"ExpressionStatement","src":"2183:26:0"}]},"documentation":{"id":78,"nodeType":"StructuredDocumentation","src":"1936:69:0","text":" @dev The new owner accepts the ownership transfer."},"functionSelector":"79ba5097","id":99,"implemented":true,"kind":"function","modifiers":[],"name":"acceptOwnership","nameLocation":"2019:15:0","nodeType":"FunctionDefinition","parameters":{"id":79,"nodeType":"ParameterList","parameters":[],"src":"2034:2:0"},"returnParameters":{"id":80,"nodeType":"ParameterList","parameters":[],"src":"2046:0:0"},"scope":105,"src":"2010:206:0","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"constant":false,"documentation":{"id":100,"nodeType":"StructuredDocumentation","src":"2222:254:0","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":104,"mutability":"mutable","name":"__gap","nameLocation":"2501:5:0","nodeType":"VariableDeclaration","scope":105,"src":"2481:25:0","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":101,"name":"uint256","nodeType":"ElementaryTypeName","src":"2481:7:0","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":103,"length":{"hexValue":"3439","id":102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2489:2:0","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"2481:11:0","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":106,"src":"653:1856:0","usedErrors":[]}],"src":"107:2403:0"},"id":0},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[690],"ContextUpgradeable":[732],"Initializable":[406],"OwnableUpgradeable":[237]},"id":238,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":107,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"102:23:1"},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","file":"../utils/ContextUpgradeable.sol","id":108,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":238,"sourceUnit":733,"src":"127:41:1","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":109,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":238,"sourceUnit":407,"src":"169:42:1","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":111,"name":"Initializable","nodeType":"IdentifierPath","referencedDeclaration":406,"src":"748:13:1"},"id":112,"nodeType":"InheritanceSpecifier","src":"748:13:1"},{"baseName":{"id":113,"name":"ContextUpgradeable","nodeType":"IdentifierPath","referencedDeclaration":732,"src":"763:18:1"},"id":114,"nodeType":"InheritanceSpecifier","src":"763:18:1"}],"canonicalName":"OwnableUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":110,"nodeType":"StructuredDocumentation","src":"213:494:1","text":" @dev Contract module which provides a basic access control mechanism, where\n there is an account (an owner) that can be granted exclusive access to\n specific functions.\n By default, the owner account will be the one that deploys the contract. This\n can later be changed with {transferOwnership}.\n This module is used through inheritance. It will make available the modifier\n `onlyOwner`, which can be applied to your functions to restrict their use to\n the owner."},"fullyImplemented":true,"id":237,"linearizedBaseContracts":[237,732,406],"name":"OwnableUpgradeable","nameLocation":"726:18:1","nodeType":"ContractDefinition","nodes":[{"constant":false,"id":116,"mutability":"mutable","name":"_owner","nameLocation":"804:6:1","nodeType":"VariableDeclaration","scope":237,"src":"788:22:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":115,"name":"address","nodeType":"ElementaryTypeName","src":"788:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"private"},{"anonymous":false,"eventSelector":"8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0","id":122,"name":"OwnershipTransferred","nameLocation":"823:20:1","nodeType":"EventDefinition","parameters":{"id":121,"nodeType":"ParameterList","parameters":[{"constant":false,"id":118,"indexed":true,"mutability":"mutable","name":"previousOwner","nameLocation":"860:13:1","nodeType":"VariableDeclaration","scope":122,"src":"844:29:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":117,"name":"address","nodeType":"ElementaryTypeName","src":"844:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":120,"indexed":true,"mutability":"mutable","name":"newOwner","nameLocation":"891:8:1","nodeType":"VariableDeclaration","scope":122,"src":"875:24:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":119,"name":"address","nodeType":"ElementaryTypeName","src":"875:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"843:57:1"},"src":"817:84:1"},{"body":{"id":131,"nodeType":"Block","src":"1055:43:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":128,"name":"__Ownable_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":143,"src":"1065:24:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":129,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1065:26:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":130,"nodeType":"ExpressionStatement","src":"1065:26:1"}]},"documentation":{"id":123,"nodeType":"StructuredDocumentation","src":"907:91:1","text":" @dev Initializes the contract setting the deployer as the initial owner."},"id":132,"implemented":true,"kind":"function","modifiers":[{"id":126,"kind":"modifierInvocation","modifierName":{"id":125,"name":"onlyInitializing","nodeType":"IdentifierPath","referencedDeclaration":351,"src":"1038:16:1"},"nodeType":"ModifierInvocation","src":"1038:16:1"}],"name":"__Ownable_init","nameLocation":"1012:14:1","nodeType":"FunctionDefinition","parameters":{"id":124,"nodeType":"ParameterList","parameters":[],"src":"1026:2:1"},"returnParameters":{"id":127,"nodeType":"ParameterList","parameters":[],"src":"1055:0:1"},"scope":237,"src":"1003:95:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":142,"nodeType":"Block","src":"1166:49:1","statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":138,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":717,"src":"1195:10:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":139,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1195:12:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":137,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":231,"src":"1176:18:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1176:32:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":141,"nodeType":"ExpressionStatement","src":"1176:32:1"}]},"id":143,"implemented":true,"kind":"function","modifiers":[{"id":135,"kind":"modifierInvocation","modifierName":{"id":134,"name":"onlyInitializing","nodeType":"IdentifierPath","referencedDeclaration":351,"src":"1149:16:1"},"nodeType":"ModifierInvocation","src":"1149:16:1"}],"name":"__Ownable_init_unchained","nameLocation":"1113:24:1","nodeType":"FunctionDefinition","parameters":{"id":133,"nodeType":"ParameterList","parameters":[],"src":"1137:2:1"},"returnParameters":{"id":136,"nodeType":"ParameterList","parameters":[],"src":"1166:0:1"},"scope":237,"src":"1104:111:1","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":150,"nodeType":"Block","src":"1324:41:1","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":146,"name":"_checkOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":174,"src":"1334:11:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$__$","typeString":"function () view"}},"id":147,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1334:13:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":148,"nodeType":"ExpressionStatement","src":"1334:13:1"},{"id":149,"nodeType":"PlaceholderStatement","src":"1357:1:1"}]},"documentation":{"id":144,"nodeType":"StructuredDocumentation","src":"1221:77:1","text":" @dev Throws if called by any account other than the owner."},"id":151,"name":"onlyOwner","nameLocation":"1312:9:1","nodeType":"ModifierDefinition","parameters":{"id":145,"nodeType":"ParameterList","parameters":[],"src":"1321:2:1"},"src":"1303:62:1","virtual":false,"visibility":"internal"},{"body":{"id":159,"nodeType":"Block","src":"1496:30:1","statements":[{"expression":{"id":157,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":116,"src":"1513:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":156,"id":158,"nodeType":"Return","src":"1506:13:1"}]},"documentation":{"id":152,"nodeType":"StructuredDocumentation","src":"1371:65:1","text":" @dev Returns the address of the current owner."},"functionSelector":"8da5cb5b","id":160,"implemented":true,"kind":"function","modifiers":[],"name":"owner","nameLocation":"1450:5:1","nodeType":"FunctionDefinition","parameters":{"id":153,"nodeType":"ParameterList","parameters":[],"src":"1455:2:1"},"returnParameters":{"id":156,"nodeType":"ParameterList","parameters":[{"constant":false,"id":155,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":160,"src":"1487:7:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":154,"name":"address","nodeType":"ElementaryTypeName","src":"1487:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1486:9:1"},"scope":237,"src":"1441:85:1","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":173,"nodeType":"Block","src":"1644:85:1","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":165,"name":"owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":160,"src":"1662:5:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1662:7:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":167,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":717,"src":"1673:10:1","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1673:12:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1662:23:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","id":170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1687:34:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""},"value":"Ownable: caller is not the owner"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe","typeString":"literal_string \"Ownable: caller is not the owner\""}],"id":164,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1654:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":171,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1654:68:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":172,"nodeType":"ExpressionStatement","src":"1654:68:1"}]},"documentation":{"id":161,"nodeType":"StructuredDocumentation","src":"1532:62:1","text":" @dev Throws if the sender is not the owner."},"id":174,"implemented":true,"kind":"function","modifiers":[],"name":"_checkOwner","nameLocation":"1608:11:1","nodeType":"FunctionDefinition","parameters":{"id":162,"nodeType":"ParameterList","parameters":[],"src":"1619:2:1"},"returnParameters":{"id":163,"nodeType":"ParameterList","parameters":[],"src":"1644:0:1"},"scope":237,"src":"1599:130:1","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":187,"nodeType":"Block","src":"2125:47:1","statements":[{"expression":{"arguments":[{"arguments":[{"hexValue":"30","id":183,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2162:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":182,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2154:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":181,"name":"address","nodeType":"ElementaryTypeName","src":"2154:7:1","typeDescriptions":{}}},"id":184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2154:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":180,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":231,"src":"2135:18:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":185,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2135:30:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":186,"nodeType":"ExpressionStatement","src":"2135:30:1"}]},"documentation":{"id":175,"nodeType":"StructuredDocumentation","src":"1735:331:1","text":" @dev Leaves the contract without owner. It will not be possible to call\n `onlyOwner` functions anymore. Can only be called by the current owner.\n NOTE: Renouncing ownership will leave the contract without an owner,\n thereby removing any functionality that is only available to the owner."},"functionSelector":"715018a6","id":188,"implemented":true,"kind":"function","modifiers":[{"id":178,"kind":"modifierInvocation","modifierName":{"id":177,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":151,"src":"2115:9:1"},"nodeType":"ModifierInvocation","src":"2115:9:1"}],"name":"renounceOwnership","nameLocation":"2080:17:1","nodeType":"FunctionDefinition","parameters":{"id":176,"nodeType":"ParameterList","parameters":[],"src":"2097:2:1"},"returnParameters":{"id":179,"nodeType":"ParameterList","parameters":[],"src":"2125:0:1"},"scope":237,"src":"2071:101:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":210,"nodeType":"Block","src":"2391:128:1","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":197,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":191,"src":"2409:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":200,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2429:1:1","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2421:7:1","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":198,"name":"address","nodeType":"ElementaryTypeName","src":"2421:7:1","typeDescriptions":{}}},"id":201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2421:10:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2409:22:1","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373","id":203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2433:40:1","typeDescriptions":{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""},"value":"Ownable: new owner is the zero address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_245f15ff17f551913a7a18385165551503906a406f905ac1c2437281a7cd0cfe","typeString":"literal_string \"Ownable: new owner is the zero address\""}],"id":196,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2401:7:1","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2401:73:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":205,"nodeType":"ExpressionStatement","src":"2401:73:1"},{"expression":{"arguments":[{"id":207,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":191,"src":"2503:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":206,"name":"_transferOwnership","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":231,"src":"2484:18:1","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":208,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2484:28:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":209,"nodeType":"ExpressionStatement","src":"2484:28:1"}]},"documentation":{"id":189,"nodeType":"StructuredDocumentation","src":"2178:138:1","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Can only be called by the current owner."},"functionSelector":"f2fde38b","id":211,"implemented":true,"kind":"function","modifiers":[{"id":194,"kind":"modifierInvocation","modifierName":{"id":193,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":151,"src":"2381:9:1"},"nodeType":"ModifierInvocation","src":"2381:9:1"}],"name":"transferOwnership","nameLocation":"2330:17:1","nodeType":"FunctionDefinition","parameters":{"id":192,"nodeType":"ParameterList","parameters":[{"constant":false,"id":191,"mutability":"mutable","name":"newOwner","nameLocation":"2356:8:1","nodeType":"VariableDeclaration","scope":211,"src":"2348:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":190,"name":"address","nodeType":"ElementaryTypeName","src":"2348:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2347:18:1"},"returnParameters":{"id":195,"nodeType":"ParameterList","parameters":[],"src":"2391:0:1"},"scope":237,"src":"2321:198:1","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":230,"nodeType":"Block","src":"2736:124:1","statements":[{"assignments":[218],"declarations":[{"constant":false,"id":218,"mutability":"mutable","name":"oldOwner","nameLocation":"2754:8:1","nodeType":"VariableDeclaration","scope":230,"src":"2746:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":217,"name":"address","nodeType":"ElementaryTypeName","src":"2746:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":220,"initialValue":{"id":219,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":116,"src":"2765:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2746:25:1"},{"expression":{"id":223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":221,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":116,"src":"2781:6:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":222,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":214,"src":"2790:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2781:17:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":224,"nodeType":"ExpressionStatement","src":"2781:17:1"},{"eventCall":{"arguments":[{"id":226,"name":"oldOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":218,"src":"2834:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":227,"name":"newOwner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":214,"src":"2844:8:1","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":225,"name":"OwnershipTransferred","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":122,"src":"2813:20:1","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2813:40:1","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":229,"nodeType":"EmitStatement","src":"2808:45:1"}]},"documentation":{"id":212,"nodeType":"StructuredDocumentation","src":"2525:143:1","text":" @dev Transfers ownership of the contract to a new account (`newOwner`).\n Internal function without access restriction."},"id":231,"implemented":true,"kind":"function","modifiers":[],"name":"_transferOwnership","nameLocation":"2682:18:1","nodeType":"FunctionDefinition","parameters":{"id":215,"nodeType":"ParameterList","parameters":[{"constant":false,"id":214,"mutability":"mutable","name":"newOwner","nameLocation":"2709:8:1","nodeType":"VariableDeclaration","scope":231,"src":"2701:16:1","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":213,"name":"address","nodeType":"ElementaryTypeName","src":"2701:7:1","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2700:18:1"},"returnParameters":{"id":216,"nodeType":"ParameterList","parameters":[],"src":"2736:0:1"},"scope":237,"src":"2673:187:1","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":232,"nodeType":"StructuredDocumentation","src":"2866:254:1","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":236,"mutability":"mutable","name":"__gap","nameLocation":"3145:5:1","nodeType":"VariableDeclaration","scope":237,"src":"3125:25:1","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":233,"name":"uint256","nodeType":"ElementaryTypeName","src":"3125:7:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":235,"length":{"hexValue":"3439","id":234,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3133:2:1","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"3125:11:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"}],"scope":238,"src":"708:2445:1","usedErrors":[]}],"src":"102:3052:1"},"id":1},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","exportedSymbols":{"AddressUpgradeable":[690],"Initializable":[406]},"id":407,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":239,"literals":["solidity","^","0.8",".2"],"nodeType":"PragmaDirective","src":"113:23:2"},{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol","file":"../../utils/AddressUpgradeable.sol","id":240,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":407,"sourceUnit":691,"src":"138:44:2","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[],"canonicalName":"Initializable","contractDependencies":[],"contractKind":"contract","documentation":{"id":241,"nodeType":"StructuredDocumentation","src":"184:2198:2","text":" @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\n reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in\n case an upgrade adds a module that needs to be initialized.\n For example:\n [.hljs-theme-light.nopadding]\n ```\n contract MyToken is ERC20Upgradeable {\n function initialize() initializer public {\n __ERC20_init(\"MyToken\", \"MTK\");\n }\n }\n contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\n function initializeV2() reinitializer(2) public {\n __ERC20Permit_init(\"MyToken\");\n }\n }\n ```\n TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n [CAUTION]\n ====\n Avoid leaving a contract uninitialized.\n An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\n the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\n [.hljs-theme-light.nopadding]\n ```\n /// @custom:oz-upgrades-unsafe-allow constructor\n constructor() {\n _disableInitializers();\n }\n ```\n ===="},"fullyImplemented":true,"id":406,"linearizedBaseContracts":[406],"name":"Initializable","nameLocation":"2401:13:2","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":242,"nodeType":"StructuredDocumentation","src":"2421:109:2","text":" @dev Indicates that the contract has been initialized.\n @custom:oz-retyped-from bool"},"id":244,"mutability":"mutable","name":"_initialized","nameLocation":"2549:12:2","nodeType":"VariableDeclaration","scope":406,"src":"2535:26:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":243,"name":"uint8","nodeType":"ElementaryTypeName","src":"2535:5:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"private"},{"constant":false,"documentation":{"id":245,"nodeType":"StructuredDocumentation","src":"2568:91:2","text":" @dev Indicates that the contract is in the process of being initialized."},"id":247,"mutability":"mutable","name":"_initializing","nameLocation":"2677:13:2","nodeType":"VariableDeclaration","scope":406,"src":"2664:26:2","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":246,"name":"bool","nodeType":"ElementaryTypeName","src":"2664:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":248,"nodeType":"StructuredDocumentation","src":"2697:90:2","text":" @dev Triggered when the contract has been initialized or reinitialized."},"eventSelector":"7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498","id":252,"name":"Initialized","nameLocation":"2798:11:2","nodeType":"EventDefinition","parameters":{"id":251,"nodeType":"ParameterList","parameters":[{"constant":false,"id":250,"indexed":false,"mutability":"mutable","name":"version","nameLocation":"2816:7:2","nodeType":"VariableDeclaration","scope":252,"src":"2810:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":249,"name":"uint8","nodeType":"ElementaryTypeName","src":"2810:5:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"2809:15:2"},"src":"2792:33:2"},{"body":{"id":307,"nodeType":"Block","src":"3258:483:2","statements":[{"assignments":[256],"declarations":[{"constant":false,"id":256,"mutability":"mutable","name":"isTopLevelCall","nameLocation":"3273:14:2","nodeType":"VariableDeclaration","scope":307,"src":"3268:19:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":255,"name":"bool","nodeType":"ElementaryTypeName","src":"3268:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":259,"initialValue":{"id":258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3290:14:2","subExpression":{"id":257,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"3291:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3268:36:2"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":265,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":261,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":256,"src":"3336:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":262,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"3354:12:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"31","id":263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3369:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3354:16:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3336:34:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":266,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3335:36:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":278,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3376:45:2","subExpression":{"arguments":[{"arguments":[{"id":271,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3415:4:2","typeDescriptions":{"typeIdentifier":"t_contract$_Initializable_$406","typeString":"contract Initializable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_Initializable_$406","typeString":"contract Initializable"}],"id":270,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3407:7:2","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":269,"name":"address","nodeType":"ElementaryTypeName","src":"3407:7:2","typeDescriptions":{}}},"id":272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3407:13:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":267,"name":"AddressUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":690,"src":"3377:18:2","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_AddressUpgradeable_$690_$","typeString":"type(library AddressUpgradeable)"}},"id":268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isContract","nodeType":"MemberAccess","referencedDeclaration":424,"src":"3377:29:2","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3377:44:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":275,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"3425:12:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"31","id":276,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3441:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3425:17:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3376:66:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"id":279,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3375:68:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"3335:108:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564","id":281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3457:48:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""},"value":"Initializable: contract is already initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""}],"id":260,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"3314:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3314:201:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":283,"nodeType":"ExpressionStatement","src":"3314:201:2"},{"expression":{"id":286,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":284,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"3525:12:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3540:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3525:16:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":287,"nodeType":"ExpressionStatement","src":"3525:16:2"},{"condition":{"id":288,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":256,"src":"3555:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":294,"nodeType":"IfStatement","src":"3551:65:2","trueBody":{"id":293,"nodeType":"Block","src":"3571:45:2","statements":[{"expression":{"id":291,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":289,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"3585:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":290,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3601:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"3585:20:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":292,"nodeType":"ExpressionStatement","src":"3585:20:2"}]}},{"id":295,"nodeType":"PlaceholderStatement","src":"3625:1:2"},{"condition":{"id":296,"name":"isTopLevelCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":256,"src":"3640:14:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":306,"nodeType":"IfStatement","src":"3636:99:2","trueBody":{"id":305,"nodeType":"Block","src":"3656:79:2","statements":[{"expression":{"id":299,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":297,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"3670:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":298,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"3686:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"3670:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":300,"nodeType":"ExpressionStatement","src":"3670:21:2"},{"eventCall":{"arguments":[{"hexValue":"31","id":302,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3722:1:2","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"}],"id":301,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":252,"src":"3710:11:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3710:14:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":304,"nodeType":"EmitStatement","src":"3705:19:2"}]}}]},"documentation":{"id":253,"nodeType":"StructuredDocumentation","src":"2831:399:2","text":" @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\n `onlyInitializing` functions can be used to initialize parent contracts.\n Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\n constructor.\n Emits an {Initialized} event."},"id":308,"name":"initializer","nameLocation":"3244:11:2","nodeType":"ModifierDefinition","parameters":{"id":254,"nodeType":"ParameterList","parameters":[],"src":"3255:2:2"},"src":"3235:506:2","virtual":false,"visibility":"internal"},{"body":{"id":340,"nodeType":"Block","src":"4852:255:2","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":315,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"4870:14:2","subExpression":{"id":314,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"4871:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":316,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"4888:12:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":317,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":311,"src":"4903:7:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4888:22:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"4870:40:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564","id":320,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4912:48:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""},"value":"Initializable: contract is already initialized"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759","typeString":"literal_string \"Initializable: contract is already initialized\""}],"id":313,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"4862:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4862:99:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":322,"nodeType":"ExpressionStatement","src":"4862:99:2"},{"expression":{"id":325,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":323,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"4971:12:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":324,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":311,"src":"4986:7:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"4971:22:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":326,"nodeType":"ExpressionStatement","src":"4971:22:2"},{"expression":{"id":329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":327,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"5003:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5019:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"5003:20:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":330,"nodeType":"ExpressionStatement","src":"5003:20:2"},{"id":331,"nodeType":"PlaceholderStatement","src":"5033:1:2"},{"expression":{"id":334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":332,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"5044:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"5060:5:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"5044:21:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":335,"nodeType":"ExpressionStatement","src":"5044:21:2"},{"eventCall":{"arguments":[{"id":337,"name":"version","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":311,"src":"5092:7:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":336,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":252,"src":"5080:11:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5080:20:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":339,"nodeType":"EmitStatement","src":"5075:25:2"}]},"documentation":{"id":309,"nodeType":"StructuredDocumentation","src":"3747:1062:2","text":" @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\n contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\n used to initialize parent contracts.\n A reinitializer may be used after the original initialization step. This is essential to configure modules that\n are added through upgrades and that require initialization.\n When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\n cannot be nested. If one is invoked in the context of another, execution will revert.\n Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\n a contract, executing them in the right order is up to the developer or operator.\n WARNING: setting the version to 255 will prevent any future reinitialization.\n Emits an {Initialized} event."},"id":341,"name":"reinitializer","nameLocation":"4823:13:2","nodeType":"ModifierDefinition","parameters":{"id":312,"nodeType":"ParameterList","parameters":[{"constant":false,"id":311,"mutability":"mutable","name":"version","nameLocation":"4843:7:2","nodeType":"VariableDeclaration","scope":341,"src":"4837:13:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":310,"name":"uint8","nodeType":"ElementaryTypeName","src":"4837:5:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"4836:15:2"},"src":"4814:293:2","virtual":false,"visibility":"internal"},{"body":{"id":350,"nodeType":"Block","src":"5345:97:2","statements":[{"expression":{"arguments":[{"id":345,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"5363:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f7420696e697469616c697a696e67","id":346,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5378:45:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","typeString":"literal_string \"Initializable: contract is not initializing\""},"value":"Initializable: contract is not initializing"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b","typeString":"literal_string \"Initializable: contract is not initializing\""}],"id":344,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5355:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":347,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5355:69:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":348,"nodeType":"ExpressionStatement","src":"5355:69:2"},{"id":349,"nodeType":"PlaceholderStatement","src":"5434:1:2"}]},"documentation":{"id":342,"nodeType":"StructuredDocumentation","src":"5113:199:2","text":" @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n {initializer} and {reinitializer} modifiers, directly or indirectly."},"id":351,"name":"onlyInitializing","nameLocation":"5326:16:2","nodeType":"ModifierDefinition","parameters":{"id":343,"nodeType":"ParameterList","parameters":[],"src":"5342:2:2"},"src":"5317:125:2","virtual":false,"visibility":"internal"},{"body":{"id":386,"nodeType":"Block","src":"5977:230:2","statements":[{"expression":{"arguments":[{"id":357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"5995:14:2","subExpression":{"id":356,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"5996:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320696e697469616c697a696e67","id":358,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6011:41:2","typeDescriptions":{"typeIdentifier":"t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","typeString":"literal_string \"Initializable: contract is initializing\""},"value":"Initializable: contract is initializing"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_a53f5879e7518078ff19b2e3d6b41e757a87364ec6872787feb45bfc41131d1a","typeString":"literal_string \"Initializable: contract is initializing\""}],"id":355,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5987:7:2","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":359,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5987:66:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":360,"nodeType":"ExpressionStatement","src":"5987:66:2"},{"condition":{"commonType":{"typeIdentifier":"t_uint8","typeString":"uint8"},"id":367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":361,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"6067:12:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"arguments":[{"id":364,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6087:5:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":363,"name":"uint8","nodeType":"ElementaryTypeName","src":"6087:5:2","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":362,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6082:4:2","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":365,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6082:11:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":366,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6082:15:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6067:30:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":385,"nodeType":"IfStatement","src":"6063:138:2","trueBody":{"id":384,"nodeType":"Block","src":"6099:102:2","statements":[{"expression":{"id":374,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":368,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"6113:12:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"arguments":[{"id":371,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6133:5:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":370,"name":"uint8","nodeType":"ElementaryTypeName","src":"6133:5:2","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":369,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6128:4:2","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6128:11:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":373,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6128:15:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"6113:30:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"id":375,"nodeType":"ExpressionStatement","src":"6113:30:2"},{"eventCall":{"arguments":[{"expression":{"arguments":[{"id":379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6179:5:2","typeDescriptions":{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"},"typeName":{"id":378,"name":"uint8","nodeType":"ElementaryTypeName","src":"6179:5:2","typeDescriptions":{}}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_uint8_$","typeString":"type(uint8)"}],"id":377,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"6174:4:2","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6174:11:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_uint8","typeString":"type(uint8)"}},"id":381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"max","nodeType":"MemberAccess","src":"6174:15:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":376,"name":"Initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":252,"src":"6162:11:2","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_uint8_$returns$__$","typeString":"function (uint8)"}},"id":382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6162:28:2","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":383,"nodeType":"EmitStatement","src":"6157:33:2"}]}}]},"documentation":{"id":352,"nodeType":"StructuredDocumentation","src":"5448:475:2","text":" @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\n Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\n to any version. It is recommended to use this to lock implementation contracts that are designed to be called\n through proxies.\n Emits an {Initialized} event the first time it is successfully executed."},"id":387,"implemented":true,"kind":"function","modifiers":[],"name":"_disableInitializers","nameLocation":"5937:20:2","nodeType":"FunctionDefinition","parameters":{"id":353,"nodeType":"ParameterList","parameters":[],"src":"5957:2:2"},"returnParameters":{"id":354,"nodeType":"ParameterList","parameters":[],"src":"5977:0:2"},"scope":406,"src":"5928:279:2","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":395,"nodeType":"Block","src":"6381:36:2","statements":[{"expression":{"id":393,"name":"_initialized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":244,"src":"6398:12:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"functionReturnParameters":392,"id":394,"nodeType":"Return","src":"6391:19:2"}]},"documentation":{"id":388,"nodeType":"StructuredDocumentation","src":"6213:99:2","text":" @dev Returns the highest version that has been initialized. See {reinitializer}."},"id":396,"implemented":true,"kind":"function","modifiers":[],"name":"_getInitializedVersion","nameLocation":"6326:22:2","nodeType":"FunctionDefinition","parameters":{"id":389,"nodeType":"ParameterList","parameters":[],"src":"6348:2:2"},"returnParameters":{"id":392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":396,"src":"6374:5:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":390,"name":"uint8","nodeType":"ElementaryTypeName","src":"6374:5:2","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"6373:7:2"},"scope":406,"src":"6317:100:2","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":404,"nodeType":"Block","src":"6589:37:2","statements":[{"expression":{"id":402,"name":"_initializing","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":247,"src":"6606:13:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":401,"id":403,"nodeType":"Return","src":"6599:20:2"}]},"documentation":{"id":397,"nodeType":"StructuredDocumentation","src":"6423:105:2","text":" @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}."},"id":405,"implemented":true,"kind":"function","modifiers":[],"name":"_isInitializing","nameLocation":"6542:15:2","nodeType":"FunctionDefinition","parameters":{"id":398,"nodeType":"ParameterList","parameters":[],"src":"6557:2:2"},"returnParameters":{"id":401,"nodeType":"ParameterList","parameters":[{"constant":false,"id":400,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":405,"src":"6583:4:2","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":399,"name":"bool","nodeType":"ElementaryTypeName","src":"6583:4:2","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6582:6:2"},"scope":406,"src":"6533:93:2","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":407,"src":"2383:4245:2","usedErrors":[]}],"src":"113:6516:2"},"id":2},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[690]},"id":691,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":408,"literals":["solidity","^","0.8",".1"],"nodeType":"PragmaDirective","src":"101:23:3"},{"abstract":false,"baseContracts":[],"canonicalName":"AddressUpgradeable","contractDependencies":[],"contractKind":"library","documentation":{"id":409,"nodeType":"StructuredDocumentation","src":"126:67:3","text":" @dev Collection of functions related to the address type"},"fullyImplemented":true,"id":690,"linearizedBaseContracts":[690],"name":"AddressUpgradeable","nameLocation":"202:18:3","nodeType":"ContractDefinition","nodes":[{"body":{"id":423,"nodeType":"Block","src":"1252:254:3","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"expression":{"id":417,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":412,"src":"1476:7:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":418,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"code","nodeType":"MemberAccess","src":"1476:12:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"1476:19:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1498:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1476:23:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":416,"id":422,"nodeType":"Return","src":"1469:30:3"}]},"documentation":{"id":410,"nodeType":"StructuredDocumentation","src":"227:954:3","text":" @dev Returns true if `account` is a contract.\n [IMPORTANT]\n ====\n It is unsafe to assume that an address for which this function returns\n false is an externally-owned account (EOA) and not a contract.\n Among others, `isContract` will return false for the following\n types of addresses:\n - an externally-owned account\n - a contract in construction\n - an address where a contract will be created\n - an address where a contract lived, but was destroyed\n ====\n [IMPORTANT]\n ====\n You shouldn't rely on `isContract` to protect against flash loan attacks!\n Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n constructor.\n ===="},"id":424,"implemented":true,"kind":"function","modifiers":[],"name":"isContract","nameLocation":"1195:10:3","nodeType":"FunctionDefinition","parameters":{"id":413,"nodeType":"ParameterList","parameters":[{"constant":false,"id":412,"mutability":"mutable","name":"account","nameLocation":"1214:7:3","nodeType":"VariableDeclaration","scope":424,"src":"1206:15:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":411,"name":"address","nodeType":"ElementaryTypeName","src":"1206:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1205:17:3"},"returnParameters":{"id":416,"nodeType":"ParameterList","parameters":[{"constant":false,"id":415,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":424,"src":"1246:4:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":414,"name":"bool","nodeType":"ElementaryTypeName","src":"1246:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1245:6:3"},"scope":690,"src":"1186:320:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":457,"nodeType":"Block","src":"2494:241:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":435,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2520:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$690","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$690","typeString":"library AddressUpgradeable"}],"id":434,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2512:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":433,"name":"address","nodeType":"ElementaryTypeName","src":"2512:7:3","typeDescriptions":{}}},"id":436,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2512:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":437,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"2512:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":438,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":429,"src":"2537:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2512:31:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e6365","id":440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2545:31:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""},"value":"Address: insufficient balance"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_5597a22abd0ef5332f8053862eb236db7590f17e2b93a53f63a103becfb561f9","typeString":"literal_string \"Address: insufficient balance\""}],"id":432,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2504:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2504:73:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":442,"nodeType":"ExpressionStatement","src":"2504:73:3"},{"assignments":[444,null],"declarations":[{"constant":false,"id":444,"mutability":"mutable","name":"success","nameLocation":"2594:7:3","nodeType":"VariableDeclaration","scope":457,"src":"2589:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":443,"name":"bool","nodeType":"ElementaryTypeName","src":"2589:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},null],"id":451,"initialValue":{"arguments":[{"hexValue":"","id":449,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2637:2:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""},"value":""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470","typeString":"literal_string \"\""}],"expression":{"id":445,"name":"recipient","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":427,"src":"2607:9:3","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"id":446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"2607:14:3","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":447,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":429,"src":"2629:6:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"2607:29:3","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2607:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"2588:52:3"},{"expression":{"arguments":[{"id":453,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":444,"src":"2658:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20756e61626c6520746f2073656e642076616c75652c20726563697069656e74206d61792068617665207265766572746564","id":454,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2667:60:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""},"value":"Address: unable to send value, recipient may have reverted"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_51ddaa38748c0a1144620fb5bfe8edab31ea437571ad591a7734bbfd0429aeae","typeString":"literal_string \"Address: unable to send value, recipient may have reverted\""}],"id":452,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2650:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":455,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2650:78:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":456,"nodeType":"ExpressionStatement","src":"2650:78:3"}]},"documentation":{"id":425,"nodeType":"StructuredDocumentation","src":"1512:906:3","text":" @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n `recipient`, forwarding all available gas and reverting on errors.\n https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n of certain opcodes, possibly making contracts go over the 2300 gas limit\n imposed by `transfer`, making them unable to receive funds via\n `transfer`. {sendValue} removes this limitation.\n https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n IMPORTANT: because control is transferred to `recipient`, care must be\n taken to not create reentrancy vulnerabilities. Consider using\n {ReentrancyGuard} or the\n https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]."},"id":458,"implemented":true,"kind":"function","modifiers":[],"name":"sendValue","nameLocation":"2432:9:3","nodeType":"FunctionDefinition","parameters":{"id":430,"nodeType":"ParameterList","parameters":[{"constant":false,"id":427,"mutability":"mutable","name":"recipient","nameLocation":"2458:9:3","nodeType":"VariableDeclaration","scope":458,"src":"2442:25:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"},"typeName":{"id":426,"name":"address","nodeType":"ElementaryTypeName","src":"2442:15:3","stateMutability":"payable","typeDescriptions":{"typeIdentifier":"t_address_payable","typeString":"address payable"}},"visibility":"internal"},{"constant":false,"id":429,"mutability":"mutable","name":"amount","nameLocation":"2477:6:3","nodeType":"VariableDeclaration","scope":458,"src":"2469:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":428,"name":"uint256","nodeType":"ElementaryTypeName","src":"2469:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2441:43:3"},"returnParameters":{"id":431,"nodeType":"ParameterList","parameters":[],"src":"2494:0:3"},"scope":690,"src":"2423:312:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":475,"nodeType":"Block","src":"3566:96:3","statements":[{"expression":{"arguments":[{"id":469,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":461,"src":"3605:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":470,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":463,"src":"3613:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3619:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c206661696c6564","id":472,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3622:32:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""},"value":"Address: low-level call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_stringliteral_24d7ab5d382116e64324f19950ca9340b8af1ddeb09a8d026e0a3c6a01dcc9df","typeString":"literal_string \"Address: low-level call failed\""}],"id":468,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[516,560],"referencedDeclaration":560,"src":"3583:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3583:72:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":467,"id":474,"nodeType":"Return","src":"3576:79:3"}]},"documentation":{"id":459,"nodeType":"StructuredDocumentation","src":"2741:731:3","text":" @dev Performs a Solidity function call using a low level `call`. A\n plain `call` is an unsafe replacement for a function call: use this\n function instead.\n If `target` reverts with a revert reason, it is bubbled up by this\n function (like regular Solidity function calls).\n Returns the raw returned data. To convert to the expected return value,\n use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n Requirements:\n - `target` must be a contract.\n - calling `target` with `data` must not revert.\n _Available since v3.1._"},"id":476,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3486:12:3","nodeType":"FunctionDefinition","parameters":{"id":464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":461,"mutability":"mutable","name":"target","nameLocation":"3507:6:3","nodeType":"VariableDeclaration","scope":476,"src":"3499:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":460,"name":"address","nodeType":"ElementaryTypeName","src":"3499:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":463,"mutability":"mutable","name":"data","nameLocation":"3528:4:3","nodeType":"VariableDeclaration","scope":476,"src":"3515:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":462,"name":"bytes","nodeType":"ElementaryTypeName","src":"3515:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3498:35:3"},"returnParameters":{"id":467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":476,"src":"3552:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":465,"name":"bytes","nodeType":"ElementaryTypeName","src":"3552:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"3551:14:3"},"scope":690,"src":"3477:185:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":495,"nodeType":"Block","src":"4031:76:3","statements":[{"expression":{"arguments":[{"id":489,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":479,"src":"4070:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":490,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":481,"src":"4078:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"30","id":491,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4084:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":492,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":483,"src":"4087:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":488,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[516,560],"referencedDeclaration":560,"src":"4048:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4048:52:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":487,"id":494,"nodeType":"Return","src":"4041:59:3"}]},"documentation":{"id":477,"nodeType":"StructuredDocumentation","src":"3668:211:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":496,"implemented":true,"kind":"function","modifiers":[],"name":"functionCall","nameLocation":"3893:12:3","nodeType":"FunctionDefinition","parameters":{"id":484,"nodeType":"ParameterList","parameters":[{"constant":false,"id":479,"mutability":"mutable","name":"target","nameLocation":"3923:6:3","nodeType":"VariableDeclaration","scope":496,"src":"3915:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":478,"name":"address","nodeType":"ElementaryTypeName","src":"3915:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":481,"mutability":"mutable","name":"data","nameLocation":"3952:4:3","nodeType":"VariableDeclaration","scope":496,"src":"3939:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":480,"name":"bytes","nodeType":"ElementaryTypeName","src":"3939:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":483,"mutability":"mutable","name":"errorMessage","nameLocation":"3980:12:3","nodeType":"VariableDeclaration","scope":496,"src":"3966:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":482,"name":"string","nodeType":"ElementaryTypeName","src":"3966:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3905:93:3"},"returnParameters":{"id":487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":486,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":496,"src":"4017:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":485,"name":"bytes","nodeType":"ElementaryTypeName","src":"4017:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4016:14:3"},"scope":690,"src":"3884:223:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":515,"nodeType":"Block","src":"4612:111:3","statements":[{"expression":{"arguments":[{"id":509,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":499,"src":"4651:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":510,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":501,"src":"4659:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":511,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":503,"src":"4665:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"416464726573733a206c6f772d6c6576656c2063616c6c20776974682076616c7565206661696c6564","id":512,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4672:43:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""},"value":"Address: low-level call with value failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_stringliteral_88a4a0b5e975840320a0475d4027005235904fdb5ece94df156f3d717cb2dbfc","typeString":"literal_string \"Address: low-level call with value failed\""}],"id":508,"name":"functionCallWithValue","nodeType":"Identifier","overloadedDeclarations":[516,560],"referencedDeclaration":560,"src":"4629:21:3","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint256_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,uint256,string memory) returns (bytes memory)"}},"id":513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4629:87:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":507,"id":514,"nodeType":"Return","src":"4622:94:3"}]},"documentation":{"id":497,"nodeType":"StructuredDocumentation","src":"4113:351:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but also transferring `value` wei to `target`.\n Requirements:\n - the calling contract must have an ETH balance of at least `value`.\n - the called Solidity function must be `payable`.\n _Available since v3.1._"},"id":516,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4478:21:3","nodeType":"FunctionDefinition","parameters":{"id":504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":499,"mutability":"mutable","name":"target","nameLocation":"4517:6:3","nodeType":"VariableDeclaration","scope":516,"src":"4509:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":498,"name":"address","nodeType":"ElementaryTypeName","src":"4509:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":501,"mutability":"mutable","name":"data","nameLocation":"4546:4:3","nodeType":"VariableDeclaration","scope":516,"src":"4533:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":500,"name":"bytes","nodeType":"ElementaryTypeName","src":"4533:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":503,"mutability":"mutable","name":"value","nameLocation":"4568:5:3","nodeType":"VariableDeclaration","scope":516,"src":"4560:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":502,"name":"uint256","nodeType":"ElementaryTypeName","src":"4560:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4499:80:3"},"returnParameters":{"id":507,"nodeType":"ParameterList","parameters":[{"constant":false,"id":506,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":516,"src":"4598:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":505,"name":"bytes","nodeType":"ElementaryTypeName","src":"4598:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"4597:14:3"},"scope":690,"src":"4469:254:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":559,"nodeType":"Block","src":"5150:267:3","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"arguments":[{"id":533,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5176:4:3","typeDescriptions":{"typeIdentifier":"t_contract$_AddressUpgradeable_$690","typeString":"library AddressUpgradeable"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AddressUpgradeable_$690","typeString":"library AddressUpgradeable"}],"id":532,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5168:7:3","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":531,"name":"address","nodeType":"ElementaryTypeName","src":"5168:7:3","typeDescriptions":{}}},"id":534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5168:13:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":535,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"balance","nodeType":"MemberAccess","src":"5168:21:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":536,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"5193:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5168:30:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c","id":538,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5200:40:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""},"value":"Address: insufficient balance for call"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_565f1a77334fc4792800921178c71e4521acffab18ff9e7885b49377ee80ab4c","typeString":"literal_string \"Address: insufficient balance for call\""}],"id":530,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5160:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5160:81:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":540,"nodeType":"ExpressionStatement","src":"5160:81:3"},{"assignments":[542,544],"declarations":[{"constant":false,"id":542,"mutability":"mutable","name":"success","nameLocation":"5257:7:3","nodeType":"VariableDeclaration","scope":559,"src":"5252:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":541,"name":"bool","nodeType":"ElementaryTypeName","src":"5252:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":544,"mutability":"mutable","name":"returndata","nameLocation":"5279:10:3","nodeType":"VariableDeclaration","scope":559,"src":"5266:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":543,"name":"bytes","nodeType":"ElementaryTypeName","src":"5266:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":551,"initialValue":{"arguments":[{"id":549,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":521,"src":"5319:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":545,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":519,"src":"5293:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"call","nodeType":"MemberAccess","src":"5293:11:3","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"names":["value"],"nodeType":"FunctionCallOptions","options":[{"id":547,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":523,"src":"5312:5:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"src":"5293:25:3","typeDescriptions":{"typeIdentifier":"t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value","typeString":"function (bytes memory) payable returns (bool,bytes memory)"}},"id":550,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5293:31:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"5251:73:3"},{"expression":{"arguments":[{"id":553,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":519,"src":"5368:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":554,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":542,"src":"5376:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":555,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":544,"src":"5385:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":556,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":525,"src":"5397:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":552,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":645,"src":"5341:26:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":557,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5341:69:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":529,"id":558,"nodeType":"Return","src":"5334:76:3"}]},"documentation":{"id":517,"nodeType":"StructuredDocumentation","src":"4729:237:3","text":" @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n with `errorMessage` as a fallback revert reason when `target` reverts.\n _Available since v3.1._"},"id":560,"implemented":true,"kind":"function","modifiers":[],"name":"functionCallWithValue","nameLocation":"4980:21:3","nodeType":"FunctionDefinition","parameters":{"id":526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":519,"mutability":"mutable","name":"target","nameLocation":"5019:6:3","nodeType":"VariableDeclaration","scope":560,"src":"5011:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":518,"name":"address","nodeType":"ElementaryTypeName","src":"5011:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":521,"mutability":"mutable","name":"data","nameLocation":"5048:4:3","nodeType":"VariableDeclaration","scope":560,"src":"5035:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":520,"name":"bytes","nodeType":"ElementaryTypeName","src":"5035:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":523,"mutability":"mutable","name":"value","nameLocation":"5070:5:3","nodeType":"VariableDeclaration","scope":560,"src":"5062:13:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":522,"name":"uint256","nodeType":"ElementaryTypeName","src":"5062:7:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":525,"mutability":"mutable","name":"errorMessage","nameLocation":"5099:12:3","nodeType":"VariableDeclaration","scope":560,"src":"5085:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":524,"name":"string","nodeType":"ElementaryTypeName","src":"5085:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5001:116:3"},"returnParameters":{"id":529,"nodeType":"ParameterList","parameters":[{"constant":false,"id":528,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":560,"src":"5136:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":527,"name":"bytes","nodeType":"ElementaryTypeName","src":"5136:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5135:14:3"},"scope":690,"src":"4971:446:3","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":576,"nodeType":"Block","src":"5694:97:3","statements":[{"expression":{"arguments":[{"id":571,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":563,"src":"5730:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":572,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":565,"src":"5738:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"hexValue":"416464726573733a206c6f772d6c6576656c207374617469632063616c6c206661696c6564","id":573,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5744:39:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""},"value":"Address: low-level static call failed"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_stringliteral_90ec82aa826a536a4cbfae44ecfa384680faa9a4b77344bce96aa761ad904df0","typeString":"literal_string \"Address: low-level static call failed\""}],"id":570,"name":"functionStaticCall","nodeType":"Identifier","overloadedDeclarations":[577,606],"referencedDeclaration":606,"src":"5711:18:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bytes memory,string memory) view returns (bytes memory)"}},"id":574,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5711:73:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":569,"id":575,"nodeType":"Return","src":"5704:80:3"}]},"documentation":{"id":561,"nodeType":"StructuredDocumentation","src":"5423:166:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":577,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5603:18:3","nodeType":"FunctionDefinition","parameters":{"id":566,"nodeType":"ParameterList","parameters":[{"constant":false,"id":563,"mutability":"mutable","name":"target","nameLocation":"5630:6:3","nodeType":"VariableDeclaration","scope":577,"src":"5622:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":562,"name":"address","nodeType":"ElementaryTypeName","src":"5622:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":565,"mutability":"mutable","name":"data","nameLocation":"5651:4:3","nodeType":"VariableDeclaration","scope":577,"src":"5638:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":564,"name":"bytes","nodeType":"ElementaryTypeName","src":"5638:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5621:35:3"},"returnParameters":{"id":569,"nodeType":"ParameterList","parameters":[{"constant":false,"id":568,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":577,"src":"5680:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":567,"name":"bytes","nodeType":"ElementaryTypeName","src":"5680:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"5679:14:3"},"scope":690,"src":"5594:197:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":605,"nodeType":"Block","src":"6133:168:3","statements":[{"assignments":[590,592],"declarations":[{"constant":false,"id":590,"mutability":"mutable","name":"success","nameLocation":"6149:7:3","nodeType":"VariableDeclaration","scope":605,"src":"6144:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":589,"name":"bool","nodeType":"ElementaryTypeName","src":"6144:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":592,"mutability":"mutable","name":"returndata","nameLocation":"6171:10:3","nodeType":"VariableDeclaration","scope":605,"src":"6158:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":591,"name":"bytes","nodeType":"ElementaryTypeName","src":"6158:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":597,"initialValue":{"arguments":[{"id":595,"name":"data","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":582,"src":"6203:4:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"expression":{"id":593,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":580,"src":"6185:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"staticcall","nodeType":"MemberAccess","src":"6185:17:3","typeDescriptions":{"typeIdentifier":"t_function_barestaticcall_view$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$","typeString":"function (bytes memory) view returns (bool,bytes memory)"}},"id":596,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6185:23:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$_t_bool_$_t_bytes_memory_ptr_$","typeString":"tuple(bool,bytes memory)"}},"nodeType":"VariableDeclarationStatement","src":"6143:65:3"},{"expression":{"arguments":[{"id":599,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":580,"src":"6252:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":600,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":590,"src":"6260:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"id":601,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":592,"src":"6269:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":602,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":584,"src":"6281:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":598,"name":"verifyCallResultFromTarget","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":645,"src":"6225:26:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_bool_$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$_t_bytes_memory_ptr_$","typeString":"function (address,bool,bytes memory,string memory) view returns (bytes memory)"}},"id":603,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6225:69:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":588,"id":604,"nodeType":"Return","src":"6218:76:3"}]},"documentation":{"id":578,"nodeType":"StructuredDocumentation","src":"5797:173:3","text":" @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n but performing a static call.\n _Available since v3.3._"},"id":606,"implemented":true,"kind":"function","modifiers":[],"name":"functionStaticCall","nameLocation":"5984:18:3","nodeType":"FunctionDefinition","parameters":{"id":585,"nodeType":"ParameterList","parameters":[{"constant":false,"id":580,"mutability":"mutable","name":"target","nameLocation":"6020:6:3","nodeType":"VariableDeclaration","scope":606,"src":"6012:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":579,"name":"address","nodeType":"ElementaryTypeName","src":"6012:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":582,"mutability":"mutable","name":"data","nameLocation":"6049:4:3","nodeType":"VariableDeclaration","scope":606,"src":"6036:17:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":581,"name":"bytes","nodeType":"ElementaryTypeName","src":"6036:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":584,"mutability":"mutable","name":"errorMessage","nameLocation":"6077:12:3","nodeType":"VariableDeclaration","scope":606,"src":"6063:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":583,"name":"string","nodeType":"ElementaryTypeName","src":"6063:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6002:93:3"},"returnParameters":{"id":588,"nodeType":"ParameterList","parameters":[{"constant":false,"id":587,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":606,"src":"6119:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":586,"name":"bytes","nodeType":"ElementaryTypeName","src":"6119:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6118:14:3"},"scope":690,"src":"5975:326:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":644,"nodeType":"Block","src":"6783:434:3","statements":[{"condition":{"id":620,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":611,"src":"6797:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":642,"nodeType":"Block","src":"7153:58:3","statements":[{"expression":{"arguments":[{"id":638,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"7175:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":639,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":615,"src":"7187:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":637,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":689,"src":"7167:7:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7167:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":641,"nodeType":"ExpressionStatement","src":"7167:33:3"}]},"id":643,"nodeType":"IfStatement","src":"6793:418:3","trueBody":{"id":636,"nodeType":"Block","src":"6806:341:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":624,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":621,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"6824:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":622,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"6824:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":623,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6845:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6824:22:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":633,"nodeType":"IfStatement","src":"6820:286:3","trueBody":{"id":632,"nodeType":"Block","src":"6848:258:3","statements":[{"expression":{"arguments":[{"arguments":[{"id":627,"name":"target","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":609,"src":"7050:6:3","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":626,"name":"isContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":424,"src":"7039:10:3","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_bool_$","typeString":"function (address) view returns (bool)"}},"id":628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7039:18:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374","id":629,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7059:31:3","typeDescriptions":{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""},"value":"Address: call to non-contract"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_cc2e4e38850b7c0a3e942cfed89b71c77302df25bcb2ec297a0c4ff9ff6b90ad","typeString":"literal_string \"Address: call to non-contract\""}],"id":625,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"7031:7:3","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":630,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7031:60:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":631,"nodeType":"ExpressionStatement","src":"7031:60:3"}]}},{"expression":{"id":634,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":613,"src":"7126:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":619,"id":635,"nodeType":"Return","src":"7119:17:3"}]}}]},"documentation":{"id":607,"nodeType":"StructuredDocumentation","src":"6307:277:3","text":" @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\n the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\n _Available since v4.8._"},"id":645,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResultFromTarget","nameLocation":"6598:26:3","nodeType":"FunctionDefinition","parameters":{"id":616,"nodeType":"ParameterList","parameters":[{"constant":false,"id":609,"mutability":"mutable","name":"target","nameLocation":"6642:6:3","nodeType":"VariableDeclaration","scope":645,"src":"6634:14:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":608,"name":"address","nodeType":"ElementaryTypeName","src":"6634:7:3","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":611,"mutability":"mutable","name":"success","nameLocation":"6663:7:3","nodeType":"VariableDeclaration","scope":645,"src":"6658:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":610,"name":"bool","nodeType":"ElementaryTypeName","src":"6658:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":613,"mutability":"mutable","name":"returndata","nameLocation":"6693:10:3","nodeType":"VariableDeclaration","scope":645,"src":"6680:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":612,"name":"bytes","nodeType":"ElementaryTypeName","src":"6680:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":615,"mutability":"mutable","name":"errorMessage","nameLocation":"6727:12:3","nodeType":"VariableDeclaration","scope":645,"src":"6713:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":614,"name":"string","nodeType":"ElementaryTypeName","src":"6713:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6624:121:3"},"returnParameters":{"id":619,"nodeType":"ParameterList","parameters":[{"constant":false,"id":618,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":645,"src":"6769:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":617,"name":"bytes","nodeType":"ElementaryTypeName","src":"6769:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"6768:14:3"},"scope":690,"src":"6589:628:3","stateMutability":"view","virtual":false,"visibility":"internal"},{"body":{"id":668,"nodeType":"Block","src":"7598:135:3","statements":[{"condition":{"id":657,"name":"success","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":648,"src":"7612:7:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":666,"nodeType":"Block","src":"7669:58:3","statements":[{"expression":{"arguments":[{"id":662,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":650,"src":"7691:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},{"id":663,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":652,"src":"7703:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":661,"name":"_revert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":689,"src":"7683:7:3","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_bytes_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (bytes memory,string memory) pure"}},"id":664,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7683:33:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":665,"nodeType":"ExpressionStatement","src":"7683:33:3"}]},"id":667,"nodeType":"IfStatement","src":"7608:119:3","trueBody":{"id":660,"nodeType":"Block","src":"7621:42:3","statements":[{"expression":{"id":658,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":650,"src":"7642:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"functionReturnParameters":656,"id":659,"nodeType":"Return","src":"7635:17:3"}]}}]},"documentation":{"id":646,"nodeType":"StructuredDocumentation","src":"7223:210:3","text":" @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\n revert reason or using the provided one.\n _Available since v4.3._"},"id":669,"implemented":true,"kind":"function","modifiers":[],"name":"verifyCallResult","nameLocation":"7447:16:3","nodeType":"FunctionDefinition","parameters":{"id":653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":648,"mutability":"mutable","name":"success","nameLocation":"7478:7:3","nodeType":"VariableDeclaration","scope":669,"src":"7473:12:3","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":647,"name":"bool","nodeType":"ElementaryTypeName","src":"7473:4:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"},{"constant":false,"id":650,"mutability":"mutable","name":"returndata","nameLocation":"7508:10:3","nodeType":"VariableDeclaration","scope":669,"src":"7495:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":649,"name":"bytes","nodeType":"ElementaryTypeName","src":"7495:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":652,"mutability":"mutable","name":"errorMessage","nameLocation":"7542:12:3","nodeType":"VariableDeclaration","scope":669,"src":"7528:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":651,"name":"string","nodeType":"ElementaryTypeName","src":"7528:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7463:97:3"},"returnParameters":{"id":656,"nodeType":"ParameterList","parameters":[{"constant":false,"id":655,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":669,"src":"7584:12:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":654,"name":"bytes","nodeType":"ElementaryTypeName","src":"7584:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"7583:14:3"},"scope":690,"src":"7438:295:3","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":688,"nodeType":"Block","src":"7822:457:3","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":676,"name":"returndata","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":671,"src":"7898:10:3","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"length","nodeType":"MemberAccess","src":"7898:17:3","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":678,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7918:1:3","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"7898:21:3","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":686,"nodeType":"Block","src":"8228:45:3","statements":[{"expression":{"arguments":[{"id":683,"name":"errorMessage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":673,"src":"8249:12:3","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":682,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"8242:6:3","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8242:20:3","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":685,"nodeType":"ExpressionStatement","src":"8242:20:3"}]},"id":687,"nodeType":"IfStatement","src":"7894:379:3","trueBody":{"id":681,"nodeType":"Block","src":"7921:301:3","statements":[{"AST":{"nodeType":"YulBlock","src":"8079:133:3","statements":[{"nodeType":"YulVariableDeclaration","src":"8097:40:3","value":{"arguments":[{"name":"returndata","nodeType":"YulIdentifier","src":"8126:10:3"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"8120:5:3"},"nodeType":"YulFunctionCall","src":"8120:17:3"},"variables":[{"name":"returndata_size","nodeType":"YulTypedName","src":"8101:15:3","type":""}]},{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"8165:2:3","type":"","value":"32"},{"name":"returndata","nodeType":"YulIdentifier","src":"8169:10:3"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"8161:3:3"},"nodeType":"YulFunctionCall","src":"8161:19:3"},{"name":"returndata_size","nodeType":"YulIdentifier","src":"8182:15:3"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"8154:6:3"},"nodeType":"YulFunctionCall","src":"8154:44:3"},"nodeType":"YulExpressionStatement","src":"8154:44:3"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":671,"isOffset":false,"isSlot":false,"src":"8126:10:3","valueSize":1},{"declaration":671,"isOffset":false,"isSlot":false,"src":"8169:10:3","valueSize":1}],"id":680,"nodeType":"InlineAssembly","src":"8070:142:3"}]}}]},"id":689,"implemented":true,"kind":"function","modifiers":[],"name":"_revert","nameLocation":"7748:7:3","nodeType":"FunctionDefinition","parameters":{"id":674,"nodeType":"ParameterList","parameters":[{"constant":false,"id":671,"mutability":"mutable","name":"returndata","nameLocation":"7769:10:3","nodeType":"VariableDeclaration","scope":689,"src":"7756:23:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":670,"name":"bytes","nodeType":"ElementaryTypeName","src":"7756:5:3","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"},{"constant":false,"id":673,"mutability":"mutable","name":"errorMessage","nameLocation":"7795:12:3","nodeType":"VariableDeclaration","scope":689,"src":"7781:26:3","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":672,"name":"string","nodeType":"ElementaryTypeName","src":"7781:6:3","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"7755:53:3"},"returnParameters":{"id":675,"nodeType":"ParameterList","parameters":[],"src":"7822:0:3"},"scope":690,"src":"7739:540:3","stateMutability":"pure","virtual":false,"visibility":"private"}],"scope":691,"src":"194:8087:3","usedErrors":[]}],"src":"101:8181:3"},"id":3},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"ast":{"absolutePath":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol","exportedSymbols":{"AddressUpgradeable":[690],"ContextUpgradeable":[732],"Initializable":[406]},"id":733,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":692,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"86:23:4"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"../proxy/utils/Initializable.sol","id":693,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":733,"sourceUnit":407,"src":"110:42:4","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":695,"name":"Initializable","nodeType":"IdentifierPath","referencedDeclaration":406,"src":"691:13:4"},"id":696,"nodeType":"InheritanceSpecifier","src":"691:13:4"}],"canonicalName":"ContextUpgradeable","contractDependencies":[],"contractKind":"contract","documentation":{"id":694,"nodeType":"StructuredDocumentation","src":"154:496:4","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":732,"linearizedBaseContracts":[732,406],"name":"ContextUpgradeable","nameLocation":"669:18:4","nodeType":"ContractDefinition","nodes":[{"body":{"id":701,"nodeType":"Block","src":"763:7:4","statements":[]},"id":702,"implemented":true,"kind":"function","modifiers":[{"id":699,"kind":"modifierInvocation","modifierName":{"id":698,"name":"onlyInitializing","nodeType":"IdentifierPath","referencedDeclaration":351,"src":"746:16:4"},"nodeType":"ModifierInvocation","src":"746:16:4"}],"name":"__Context_init","nameLocation":"720:14:4","nodeType":"FunctionDefinition","parameters":{"id":697,"nodeType":"ParameterList","parameters":[],"src":"734:2:4"},"returnParameters":{"id":700,"nodeType":"ParameterList","parameters":[],"src":"763:0:4"},"scope":732,"src":"711:59:4","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":707,"nodeType":"Block","src":"838:7:4","statements":[]},"id":708,"implemented":true,"kind":"function","modifiers":[{"id":705,"kind":"modifierInvocation","modifierName":{"id":704,"name":"onlyInitializing","nodeType":"IdentifierPath","referencedDeclaration":351,"src":"821:16:4"},"nodeType":"ModifierInvocation","src":"821:16:4"}],"name":"__Context_init_unchained","nameLocation":"785:24:4","nodeType":"FunctionDefinition","parameters":{"id":703,"nodeType":"ParameterList","parameters":[],"src":"809:2:4"},"returnParameters":{"id":706,"nodeType":"ParameterList","parameters":[],"src":"838:0:4"},"scope":732,"src":"776:69:4","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":716,"nodeType":"Block","src":"912:34:4","statements":[{"expression":{"expression":{"id":713,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"929:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":714,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"929:10:4","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":712,"id":715,"nodeType":"Return","src":"922:17:4"}]},"id":717,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"859:10:4","nodeType":"FunctionDefinition","parameters":{"id":709,"nodeType":"ParameterList","parameters":[],"src":"869:2:4"},"returnParameters":{"id":712,"nodeType":"ParameterList","parameters":[{"constant":false,"id":711,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":717,"src":"903:7:4","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":710,"name":"address","nodeType":"ElementaryTypeName","src":"903:7:4","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"902:9:4"},"scope":732,"src":"850:96:4","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":725,"nodeType":"Block","src":"1019:32:4","statements":[{"expression":{"expression":{"id":722,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1036:3:4","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","src":"1036:8:4","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":721,"id":724,"nodeType":"Return","src":"1029:15:4"}]},"id":726,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"961:8:4","nodeType":"FunctionDefinition","parameters":{"id":718,"nodeType":"ParameterList","parameters":[],"src":"969:2:4"},"returnParameters":{"id":721,"nodeType":"ParameterList","parameters":[{"constant":false,"id":720,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":726,"src":"1003:14:4","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":719,"name":"bytes","nodeType":"ElementaryTypeName","src":"1003:5:4","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"1002:16:4"},"scope":732,"src":"952:99:4","stateMutability":"view","virtual":true,"visibility":"internal"},{"constant":false,"documentation":{"id":727,"nodeType":"StructuredDocumentation","src":"1057:254:4","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":731,"mutability":"mutable","name":"__gap","nameLocation":"1336:5:4","nodeType":"VariableDeclaration","scope":732,"src":"1316:25:4","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage","typeString":"uint256[50]"},"typeName":{"baseType":{"id":728,"name":"uint256","nodeType":"ElementaryTypeName","src":"1316:7:4","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":730,"length":{"hexValue":"3530","id":729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1324:2:4","typeDescriptions":{"typeIdentifier":"t_rational_50_by_1","typeString":"int_const 50"},"value":"50"},"nodeType":"ArrayTypeName","src":"1316:11:4","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$50_storage_ptr","typeString":"uint256[50]"}},"visibility":"private"}],"scope":733,"src":"651:693:4","usedErrors":[]}],"src":"86:1259:4"},"id":4},"@openzeppelin/contracts/access/AccessControl.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/AccessControl.sol","exportedSymbols":{"AccessControl":[1048],"Context":[1143],"ERC165":[1342],"IAccessControl":[1121],"IERC165":[1354],"Math":[2219],"Strings":[1318]},"id":1049,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":734,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"108:23:5"},{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","file":"./IAccessControl.sol","id":735,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1049,"sourceUnit":1122,"src":"133:30:5","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","file":"../utils/Context.sol","id":736,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1049,"sourceUnit":1144,"src":"164:30:5","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","file":"../utils/Strings.sol","id":737,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1049,"sourceUnit":1319,"src":"195:30:5","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","file":"../utils/introspection/ERC165.sol","id":738,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1049,"sourceUnit":1343,"src":"226:43:5","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":740,"name":"Context","nodeType":"IdentifierPath","referencedDeclaration":1143,"src":"1841:7:5"},"id":741,"nodeType":"InheritanceSpecifier","src":"1841:7:5"},{"baseName":{"id":742,"name":"IAccessControl","nodeType":"IdentifierPath","referencedDeclaration":1121,"src":"1850:14:5"},"id":743,"nodeType":"InheritanceSpecifier","src":"1850:14:5"},{"baseName":{"id":744,"name":"ERC165","nodeType":"IdentifierPath","referencedDeclaration":1342,"src":"1866:6:5"},"id":745,"nodeType":"InheritanceSpecifier","src":"1866:6:5"}],"canonicalName":"AccessControl","contractDependencies":[],"contractKind":"contract","documentation":{"id":739,"nodeType":"StructuredDocumentation","src":"271:1534:5","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":1048,"linearizedBaseContracts":[1048,1342,1354,1121,1143],"name":"AccessControl","nameLocation":"1824:13:5","nodeType":"ContractDefinition","nodes":[{"canonicalName":"AccessControl.RoleData","id":752,"members":[{"constant":false,"id":749,"mutability":"mutable","name":"members","nameLocation":"1930:7:5","nodeType":"VariableDeclaration","scope":752,"src":"1905:32:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"typeName":{"id":748,"keyType":{"id":746,"name":"address","nodeType":"ElementaryTypeName","src":"1913:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Mapping","src":"1905:24:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"},"valueType":{"id":747,"name":"bool","nodeType":"ElementaryTypeName","src":"1924:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}},"visibility":"internal"},{"constant":false,"id":751,"mutability":"mutable","name":"adminRole","nameLocation":"1955:9:5","nodeType":"VariableDeclaration","scope":752,"src":"1947:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":750,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1947:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"name":"RoleData","nameLocation":"1886:8:5","nodeType":"StructDefinition","scope":1048,"src":"1879:92:5","visibility":"public"},{"constant":false,"id":757,"mutability":"mutable","name":"_roles","nameLocation":"2014:6:5","nodeType":"VariableDeclaration","scope":1048,"src":"1977:43:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$752_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"typeName":{"id":756,"keyType":{"id":753,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1985:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Mapping","src":"1977:28:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$752_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData)"},"valueType":{"id":755,"nodeType":"UserDefinedTypeName","pathNode":{"id":754,"name":"RoleData","nodeType":"IdentifierPath","referencedDeclaration":752,"src":"1996:8:5"},"referencedDeclaration":752,"src":"1996:8:5","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$752_storage_ptr","typeString":"struct AccessControl.RoleData"}}},"visibility":"private"},{"constant":true,"functionSelector":"a217fddf","id":760,"mutability":"constant","name":"DEFAULT_ADMIN_ROLE","nameLocation":"2051:18:5","nodeType":"VariableDeclaration","scope":1048,"src":"2027:49:5","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":758,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2027:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"hexValue":"30783030","id":759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2072:4:5","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0x00"},"visibility":"public"},{"body":{"id":770,"nodeType":"Block","src":"2495:44:5","statements":[{"expression":{"arguments":[{"id":766,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":763,"src":"2516:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":765,"name":"_checkRole","nodeType":"Identifier","overloadedDeclarations":[825,864],"referencedDeclaration":825,"src":"2505:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$__$","typeString":"function (bytes32) view"}},"id":767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2505:16:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":768,"nodeType":"ExpressionStatement","src":"2505:16:5"},{"id":769,"nodeType":"PlaceholderStatement","src":"2531:1:5"}]},"documentation":{"id":761,"nodeType":"StructuredDocumentation","src":"2083:375:5","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":771,"name":"onlyRole","nameLocation":"2472:8:5","nodeType":"ModifierDefinition","parameters":{"id":764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":763,"mutability":"mutable","name":"role","nameLocation":"2489:4:5","nodeType":"VariableDeclaration","scope":771,"src":"2481:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":762,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2481:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2480:14:5"},"src":"2463:76:5","virtual":false,"visibility":"internal"},{"baseFunctions":[1341],"body":{"id":792,"nodeType":"Block","src":"2697:111:5","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":780,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":774,"src":"2714:11:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":782,"name":"IAccessControl","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1121,"src":"2734:14:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$1121_$","typeString":"type(contract IAccessControl)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IAccessControl_$1121_$","typeString":"type(contract IAccessControl)"}],"id":781,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"2729:4:5","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":783,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2729:20:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IAccessControl_$1121","typeString":"type(contract IAccessControl)"}},"id":784,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"2729:32:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"2714:47:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":788,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":774,"src":"2789:11:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes4","typeString":"bytes4"}],"expression":{"id":786,"name":"super","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-25,"src":"2765:5:5","typeDescriptions":{"typeIdentifier":"t_type$_t_super$_AccessControl_$1048_$","typeString":"type(contract super AccessControl)"}},"id":787,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"supportsInterface","nodeType":"MemberAccess","referencedDeclaration":1341,"src":"2765:23:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes4_$returns$_t_bool_$","typeString":"function (bytes4) view returns (bool)"}},"id":789,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2765:36:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"2714:87:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":779,"id":791,"nodeType":"Return","src":"2707:94:5"}]},"documentation":{"id":772,"nodeType":"StructuredDocumentation","src":"2545:56:5","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":793,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"2615:17:5","nodeType":"FunctionDefinition","overrides":{"id":776,"nodeType":"OverrideSpecifier","overrides":[],"src":"2673:8:5"},"parameters":{"id":775,"nodeType":"ParameterList","parameters":[{"constant":false,"id":774,"mutability":"mutable","name":"interfaceId","nameLocation":"2640:11:5","nodeType":"VariableDeclaration","scope":793,"src":"2633:18:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":773,"name":"bytes4","nodeType":"ElementaryTypeName","src":"2633:6:5","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"2632:20:5"},"returnParameters":{"id":779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":778,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":793,"src":"2691:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":777,"name":"bool","nodeType":"ElementaryTypeName","src":"2691:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2690:6:5"},"scope":1048,"src":"2606:202:5","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1088],"body":{"id":811,"nodeType":"Block","src":"2987:53:5","statements":[{"expression":{"baseExpression":{"expression":{"baseExpression":{"id":804,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"3004:6:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$752_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":806,"indexExpression":{"id":805,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":796,"src":"3011:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3004:12:5","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$752_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":807,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":749,"src":"3004:20:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":809,"indexExpression":{"id":808,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":798,"src":"3025:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3004:29:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":803,"id":810,"nodeType":"Return","src":"2997:36:5"}]},"documentation":{"id":794,"nodeType":"StructuredDocumentation","src":"2814:76:5","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":812,"implemented":true,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"2904:7:5","nodeType":"FunctionDefinition","overrides":{"id":800,"nodeType":"OverrideSpecifier","overrides":[],"src":"2963:8:5"},"parameters":{"id":799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":796,"mutability":"mutable","name":"role","nameLocation":"2920:4:5","nodeType":"VariableDeclaration","scope":812,"src":"2912:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":795,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2912:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":798,"mutability":"mutable","name":"account","nameLocation":"2934:7:5","nodeType":"VariableDeclaration","scope":812,"src":"2926:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":797,"name":"address","nodeType":"ElementaryTypeName","src":"2926:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2911:31:5"},"returnParameters":{"id":803,"nodeType":"ParameterList","parameters":[{"constant":false,"id":802,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":812,"src":"2981:4:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":801,"name":"bool","nodeType":"ElementaryTypeName","src":"2981:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"2980:6:5"},"scope":1048,"src":"2895:145:5","stateMutability":"view","virtual":true,"visibility":"public"},{"body":{"id":824,"nodeType":"Block","src":"3390:47:5","statements":[{"expression":{"arguments":[{"id":819,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":815,"src":"3411:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"arguments":[],"expression":{"argumentTypes":[],"id":820,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"3417:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3417:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":818,"name":"_checkRole","nodeType":"Identifier","overloadedDeclarations":[825,864],"referencedDeclaration":864,"src":"3400:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address) view"}},"id":822,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3400:30:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":823,"nodeType":"ExpressionStatement","src":"3400:30:5"}]},"documentation":{"id":813,"nodeType":"StructuredDocumentation","src":"3046:283:5","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":825,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRole","nameLocation":"3343:10:5","nodeType":"FunctionDefinition","parameters":{"id":816,"nodeType":"ParameterList","parameters":[{"constant":false,"id":815,"mutability":"mutable","name":"role","nameLocation":"3362:4:5","nodeType":"VariableDeclaration","scope":825,"src":"3354:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":814,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3354:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"3353:14:5"},"returnParameters":{"id":817,"nodeType":"ParameterList","parameters":[],"src":"3390:0:5"},"scope":1048,"src":"3334:103:5","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":863,"nodeType":"Block","src":"3791:406:5","statements":[{"condition":{"id":837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3805:23:5","subExpression":{"arguments":[{"id":834,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":828,"src":"3814:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":835,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":830,"src":"3820:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":833,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"3806:7:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":836,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3806:22:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":862,"nodeType":"IfStatement","src":"3801:390:5","trueBody":{"id":861,"nodeType":"Block","src":"3830:361:5","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"416363657373436f6e74726f6c3a206163636f756e7420","id":843,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"3938:25:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874","typeString":"literal_string \"AccessControl: account \""},"value":"AccessControl: account "},{"arguments":[{"id":846,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":830,"src":"4009:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":844,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1318,"src":"3989:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$1318_$","typeString":"type(library Strings)"}},"id":845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toHexString","nodeType":"MemberAccess","referencedDeclaration":1317,"src":"3989:19:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_address_$returns$_t_string_memory_ptr_$","typeString":"function (address) pure returns (string memory)"}},"id":847,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3989:28:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},{"hexValue":"206973206d697373696e6720726f6c6520","id":848,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4043:19:5","typeDescriptions":{"typeIdentifier":"t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69","typeString":"literal_string \" is missing role \""},"value":" is missing role "},{"arguments":[{"arguments":[{"id":853,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":828,"src":"4116:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":852,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4108:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":851,"name":"uint256","nodeType":"ElementaryTypeName","src":"4108:7:5","typeDescriptions":{}}},"id":854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4108:13:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"hexValue":"3332","id":855,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4123:2:5","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":849,"name":"Strings","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1318,"src":"4088:7:5","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Strings_$1318_$","typeString":"type(library Strings)"}},"id":850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"toHexString","nodeType":"MemberAccess","referencedDeclaration":1297,"src":"4088:19:5","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4088:38:5","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":841,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"3896:3:5","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":842,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"3896:16:5","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3896:252:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":840,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3868:6:5","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":839,"name":"string","nodeType":"ElementaryTypeName","src":"3868:6:5","typeDescriptions":{}}},"id":858,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3868:298:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":838,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"3844:6:5","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":859,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3844:336:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":860,"nodeType":"ExpressionStatement","src":"3844:336:5"}]}}]},"documentation":{"id":826,"nodeType":"StructuredDocumentation","src":"3443:270:5","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":864,"implemented":true,"kind":"function","modifiers":[],"name":"_checkRole","nameLocation":"3727:10:5","nodeType":"FunctionDefinition","parameters":{"id":831,"nodeType":"ParameterList","parameters":[{"constant":false,"id":828,"mutability":"mutable","name":"role","nameLocation":"3746:4:5","nodeType":"VariableDeclaration","scope":864,"src":"3738:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":827,"name":"bytes32","nodeType":"ElementaryTypeName","src":"3738:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":830,"mutability":"mutable","name":"account","nameLocation":"3760:7:5","nodeType":"VariableDeclaration","scope":864,"src":"3752:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":829,"name":"address","nodeType":"ElementaryTypeName","src":"3752:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3737:31:5"},"returnParameters":{"id":832,"nodeType":"ParameterList","parameters":[],"src":"3791:0:5"},"scope":1048,"src":"3718:479:5","stateMutability":"view","virtual":true,"visibility":"internal"},{"baseFunctions":[1096],"body":{"id":878,"nodeType":"Block","src":"4461:46:5","statements":[{"expression":{"expression":{"baseExpression":{"id":873,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"4478:6:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$752_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":875,"indexExpression":{"id":874,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":867,"src":"4485:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4478:12:5","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$752_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":751,"src":"4478:22:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"functionReturnParameters":872,"id":877,"nodeType":"Return","src":"4471:29:5"}]},"documentation":{"id":865,"nodeType":"StructuredDocumentation","src":"4203:170:5","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":879,"implemented":true,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"4387:12:5","nodeType":"FunctionDefinition","overrides":{"id":869,"nodeType":"OverrideSpecifier","overrides":[],"src":"4434:8:5"},"parameters":{"id":868,"nodeType":"ParameterList","parameters":[{"constant":false,"id":867,"mutability":"mutable","name":"role","nameLocation":"4408:4:5","nodeType":"VariableDeclaration","scope":879,"src":"4400:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":866,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4400:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4399:14:5"},"returnParameters":{"id":872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":879,"src":"4452:7:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":870,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4452:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"4451:9:5"},"scope":1048,"src":"4378:129:5","stateMutability":"view","virtual":true,"visibility":"public"},{"baseFunctions":[1104],"body":{"id":898,"nodeType":"Block","src":"4906:42:5","statements":[{"expression":{"arguments":[{"id":894,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":882,"src":"4927:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":895,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":884,"src":"4933:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":893,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1016,"src":"4916:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4916:25:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":897,"nodeType":"ExpressionStatement","src":"4916:25:5"}]},"documentation":{"id":880,"nodeType":"StructuredDocumentation","src":"4513:285:5","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":899,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":889,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":882,"src":"4899:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":888,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":879,"src":"4886:12:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4886:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":891,"kind":"modifierInvocation","modifierName":{"id":887,"name":"onlyRole","nodeType":"IdentifierPath","referencedDeclaration":771,"src":"4877:8:5"},"nodeType":"ModifierInvocation","src":"4877:28:5"}],"name":"grantRole","nameLocation":"4812:9:5","nodeType":"FunctionDefinition","overrides":{"id":886,"nodeType":"OverrideSpecifier","overrides":[],"src":"4868:8:5"},"parameters":{"id":885,"nodeType":"ParameterList","parameters":[{"constant":false,"id":882,"mutability":"mutable","name":"role","nameLocation":"4830:4:5","nodeType":"VariableDeclaration","scope":899,"src":"4822:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":881,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4822:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":884,"mutability":"mutable","name":"account","nameLocation":"4844:7:5","nodeType":"VariableDeclaration","scope":899,"src":"4836:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":883,"name":"address","nodeType":"ElementaryTypeName","src":"4836:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4821:31:5"},"returnParameters":{"id":892,"nodeType":"ParameterList","parameters":[],"src":"4906:0:5"},"scope":1048,"src":"4803:145:5","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1112],"body":{"id":918,"nodeType":"Block","src":"5332:43:5","statements":[{"expression":{"arguments":[{"id":914,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"5354:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":915,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":904,"src":"5360:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":913,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1047,"src":"5342:11:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5342:26:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":917,"nodeType":"ExpressionStatement","src":"5342:26:5"}]},"documentation":{"id":900,"nodeType":"StructuredDocumentation","src":"4954:269:5","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":919,"implemented":true,"kind":"function","modifiers":[{"arguments":[{"arguments":[{"id":909,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":902,"src":"5325:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":908,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":879,"src":"5312:12:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5312:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":911,"kind":"modifierInvocation","modifierName":{"id":907,"name":"onlyRole","nodeType":"IdentifierPath","referencedDeclaration":771,"src":"5303:8:5"},"nodeType":"ModifierInvocation","src":"5303:28:5"}],"name":"revokeRole","nameLocation":"5237:10:5","nodeType":"FunctionDefinition","overrides":{"id":906,"nodeType":"OverrideSpecifier","overrides":[],"src":"5294:8:5"},"parameters":{"id":905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":902,"mutability":"mutable","name":"role","nameLocation":"5256:4:5","nodeType":"VariableDeclaration","scope":919,"src":"5248:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":901,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5248:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":904,"mutability":"mutable","name":"account","nameLocation":"5270:7:5","nodeType":"VariableDeclaration","scope":919,"src":"5262:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":903,"name":"address","nodeType":"ElementaryTypeName","src":"5262:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5247:31:5"},"returnParameters":{"id":912,"nodeType":"ParameterList","parameters":[],"src":"5332:0:5"},"scope":1048,"src":"5228:147:5","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"baseFunctions":[1120],"body":{"id":941,"nodeType":"Block","src":"5989:137:5","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":929,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"6007:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":930,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"6018:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6018:12:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"6007:23:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636520726f6c657320666f722073656c66","id":933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6032:49:5","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":928,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"5999:7:5","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5999:83:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":935,"nodeType":"ExpressionStatement","src":"5999:83:5"},{"expression":{"arguments":[{"id":937,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":922,"src":"6105:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":938,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":924,"src":"6111:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":936,"name":"_revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1047,"src":"6093:11:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":939,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6093:26:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":940,"nodeType":"ExpressionStatement","src":"6093:26:5"}]},"documentation":{"id":920,"nodeType":"StructuredDocumentation","src":"5381:526:5","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":942,"implemented":true,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"5921:12:5","nodeType":"FunctionDefinition","overrides":{"id":926,"nodeType":"OverrideSpecifier","overrides":[],"src":"5980:8:5"},"parameters":{"id":925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":922,"mutability":"mutable","name":"role","nameLocation":"5942:4:5","nodeType":"VariableDeclaration","scope":942,"src":"5934:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":921,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5934:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":924,"mutability":"mutable","name":"account","nameLocation":"5956:7:5","nodeType":"VariableDeclaration","scope":942,"src":"5948:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":923,"name":"address","nodeType":"ElementaryTypeName","src":"5948:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5933:31:5"},"returnParameters":{"id":927,"nodeType":"ParameterList","parameters":[],"src":"5989:0:5"},"scope":1048,"src":"5912:214:5","stateMutability":"nonpayable","virtual":true,"visibility":"public"},{"body":{"id":955,"nodeType":"Block","src":"6879:42:5","statements":[{"expression":{"arguments":[{"id":951,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":945,"src":"6900:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":952,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":947,"src":"6906:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":950,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1016,"src":"6889:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":953,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6889:25:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":954,"nodeType":"ExpressionStatement","src":"6889:25:5"}]},"documentation":{"id":943,"nodeType":"StructuredDocumentation","src":"6132:674:5","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":956,"implemented":true,"kind":"function","modifiers":[],"name":"_setupRole","nameLocation":"6820:10:5","nodeType":"FunctionDefinition","parameters":{"id":948,"nodeType":"ParameterList","parameters":[{"constant":false,"id":945,"mutability":"mutable","name":"role","nameLocation":"6839:4:5","nodeType":"VariableDeclaration","scope":956,"src":"6831:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":944,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6831:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":947,"mutability":"mutable","name":"account","nameLocation":"6853:7:5","nodeType":"VariableDeclaration","scope":956,"src":"6845:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":946,"name":"address","nodeType":"ElementaryTypeName","src":"6845:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6830:31:5"},"returnParameters":{"id":949,"nodeType":"ParameterList","parameters":[],"src":"6879:0:5"},"scope":1048,"src":"6811:110:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":983,"nodeType":"Block","src":"7119:174:5","statements":[{"assignments":[965],"declarations":[{"constant":false,"id":965,"mutability":"mutable","name":"previousAdminRole","nameLocation":"7137:17:5","nodeType":"VariableDeclaration","scope":983,"src":"7129:25:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":964,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7129:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":969,"initialValue":{"arguments":[{"id":967,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"7170:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":966,"name":"getRoleAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":879,"src":"7157:12:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$","typeString":"function (bytes32) view returns (bytes32)"}},"id":968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7157:18:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7129:46:5"},{"expression":{"id":975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"expression":{"baseExpression":{"id":970,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"7185:6:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$752_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":972,"indexExpression":{"id":971,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"7192:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7185:12:5","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$752_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":973,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"memberName":"adminRole","nodeType":"MemberAccess","referencedDeclaration":751,"src":"7185:22:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":974,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":961,"src":"7210:9:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"7185:34:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":976,"nodeType":"ExpressionStatement","src":"7185:34:5"},{"eventCall":{"arguments":[{"id":978,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":959,"src":"7251:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":979,"name":"previousAdminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":965,"src":"7257:17:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":980,"name":"adminRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":961,"src":"7276:9:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":977,"name":"RoleAdminChanged","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1060,"src":"7234:16:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes32_$returns$__$","typeString":"function (bytes32,bytes32,bytes32)"}},"id":981,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7234:52:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":982,"nodeType":"EmitStatement","src":"7229:57:5"}]},"documentation":{"id":957,"nodeType":"StructuredDocumentation","src":"6927:114:5","text":" @dev Sets `adminRole` as ``role``'s admin role.\n Emits a {RoleAdminChanged} event."},"id":984,"implemented":true,"kind":"function","modifiers":[],"name":"_setRoleAdmin","nameLocation":"7055:13:5","nodeType":"FunctionDefinition","parameters":{"id":962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":959,"mutability":"mutable","name":"role","nameLocation":"7077:4:5","nodeType":"VariableDeclaration","scope":984,"src":"7069:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":958,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7069:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":961,"mutability":"mutable","name":"adminRole","nameLocation":"7091:9:5","nodeType":"VariableDeclaration","scope":984,"src":"7083:17:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":960,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7083:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"7068:33:5"},"returnParameters":{"id":963,"nodeType":"ParameterList","parameters":[],"src":"7119:0:5"},"scope":1048,"src":"7046:247:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1015,"nodeType":"Block","src":"7529:165:5","statements":[{"condition":{"id":996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"7543:23:5","subExpression":{"arguments":[{"id":993,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":987,"src":"7552:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":994,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"7558:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":992,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"7544:7:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7544:22:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1014,"nodeType":"IfStatement","src":"7539:149:5","trueBody":{"id":1013,"nodeType":"Block","src":"7568:120:5","statements":[{"expression":{"id":1004,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":997,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"7582:6:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$752_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":999,"indexExpression":{"id":998,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":987,"src":"7589:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7582:12:5","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$752_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":1000,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":749,"src":"7582:20:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":1002,"indexExpression":{"id":1001,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"7603:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7582:29:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":1003,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"7614:4:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"7582:36:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1005,"nodeType":"ExpressionStatement","src":"7582:36:5"},{"eventCall":{"arguments":[{"id":1007,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":987,"src":"7649:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1008,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":989,"src":"7655:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":1009,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"7664:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1010,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7664:12:5","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":1006,"name":"RoleGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1069,"src":"7637:11:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":1011,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7637:40:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1012,"nodeType":"EmitStatement","src":"7632:45:5"}]}}]},"documentation":{"id":985,"nodeType":"StructuredDocumentation","src":"7299:157:5","text":" @dev Grants `role` to `account`.\n Internal function without access restriction.\n May emit a {RoleGranted} event."},"id":1016,"implemented":true,"kind":"function","modifiers":[],"name":"_grantRole","nameLocation":"7470:10:5","nodeType":"FunctionDefinition","parameters":{"id":990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":987,"mutability":"mutable","name":"role","nameLocation":"7489:4:5","nodeType":"VariableDeclaration","scope":1016,"src":"7481:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":986,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7481:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":989,"mutability":"mutable","name":"account","nameLocation":"7503:7:5","nodeType":"VariableDeclaration","scope":1016,"src":"7495:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":988,"name":"address","nodeType":"ElementaryTypeName","src":"7495:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7480:31:5"},"returnParameters":{"id":991,"nodeType":"ParameterList","parameters":[],"src":"7529:0:5"},"scope":1048,"src":"7461:233:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"},{"body":{"id":1046,"nodeType":"Block","src":"7934:165:5","statements":[{"condition":{"arguments":[{"id":1025,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1019,"src":"7956:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1026,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1021,"src":"7962:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":1024,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"7948:7:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":1027,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7948:22:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1045,"nodeType":"IfStatement","src":"7944:149:5","trueBody":{"id":1044,"nodeType":"Block","src":"7972:121:5","statements":[{"expression":{"id":1035,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"expression":{"baseExpression":{"id":1028,"name":"_roles","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":757,"src":"7986:6:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_struct$_RoleData_$752_storage_$","typeString":"mapping(bytes32 => struct AccessControl.RoleData storage ref)"}},"id":1030,"indexExpression":{"id":1029,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1019,"src":"7993:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7986:12:5","typeDescriptions":{"typeIdentifier":"t_struct$_RoleData_$752_storage","typeString":"struct AccessControl.RoleData storage ref"}},"id":1031,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberName":"members","nodeType":"MemberAccess","referencedDeclaration":749,"src":"7986:20:5","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":1033,"indexExpression":{"id":1032,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1021,"src":"8007:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7986:29:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"66616c7365","id":1034,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"8018:5:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"src":"7986:37:5","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1036,"nodeType":"ExpressionStatement","src":"7986:37:5"},{"eventCall":{"arguments":[{"id":1038,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1019,"src":"8054:4:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":1039,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1021,"src":"8060:7:5","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[],"expression":{"argumentTypes":[],"id":1040,"name":"_msgSender","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1133,"src":"8069:10:5","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":1041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8069:12:5","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":1037,"name":"RoleRevoked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1078,"src":"8042:11:5","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_address_$_t_address_$returns$__$","typeString":"function (bytes32,address,address)"}},"id":1042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8042:40:5","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1043,"nodeType":"EmitStatement","src":"8037:45:5"}]}}]},"documentation":{"id":1017,"nodeType":"StructuredDocumentation","src":"7700:160:5","text":" @dev Revokes `role` from `account`.\n Internal function without access restriction.\n May emit a {RoleRevoked} event."},"id":1047,"implemented":true,"kind":"function","modifiers":[],"name":"_revokeRole","nameLocation":"7874:11:5","nodeType":"FunctionDefinition","parameters":{"id":1022,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1019,"mutability":"mutable","name":"role","nameLocation":"7894:4:5","nodeType":"VariableDeclaration","scope":1047,"src":"7886:12:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1018,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7886:7:5","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1021,"mutability":"mutable","name":"account","nameLocation":"7908:7:5","nodeType":"VariableDeclaration","scope":1047,"src":"7900:15:5","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1020,"name":"address","nodeType":"ElementaryTypeName","src":"7900:7:5","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7885:31:5"},"returnParameters":{"id":1023,"nodeType":"ParameterList","parameters":[],"src":"7934:0:5"},"scope":1048,"src":"7865:234:5","stateMutability":"nonpayable","virtual":true,"visibility":"internal"}],"scope":1049,"src":"1806:6295:5","usedErrors":[]}],"src":"108:7994:5"},"id":5},"@openzeppelin/contracts/access/IAccessControl.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","exportedSymbols":{"IAccessControl":[1121]},"id":1122,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1050,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"94:23:6"},{"abstract":false,"baseContracts":[],"canonicalName":"IAccessControl","contractDependencies":[],"contractKind":"interface","documentation":{"id":1051,"nodeType":"StructuredDocumentation","src":"119:89:6","text":" @dev External interface of AccessControl declared to support ERC165 detection."},"fullyImplemented":false,"id":1121,"linearizedBaseContracts":[1121],"name":"IAccessControl","nameLocation":"219:14:6","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":1052,"nodeType":"StructuredDocumentation","src":"240:292:6","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":1060,"name":"RoleAdminChanged","nameLocation":"543:16:6","nodeType":"EventDefinition","parameters":{"id":1059,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1054,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"576:4:6","nodeType":"VariableDeclaration","scope":1060,"src":"560:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1053,"name":"bytes32","nodeType":"ElementaryTypeName","src":"560:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1056,"indexed":true,"mutability":"mutable","name":"previousAdminRole","nameLocation":"598:17:6","nodeType":"VariableDeclaration","scope":1060,"src":"582:33:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1055,"name":"bytes32","nodeType":"ElementaryTypeName","src":"582:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1058,"indexed":true,"mutability":"mutable","name":"newAdminRole","nameLocation":"633:12:6","nodeType":"VariableDeclaration","scope":1060,"src":"617:28:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1057,"name":"bytes32","nodeType":"ElementaryTypeName","src":"617:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"559:87:6"},"src":"537:110:6"},{"anonymous":false,"documentation":{"id":1061,"nodeType":"StructuredDocumentation","src":"653:212:6","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":1069,"name":"RoleGranted","nameLocation":"876:11:6","nodeType":"EventDefinition","parameters":{"id":1068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1063,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"904:4:6","nodeType":"VariableDeclaration","scope":1069,"src":"888:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1062,"name":"bytes32","nodeType":"ElementaryTypeName","src":"888:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1065,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"926:7:6","nodeType":"VariableDeclaration","scope":1069,"src":"910:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1064,"name":"address","nodeType":"ElementaryTypeName","src":"910:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1067,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"951:6:6","nodeType":"VariableDeclaration","scope":1069,"src":"935:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1066,"name":"address","nodeType":"ElementaryTypeName","src":"935:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"887:71:6"},"src":"870:89:6"},{"anonymous":false,"documentation":{"id":1070,"nodeType":"StructuredDocumentation","src":"965:275:6","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":1078,"name":"RoleRevoked","nameLocation":"1251:11:6","nodeType":"EventDefinition","parameters":{"id":1077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1072,"indexed":true,"mutability":"mutable","name":"role","nameLocation":"1279:4:6","nodeType":"VariableDeclaration","scope":1078,"src":"1263:20:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1071,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1263:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1074,"indexed":true,"mutability":"mutable","name":"account","nameLocation":"1301:7:6","nodeType":"VariableDeclaration","scope":1078,"src":"1285:23:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1073,"name":"address","nodeType":"ElementaryTypeName","src":"1285:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":1076,"indexed":true,"mutability":"mutable","name":"sender","nameLocation":"1326:6:6","nodeType":"VariableDeclaration","scope":1078,"src":"1310:22:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1075,"name":"address","nodeType":"ElementaryTypeName","src":"1310:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1262:71:6"},"src":"1245:89:6"},{"documentation":{"id":1079,"nodeType":"StructuredDocumentation","src":"1340:76:6","text":" @dev Returns `true` if `account` has been granted `role`."},"functionSelector":"91d14854","id":1088,"implemented":false,"kind":"function","modifiers":[],"name":"hasRole","nameLocation":"1430:7:6","nodeType":"FunctionDefinition","parameters":{"id":1084,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1081,"mutability":"mutable","name":"role","nameLocation":"1446:4:6","nodeType":"VariableDeclaration","scope":1088,"src":"1438:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1080,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1438:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1083,"mutability":"mutable","name":"account","nameLocation":"1460:7:6","nodeType":"VariableDeclaration","scope":1088,"src":"1452:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1082,"name":"address","nodeType":"ElementaryTypeName","src":"1452:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1437:31:6"},"returnParameters":{"id":1087,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1086,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1088,"src":"1492:4:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1085,"name":"bool","nodeType":"ElementaryTypeName","src":"1492:4:6","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"1491:6:6"},"scope":1121,"src":"1421:77:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1089,"nodeType":"StructuredDocumentation","src":"1504:184:6","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":1096,"implemented":false,"kind":"function","modifiers":[],"name":"getRoleAdmin","nameLocation":"1702:12:6","nodeType":"FunctionDefinition","parameters":{"id":1092,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1091,"mutability":"mutable","name":"role","nameLocation":"1723:4:6","nodeType":"VariableDeclaration","scope":1096,"src":"1715:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1090,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1715:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1714:14:6"},"returnParameters":{"id":1095,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1094,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1096,"src":"1752:7:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1093,"name":"bytes32","nodeType":"ElementaryTypeName","src":"1752:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"1751:9:6"},"scope":1121,"src":"1693:68:6","stateMutability":"view","virtual":false,"visibility":"external"},{"documentation":{"id":1097,"nodeType":"StructuredDocumentation","src":"1767:239:6","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":1104,"implemented":false,"kind":"function","modifiers":[],"name":"grantRole","nameLocation":"2020:9:6","nodeType":"FunctionDefinition","parameters":{"id":1102,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1099,"mutability":"mutable","name":"role","nameLocation":"2038:4:6","nodeType":"VariableDeclaration","scope":1104,"src":"2030:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1098,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2030:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1101,"mutability":"mutable","name":"account","nameLocation":"2052:7:6","nodeType":"VariableDeclaration","scope":1104,"src":"2044:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1100,"name":"address","nodeType":"ElementaryTypeName","src":"2044:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2029:31:6"},"returnParameters":{"id":1103,"nodeType":"ParameterList","parameters":[],"src":"2069:0:6"},"scope":1121,"src":"2011:59:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1105,"nodeType":"StructuredDocumentation","src":"2076:223:6","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":1112,"implemented":false,"kind":"function","modifiers":[],"name":"revokeRole","nameLocation":"2313:10:6","nodeType":"FunctionDefinition","parameters":{"id":1110,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1107,"mutability":"mutable","name":"role","nameLocation":"2332:4:6","nodeType":"VariableDeclaration","scope":1112,"src":"2324:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1106,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2324:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1109,"mutability":"mutable","name":"account","nameLocation":"2346:7:6","nodeType":"VariableDeclaration","scope":1112,"src":"2338:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1108,"name":"address","nodeType":"ElementaryTypeName","src":"2338:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2323:31:6"},"returnParameters":{"id":1111,"nodeType":"ParameterList","parameters":[],"src":"2363:0:6"},"scope":1121,"src":"2304:60:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"documentation":{"id":1113,"nodeType":"StructuredDocumentation","src":"2370:480:6","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":1120,"implemented":false,"kind":"function","modifiers":[],"name":"renounceRole","nameLocation":"2864:12:6","nodeType":"FunctionDefinition","parameters":{"id":1118,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1115,"mutability":"mutable","name":"role","nameLocation":"2885:4:6","nodeType":"VariableDeclaration","scope":1120,"src":"2877:12:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":1114,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2877:7:6","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":1117,"mutability":"mutable","name":"account","nameLocation":"2899:7:6","nodeType":"VariableDeclaration","scope":1120,"src":"2891:15:6","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1116,"name":"address","nodeType":"ElementaryTypeName","src":"2891:7:6","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2876:31:6"},"returnParameters":{"id":1119,"nodeType":"ParameterList","parameters":[],"src":"2916:0:6"},"scope":1121,"src":"2855:62:6","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":1122,"src":"209:2710:6","usedErrors":[]}],"src":"94:2826:6"},"id":6},"@openzeppelin/contracts/utils/Context.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Context.sol","exportedSymbols":{"Context":[1143]},"id":1144,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1123,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"86:23:7"},{"abstract":true,"baseContracts":[],"canonicalName":"Context","contractDependencies":[],"contractKind":"contract","documentation":{"id":1124,"nodeType":"StructuredDocumentation","src":"111:496:7","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":1143,"linearizedBaseContracts":[1143],"name":"Context","nameLocation":"626:7:7","nodeType":"ContractDefinition","nodes":[{"body":{"id":1132,"nodeType":"Block","src":"702:34:7","statements":[{"expression":{"expression":{"id":1129,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"719:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"719:10:7","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":1128,"id":1131,"nodeType":"Return","src":"712:17:7"}]},"id":1133,"implemented":true,"kind":"function","modifiers":[],"name":"_msgSender","nameLocation":"649:10:7","nodeType":"FunctionDefinition","parameters":{"id":1125,"nodeType":"ParameterList","parameters":[],"src":"659:2:7"},"returnParameters":{"id":1128,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1127,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1133,"src":"693:7:7","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1126,"name":"address","nodeType":"ElementaryTypeName","src":"693:7:7","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"692:9:7"},"scope":1143,"src":"640:96:7","stateMutability":"view","virtual":true,"visibility":"internal"},{"body":{"id":1141,"nodeType":"Block","src":"809:32:7","statements":[{"expression":{"expression":{"id":1138,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"826:3:7","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":1139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"data","nodeType":"MemberAccess","src":"826:8:7","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes calldata"}},"functionReturnParameters":1137,"id":1140,"nodeType":"Return","src":"819:15:7"}]},"id":1142,"implemented":true,"kind":"function","modifiers":[],"name":"_msgData","nameLocation":"751:8:7","nodeType":"FunctionDefinition","parameters":{"id":1134,"nodeType":"ParameterList","parameters":[],"src":"759:2:7"},"returnParameters":{"id":1137,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1136,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1142,"src":"793:14:7","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_bytes_calldata_ptr","typeString":"bytes"},"typeName":{"id":1135,"name":"bytes","nodeType":"ElementaryTypeName","src":"793:5:7","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"src":"792:16:7"},"scope":1143,"src":"742:99:7","stateMutability":"view","virtual":true,"visibility":"internal"}],"scope":1144,"src":"608:235:7","usedErrors":[]}],"src":"86:758:7"},"id":7},"@openzeppelin/contracts/utils/Strings.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/Strings.sol","exportedSymbols":{"Math":[2219],"Strings":[1318]},"id":1319,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1145,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"101:23:8"},{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","file":"./math/Math.sol","id":1146,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1319,"sourceUnit":2220,"src":"126:25:8","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[],"canonicalName":"Strings","contractDependencies":[],"contractKind":"library","documentation":{"id":1147,"nodeType":"StructuredDocumentation","src":"153:34:8","text":" @dev String operations."},"fullyImplemented":true,"id":1318,"linearizedBaseContracts":[1318],"name":"Strings","nameLocation":"196:7:8","nodeType":"ContractDefinition","nodes":[{"constant":true,"id":1150,"mutability":"constant","name":"_SYMBOLS","nameLocation":"235:8:8","nodeType":"VariableDeclaration","scope":1318,"src":"210:54:8","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"},"typeName":{"id":1148,"name":"bytes16","nodeType":"ElementaryTypeName","src":"210:7:8","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"value":{"hexValue":"30313233343536373839616263646566","id":1149,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"246:18:8","typeDescriptions":{"typeIdentifier":"t_stringliteral_cb29997ed99ead0db59ce4d12b7d3723198c827273e5796737c926d78019c39f","typeString":"literal_string \"0123456789abcdef\""},"value":"0123456789abcdef"},"visibility":"private"},{"constant":true,"id":1153,"mutability":"constant","name":"_ADDRESS_LENGTH","nameLocation":"293:15:8","nodeType":"VariableDeclaration","scope":1318,"src":"270:43:8","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":1151,"name":"uint8","nodeType":"ElementaryTypeName","src":"270:5:8","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"value":{"hexValue":"3230","id":1152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"311:2:8","typeDescriptions":{"typeIdentifier":"t_rational_20_by_1","typeString":"int_const 20"},"value":"20"},"visibility":"private"},{"body":{"id":1200,"nodeType":"Block","src":"486:625:8","statements":[{"id":1199,"nodeType":"UncheckedBlock","src":"496:609:8","statements":[{"assignments":[1162],"declarations":[{"constant":false,"id":1162,"mutability":"mutable","name":"length","nameLocation":"528:6:8","nodeType":"VariableDeclaration","scope":1199,"src":"520:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1161,"name":"uint256","nodeType":"ElementaryTypeName","src":"520:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1169,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1165,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1156,"src":"548:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1163,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"537:4:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$2219_$","typeString":"type(library Math)"}},"id":1164,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"log10","nodeType":"MemberAccess","referencedDeclaration":2056,"src":"537:10:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"537:17:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":1167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"557:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"537:21:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"520:38:8"},{"assignments":[1171],"declarations":[{"constant":false,"id":1171,"mutability":"mutable","name":"buffer","nameLocation":"586:6:8","nodeType":"VariableDeclaration","scope":1199,"src":"572:20:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1170,"name":"string","nodeType":"ElementaryTypeName","src":"572:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"id":1176,"initialValue":{"arguments":[{"id":1174,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1162,"src":"606:6:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1173,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"595:10:8","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256) pure returns (string memory)"},"typeName":{"id":1172,"name":"string","nodeType":"ElementaryTypeName","src":"599:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}}},"id":1175,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"595:18:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"nodeType":"VariableDeclarationStatement","src":"572:41:8"},{"assignments":[1178],"declarations":[{"constant":false,"id":1178,"mutability":"mutable","name":"ptr","nameLocation":"635:3:8","nodeType":"VariableDeclaration","scope":1199,"src":"627:11:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1177,"name":"uint256","nodeType":"ElementaryTypeName","src":"627:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1179,"nodeType":"VariableDeclarationStatement","src":"627:11:8"},{"AST":{"nodeType":"YulBlock","src":"708:67:8","statements":[{"nodeType":"YulAssignment","src":"726:35:8","value":{"arguments":[{"name":"buffer","nodeType":"YulIdentifier","src":"737:6:8"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"749:2:8","type":"","value":"32"},{"name":"length","nodeType":"YulIdentifier","src":"753:6:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"745:3:8"},"nodeType":"YulFunctionCall","src":"745:15:8"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"733:3:8"},"nodeType":"YulFunctionCall","src":"733:28:8"},"variableNames":[{"name":"ptr","nodeType":"YulIdentifier","src":"726:3:8"}]}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":1171,"isOffset":false,"isSlot":false,"src":"737:6:8","valueSize":1},{"declaration":1162,"isOffset":false,"isSlot":false,"src":"753:6:8","valueSize":1},{"declaration":1178,"isOffset":false,"isSlot":false,"src":"726:3:8","valueSize":1}],"id":1180,"nodeType":"InlineAssembly","src":"699:76:8"},{"body":{"id":1195,"nodeType":"Block","src":"801:267:8","statements":[{"expression":{"id":1183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":false,"src":"819:5:8","subExpression":{"id":1182,"name":"ptr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1178,"src":"819:3:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1184,"nodeType":"ExpressionStatement","src":"819:5:8"},{"AST":{"nodeType":"YulBlock","src":"902:84:8","statements":[{"expression":{"arguments":[{"name":"ptr","nodeType":"YulIdentifier","src":"932:3:8"},{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"946:5:8"},{"kind":"number","nodeType":"YulLiteral","src":"953:2:8","type":"","value":"10"}],"functionName":{"name":"mod","nodeType":"YulIdentifier","src":"942:3:8"},"nodeType":"YulFunctionCall","src":"942:14:8"},{"name":"_SYMBOLS","nodeType":"YulIdentifier","src":"958:8:8"}],"functionName":{"name":"byte","nodeType":"YulIdentifier","src":"937:4:8"},"nodeType":"YulFunctionCall","src":"937:30:8"}],"functionName":{"name":"mstore8","nodeType":"YulIdentifier","src":"924:7:8"},"nodeType":"YulFunctionCall","src":"924:44:8"},"nodeType":"YulExpressionStatement","src":"924:44:8"}]},"documentation":"@solidity memory-safe-assembly","evmVersion":"london","externalReferences":[{"declaration":1150,"isOffset":false,"isSlot":false,"src":"958:8:8","valueSize":1},{"declaration":1178,"isOffset":false,"isSlot":false,"src":"932:3:8","valueSize":1},{"declaration":1156,"isOffset":false,"isSlot":false,"src":"946:5:8","valueSize":1}],"id":1185,"nodeType":"InlineAssembly","src":"893:93:8"},{"expression":{"id":1188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1186,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1156,"src":"1003:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"hexValue":"3130","id":1187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1012:2:8","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"1003:11:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1189,"nodeType":"ExpressionStatement","src":"1003:11:8"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1190,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1156,"src":"1036:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1045:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1036:10:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1194,"nodeType":"IfStatement","src":"1032:21:8","trueBody":{"id":1193,"nodeType":"Break","src":"1048:5:8"}}]},"condition":{"hexValue":"74727565","id":1181,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"795:4:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"id":1196,"nodeType":"WhileStatement","src":"788:280:8"},{"expression":{"id":1197,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1171,"src":"1088:6:8","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":1160,"id":1198,"nodeType":"Return","src":"1081:13:8"}]}]},"documentation":{"id":1154,"nodeType":"StructuredDocumentation","src":"320:90:8","text":" @dev Converts a `uint256` to its ASCII `string` decimal representation."},"id":1201,"implemented":true,"kind":"function","modifiers":[],"name":"toString","nameLocation":"424:8:8","nodeType":"FunctionDefinition","parameters":{"id":1157,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1156,"mutability":"mutable","name":"value","nameLocation":"441:5:8","nodeType":"VariableDeclaration","scope":1201,"src":"433:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1155,"name":"uint256","nodeType":"ElementaryTypeName","src":"433:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"432:15:8"},"returnParameters":{"id":1160,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1159,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1201,"src":"471:13:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1158,"name":"string","nodeType":"ElementaryTypeName","src":"471:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"470:15:8"},"scope":1318,"src":"415:696:8","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1220,"nodeType":"Block","src":"1290:100:8","statements":[{"id":1219,"nodeType":"UncheckedBlock","src":"1300:84:8","statements":[{"expression":{"arguments":[{"id":1210,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1204,"src":"1343:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1213,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1204,"src":"1362:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":1211,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2219,"src":"1350:4:8","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$2219_$","typeString":"type(library Math)"}},"id":1212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"log256","nodeType":"MemberAccess","referencedDeclaration":2179,"src":"1350:11:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1350:18:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":1215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1371:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1350:22:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1209,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[1221,1297,1317],"referencedDeclaration":1297,"src":"1331:11:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":1217,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1331:42:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":1208,"id":1218,"nodeType":"Return","src":"1324:49:8"}]}]},"documentation":{"id":1202,"nodeType":"StructuredDocumentation","src":"1117:94:8","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation."},"id":1221,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"1225:11:8","nodeType":"FunctionDefinition","parameters":{"id":1205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1204,"mutability":"mutable","name":"value","nameLocation":"1245:5:8","nodeType":"VariableDeclaration","scope":1221,"src":"1237:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1203,"name":"uint256","nodeType":"ElementaryTypeName","src":"1237:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1236:15:8"},"returnParameters":{"id":1208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1207,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1221,"src":"1275:13:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1206,"name":"string","nodeType":"ElementaryTypeName","src":"1275:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1274:15:8"},"scope":1318,"src":"1216:174:8","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1296,"nodeType":"Block","src":"1603:347:8","statements":[{"assignments":[1232],"declarations":[{"constant":false,"id":1232,"mutability":"mutable","name":"buffer","nameLocation":"1626:6:8","nodeType":"VariableDeclaration","scope":1296,"src":"1613:19:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes"},"typeName":{"id":1231,"name":"bytes","nodeType":"ElementaryTypeName","src":"1613:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}},"visibility":"internal"}],"id":1241,"initialValue":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1235,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1645:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1236,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1226,"src":"1649:6:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1645:10:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"32","id":1238,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1658:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"1645:14:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1234,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1635:9:8","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_bytes_memory_ptr_$","typeString":"function (uint256) pure returns (bytes memory)"},"typeName":{"id":1233,"name":"bytes","nodeType":"ElementaryTypeName","src":"1639:5:8","typeDescriptions":{"typeIdentifier":"t_bytes_storage_ptr","typeString":"bytes"}}},"id":1240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1635:25:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"nodeType":"VariableDeclarationStatement","src":"1613:47:8"},{"expression":{"id":1246,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1242,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"1670:6:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1244,"indexExpression":{"hexValue":"30","id":1243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1677:1:8","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:8","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":1245,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1682:3:8","typeDescriptions":{"typeIdentifier":"t_stringliteral_044852b2a670ade5407e78fb2863c51de9fcb96542a07186fe3aeda6bb8a116d","typeString":"literal_string \"0\""},"value":"0"},"src":"1670:15:8","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":1247,"nodeType":"ExpressionStatement","src":"1670:15:8"},{"expression":{"id":1252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1248,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"1695:6:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1250,"indexExpression":{"hexValue":"31","id":1249,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1702:1:8","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:8","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"78","id":1251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1707:3:8","typeDescriptions":{"typeIdentifier":"t_stringliteral_7521d1cadbcfa91eec65aa16715b94ffc1c9654ba57ea2ef1a2127bca1127a83","typeString":"literal_string \"x\""},"value":"x"},"src":"1695:15:8","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":1253,"nodeType":"ExpressionStatement","src":"1695:15:8"},{"body":{"id":1282,"nodeType":"Block","src":"1765:83:8","statements":[{"expression":{"id":1276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":1268,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"1779:6:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}},"id":1270,"indexExpression":{"id":1269,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1255,"src":"1786:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1779:9:8","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":1271,"name":"_SYMBOLS","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1150,"src":"1791:8:8","typeDescriptions":{"typeIdentifier":"t_bytes16","typeString":"bytes16"}},"id":1275,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1272,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"1800:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"hexValue":"307866","id":1273,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1808:3:8","typeDescriptions":{"typeIdentifier":"t_rational_15_by_1","typeString":"int_const 15"},"value":"0xf"},"src":"1800:11:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1791:21:8","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"src":"1779:33:8","typeDescriptions":{"typeIdentifier":"t_bytes1","typeString":"bytes1"}},"id":1277,"nodeType":"ExpressionStatement","src":"1779:33:8"},{"expression":{"id":1280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1278,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"1826:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":1279,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1836:1:8","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"1826:11:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1281,"nodeType":"ExpressionStatement","src":"1826:11:8"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1262,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1255,"src":"1753:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"31","id":1263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1757:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1753:5:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1283,"initializationExpression":{"assignments":[1255],"declarations":[{"constant":false,"id":1255,"mutability":"mutable","name":"i","nameLocation":"1733:1:8","nodeType":"VariableDeclaration","scope":1283,"src":"1725:9:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1254,"name":"uint256","nodeType":"ElementaryTypeName","src":"1725:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1261,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1260,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1258,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1256,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1737:1:8","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1257,"name":"length","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1226,"src":"1741:6:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1737:10:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":1259,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1750:1:8","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1737:14:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"1725:26:8"},"loopExpression":{"expression":{"id":1266,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"--","prefix":true,"src":"1760:3:8","subExpression":{"id":1265,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1255,"src":"1762:1:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1267,"nodeType":"ExpressionStatement","src":"1760:3:8"},"nodeType":"ForStatement","src":"1720:128:8"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1285,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1224,"src":"1865:5:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1286,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1874:1:8","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1865:10:8","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"537472696e67733a20686578206c656e67746820696e73756666696369656e74","id":1288,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1877:34:8","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":1284,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"1857:7:8","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":1289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1857:55:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1290,"nodeType":"ExpressionStatement","src":"1857:55:8"},{"expression":{"arguments":[{"id":1293,"name":"buffer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1232,"src":"1936:6:8","typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":1292,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1929:6:8","typeDescriptions":{"typeIdentifier":"t_type$_t_string_storage_ptr_$","typeString":"type(string storage pointer)"},"typeName":{"id":1291,"name":"string","nodeType":"ElementaryTypeName","src":"1929:6:8","typeDescriptions":{}}},"id":1294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1929:14:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":1230,"id":1295,"nodeType":"Return","src":"1922:21:8"}]},"documentation":{"id":1222,"nodeType":"StructuredDocumentation","src":"1396:112:8","text":" @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length."},"id":1297,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"1522:11:8","nodeType":"FunctionDefinition","parameters":{"id":1227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1224,"mutability":"mutable","name":"value","nameLocation":"1542:5:8","nodeType":"VariableDeclaration","scope":1297,"src":"1534:13:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1223,"name":"uint256","nodeType":"ElementaryTypeName","src":"1534:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1226,"mutability":"mutable","name":"length","nameLocation":"1557:6:8","nodeType":"VariableDeclaration","scope":1297,"src":"1549:14:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1225,"name":"uint256","nodeType":"ElementaryTypeName","src":"1549:7:8","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1533:31:8"},"returnParameters":{"id":1230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1229,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1297,"src":"1588:13:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1228,"name":"string","nodeType":"ElementaryTypeName","src":"1588:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1587:15:8"},"scope":1318,"src":"1513:437:8","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1316,"nodeType":"Block","src":"2175:76:8","statements":[{"expression":{"arguments":[{"arguments":[{"arguments":[{"id":1310,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1300,"src":"2220:4:8","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":1309,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2212:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_uint160_$","typeString":"type(uint160)"},"typeName":{"id":1308,"name":"uint160","nodeType":"ElementaryTypeName","src":"2212:7:8","typeDescriptions":{}}},"id":1311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2212:13:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint160","typeString":"uint160"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint160","typeString":"uint160"}],"id":1307,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2204:7:8","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":1306,"name":"uint256","nodeType":"ElementaryTypeName","src":"2204:7:8","typeDescriptions":{}}},"id":1312,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2204:22:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1313,"name":"_ADDRESS_LENGTH","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1153,"src":"2228:15:8","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint8","typeString":"uint8"}],"id":1305,"name":"toHexString","nodeType":"Identifier","overloadedDeclarations":[1221,1297,1317],"referencedDeclaration":1297,"src":"2192:11:8","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_string_memory_ptr_$","typeString":"function (uint256,uint256) pure returns (string memory)"}},"id":1314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2192:52:8","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}},"functionReturnParameters":1304,"id":1315,"nodeType":"Return","src":"2185:59:8"}]},"documentation":{"id":1298,"nodeType":"StructuredDocumentation","src":"1956:141:8","text":" @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation."},"id":1317,"implemented":true,"kind":"function","modifiers":[],"name":"toHexString","nameLocation":"2111:11:8","nodeType":"FunctionDefinition","parameters":{"id":1301,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1300,"mutability":"mutable","name":"addr","nameLocation":"2131:4:8","nodeType":"VariableDeclaration","scope":1317,"src":"2123:12:8","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":1299,"name":"address","nodeType":"ElementaryTypeName","src":"2123:7:8","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2122:14:8"},"returnParameters":{"id":1304,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1303,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1317,"src":"2160:13:8","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":1302,"name":"string","nodeType":"ElementaryTypeName","src":"2160:6:8","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"2159:15:8"},"scope":1318,"src":"2102:149:8","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":1319,"src":"188:2065:8","usedErrors":[]}],"src":"101:2153:8"},"id":8},"@openzeppelin/contracts/utils/introspection/ERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/ERC165.sol","exportedSymbols":{"ERC165":[1342],"IERC165":[1354]},"id":1343,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1320,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"99:23:9"},{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","file":"./IERC165.sol","id":1321,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":1343,"sourceUnit":1355,"src":"124:23:9","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":1323,"name":"IERC165","nodeType":"IdentifierPath","referencedDeclaration":1354,"src":"754:7:9"},"id":1324,"nodeType":"InheritanceSpecifier","src":"754:7:9"}],"canonicalName":"ERC165","contractDependencies":[],"contractKind":"contract","documentation":{"id":1322,"nodeType":"StructuredDocumentation","src":"149:576:9","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":1342,"linearizedBaseContracts":[1342,1354],"name":"ERC165","nameLocation":"744:6:9","nodeType":"ContractDefinition","nodes":[{"baseFunctions":[1353],"body":{"id":1340,"nodeType":"Block","src":"920:64:9","statements":[{"expression":{"commonType":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"id":1338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1333,"name":"interfaceId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1327,"src":"937:11:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"arguments":[{"id":1335,"name":"IERC165","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1354,"src":"957:7:9","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IERC165_$1354_$","typeString":"type(contract IERC165)"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_type$_t_contract$_IERC165_$1354_$","typeString":"type(contract IERC165)"}],"id":1334,"name":"type","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-27,"src":"952:4:9","typeDescriptions":{"typeIdentifier":"t_function_metatype_pure$__$returns$__$","typeString":"function () pure"}},"id":1336,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"952:13:9","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_magic_meta_type_t_contract$_IERC165_$1354","typeString":"type(contract IERC165)"}},"id":1337,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"interfaceId","nodeType":"MemberAccess","src":"952:25:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"src":"937:40:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":1332,"id":1339,"nodeType":"Return","src":"930:47:9"}]},"documentation":{"id":1325,"nodeType":"StructuredDocumentation","src":"768:56:9","text":" @dev See {IERC165-supportsInterface}."},"functionSelector":"01ffc9a7","id":1341,"implemented":true,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"838:17:9","nodeType":"FunctionDefinition","overrides":{"id":1329,"nodeType":"OverrideSpecifier","overrides":[],"src":"896:8:9"},"parameters":{"id":1328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1327,"mutability":"mutable","name":"interfaceId","nameLocation":"863:11:9","nodeType":"VariableDeclaration","scope":1341,"src":"856:18:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1326,"name":"bytes4","nodeType":"ElementaryTypeName","src":"856:6:9","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"855:20:9"},"returnParameters":{"id":1332,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1331,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1341,"src":"914:4:9","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1330,"name":"bool","nodeType":"ElementaryTypeName","src":"914:4:9","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"913:6:9"},"scope":1342,"src":"829:155:9","stateMutability":"view","virtual":true,"visibility":"public"}],"scope":1343,"src":"726:260:9","usedErrors":[]}],"src":"99:888:9"},"id":9},"@openzeppelin/contracts/utils/introspection/IERC165.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/introspection/IERC165.sol","exportedSymbols":{"IERC165":[1354]},"id":1355,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1344,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"100:23:10"},{"abstract":false,"baseContracts":[],"canonicalName":"IERC165","contractDependencies":[],"contractKind":"interface","documentation":{"id":1345,"nodeType":"StructuredDocumentation","src":"125:279:10","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":1354,"linearizedBaseContracts":[1354],"name":"IERC165","nameLocation":"415:7:10","nodeType":"ContractDefinition","nodes":[{"documentation":{"id":1346,"nodeType":"StructuredDocumentation","src":"429:340:10","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":1353,"implemented":false,"kind":"function","modifiers":[],"name":"supportsInterface","nameLocation":"783:17:10","nodeType":"FunctionDefinition","parameters":{"id":1349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1348,"mutability":"mutable","name":"interfaceId","nameLocation":"808:11:10","nodeType":"VariableDeclaration","scope":1353,"src":"801:18:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"},"typeName":{"id":1347,"name":"bytes4","nodeType":"ElementaryTypeName","src":"801:6:10","typeDescriptions":{"typeIdentifier":"t_bytes4","typeString":"bytes4"}},"visibility":"internal"}],"src":"800:20:10"},"returnParameters":{"id":1352,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1351,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1353,"src":"844:4:10","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":1350,"name":"bool","nodeType":"ElementaryTypeName","src":"844:4:10","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"843:6:10"},"scope":1354,"src":"774:76:10","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":1355,"src":"405:447:10","usedErrors":[]}],"src":"100:753:10"},"id":10},"@openzeppelin/contracts/utils/math/Math.sol":{"ast":{"absolutePath":"@openzeppelin/contracts/utils/math/Math.sol","exportedSymbols":{"Math":[2219]},"id":2220,"license":"MIT","nodeType":"SourceUnit","nodes":[{"id":1356,"literals":["solidity","^","0.8",".0"],"nodeType":"PragmaDirective","src":"103:23:11"},{"abstract":false,"baseContracts":[],"canonicalName":"Math","contractDependencies":[],"contractKind":"library","documentation":{"id":1357,"nodeType":"StructuredDocumentation","src":"128:73:11","text":" @dev Standard math utilities missing in the Solidity language."},"fullyImplemented":true,"id":2219,"linearizedBaseContracts":[2219],"name":"Math","nameLocation":"210:4:11","nodeType":"ContractDefinition","nodes":[{"canonicalName":"Math.Rounding","id":1361,"members":[{"id":1358,"name":"Down","nameLocation":"245:4:11","nodeType":"EnumValue","src":"245:4:11"},{"id":1359,"name":"Up","nameLocation":"287:2:11","nodeType":"EnumValue","src":"287:2:11"},{"id":1360,"name":"Zero","nameLocation":"318:4:11","nodeType":"EnumValue","src":"318:4:11"}],"name":"Rounding","nameLocation":"226:8:11","nodeType":"EnumDefinition","src":"221:122:11"},{"body":{"id":1378,"nodeType":"Block","src":"480:37:11","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1371,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1364,"src":"497:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":1372,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1366,"src":"501:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"497:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":1375,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1366,"src":"509:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"497:13:11","trueExpression":{"id":1374,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1364,"src":"505:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1370,"id":1377,"nodeType":"Return","src":"490:20:11"}]},"documentation":{"id":1362,"nodeType":"StructuredDocumentation","src":"349:59:11","text":" @dev Returns the largest of two numbers."},"id":1379,"implemented":true,"kind":"function","modifiers":[],"name":"max","nameLocation":"422:3:11","nodeType":"FunctionDefinition","parameters":{"id":1367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1364,"mutability":"mutable","name":"a","nameLocation":"434:1:11","nodeType":"VariableDeclaration","scope":1379,"src":"426:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1363,"name":"uint256","nodeType":"ElementaryTypeName","src":"426:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1366,"mutability":"mutable","name":"b","nameLocation":"445:1:11","nodeType":"VariableDeclaration","scope":1379,"src":"437:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1365,"name":"uint256","nodeType":"ElementaryTypeName","src":"437:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"425:22:11"},"returnParameters":{"id":1370,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1369,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1379,"src":"471:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1368,"name":"uint256","nodeType":"ElementaryTypeName","src":"471:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"470:9:11"},"scope":2219,"src":"413:104:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1396,"nodeType":"Block","src":"655:37:11","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1389,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1382,"src":"672:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1390,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1384,"src":"676:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"672:5:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"id":1393,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1384,"src":"684:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1394,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"672:13:11","trueExpression":{"id":1392,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1382,"src":"680:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1388,"id":1395,"nodeType":"Return","src":"665:20:11"}]},"documentation":{"id":1380,"nodeType":"StructuredDocumentation","src":"523:60:11","text":" @dev Returns the smallest of two numbers."},"id":1397,"implemented":true,"kind":"function","modifiers":[],"name":"min","nameLocation":"597:3:11","nodeType":"FunctionDefinition","parameters":{"id":1385,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1382,"mutability":"mutable","name":"a","nameLocation":"609:1:11","nodeType":"VariableDeclaration","scope":1397,"src":"601:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1381,"name":"uint256","nodeType":"ElementaryTypeName","src":"601:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1384,"mutability":"mutable","name":"b","nameLocation":"620:1:11","nodeType":"VariableDeclaration","scope":1397,"src":"612:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1383,"name":"uint256","nodeType":"ElementaryTypeName","src":"612:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"600:22:11"},"returnParameters":{"id":1388,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1387,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1397,"src":"646:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1386,"name":"uint256","nodeType":"ElementaryTypeName","src":"646:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"645:9:11"},"scope":2219,"src":"588:104:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1419,"nodeType":"Block","src":"876:82:11","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1407,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1400,"src":"931:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"id":1408,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1402,"src":"935:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"931:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1410,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"930:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1411,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1400,"src":"941:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"id":1412,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1402,"src":"945:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"941:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1414,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"940:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"32","id":1415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"950:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"940:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"930:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1406,"id":1418,"nodeType":"Return","src":"923:28:11"}]},"documentation":{"id":1398,"nodeType":"StructuredDocumentation","src":"698:102:11","text":" @dev Returns the average of two numbers. The result is rounded towards\n zero."},"id":1420,"implemented":true,"kind":"function","modifiers":[],"name":"average","nameLocation":"814:7:11","nodeType":"FunctionDefinition","parameters":{"id":1403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1400,"mutability":"mutable","name":"a","nameLocation":"830:1:11","nodeType":"VariableDeclaration","scope":1420,"src":"822:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1399,"name":"uint256","nodeType":"ElementaryTypeName","src":"822:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1402,"mutability":"mutable","name":"b","nameLocation":"841:1:11","nodeType":"VariableDeclaration","scope":1420,"src":"833:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1401,"name":"uint256","nodeType":"ElementaryTypeName","src":"833:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"821:22:11"},"returnParameters":{"id":1406,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1405,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1420,"src":"867:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1404,"name":"uint256","nodeType":"ElementaryTypeName","src":"867:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"866:9:11"},"scope":2219,"src":"805:153:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1444,"nodeType":"Block","src":"1228:123:11","statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1430,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1423,"src":"1316:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1431,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1321:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"1316:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1441,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1439,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1434,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1423,"src":"1330:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":1435,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1334:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1330:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1437,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"1329:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1438,"name":"b","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1425,"src":"1339:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1329:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":1440,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1343:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"1329:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"1316:28:11","trueExpression":{"hexValue":"30","id":1433,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1325:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1429,"id":1443,"nodeType":"Return","src":"1309:35:11"}]},"documentation":{"id":1421,"nodeType":"StructuredDocumentation","src":"964:188:11","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":1445,"implemented":true,"kind":"function","modifiers":[],"name":"ceilDiv","nameLocation":"1166:7:11","nodeType":"FunctionDefinition","parameters":{"id":1426,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1423,"mutability":"mutable","name":"a","nameLocation":"1182:1:11","nodeType":"VariableDeclaration","scope":1445,"src":"1174:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1422,"name":"uint256","nodeType":"ElementaryTypeName","src":"1174:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1425,"mutability":"mutable","name":"b","nameLocation":"1193:1:11","nodeType":"VariableDeclaration","scope":1445,"src":"1185:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1424,"name":"uint256","nodeType":"ElementaryTypeName","src":"1185:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1173:22:11"},"returnParameters":{"id":1429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1428,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1445,"src":"1219:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1427,"name":"uint256","nodeType":"ElementaryTypeName","src":"1219:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1218:9:11"},"scope":2219,"src":"1157:194:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1566,"nodeType":"Block","src":"1795:3797:11","statements":[{"id":1565,"nodeType":"UncheckedBlock","src":"1805:3781:11","statements":[{"assignments":[1458],"declarations":[{"constant":false,"id":1458,"mutability":"mutable","name":"prod0","nameLocation":"2134:5:11","nodeType":"VariableDeclaration","scope":1565,"src":"2126:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1457,"name":"uint256","nodeType":"ElementaryTypeName","src":"2126:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1459,"nodeType":"VariableDeclarationStatement","src":"2126:13:11"},{"assignments":[1461],"declarations":[{"constant":false,"id":1461,"mutability":"mutable","name":"prod1","nameLocation":"2206:5:11","nodeType":"VariableDeclaration","scope":1565,"src":"2198:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1460,"name":"uint256","nodeType":"ElementaryTypeName","src":"2198:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1462,"nodeType":"VariableDeclarationStatement","src":"2198:13:11"},{"AST":{"nodeType":"YulBlock","src":"2278:157:11","statements":[{"nodeType":"YulVariableDeclaration","src":"2296:30:11","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2313:1:11"},{"name":"y","nodeType":"YulIdentifier","src":"2316:1:11"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2323:1:11","type":"","value":"0"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"2319:3:11"},"nodeType":"YulFunctionCall","src":"2319:6:11"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"2306:6:11"},"nodeType":"YulFunctionCall","src":"2306:20:11"},"variables":[{"name":"mm","nodeType":"YulTypedName","src":"2300:2:11","type":""}]},{"nodeType":"YulAssignment","src":"2343:18:11","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"2356:1:11"},{"name":"y","nodeType":"YulIdentifier","src":"2359:1:11"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"2352:3:11"},"nodeType":"YulFunctionCall","src":"2352:9:11"},"variableNames":[{"name":"prod0","nodeType":"YulIdentifier","src":"2343:5:11"}]},{"nodeType":"YulAssignment","src":"2378:43:11","value":{"arguments":[{"arguments":[{"name":"mm","nodeType":"YulIdentifier","src":"2395:2:11"},{"name":"prod0","nodeType":"YulIdentifier","src":"2399:5:11"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2391:3:11"},"nodeType":"YulFunctionCall","src":"2391:14:11"},{"arguments":[{"name":"mm","nodeType":"YulIdentifier","src":"2410:2:11"},{"name":"prod0","nodeType":"YulIdentifier","src":"2414:5:11"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"2407:2:11"},"nodeType":"YulFunctionCall","src":"2407:13:11"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2387:3:11"},"nodeType":"YulFunctionCall","src":"2387:34:11"},"variableNames":[{"name":"prod1","nodeType":"YulIdentifier","src":"2378:5:11"}]}]},"evmVersion":"london","externalReferences":[{"declaration":1458,"isOffset":false,"isSlot":false,"src":"2343:5:11","valueSize":1},{"declaration":1458,"isOffset":false,"isSlot":false,"src":"2399:5:11","valueSize":1},{"declaration":1458,"isOffset":false,"isSlot":false,"src":"2414:5:11","valueSize":1},{"declaration":1461,"isOffset":false,"isSlot":false,"src":"2378:5:11","valueSize":1},{"declaration":1448,"isOffset":false,"isSlot":false,"src":"2313:1:11","valueSize":1},{"declaration":1448,"isOffset":false,"isSlot":false,"src":"2356:1:11","valueSize":1},{"declaration":1450,"isOffset":false,"isSlot":false,"src":"2316:1:11","valueSize":1},{"declaration":1450,"isOffset":false,"isSlot":false,"src":"2359:1:11","valueSize":1}],"id":1463,"nodeType":"InlineAssembly","src":"2269:166:11"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1466,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1464,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1461,"src":"2516:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1465,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2525:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"2516:10:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1472,"nodeType":"IfStatement","src":"2512:75:11","trueBody":{"id":1471,"nodeType":"Block","src":"2528:59:11","statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1467,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1458,"src":"2553:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1468,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"2561:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2553:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1456,"id":1470,"nodeType":"Return","src":"2546:26:11"}]}},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1474,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"2697:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":1475,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1461,"src":"2711:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2697:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":1473,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2689:7:11","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":1477,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2689:28:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":1478,"nodeType":"ExpressionStatement","src":"2689:28:11"},{"assignments":[1480],"declarations":[{"constant":false,"id":1480,"mutability":"mutable","name":"remainder","nameLocation":"2981:9:11","nodeType":"VariableDeclaration","scope":1565,"src":"2973:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1479,"name":"uint256","nodeType":"ElementaryTypeName","src":"2973:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1481,"nodeType":"VariableDeclarationStatement","src":"2973:17:11"},{"AST":{"nodeType":"YulBlock","src":"3013:291:11","statements":[{"nodeType":"YulAssignment","src":"3082:38:11","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"3102:1:11"},{"name":"y","nodeType":"YulIdentifier","src":"3105:1:11"},{"name":"denominator","nodeType":"YulIdentifier","src":"3108:11:11"}],"functionName":{"name":"mulmod","nodeType":"YulIdentifier","src":"3095:6:11"},"nodeType":"YulFunctionCall","src":"3095:25:11"},"variableNames":[{"name":"remainder","nodeType":"YulIdentifier","src":"3082:9:11"}]},{"nodeType":"YulAssignment","src":"3202:41:11","value":{"arguments":[{"name":"prod1","nodeType":"YulIdentifier","src":"3215:5:11"},{"arguments":[{"name":"remainder","nodeType":"YulIdentifier","src":"3225:9:11"},{"name":"prod0","nodeType":"YulIdentifier","src":"3236:5:11"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3222:2:11"},"nodeType":"YulFunctionCall","src":"3222:20:11"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3211:3:11"},"nodeType":"YulFunctionCall","src":"3211:32:11"},"variableNames":[{"name":"prod1","nodeType":"YulIdentifier","src":"3202:5:11"}]},{"nodeType":"YulAssignment","src":"3260:30:11","value":{"arguments":[{"name":"prod0","nodeType":"YulIdentifier","src":"3273:5:11"},{"name":"remainder","nodeType":"YulIdentifier","src":"3280:9:11"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"3269:3:11"},"nodeType":"YulFunctionCall","src":"3269:21:11"},"variableNames":[{"name":"prod0","nodeType":"YulIdentifier","src":"3260:5:11"}]}]},"evmVersion":"london","externalReferences":[{"declaration":1452,"isOffset":false,"isSlot":false,"src":"3108:11:11","valueSize":1},{"declaration":1458,"isOffset":false,"isSlot":false,"src":"3236:5:11","valueSize":1},{"declaration":1458,"isOffset":false,"isSlot":false,"src":"3260:5:11","valueSize":1},{"declaration":1458,"isOffset":false,"isSlot":false,"src":"3273:5:11","valueSize":1},{"declaration":1461,"isOffset":false,"isSlot":false,"src":"3202:5:11","valueSize":1},{"declaration":1461,"isOffset":false,"isSlot":false,"src":"3215:5:11","valueSize":1},{"declaration":1480,"isOffset":false,"isSlot":false,"src":"3082:9:11","valueSize":1},{"declaration":1480,"isOffset":false,"isSlot":false,"src":"3225:9:11","valueSize":1},{"declaration":1480,"isOffset":false,"isSlot":false,"src":"3280:9:11","valueSize":1},{"declaration":1448,"isOffset":false,"isSlot":false,"src":"3102:1:11","valueSize":1},{"declaration":1450,"isOffset":false,"isSlot":false,"src":"3105:1:11","valueSize":1}],"id":1482,"nodeType":"InlineAssembly","src":"3004:300:11"},{"assignments":[1484],"declarations":[{"constant":false,"id":1484,"mutability":"mutable","name":"twos","nameLocation":"3619:4:11","nodeType":"VariableDeclaration","scope":1565,"src":"3611:12:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1483,"name":"uint256","nodeType":"ElementaryTypeName","src":"3611:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1492,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1491,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1485,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"3626:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"&","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1489,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1487,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"~","prefix":true,"src":"3641:12:11","subExpression":{"id":1486,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"3642:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":1488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3656:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"3641:16:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1490,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"3640:18:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3626:32:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3611:47:11"},{"AST":{"nodeType":"YulBlock","src":"3681:362:11","statements":[{"nodeType":"YulAssignment","src":"3746:37:11","value":{"arguments":[{"name":"denominator","nodeType":"YulIdentifier","src":"3765:11:11"},{"name":"twos","nodeType":"YulIdentifier","src":"3778:4:11"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3761:3:11"},"nodeType":"YulFunctionCall","src":"3761:22:11"},"variableNames":[{"name":"denominator","nodeType":"YulIdentifier","src":"3746:11:11"}]},{"nodeType":"YulAssignment","src":"3850:25:11","value":{"arguments":[{"name":"prod0","nodeType":"YulIdentifier","src":"3863:5:11"},{"name":"twos","nodeType":"YulIdentifier","src":"3870:4:11"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"3859:3:11"},"nodeType":"YulFunctionCall","src":"3859:16:11"},"variableNames":[{"name":"prod0","nodeType":"YulIdentifier","src":"3850:5:11"}]},{"nodeType":"YulAssignment","src":"3990:39:11","value":{"arguments":[{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"4010:1:11","type":"","value":"0"},{"name":"twos","nodeType":"YulIdentifier","src":"4013:4:11"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"4006:3:11"},"nodeType":"YulFunctionCall","src":"4006:12:11"},{"name":"twos","nodeType":"YulIdentifier","src":"4020:4:11"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"4002:3:11"},"nodeType":"YulFunctionCall","src":"4002:23:11"},{"kind":"number","nodeType":"YulLiteral","src":"4027:1:11","type":"","value":"1"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3998:3:11"},"nodeType":"YulFunctionCall","src":"3998:31:11"},"variableNames":[{"name":"twos","nodeType":"YulIdentifier","src":"3990:4:11"}]}]},"evmVersion":"london","externalReferences":[{"declaration":1452,"isOffset":false,"isSlot":false,"src":"3746:11:11","valueSize":1},{"declaration":1452,"isOffset":false,"isSlot":false,"src":"3765:11:11","valueSize":1},{"declaration":1458,"isOffset":false,"isSlot":false,"src":"3850:5:11","valueSize":1},{"declaration":1458,"isOffset":false,"isSlot":false,"src":"3863:5:11","valueSize":1},{"declaration":1484,"isOffset":false,"isSlot":false,"src":"3778:4:11","valueSize":1},{"declaration":1484,"isOffset":false,"isSlot":false,"src":"3870:4:11","valueSize":1},{"declaration":1484,"isOffset":false,"isSlot":false,"src":"3990:4:11","valueSize":1},{"declaration":1484,"isOffset":false,"isSlot":false,"src":"4013:4:11","valueSize":1},{"declaration":1484,"isOffset":false,"isSlot":false,"src":"4020:4:11","valueSize":1}],"id":1493,"nodeType":"InlineAssembly","src":"3672:371:11"},{"expression":{"id":1498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1494,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1458,"src":"4109:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"|=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1495,"name":"prod1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1461,"src":"4118:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1496,"name":"twos","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1484,"src":"4126:4:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4118:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4109:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1499,"nodeType":"ExpressionStatement","src":"4109:21:11"},{"assignments":[1501],"declarations":[{"constant":false,"id":1501,"mutability":"mutable","name":"inverse","nameLocation":"4456:7:11","nodeType":"VariableDeclaration","scope":1565,"src":"4448:15:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1500,"name":"uint256","nodeType":"ElementaryTypeName","src":"4448:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1508,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"33","id":1502,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4467:1:11","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1503,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"4471:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4467:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1505,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"4466:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"^","rightExpression":{"hexValue":"32","id":1506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4486:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"4466:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4448:39:11"},{"expression":{"id":1515,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1509,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4704:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1514,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1510,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4715:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1511,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"4719:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1512,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4733:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4719:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4715:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4704:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1516,"nodeType":"ExpressionStatement","src":"4704:36:11"},{"expression":{"id":1523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1517,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4773:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1522,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4784:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1519,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"4788:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1520,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4802:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4788:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4784:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4773:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1524,"nodeType":"ExpressionStatement","src":"4773:36:11"},{"expression":{"id":1531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1525,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4843:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1526,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4854:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1527,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"4858:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1528,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4872:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4858:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4854:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4843:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1532,"nodeType":"ExpressionStatement","src":"4843:36:11"},{"expression":{"id":1539,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1533,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4913:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1538,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4924:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1535,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"4928:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1536,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4942:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4928:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4924:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4913:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1540,"nodeType":"ExpressionStatement","src":"4913:36:11"},{"expression":{"id":1547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1541,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"4983:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1546,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1542,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4994:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1543,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"4998:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1544,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"5012:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4998:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4994:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4983:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1548,"nodeType":"ExpressionStatement","src":"4983:36:11"},{"expression":{"id":1555,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1549,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"5054:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"*=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":1550,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5065:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1551,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1452,"src":"5069:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1552,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"5083:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5069:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5065:25:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5054:36:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1556,"nodeType":"ExpressionStatement","src":"5054:36:11"},{"expression":{"id":1561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1557,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"5524:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1560,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1558,"name":"prod0","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1458,"src":"5533:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1559,"name":"inverse","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1501,"src":"5541:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5533:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5524:24:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1562,"nodeType":"ExpressionStatement","src":"5524:24:11"},{"expression":{"id":1563,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1455,"src":"5569:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1456,"id":1564,"nodeType":"Return","src":"5562:13:11"}]}]},"documentation":{"id":1446,"nodeType":"StructuredDocumentation","src":"1357:305:11","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":1567,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"1676:6:11","nodeType":"FunctionDefinition","parameters":{"id":1453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1448,"mutability":"mutable","name":"x","nameLocation":"1700:1:11","nodeType":"VariableDeclaration","scope":1567,"src":"1692:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1447,"name":"uint256","nodeType":"ElementaryTypeName","src":"1692:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1450,"mutability":"mutable","name":"y","nameLocation":"1719:1:11","nodeType":"VariableDeclaration","scope":1567,"src":"1711:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1449,"name":"uint256","nodeType":"ElementaryTypeName","src":"1711:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1452,"mutability":"mutable","name":"denominator","nameLocation":"1738:11:11","nodeType":"VariableDeclaration","scope":1567,"src":"1730:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1451,"name":"uint256","nodeType":"ElementaryTypeName","src":"1730:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1682:73:11"},"returnParameters":{"id":1456,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1455,"mutability":"mutable","name":"result","nameLocation":"1787:6:11","nodeType":"VariableDeclaration","scope":1567,"src":"1779:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1454,"name":"uint256","nodeType":"ElementaryTypeName","src":"1779:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"1778:16:11"},"scope":2219,"src":"1667:3925:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1610,"nodeType":"Block","src":"5872:189:11","statements":[{"assignments":[1583],"declarations":[{"constant":false,"id":1583,"mutability":"mutable","name":"result","nameLocation":"5890:6:11","nodeType":"VariableDeclaration","scope":1610,"src":"5882:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1582,"name":"uint256","nodeType":"ElementaryTypeName","src":"5882:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1589,"initialValue":{"arguments":[{"id":1585,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1570,"src":"5906:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1586,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"5909:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1587,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1574,"src":"5912:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1584,"name":"mulDiv","nodeType":"Identifier","overloadedDeclarations":[1567,1611],"referencedDeclaration":1567,"src":"5899:6:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1588,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5899:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5882:42:11"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"id":1593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1590,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1577,"src":"5938:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":1591,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1361,"src":"5950:8:11","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$1361_$","typeString":"type(enum Math.Rounding)"}},"id":1592,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":1359,"src":"5950:11:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"src":"5938:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1600,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1595,"name":"x","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1570,"src":"5972:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1596,"name":"y","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1572,"src":"5975:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":1597,"name":"denominator","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1574,"src":"5978:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1594,"name":"mulmod","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-16,"src":"5965:6:11","typeDescriptions":{"typeIdentifier":"t_function_mulmod_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256,uint256) pure returns (uint256)"}},"id":1598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5965:25:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1599,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5993:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5965:29:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"5938:56:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1607,"nodeType":"IfStatement","src":"5934:98:11","trueBody":{"id":1606,"nodeType":"Block","src":"5996:36:11","statements":[{"expression":{"id":1604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1602,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1583,"src":"6010:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":1603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6020:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6010:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1605,"nodeType":"ExpressionStatement","src":"6010:11:11"}]}},{"expression":{"id":1608,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1583,"src":"6048:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1581,"id":1609,"nodeType":"Return","src":"6041:13:11"}]},"documentation":{"id":1568,"nodeType":"StructuredDocumentation","src":"5598:121:11","text":" @notice Calculates x * y / denominator with full precision, following the selected rounding direction."},"id":1611,"implemented":true,"kind":"function","modifiers":[],"name":"mulDiv","nameLocation":"5733:6:11","nodeType":"FunctionDefinition","parameters":{"id":1578,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1570,"mutability":"mutable","name":"x","nameLocation":"5757:1:11","nodeType":"VariableDeclaration","scope":1611,"src":"5749:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1569,"name":"uint256","nodeType":"ElementaryTypeName","src":"5749:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1572,"mutability":"mutable","name":"y","nameLocation":"5776:1:11","nodeType":"VariableDeclaration","scope":1611,"src":"5768:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1571,"name":"uint256","nodeType":"ElementaryTypeName","src":"5768:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1574,"mutability":"mutable","name":"denominator","nameLocation":"5795:11:11","nodeType":"VariableDeclaration","scope":1611,"src":"5787:19:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1573,"name":"uint256","nodeType":"ElementaryTypeName","src":"5787:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1577,"mutability":"mutable","name":"rounding","nameLocation":"5825:8:11","nodeType":"VariableDeclaration","scope":1611,"src":"5816:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"typeName":{"id":1576,"nodeType":"UserDefinedTypeName","pathNode":{"id":1575,"name":"Rounding","nodeType":"IdentifierPath","referencedDeclaration":1361,"src":"5816:8:11"},"referencedDeclaration":1361,"src":"5816:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"5739:100:11"},"returnParameters":{"id":1581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1580,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1611,"src":"5863:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1579,"name":"uint256","nodeType":"ElementaryTypeName","src":"5863:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5862:9:11"},"scope":2219,"src":"5724:337:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1722,"nodeType":"Block","src":"6337:1585:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1619,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"6351:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":1620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6356:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6351:6:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1625,"nodeType":"IfStatement","src":"6347:45:11","trueBody":{"id":1624,"nodeType":"Block","src":"6359:33:11","statements":[{"expression":{"hexValue":"30","id":1622,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6380:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"functionReturnParameters":1618,"id":1623,"nodeType":"Return","src":"6373:8:11"}]}},{"assignments":[1627],"declarations":[{"constant":false,"id":1627,"mutability":"mutable","name":"result","nameLocation":"7079:6:11","nodeType":"VariableDeclaration","scope":1722,"src":"7071:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1626,"name":"uint256","nodeType":"ElementaryTypeName","src":"7071:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1636,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1635,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":1628,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7088:1:11","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":1633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":1630,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7099:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1629,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[1891,1927],"referencedDeclaration":1891,"src":"7094:4:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7094:7:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7105:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7094:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1634,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7093:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7088:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"7071:36:11"},{"id":1721,"nodeType":"UncheckedBlock","src":"7508:408:11","statements":[{"expression":{"id":1646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1637,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7532:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1638,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7542:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1641,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1639,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7551:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1640,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7555:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7551:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7542:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1643,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7541:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1644,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7566:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7541:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7532:35:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1647,"nodeType":"ExpressionStatement","src":"7532:35:11"},{"expression":{"id":1657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1648,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7581:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1653,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1649,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7591:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1650,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7600:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1651,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7604:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7600:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7591:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1654,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7590:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1655,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7615:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7590:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7581:35:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1658,"nodeType":"ExpressionStatement","src":"7581:35:11"},{"expression":{"id":1668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1659,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7630:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1660,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7640:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1661,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7649:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1662,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7653:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7649:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7640:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1665,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7639:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1666,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7664:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7639:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7630:35:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1669,"nodeType":"ExpressionStatement","src":"7630:35:11"},{"expression":{"id":1679,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1670,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7679:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1671,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7689:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1672,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7698:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1673,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7702:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7698:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7689:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1676,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7688:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1677,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7713:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7688:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7679:35:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1680,"nodeType":"ExpressionStatement","src":"7679:35:11"},{"expression":{"id":1690,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1681,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7728:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1689,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1682,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7738:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1685,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1683,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7747:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1684,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7751:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7747:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7738:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1687,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7737:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1688,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7762:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7737:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7728:35:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1691,"nodeType":"ExpressionStatement","src":"7728:35:11"},{"expression":{"id":1701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1692,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7777:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1693,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7787:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1696,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1694,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7796:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1695,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7800:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7796:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7787:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1698,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7786:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1699,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7811:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7786:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7777:35:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1702,"nodeType":"ExpressionStatement","src":"7777:35:11"},{"expression":{"id":1712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1703,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7826:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1704,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7836:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1707,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1705,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7845:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1706,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7849:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7845:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7836:19:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":1709,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"7835:21:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1710,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7860:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7835:26:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7826:35:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1713,"nodeType":"ExpressionStatement","src":"7826:35:11"},{"expression":{"arguments":[{"id":1715,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7886:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1716,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1614,"src":"7894:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"id":1717,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1627,"src":"7898:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7894:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1714,"name":"min","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1397,"src":"7882:3:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":1719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7882:23:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1618,"id":1720,"nodeType":"Return","src":"7875:30:11"}]}]},"documentation":{"id":1612,"nodeType":"StructuredDocumentation","src":"6067:208:11","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":1723,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"6289:4:11","nodeType":"FunctionDefinition","parameters":{"id":1615,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1614,"mutability":"mutable","name":"a","nameLocation":"6302:1:11","nodeType":"VariableDeclaration","scope":1723,"src":"6294:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1613,"name":"uint256","nodeType":"ElementaryTypeName","src":"6294:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6293:11:11"},"returnParameters":{"id":1618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1617,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1723,"src":"6328:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1616,"name":"uint256","nodeType":"ElementaryTypeName","src":"6328:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6327:9:11"},"scope":2219,"src":"6280:1642:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1758,"nodeType":"Block","src":"8098:161:11","statements":[{"id":1757,"nodeType":"UncheckedBlock","src":"8108:145:11","statements":[{"assignments":[1735],"declarations":[{"constant":false,"id":1735,"mutability":"mutable","name":"result","nameLocation":"8140:6:11","nodeType":"VariableDeclaration","scope":1757,"src":"8132:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1734,"name":"uint256","nodeType":"ElementaryTypeName","src":"8132:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1739,"initialValue":{"arguments":[{"id":1737,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1726,"src":"8154:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1736,"name":"sqrt","nodeType":"Identifier","overloadedDeclarations":[1723,1759],"referencedDeclaration":1723,"src":"8149:4:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1738,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"8149:7:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8132:24:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1740,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1735,"src":"8177:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"id":1744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1741,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1729,"src":"8187:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":1742,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1361,"src":"8199:8:11","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$1361_$","typeString":"type(enum Math.Rounding)"}},"id":1743,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":1359,"src":"8199:11:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"src":"8187:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1747,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1745,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1735,"src":"8214:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":1746,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1735,"src":"8223:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8214:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1748,"name":"a","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1726,"src":"8232:1:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8214:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"8187:46:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":1752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8240:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":1753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8187:54:11","trueExpression":{"hexValue":"31","id":1751,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8236:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":1754,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8186:56:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"8177:65:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1733,"id":1756,"nodeType":"Return","src":"8170:72:11"}]}]},"documentation":{"id":1724,"nodeType":"StructuredDocumentation","src":"7928:89:11","text":" @notice Calculates sqrt(a), following the selected rounding direction."},"id":1759,"implemented":true,"kind":"function","modifiers":[],"name":"sqrt","nameLocation":"8031:4:11","nodeType":"FunctionDefinition","parameters":{"id":1730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1726,"mutability":"mutable","name":"a","nameLocation":"8044:1:11","nodeType":"VariableDeclaration","scope":1759,"src":"8036:9:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1725,"name":"uint256","nodeType":"ElementaryTypeName","src":"8036:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1729,"mutability":"mutable","name":"rounding","nameLocation":"8056:8:11","nodeType":"VariableDeclaration","scope":1759,"src":"8047:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"typeName":{"id":1728,"nodeType":"UserDefinedTypeName","pathNode":{"id":1727,"name":"Rounding","nodeType":"IdentifierPath","referencedDeclaration":1361,"src":"8047:8:11"},"referencedDeclaration":1361,"src":"8047:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"8035:30:11"},"returnParameters":{"id":1733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1759,"src":"8089:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1731,"name":"uint256","nodeType":"ElementaryTypeName","src":"8089:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8088:9:11"},"scope":2219,"src":"8022:237:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1890,"nodeType":"Block","src":"8444:922:11","statements":[{"assignments":[1768],"declarations":[{"constant":false,"id":1768,"mutability":"mutable","name":"result","nameLocation":"8462:6:11","nodeType":"VariableDeclaration","scope":1890,"src":"8454:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1767,"name":"uint256","nodeType":"ElementaryTypeName","src":"8454:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1770,"initialValue":{"hexValue":"30","id":1769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8471:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"8454:18:11"},{"id":1887,"nodeType":"UncheckedBlock","src":"8482:855:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1773,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1771,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8510:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":1772,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8519:3:11","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8510:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8525:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8510:16:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1785,"nodeType":"IfStatement","src":"8506:99:11","trueBody":{"id":1784,"nodeType":"Block","src":"8528:77:11","statements":[{"expression":{"id":1778,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1776,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8546:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":1777,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8556:3:11","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8546:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1779,"nodeType":"ExpressionStatement","src":"8546:13:11"},{"expression":{"id":1782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1780,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"8577:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"313238","id":1781,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8587:3:11","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"8577:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1783,"nodeType":"ExpressionStatement","src":"8577:13:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1788,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1786,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8622:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":1787,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8631:2:11","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8622:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8636:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8622:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1800,"nodeType":"IfStatement","src":"8618:96:11","trueBody":{"id":1799,"nodeType":"Block","src":"8639:75:11","statements":[{"expression":{"id":1793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1791,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8657:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":1792,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8667:2:11","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8657:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1794,"nodeType":"ExpressionStatement","src":"8657:12:11"},{"expression":{"id":1797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1795,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"8687:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":1796,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8697:2:11","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"8687:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1798,"nodeType":"ExpressionStatement","src":"8687:12:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1801,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8731:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":1802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8740:2:11","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8731:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1804,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8745:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8731:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1815,"nodeType":"IfStatement","src":"8727:96:11","trueBody":{"id":1814,"nodeType":"Block","src":"8748:75:11","statements":[{"expression":{"id":1808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1806,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8766:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":1807,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8776:2:11","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8766:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1809,"nodeType":"ExpressionStatement","src":"8766:12:11"},{"expression":{"id":1812,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1810,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"8796:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":1811,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8806:2:11","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"8796:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1813,"nodeType":"ExpressionStatement","src":"8796:12:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1820,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1818,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1816,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8840:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":1817,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8849:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"8840:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1819,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8854:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8840:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1830,"nodeType":"IfStatement","src":"8836:96:11","trueBody":{"id":1829,"nodeType":"Block","src":"8857:75:11","statements":[{"expression":{"id":1823,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1821,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8875:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":1822,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8885:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"8875:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1824,"nodeType":"ExpressionStatement","src":"8875:12:11"},{"expression":{"id":1827,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1825,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"8905:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":1826,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8915:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"8905:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1828,"nodeType":"ExpressionStatement","src":"8905:12:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1835,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1831,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8949:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":1832,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8958:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"8949:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1834,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8962:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8949:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1845,"nodeType":"IfStatement","src":"8945:93:11","trueBody":{"id":1844,"nodeType":"Block","src":"8965:73:11","statements":[{"expression":{"id":1838,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1836,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"8983:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"38","id":1837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8993:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"8983:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1839,"nodeType":"ExpressionStatement","src":"8983:11:11"},{"expression":{"id":1842,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1840,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"9012:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":1841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9022:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"9012:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1843,"nodeType":"ExpressionStatement","src":"9012:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1850,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1848,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1846,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"9055:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"34","id":1847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9064:1:11","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9055:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1849,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9068:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9055:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1860,"nodeType":"IfStatement","src":"9051:93:11","trueBody":{"id":1859,"nodeType":"Block","src":"9071:73:11","statements":[{"expression":{"id":1853,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1851,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"9089:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"34","id":1852,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9099:1:11","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9089:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1854,"nodeType":"ExpressionStatement","src":"9089:11:11"},{"expression":{"id":1857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1855,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"9118:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":1856,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9128:1:11","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"9118:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1858,"nodeType":"ExpressionStatement","src":"9118:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1863,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1861,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"9161:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"32","id":1862,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9170:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9161:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1864,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9174:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9161:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1875,"nodeType":"IfStatement","src":"9157:93:11","trueBody":{"id":1874,"nodeType":"Block","src":"9177:73:11","statements":[{"expression":{"id":1868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1866,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"9195:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"32","id":1867,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9205:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9195:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1869,"nodeType":"ExpressionStatement","src":"9195:11:11"},{"expression":{"id":1872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1870,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"9224:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":1871,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9234:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"9224:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1873,"nodeType":"ExpressionStatement","src":"9224:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1876,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1762,"src":"9267:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"31","id":1877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9276:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9267:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":1879,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9280:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9267:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1886,"nodeType":"IfStatement","src":"9263:64:11","trueBody":{"id":1885,"nodeType":"Block","src":"9283:44:11","statements":[{"expression":{"id":1883,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1881,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"9301:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":1882,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9311:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9301:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1884,"nodeType":"ExpressionStatement","src":"9301:11:11"}]}}]},{"expression":{"id":1888,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1768,"src":"9353:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1766,"id":1889,"nodeType":"Return","src":"9346:13:11"}]},"documentation":{"id":1760,"nodeType":"StructuredDocumentation","src":"8265:113:11","text":" @dev Return the log in base 2, rounded down, of a positive value.\n Returns 0 if given 0."},"id":1891,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"8392:4:11","nodeType":"FunctionDefinition","parameters":{"id":1763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1762,"mutability":"mutable","name":"value","nameLocation":"8405:5:11","nodeType":"VariableDeclaration","scope":1891,"src":"8397:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1761,"name":"uint256","nodeType":"ElementaryTypeName","src":"8397:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8396:15:11"},"returnParameters":{"id":1766,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1765,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1891,"src":"8435:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1764,"name":"uint256","nodeType":"ElementaryTypeName","src":"8435:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8434:9:11"},"scope":2219,"src":"8383:983:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":1926,"nodeType":"Block","src":"9599:165:11","statements":[{"id":1925,"nodeType":"UncheckedBlock","src":"9609:149:11","statements":[{"assignments":[1903],"declarations":[{"constant":false,"id":1903,"mutability":"mutable","name":"result","nameLocation":"9641:6:11","nodeType":"VariableDeclaration","scope":1925,"src":"9633:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1902,"name":"uint256","nodeType":"ElementaryTypeName","src":"9633:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1907,"initialValue":{"arguments":[{"id":1905,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1894,"src":"9655:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":1904,"name":"log2","nodeType":"Identifier","overloadedDeclarations":[1891,1927],"referencedDeclaration":1891,"src":"9650:4:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":1906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"9650:11:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9633:28:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1908,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1903,"src":"9682:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":1918,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"id":1912,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1909,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1897,"src":"9692:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":1910,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1361,"src":"9704:8:11","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$1361_$","typeString":"type(enum Math.Rounding)"}},"id":1911,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":1359,"src":"9704:11:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"src":"9692:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":1913,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9719:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"nodeType":"BinaryOperation","operator":"<<","rightExpression":{"id":1914,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1903,"src":"9724:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9719:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":1916,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1894,"src":"9733:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9719:19:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"9692:46:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":1920,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9745:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":1921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9692:54:11","trueExpression":{"hexValue":"31","id":1919,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9741:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":1922,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9691:56:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"9682:65:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1901,"id":1924,"nodeType":"Return","src":"9675:72:11"}]}]},"documentation":{"id":1892,"nodeType":"StructuredDocumentation","src":"9372:142:11","text":" @dev Return the log in base 2, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":1927,"implemented":true,"kind":"function","modifiers":[],"name":"log2","nameLocation":"9528:4:11","nodeType":"FunctionDefinition","parameters":{"id":1898,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1894,"mutability":"mutable","name":"value","nameLocation":"9541:5:11","nodeType":"VariableDeclaration","scope":1927,"src":"9533:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1893,"name":"uint256","nodeType":"ElementaryTypeName","src":"9533:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":1897,"mutability":"mutable","name":"rounding","nameLocation":"9557:8:11","nodeType":"VariableDeclaration","scope":1927,"src":"9548:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"typeName":{"id":1896,"nodeType":"UserDefinedTypeName","pathNode":{"id":1895,"name":"Rounding","nodeType":"IdentifierPath","referencedDeclaration":1361,"src":"9548:8:11"},"referencedDeclaration":1361,"src":"9548:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"9532:34:11"},"returnParameters":{"id":1901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1900,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":1927,"src":"9590:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1899,"name":"uint256","nodeType":"ElementaryTypeName","src":"9590:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9589:9:11"},"scope":2219,"src":"9519:245:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2055,"nodeType":"Block","src":"9951:828:11","statements":[{"assignments":[1936],"declarations":[{"constant":false,"id":1936,"mutability":"mutable","name":"result","nameLocation":"9969:6:11","nodeType":"VariableDeclaration","scope":2055,"src":"9961:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1935,"name":"uint256","nodeType":"ElementaryTypeName","src":"9961:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":1938,"initialValue":{"hexValue":"30","id":1937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9978:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"9961:18:11"},{"id":2052,"nodeType":"UncheckedBlock","src":"9989:761:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1939,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10017:5:11","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":1942,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1940,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10026:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":1941,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10030:2:11","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10026:6:11","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"10017:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1955,"nodeType":"IfStatement","src":"10013:99:11","trueBody":{"id":1954,"nodeType":"Block","src":"10034:78:11","statements":[{"expression":{"id":1948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1944,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10052:5:11","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":1947,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10061:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3634","id":1946,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10065:2:11","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10061:6:11","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000000000000000000000000000000000000000000000000000_by_1","typeString":"int_const 1000...(57 digits omitted)...0000"}},"src":"10052:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1949,"nodeType":"ExpressionStatement","src":"10052:15:11"},{"expression":{"id":1952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1950,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1936,"src":"10085:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3634","id":1951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10095:2:11","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"10085:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1953,"nodeType":"ExpressionStatement","src":"10085:12:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1956,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10129:5:11","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":1959,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1957,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10138:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":1958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10142:2:11","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10138:6:11","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"10129:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1972,"nodeType":"IfStatement","src":"10125:99:11","trueBody":{"id":1971,"nodeType":"Block","src":"10146:78:11","statements":[{"expression":{"id":1965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1961,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10164:5:11","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":1964,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1962,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10173:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3332","id":1963,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10177:2:11","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10173:6:11","typeDescriptions":{"typeIdentifier":"t_rational_100000000000000000000000000000000_by_1","typeString":"int_const 1000...(25 digits omitted)...0000"}},"src":"10164:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1966,"nodeType":"ExpressionStatement","src":"10164:15:11"},{"expression":{"id":1969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1967,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1936,"src":"10197:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3332","id":1968,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10207:2:11","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"10197:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1970,"nodeType":"ExpressionStatement","src":"10197:12:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1973,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10241:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":1976,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1974,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10250:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":1975,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10254:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10250:6:11","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"10241:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":1989,"nodeType":"IfStatement","src":"10237:99:11","trueBody":{"id":1988,"nodeType":"Block","src":"10258:78:11","statements":[{"expression":{"id":1982,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1978,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10276:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"},"id":1981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1979,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10285:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"3136","id":1980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10289:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10285:6:11","typeDescriptions":{"typeIdentifier":"t_rational_10000000000000000_by_1","typeString":"int_const 10000000000000000"}},"src":"10276:15:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1983,"nodeType":"ExpressionStatement","src":"10276:15:11"},{"expression":{"id":1986,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1984,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1936,"src":"10309:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":1985,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10319:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"10309:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":1987,"nodeType":"ExpressionStatement","src":"10309:12:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":1994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":1990,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10353:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":1993,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10362:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":1992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10366:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10362:5:11","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"10353:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2006,"nodeType":"IfStatement","src":"10349:96:11","trueBody":{"id":2005,"nodeType":"Block","src":"10369:76:11","statements":[{"expression":{"id":1999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":1995,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10387:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"},"id":1998,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":1996,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10396:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"38","id":1997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10400:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10396:5:11","typeDescriptions":{"typeIdentifier":"t_rational_100000000_by_1","typeString":"int_const 100000000"}},"src":"10387:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2000,"nodeType":"ExpressionStatement","src":"10387:14:11"},{"expression":{"id":2003,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2001,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1936,"src":"10419:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":2002,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10429:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"10419:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2004,"nodeType":"ExpressionStatement","src":"10419:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2007,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10462:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":2010,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":2008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10471:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":2009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10475:1:11","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10471:5:11","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"10462:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2023,"nodeType":"IfStatement","src":"10458:96:11","trueBody":{"id":2022,"nodeType":"Block","src":"10478:76:11","statements":[{"expression":{"id":2016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2012,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10496:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"},"id":2015,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":2013,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10505:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"34","id":2014,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10509:1:11","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10505:5:11","typeDescriptions":{"typeIdentifier":"t_rational_10000_by_1","typeString":"int_const 10000"}},"src":"10496:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2017,"nodeType":"ExpressionStatement","src":"10496:14:11"},{"expression":{"id":2020,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2018,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1936,"src":"10528:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":2019,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10538:1:11","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"10528:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2021,"nodeType":"ExpressionStatement","src":"10528:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2024,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10571:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":2027,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":2025,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10580:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":2026,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10584:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10580:5:11","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"10571:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2040,"nodeType":"IfStatement","src":"10567:96:11","trueBody":{"id":2039,"nodeType":"Block","src":"10587:76:11","statements":[{"expression":{"id":2033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2029,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10605:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"/=","rightHandSide":{"commonType":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"},"id":2032,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":2030,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10614:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"32","id":2031,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10618:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10614:5:11","typeDescriptions":{"typeIdentifier":"t_rational_100_by_1","typeString":"int_const 100"}},"src":"10605:14:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2034,"nodeType":"ExpressionStatement","src":"10605:14:11"},{"expression":{"id":2037,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2035,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1936,"src":"10637:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":2036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10647:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"10637:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2038,"nodeType":"ExpressionStatement","src":"10637:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2045,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2041,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1930,"src":"10680:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"id":2044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":2042,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10689:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"hexValue":"31","id":2043,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10693:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10689:5:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"}},"src":"10680:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2051,"nodeType":"IfStatement","src":"10676:64:11","trueBody":{"id":2050,"nodeType":"Block","src":"10696:44:11","statements":[{"expression":{"id":2048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2046,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1936,"src":"10714:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":2047,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10724:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10714:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2049,"nodeType":"ExpressionStatement","src":"10714:11:11"}]}}]},{"expression":{"id":2053,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1936,"src":"10766:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":1934,"id":2054,"nodeType":"Return","src":"10759:13:11"}]},"documentation":{"id":1928,"nodeType":"StructuredDocumentation","src":"9770:114:11","text":" @dev Return the log in base 10, rounded down, of a positive value.\n Returns 0 if given 0."},"id":2056,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"9898:5:11","nodeType":"FunctionDefinition","parameters":{"id":1931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1930,"mutability":"mutable","name":"value","nameLocation":"9912:5:11","nodeType":"VariableDeclaration","scope":2056,"src":"9904:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1929,"name":"uint256","nodeType":"ElementaryTypeName","src":"9904:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9903:15:11"},"returnParameters":{"id":1934,"nodeType":"ParameterList","parameters":[{"constant":false,"id":1933,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2056,"src":"9942:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":1932,"name":"uint256","nodeType":"ElementaryTypeName","src":"9942:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9941:9:11"},"scope":2219,"src":"9889:890:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2091,"nodeType":"Block","src":"11014:165:11","statements":[{"id":2090,"nodeType":"UncheckedBlock","src":"11024:149:11","statements":[{"assignments":[2068],"declarations":[{"constant":false,"id":2068,"mutability":"mutable","name":"result","nameLocation":"11056:6:11","nodeType":"VariableDeclaration","scope":2090,"src":"11048:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2067,"name":"uint256","nodeType":"ElementaryTypeName","src":"11048:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2072,"initialValue":{"arguments":[{"id":2070,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2059,"src":"11071:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2069,"name":"log10","nodeType":"Identifier","overloadedDeclarations":[2056,2092],"referencedDeclaration":2056,"src":"11065:5:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":2071,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"11065:12:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11048:29:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2073,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2068,"src":"11098:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"id":2077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2074,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2062,"src":"11108:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":2075,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1361,"src":"11120:8:11","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$1361_$","typeString":"type(enum Math.Rounding)"}},"id":2076,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":1359,"src":"11120:11:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"src":"11108:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2082,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":2078,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11135:2:11","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"id":2079,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2068,"src":"11139:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11135:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2081,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2059,"src":"11148:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11135:18:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"11108:45:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":2085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11160:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":2086,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"11108:53:11","trueExpression":{"hexValue":"31","id":2084,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11156:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":2087,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11107:55:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"11098:64:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2066,"id":2089,"nodeType":"Return","src":"11091:71:11"}]}]},"documentation":{"id":2057,"nodeType":"StructuredDocumentation","src":"10785:143:11","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":2092,"implemented":true,"kind":"function","modifiers":[],"name":"log10","nameLocation":"10942:5:11","nodeType":"FunctionDefinition","parameters":{"id":2063,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2059,"mutability":"mutable","name":"value","nameLocation":"10956:5:11","nodeType":"VariableDeclaration","scope":2092,"src":"10948:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2058,"name":"uint256","nodeType":"ElementaryTypeName","src":"10948:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2062,"mutability":"mutable","name":"rounding","nameLocation":"10972:8:11","nodeType":"VariableDeclaration","scope":2092,"src":"10963:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"typeName":{"id":2061,"nodeType":"UserDefinedTypeName","pathNode":{"id":2060,"name":"Rounding","nodeType":"IdentifierPath","referencedDeclaration":1361,"src":"10963:8:11"},"referencedDeclaration":1361,"src":"10963:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"10947:34:11"},"returnParameters":{"id":2066,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2065,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2092,"src":"11005:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2064,"name":"uint256","nodeType":"ElementaryTypeName","src":"11005:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11004:9:11"},"scope":2219,"src":"10933:246:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2178,"nodeType":"Block","src":"11493:600:11","statements":[{"assignments":[2101],"declarations":[{"constant":false,"id":2101,"mutability":"mutable","name":"result","nameLocation":"11511:6:11","nodeType":"VariableDeclaration","scope":2178,"src":"11503:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2100,"name":"uint256","nodeType":"ElementaryTypeName","src":"11503:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2103,"initialValue":{"hexValue":"30","id":2102,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11520:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11503:18:11"},{"id":2175,"nodeType":"UncheckedBlock","src":"11531:533:11","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2106,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2104,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11559:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"313238","id":2105,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11568:3:11","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"11559:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11574:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11559:16:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2118,"nodeType":"IfStatement","src":"11555:98:11","trueBody":{"id":2117,"nodeType":"Block","src":"11577:76:11","statements":[{"expression":{"id":2111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2109,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11595:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"313238","id":2110,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11605:3:11","typeDescriptions":{"typeIdentifier":"t_rational_128_by_1","typeString":"int_const 128"},"value":"128"},"src":"11595:13:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2112,"nodeType":"ExpressionStatement","src":"11595:13:11"},{"expression":{"id":2115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2113,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2101,"src":"11626:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"3136","id":2114,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11636:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11626:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2116,"nodeType":"ExpressionStatement","src":"11626:12:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2119,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11670:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3634","id":2120,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11679:2:11","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11670:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2122,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11684:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11670:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2133,"nodeType":"IfStatement","src":"11666:95:11","trueBody":{"id":2132,"nodeType":"Block","src":"11687:74:11","statements":[{"expression":{"id":2126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2124,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11705:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3634","id":2125,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11715:2:11","typeDescriptions":{"typeIdentifier":"t_rational_64_by_1","typeString":"int_const 64"},"value":"64"},"src":"11705:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2127,"nodeType":"ExpressionStatement","src":"11705:12:11"},{"expression":{"id":2130,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2128,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2101,"src":"11735:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"38","id":2129,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11745:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11735:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2131,"nodeType":"ExpressionStatement","src":"11735:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2138,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2136,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2134,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11778:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3332","id":2135,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11787:2:11","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11778:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2137,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11792:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11778:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2148,"nodeType":"IfStatement","src":"11774:95:11","trueBody":{"id":2147,"nodeType":"Block","src":"11795:74:11","statements":[{"expression":{"id":2141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2139,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11813:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3332","id":2140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11823:2:11","typeDescriptions":{"typeIdentifier":"t_rational_32_by_1","typeString":"int_const 32"},"value":"32"},"src":"11813:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2142,"nodeType":"ExpressionStatement","src":"11813:12:11"},{"expression":{"id":2145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2143,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2101,"src":"11843:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"34","id":2144,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11853:1:11","typeDescriptions":{"typeIdentifier":"t_rational_4_by_1","typeString":"int_const 4"},"value":"4"},"src":"11843:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2146,"nodeType":"ExpressionStatement","src":"11843:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2149,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11886:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"3136","id":2150,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11895:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11886:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11900:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11886:15:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2163,"nodeType":"IfStatement","src":"11882:95:11","trueBody":{"id":2162,"nodeType":"Block","src":"11903:74:11","statements":[{"expression":{"id":2156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2154,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11921:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":">>=","rightHandSide":{"hexValue":"3136","id":2155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11931:2:11","typeDescriptions":{"typeIdentifier":"t_rational_16_by_1","typeString":"int_const 16"},"value":"16"},"src":"11921:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2157,"nodeType":"ExpressionStatement","src":"11921:12:11"},{"expression":{"id":2160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2158,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2101,"src":"11951:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"32","id":2159,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11961:1:11","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"src":"11951:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2161,"nodeType":"ExpressionStatement","src":"11951:11:11"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2168,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2164,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2095,"src":"11994:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">>","rightExpression":{"hexValue":"38","id":2165,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12003:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"11994:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":2167,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12007:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"11994:14:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2174,"nodeType":"IfStatement","src":"11990:64:11","trueBody":{"id":2173,"nodeType":"Block","src":"12010:44:11","statements":[{"expression":{"id":2171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2169,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2101,"src":"12028:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":2170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12038:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12028:11:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2172,"nodeType":"ExpressionStatement","src":"12028:11:11"}]}}]},{"expression":{"id":2176,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2101,"src":"12080:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2099,"id":2177,"nodeType":"Return","src":"12073:13:11"}]},"documentation":{"id":2093,"nodeType":"StructuredDocumentation","src":"11185:240:11","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":2179,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"11439:6:11","nodeType":"FunctionDefinition","parameters":{"id":2096,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2095,"mutability":"mutable","name":"value","nameLocation":"11454:5:11","nodeType":"VariableDeclaration","scope":2179,"src":"11446:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2094,"name":"uint256","nodeType":"ElementaryTypeName","src":"11446:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11445:15:11"},"returnParameters":{"id":2099,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2098,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2179,"src":"11484:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2097,"name":"uint256","nodeType":"ElementaryTypeName","src":"11484:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11483:9:11"},"scope":2219,"src":"11430:663:11","stateMutability":"pure","virtual":false,"visibility":"internal"},{"body":{"id":2217,"nodeType":"Block","src":"12329:173:11","statements":[{"id":2216,"nodeType":"UncheckedBlock","src":"12339:157:11","statements":[{"assignments":[2191],"declarations":[{"constant":false,"id":2191,"mutability":"mutable","name":"result","nameLocation":"12371:6:11","nodeType":"VariableDeclaration","scope":2216,"src":"12363:14:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2190,"name":"uint256","nodeType":"ElementaryTypeName","src":"12363:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":2195,"initialValue":{"arguments":[{"id":2193,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2182,"src":"12387:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":2192,"name":"log256","nodeType":"Identifier","overloadedDeclarations":[2179,2218],"referencedDeclaration":2179,"src":"12380:6:11","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) pure returns (uint256)"}},"id":2194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"12380:13:11","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12363:30:11"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2196,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2191,"src":"12414:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"components":[{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":2209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"id":2200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2197,"name":"rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2185,"src":"12424:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":2198,"name":"Rounding","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":1361,"src":"12436:8:11","typeDescriptions":{"typeIdentifier":"t_type$_t_enum$_Rounding_$1361_$","typeString":"type(enum Math.Rounding)"}},"id":2199,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"Up","nodeType":"MemberAccess","referencedDeclaration":1359,"src":"12436:11:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"src":"12424:23:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":2206,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"31","id":2201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12451:1:11","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":2204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":2202,"name":"result","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2191,"src":"12457:6:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"hexValue":"38","id":2203,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12466:1:11","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"src":"12457:10:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":2205,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12456:12:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12451:17:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":2207,"name":"value","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2182,"src":"12471:5:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12451:25:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12424:52:11","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"hexValue":"30","id":2211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12483:1:11","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"id":2212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"12424:60:11","trueExpression":{"hexValue":"31","id":2210,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12479:1:11","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}}],"id":2213,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"12423:62:11","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"12414:71:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":2189,"id":2215,"nodeType":"Return","src":"12407:78:11"}]}]},"documentation":{"id":2180,"nodeType":"StructuredDocumentation","src":"12099:143:11","text":" @dev Return the log in base 10, following the selected rounding direction, of a positive value.\n Returns 0 if given 0."},"id":2218,"implemented":true,"kind":"function","modifiers":[],"name":"log256","nameLocation":"12256:6:11","nodeType":"FunctionDefinition","parameters":{"id":2186,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2182,"mutability":"mutable","name":"value","nameLocation":"12271:5:11","nodeType":"VariableDeclaration","scope":2218,"src":"12263:13:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2181,"name":"uint256","nodeType":"ElementaryTypeName","src":"12263:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":2185,"mutability":"mutable","name":"rounding","nameLocation":"12287:8:11","nodeType":"VariableDeclaration","scope":2218,"src":"12278:17:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"},"typeName":{"id":2184,"nodeType":"UserDefinedTypeName","pathNode":{"id":2183,"name":"Rounding","nodeType":"IdentifierPath","referencedDeclaration":1361,"src":"12278:8:11"},"referencedDeclaration":1361,"src":"12278:8:11","typeDescriptions":{"typeIdentifier":"t_enum$_Rounding_$1361","typeString":"enum Math.Rounding"}},"visibility":"internal"}],"src":"12262:34:11"},"returnParameters":{"id":2189,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2188,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2218,"src":"12320:7:11","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":2187,"name":"uint256","nodeType":"ElementaryTypeName","src":"12320:7:11","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12319:9:11"},"scope":2219,"src":"12247:255:11","stateMutability":"pure","virtual":false,"visibility":"internal"}],"scope":2220,"src":"202:12302:11","usedErrors":[]}],"src":"103:12402:11"},"id":11},"contracts/Governance/AccessControlManager.sol":{"ast":{"absolutePath":"contracts/Governance/AccessControlManager.sol","exportedSymbols":{"AccessControl":[1048],"AccessControlManager":[2398],"Context":[1143],"ERC165":[1342],"IAccessControl":[1121],"IAccessControlManagerV8":[2597],"IERC165":[1354],"Math":[2219],"Strings":[1318]},"id":2399,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":2221,"literals":["solidity","0.8",".13"],"nodeType":"PragmaDirective","src":"41:23:12"},{"absolutePath":"@openzeppelin/contracts/access/AccessControl.sol","file":"@openzeppelin/contracts/access/AccessControl.sol","id":2222,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2399,"sourceUnit":1049,"src":"65:58:12","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/Governance/IAccessControlManagerV8.sol","file":"./IAccessControlManagerV8.sol","id":2223,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2399,"sourceUnit":2598,"src":"124:39:12","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2225,"name":"AccessControl","nodeType":"IdentifierPath","referencedDeclaration":1048,"src":"2848:13:12"},"id":2226,"nodeType":"InheritanceSpecifier","src":"2848:13:12"},{"baseName":{"id":2227,"name":"IAccessControlManagerV8","nodeType":"IdentifierPath","referencedDeclaration":2597,"src":"2863:23:12"},"id":2228,"nodeType":"InheritanceSpecifier","src":"2863:23:12"}],"canonicalName":"AccessControlManager","contractDependencies":[],"contractKind":"contract","documentation":{"id":2224,"nodeType":"StructuredDocumentation","src":"165:2649:12","text":" @title AccessControlManager\n @author Venus\n @dev This contract is a wrapper of OpenZeppelin AccessControl extending it in a way to standartize access control within Venus Smart Contract Ecosystem.\n @notice Access control plays a crucial role in the Venus governance model. It is used to restrict functions so that they can only be called from one\n account or list of accounts (EOA or Contract Accounts).\n The implementation of `AccessControlManager`(https://github.com/VenusProtocol/governance-contracts/blob/main/contracts/Governance/AccessControlManager.sol)\n inherits the [Open Zeppelin AccessControl](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/AccessControl.sol)\n contract as a base for role management logic. There are two role types: admin and granular permissions.\n \n ## Granular Roles\n \n Granular roles are built by hashing the contract address and its function signature. For example, given contract `Foo` with function `Foo.bar()` which\n is guarded by ACM, calling `giveRolePermission` for account B do the following:\n \n 1. Compute `keccak256(contractFooAddress,functionSignatureBar)`\n 1. Add the computed role to the roles of account B\n 1. Account B now can call `ContractFoo.bar()`\n \n ## Admin Roles\n \n Admin roles allow for an address to call a function signature on any contract guarded by the `AccessControlManager`. This is particularly useful for\n contracts created by factories.\n \n For Admin roles a null address is hashed in place of the contract address (`keccak256(0x0000000000000000000000000000000000000000,functionSignatureBar)`.\n \n In the previous example, giving account B the admin role, account B will have permissions to call the `bar()` function on any contract that is guarded by\n ACM, not only contract A.\n \n ## Protocol Integration\n \n All restricted functions in Venus Protocol use a hook to ACM in order to check if the caller has the right permission to call the guarded function.\n `AccessControlledV5` and `AccessControlledV8` abstract contract makes this integration easier. They call ACM's external method\n `isAllowedToCall(address caller, string functionSig)`. Here is an example of how `setCollateralFactor` function in `Comptroller` is integrated with ACM:\n```\ncontract Comptroller is [...] AccessControlledV8 {\n[...]\nfunction setCollateralFactor(VToken vToken, uint256 newCollateralFactorMantissa, uint256 newLiquidationThresholdMantissa) external {\n_checkAccessAllowed(\"setCollateralFactor(address,uint256,uint256)\");\n[...]\n}\n}\n```"},"fullyImplemented":true,"id":2398,"linearizedBaseContracts":[2398,2597,1048,1342,1354,1121,1143],"name":"AccessControlManager","nameLocation":"2824:20:12","nodeType":"ContractDefinition","nodes":[{"anonymous":false,"documentation":{"id":2229,"nodeType":"StructuredDocumentation","src":"2893:260:12","text":"@notice Emitted when an account is given a permission to a certain contract function\n @dev If contract address is 0x000..0 this means that the account is a default admin of this function and\n can call any contract function with this signature"},"eventSelector":"69c5ce2d658fea352a2464f87ffbe1f09746c918a91da0994044c3767d641b3f","id":2237,"name":"PermissionGranted","nameLocation":"3164:17:12","nodeType":"EventDefinition","parameters":{"id":2236,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2231,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"3190:7:12","nodeType":"VariableDeclaration","scope":2237,"src":"3182:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2230,"name":"address","nodeType":"ElementaryTypeName","src":"3182:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2233,"indexed":false,"mutability":"mutable","name":"contractAddress","nameLocation":"3207:15:12","nodeType":"VariableDeclaration","scope":2237,"src":"3199:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2232,"name":"address","nodeType":"ElementaryTypeName","src":"3199:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2235,"indexed":false,"mutability":"mutable","name":"functionSig","nameLocation":"3231:11:12","nodeType":"VariableDeclaration","scope":2237,"src":"3224:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2234,"name":"string","nodeType":"ElementaryTypeName","src":"3224:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3181:62:12"},"src":"3158:86:12"},{"anonymous":false,"documentation":{"id":2238,"nodeType":"StructuredDocumentation","src":"3250:90:12","text":"@notice Emitted when an account is revoked a permission to a certain contract function"},"eventSelector":"55426a61e90ac7d7d1fc886b67b420ade8c8b535e68d655394bc271e3a12b8e2","id":2246,"name":"PermissionRevoked","nameLocation":"3351:17:12","nodeType":"EventDefinition","parameters":{"id":2245,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2240,"indexed":false,"mutability":"mutable","name":"account","nameLocation":"3377:7:12","nodeType":"VariableDeclaration","scope":2246,"src":"3369:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2239,"name":"address","nodeType":"ElementaryTypeName","src":"3369:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2242,"indexed":false,"mutability":"mutable","name":"contractAddress","nameLocation":"3394:15:12","nodeType":"VariableDeclaration","scope":2246,"src":"3386:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2241,"name":"address","nodeType":"ElementaryTypeName","src":"3386:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2244,"indexed":false,"mutability":"mutable","name":"functionSig","nameLocation":"3418:11:12","nodeType":"VariableDeclaration","scope":2246,"src":"3411:18:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2243,"name":"string","nodeType":"ElementaryTypeName","src":"3411:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3368:62:12"},"src":"3345:86:12"},{"body":{"id":2255,"nodeType":"Block","src":"3451:179:12","statements":[{"expression":{"arguments":[{"id":2250,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":760,"src":"3592:18:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":2251,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3612:3:12","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3612:10:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2249,"name":"_setupRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":956,"src":"3581:10:12","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":2253,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3581:42:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2254,"nodeType":"ExpressionStatement","src":"3581:42:12"}]},"id":2256,"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","nodeType":"FunctionDefinition","parameters":{"id":2247,"nodeType":"ParameterList","parameters":[],"src":"3448:2:12"},"returnParameters":{"id":2248,"nodeType":"ParameterList","parameters":[],"src":"3451:0:12"},"scope":2398,"src":"3437:193:12","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[2567],"body":{"id":2287,"nodeType":"Block","src":"4392:210:12","statements":[{"assignments":[2267],"declarations":[{"constant":false,"id":2267,"mutability":"mutable","name":"role","nameLocation":"4410:4:12","nodeType":"VariableDeclaration","scope":2287,"src":"4402:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2266,"name":"bytes32","nodeType":"ElementaryTypeName","src":"4402:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2275,"initialValue":{"arguments":[{"arguments":[{"id":2271,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2259,"src":"4444:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2272,"name":"functionSig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2261,"src":"4461:11:12","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":2269,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"4427:3:12","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2270,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"4427:16:12","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4427:46:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2268,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"4417:9:12","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2274,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4417:57:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"4402:72:12"},{"expression":{"arguments":[{"id":2277,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2267,"src":"4494:4:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2278,"name":"accountToPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2263,"src":"4500:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2276,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":899,"src":"4484:9:12","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":2279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4484:32:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2280,"nodeType":"ExpressionStatement","src":"4484:32:12"},{"eventCall":{"arguments":[{"id":2282,"name":"accountToPermit","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2263,"src":"4549:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2283,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2259,"src":"4566:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2284,"name":"functionSig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2261,"src":"4583:11:12","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":2281,"name":"PermissionGranted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2237,"src":"4531:17:12","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,address,string memory)"}},"id":2285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"4531:64:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2286,"nodeType":"EmitStatement","src":"4526:69:12"}]},"documentation":{"id":2257,"nodeType":"StructuredDocumentation","src":"3636:637:12","text":" @notice Gives a function call permission to one single account\n @dev this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE\n @param contractAddress address of contract for which call permissions will be granted\n @dev if contractAddress is zero address, the account can access the specified function\n on **any** contract managed by this ACL\n @param functionSig signature e.g. \"functionName(uint256,bool)\"\n @param accountToPermit account that will be given access to the contract function\n @custom:event Emits a {RoleGranted} and {PermissionGranted} events."},"functionSelector":"584f6b60","id":2288,"implemented":true,"kind":"function","modifiers":[],"name":"giveCallPermission","nameLocation":"4287:18:12","nodeType":"FunctionDefinition","parameters":{"id":2264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2259,"mutability":"mutable","name":"contractAddress","nameLocation":"4314:15:12","nodeType":"VariableDeclaration","scope":2288,"src":"4306:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2258,"name":"address","nodeType":"ElementaryTypeName","src":"4306:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2261,"mutability":"mutable","name":"functionSig","nameLocation":"4347:11:12","nodeType":"VariableDeclaration","scope":2288,"src":"4331:27:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2260,"name":"string","nodeType":"ElementaryTypeName","src":"4331:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2263,"mutability":"mutable","name":"accountToPermit","nameLocation":"4368:15:12","nodeType":"VariableDeclaration","scope":2288,"src":"4360:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2262,"name":"address","nodeType":"ElementaryTypeName","src":"4360:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4305:79:12"},"returnParameters":{"id":2265,"nodeType":"ParameterList","parameters":[],"src":"4392:0:12"},"scope":2398,"src":"4278:324:12","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[2576],"body":{"id":2319,"nodeType":"Block","src":"5207:211:12","statements":[{"assignments":[2299],"declarations":[{"constant":false,"id":2299,"mutability":"mutable","name":"role","nameLocation":"5225:4:12","nodeType":"VariableDeclaration","scope":2319,"src":"5217:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2298,"name":"bytes32","nodeType":"ElementaryTypeName","src":"5217:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2307,"initialValue":{"arguments":[{"arguments":[{"id":2303,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2291,"src":"5259:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2304,"name":"functionSig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2293,"src":"5276:11:12","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":2301,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"5242:3:12","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2302,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"5242:16:12","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5242:46:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2300,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"5232:9:12","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2306,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5232:57:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"5217:72:12"},{"expression":{"arguments":[{"id":2309,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2299,"src":"5310:4:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2310,"name":"accountToRevoke","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"5316:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2308,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":919,"src":"5299:10:12","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":2311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5299:33:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2312,"nodeType":"ExpressionStatement","src":"5299:33:12"},{"eventCall":{"arguments":[{"id":2314,"name":"accountToRevoke","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2295,"src":"5365:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2315,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2291,"src":"5382:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2316,"name":"functionSig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2293,"src":"5399:11:12","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"id":2313,"name":"PermissionRevoked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2246,"src":"5347:17:12","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,address,string memory)"}},"id":2317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"5347:64:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2318,"nodeType":"EmitStatement","src":"5342:69:12"}]},"documentation":{"id":2289,"nodeType":"StructuredDocumentation","src":"4608:448:12","text":" @notice Revokes an account's permission to a particular function call\n @dev this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE\n \t\tMay emit a {RoleRevoked} event.\n @param contractAddress address of contract for which call permissions will be revoked\n @param functionSig signature e.g. \"functionName(uint256,bool)\"\n @custom:event Emits {RoleRevoked} and {PermissionRevoked} events."},"functionSelector":"545f7a32","id":2320,"implemented":true,"kind":"function","modifiers":[],"name":"revokeCallPermission","nameLocation":"5070:20:12","nodeType":"FunctionDefinition","parameters":{"id":2296,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2291,"mutability":"mutable","name":"contractAddress","nameLocation":"5108:15:12","nodeType":"VariableDeclaration","scope":2320,"src":"5100:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2290,"name":"address","nodeType":"ElementaryTypeName","src":"5100:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2293,"mutability":"mutable","name":"functionSig","nameLocation":"5149:11:12","nodeType":"VariableDeclaration","scope":2320,"src":"5133:27:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2292,"name":"string","nodeType":"ElementaryTypeName","src":"5133:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2295,"mutability":"mutable","name":"accountToRevoke","nameLocation":"5178:15:12","nodeType":"VariableDeclaration","scope":2320,"src":"5170:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2294,"name":"address","nodeType":"ElementaryTypeName","src":"5170:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5090:109:12"},"returnParameters":{"id":2297,"nodeType":"ParameterList","parameters":[],"src":"5207:0:12"},"scope":2398,"src":"5061:357:12","stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"baseFunctions":[2585],"body":{"id":2368,"nodeType":"Block","src":"5996:291:12","statements":[{"assignments":[2331],"declarations":[{"constant":false,"id":2331,"mutability":"mutable","name":"role","nameLocation":"6014:4:12","nodeType":"VariableDeclaration","scope":2368,"src":"6006:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2330,"name":"bytes32","nodeType":"ElementaryTypeName","src":"6006:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2340,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":2335,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6048:3:12","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"6048:10:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2337,"name":"functionSig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2325,"src":"6060:11:12","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":2333,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6031:3:12","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2334,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"6031:16:12","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2338,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6031:41:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2332,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"6021:9:12","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6021:52:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"6006:67:12"},{"condition":{"arguments":[{"id":2342,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2331,"src":"6096:4:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2343,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2323,"src":"6102:7:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2341,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"6088:7:12","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2344,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6088:22:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":2366,"nodeType":"Block","src":"6154:127:12","statements":[{"expression":{"id":2359,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2348,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2331,"src":"6168:4:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"arguments":[{"arguments":[{"hexValue":"30","id":2354,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6210:1:12","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6202:7:12","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2352,"name":"address","nodeType":"ElementaryTypeName","src":"6202:7:12","typeDescriptions":{}}},"id":2355,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6202:10:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2356,"name":"functionSig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2325,"src":"6214:11:12","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":2350,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"6185:3:12","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2351,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"6185:16:12","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2357,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6185:41:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2349,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"6175:9:12","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2358,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6175:52:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"6168:59:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"id":2360,"nodeType":"ExpressionStatement","src":"6168:59:12"},{"expression":{"arguments":[{"id":2362,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2331,"src":"6256:4:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2363,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2323,"src":"6262:7:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2361,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"6248:7:12","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2364,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"6248:22:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2329,"id":2365,"nodeType":"Return","src":"6241:29:12"}]},"id":2367,"nodeType":"IfStatement","src":"6084:197:12","trueBody":{"id":2347,"nodeType":"Block","src":"6112:36:12","statements":[{"expression":{"hexValue":"74727565","id":2345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"6133:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":2329,"id":2346,"nodeType":"Return","src":"6126:11:12"}]}}]},"documentation":{"id":2321,"nodeType":"StructuredDocumentation","src":"5424:469:12","text":" @notice Verifies if the given account can call a contract's guarded function\n @dev Since restricted contracts using this function as a permission hook, we can get contracts address with msg.sender\n @param account for which call permissions will be checked\n @param functionSig restricted function signature e.g. \"functionName(uint256,bool)\"\n @return false if the user account cannot call the particular contract function"},"functionSelector":"18c5e8ab","id":2369,"implemented":true,"kind":"function","modifiers":[],"name":"isAllowedToCall","nameLocation":"5907:15:12","nodeType":"FunctionDefinition","parameters":{"id":2326,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2323,"mutability":"mutable","name":"account","nameLocation":"5931:7:12","nodeType":"VariableDeclaration","scope":2369,"src":"5923:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2322,"name":"address","nodeType":"ElementaryTypeName","src":"5923:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2325,"mutability":"mutable","name":"functionSig","nameLocation":"5956:11:12","nodeType":"VariableDeclaration","scope":2369,"src":"5940:27:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2324,"name":"string","nodeType":"ElementaryTypeName","src":"5940:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"5922:46:12"},"returnParameters":{"id":2329,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2328,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2369,"src":"5990:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2327,"name":"bool","nodeType":"ElementaryTypeName","src":"5990:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"5989:6:12"},"scope":2398,"src":"5898:389:12","stateMutability":"view","virtual":false,"visibility":"public"},{"baseFunctions":[2596],"body":{"id":2396,"nodeType":"Block","src":"6995:128:12","statements":[{"assignments":[2382],"declarations":[{"constant":false,"id":2382,"mutability":"mutable","name":"role","nameLocation":"7013:4:12","nodeType":"VariableDeclaration","scope":2396,"src":"7005:12:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":2381,"name":"bytes32","nodeType":"ElementaryTypeName","src":"7005:7:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":2390,"initialValue":{"arguments":[{"arguments":[{"id":2386,"name":"contractAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2374,"src":"7047:15:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2387,"name":"functionSig","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2376,"src":"7064:11:12","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_calldata_ptr","typeString":"string calldata"}],"expression":{"id":2384,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"7030:3:12","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":2385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberName":"encodePacked","nodeType":"MemberAccess","src":"7030:16:12","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":2388,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7030:46:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":2383,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"7020:9:12","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":2389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7020:57:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"7005:72:12"},{"expression":{"arguments":[{"id":2392,"name":"role","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2382,"src":"7102:4:12","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":2393,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2372,"src":"7108:7:12","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2391,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":812,"src":"7094:7:12","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":2394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"7094:22:12","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":2380,"id":2395,"nodeType":"Return","src":"7087:29:12"}]},"documentation":{"id":2370,"nodeType":"StructuredDocumentation","src":"6293:546:12","text":" @notice Verifies if the given account can call a contract's guarded function\n @dev This function is used as a view function to check permissions rather than contract hook for access restriction check.\n @param account for which call permissions will be checked against\n @param contractAddress address of the restricted contract\n @param functionSig signature of the restricted function e.g. \"functionName(uint256,bool)\"\n @return false if the user account cannot call the particular contract function"},"functionSelector":"82bfd0f0","id":2397,"implemented":true,"kind":"function","modifiers":[],"name":"hasPermission","nameLocation":"6853:13:12","nodeType":"FunctionDefinition","parameters":{"id":2377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2372,"mutability":"mutable","name":"account","nameLocation":"6884:7:12","nodeType":"VariableDeclaration","scope":2397,"src":"6876:15:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2371,"name":"address","nodeType":"ElementaryTypeName","src":"6876:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2374,"mutability":"mutable","name":"contractAddress","nameLocation":"6909:15:12","nodeType":"VariableDeclaration","scope":2397,"src":"6901:23:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2373,"name":"address","nodeType":"ElementaryTypeName","src":"6901:7:12","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2376,"mutability":"mutable","name":"functionSig","nameLocation":"6950:11:12","nodeType":"VariableDeclaration","scope":2397,"src":"6934:27:12","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2375,"name":"string","nodeType":"ElementaryTypeName","src":"6934:6:12","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"6866:101:12"},"returnParameters":{"id":2380,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2379,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2397,"src":"6989:4:12","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2378,"name":"bool","nodeType":"ElementaryTypeName","src":"6989:4:12","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"6988:6:12"},"scope":2398,"src":"6844:279:12","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":2399,"src":"2815:4310:12","usedErrors":[]}],"src":"41:7085:12"},"id":12},"contracts/Governance/AccessControlledV8.sol":{"ast":{"absolutePath":"contracts/Governance/AccessControlledV8.sol","exportedSymbols":{"AccessControlledV8":[2552],"AddressUpgradeable":[690],"ContextUpgradeable":[732],"IAccessControl":[1121],"IAccessControlManagerV8":[2597],"Initializable":[406],"Ownable2StepUpgradeable":[105],"OwnableUpgradeable":[237]},"id":2553,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":2400,"literals":["solidity","0.8",".13"],"nodeType":"PragmaDirective","src":"41:23:13"},{"absolutePath":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","id":2401,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2553,"sourceUnit":407,"src":"66:75:13","symbolAliases":[],"unitAlias":""},{"absolutePath":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol","id":2402,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2553,"sourceUnit":106,"src":"142:80:13","symbolAliases":[],"unitAlias":""},{"absolutePath":"contracts/Governance/IAccessControlManagerV8.sol","file":"./IAccessControlManagerV8.sol","id":2403,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2553,"sourceUnit":2598,"src":"224:39:13","symbolAliases":[],"unitAlias":""},{"abstract":true,"baseContracts":[{"baseName":{"id":2405,"name":"Initializable","nodeType":"IdentifierPath","referencedDeclaration":406,"src":"626:13:13"},"id":2406,"nodeType":"InheritanceSpecifier","src":"626:13:13"},{"baseName":{"id":2407,"name":"Ownable2StepUpgradeable","nodeType":"IdentifierPath","referencedDeclaration":105,"src":"641:23:13"},"id":2408,"nodeType":"InheritanceSpecifier","src":"641:23:13"}],"canonicalName":"AccessControlledV8","contractDependencies":[],"contractKind":"contract","documentation":{"id":2404,"nodeType":"StructuredDocumentation","src":"265:320:13","text":" @title AccessControlledV8\n @author Venus\n @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\n to integrate access controlled mechanism. It provides initialise methods and verifying access methods."},"fullyImplemented":true,"id":2552,"linearizedBaseContracts":[2552,105,237,732,406],"name":"AccessControlledV8","nameLocation":"604:18:13","nodeType":"ContractDefinition","nodes":[{"constant":false,"documentation":{"id":2409,"nodeType":"StructuredDocumentation","src":"671:43:13","text":"@notice Access control manager contract"},"id":2412,"mutability":"mutable","name":"_accessControlManager","nameLocation":"751:21:13","nodeType":"VariableDeclaration","scope":2552,"src":"719:53:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"},"typeName":{"id":2411,"nodeType":"UserDefinedTypeName","pathNode":{"id":2410,"name":"IAccessControlManagerV8","nodeType":"IdentifierPath","referencedDeclaration":2597,"src":"719:23:13"},"referencedDeclaration":2597,"src":"719:23:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}},"visibility":"private"},{"constant":false,"documentation":{"id":2413,"nodeType":"StructuredDocumentation","src":"779:254:13","text":" @dev This empty reserved space is put in place to allow future versions to add new\n variables without shifting down storage in the inheritance chain.\n See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"},"id":2417,"mutability":"mutable","name":"__gap","nameLocation":"1058:5:13","nodeType":"VariableDeclaration","scope":2552,"src":"1038:25:13","stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage","typeString":"uint256[49]"},"typeName":{"baseType":{"id":2414,"name":"uint256","nodeType":"ElementaryTypeName","src":"1038:7:13","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":2416,"length":{"hexValue":"3439","id":2415,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1046:2:13","typeDescriptions":{"typeIdentifier":"t_rational_49_by_1","typeString":"int_const 49"},"value":"49"},"nodeType":"ArrayTypeName","src":"1038:11:13","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$49_storage_ptr","typeString":"uint256[49]"}},"visibility":"private"},{"anonymous":false,"documentation":{"id":2418,"nodeType":"StructuredDocumentation","src":"1070:75:13","text":"@notice Emitted when access control manager contract address is changed"},"eventSelector":"66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa0","id":2424,"name":"NewAccessControlManager","nameLocation":"1156:23:13","nodeType":"EventDefinition","parameters":{"id":2423,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2420,"indexed":false,"mutability":"mutable","name":"oldAccessControlManager","nameLocation":"1188:23:13","nodeType":"VariableDeclaration","scope":2424,"src":"1180:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2419,"name":"address","nodeType":"ElementaryTypeName","src":"1180:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2422,"indexed":false,"mutability":"mutable","name":"newAccessControlManager","nameLocation":"1221:23:13","nodeType":"VariableDeclaration","scope":2424,"src":"1213:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2421,"name":"address","nodeType":"ElementaryTypeName","src":"1213:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1179:66:13"},"src":"1150:96:13"},{"documentation":{"id":2425,"nodeType":"StructuredDocumentation","src":"1252:72:13","text":"@notice Thrown when the action is prohibited by AccessControlManager"},"errorSelector":"4a3fa293","id":2433,"name":"Unauthorized","nameLocation":"1335:12:13","nodeType":"ErrorDefinition","parameters":{"id":2432,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2427,"mutability":"mutable","name":"sender","nameLocation":"1356:6:13","nodeType":"VariableDeclaration","scope":2433,"src":"1348:14:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2426,"name":"address","nodeType":"ElementaryTypeName","src":"1348:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2429,"mutability":"mutable","name":"calledContract","nameLocation":"1372:14:13","nodeType":"VariableDeclaration","scope":2433,"src":"1364:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2428,"name":"address","nodeType":"ElementaryTypeName","src":"1364:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2431,"mutability":"mutable","name":"methodSignature","nameLocation":"1395:15:13","nodeType":"VariableDeclaration","scope":2433,"src":"1388:22:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2430,"name":"string","nodeType":"ElementaryTypeName","src":"1388:6:13","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"1347:64:13"},"src":"1329:83:13"},{"body":{"id":2447,"nodeType":"Block","src":"1508:104:13","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":2440,"name":"__Ownable2Step_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":17,"src":"1518:19:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":2441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1518:21:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2442,"nodeType":"ExpressionStatement","src":"1518:21:13"},{"expression":{"arguments":[{"id":2444,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2435,"src":"1583:21:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2443,"name":"__AccessControlled_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2460,"src":"1549:33:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1549:56:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2446,"nodeType":"ExpressionStatement","src":"1549:56:13"}]},"id":2448,"implemented":true,"kind":"function","modifiers":[{"id":2438,"kind":"modifierInvocation","modifierName":{"id":2437,"name":"onlyInitializing","nodeType":"IdentifierPath","referencedDeclaration":351,"src":"1491:16:13"},"nodeType":"ModifierInvocation","src":"1491:16:13"}],"name":"__AccessControlled_init","nameLocation":"1427:23:13","nodeType":"FunctionDefinition","parameters":{"id":2436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2435,"mutability":"mutable","name":"accessControlManager_","nameLocation":"1459:21:13","nodeType":"VariableDeclaration","scope":2448,"src":"1451:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2434,"name":"address","nodeType":"ElementaryTypeName","src":"1451:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1450:31:13"},"returnParameters":{"id":2439,"nodeType":"ParameterList","parameters":[],"src":"1508:0:13"},"scope":2552,"src":"1418:194:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2459,"nodeType":"Block","src":"1718:64:13","statements":[{"expression":{"arguments":[{"id":2456,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2450,"src":"1753:21:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2455,"name":"_setAccessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"1728:24:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2457,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"1728:47:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2458,"nodeType":"ExpressionStatement","src":"1728:47:13"}]},"id":2460,"implemented":true,"kind":"function","modifiers":[{"id":2453,"kind":"modifierInvocation","modifierName":{"id":2452,"name":"onlyInitializing","nodeType":"IdentifierPath","referencedDeclaration":351,"src":"1701:16:13"},"nodeType":"ModifierInvocation","src":"1701:16:13"}],"name":"__AccessControlled_init_unchained","nameLocation":"1627:33:13","nodeType":"FunctionDefinition","parameters":{"id":2451,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2450,"mutability":"mutable","name":"accessControlManager_","nameLocation":"1669:21:13","nodeType":"VariableDeclaration","scope":2460,"src":"1661:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2449,"name":"address","nodeType":"ElementaryTypeName","src":"1661:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1660:31:13"},"returnParameters":{"id":2454,"nodeType":"ParameterList","parameters":[],"src":"1718:0:13"},"scope":2552,"src":"1618:164:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2472,"nodeType":"Block","src":"2184:64:13","statements":[{"expression":{"arguments":[{"id":2469,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2463,"src":"2219:21:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2468,"name":"_setAccessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2521,"src":"2194:24:13","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2194:47:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2471,"nodeType":"ExpressionStatement","src":"2194:47:13"}]},"documentation":{"id":2461,"nodeType":"StructuredDocumentation","src":"1788:308:13","text":" @notice Sets the address of AccessControlManager\n @dev Admin function to set address of AccessControlManager\n @param accessControlManager_ The new address of the AccessControlManager\n @custom:event Emits NewAccessControlManager event\n @custom:access Only Governance"},"functionSelector":"0e32cb86","id":2473,"implemented":true,"kind":"function","modifiers":[{"id":2466,"kind":"modifierInvocation","modifierName":{"id":2465,"name":"onlyOwner","nodeType":"IdentifierPath","referencedDeclaration":151,"src":"2174:9:13"},"nodeType":"ModifierInvocation","src":"2174:9:13"}],"name":"setAccessControlManager","nameLocation":"2110:23:13","nodeType":"FunctionDefinition","parameters":{"id":2464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2463,"mutability":"mutable","name":"accessControlManager_","nameLocation":"2142:21:13","nodeType":"VariableDeclaration","scope":2473,"src":"2134:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2462,"name":"address","nodeType":"ElementaryTypeName","src":"2134:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2133:31:13"},"returnParameters":{"id":2467,"nodeType":"ParameterList","parameters":[],"src":"2184:0:13"},"scope":2552,"src":"2101:147:13","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"body":{"id":2482,"nodeType":"Block","src":"2424:45:13","statements":[{"expression":{"id":2480,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2412,"src":"2441:21:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}},"functionReturnParameters":2479,"id":2481,"nodeType":"Return","src":"2434:28:13"}]},"documentation":{"id":2474,"nodeType":"StructuredDocumentation","src":"2254:85:13","text":" @notice Returns the address of the access control manager contract"},"functionSelector":"b4a0bdf3","id":2483,"implemented":true,"kind":"function","modifiers":[],"name":"accessControlManager","nameLocation":"2353:20:13","nodeType":"FunctionDefinition","parameters":{"id":2475,"nodeType":"ParameterList","parameters":[],"src":"2373:2:13"},"returnParameters":{"id":2479,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2478,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2483,"src":"2399:23:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"},"typeName":{"id":2477,"nodeType":"UserDefinedTypeName","pathNode":{"id":2476,"name":"IAccessControlManagerV8","nodeType":"IdentifierPath","referencedDeclaration":2597,"src":"2399:23:13"},"referencedDeclaration":2597,"src":"2399:23:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}},"visibility":"internal"}],"src":"2398:25:13"},"scope":2552,"src":"2344:125:13","stateMutability":"view","virtual":false,"visibility":"external"},{"body":{"id":2520,"nodeType":"Block","src":"2714:351:13","statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":2498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":2492,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2486,"src":"2740:21:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2491,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2732:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2490,"name":"address","nodeType":"ElementaryTypeName","src":"2732:7:13","typeDescriptions":{}}},"id":2493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2732:30:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":2496,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2774:1:13","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":2495,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2766:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2494,"name":"address","nodeType":"ElementaryTypeName","src":"2766:7:13","typeDescriptions":{}}},"id":2497,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2766:10:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2732:44:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e616765722061646472657373","id":2499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2778:39:13","typeDescriptions":{"typeIdentifier":"t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","typeString":"literal_string \"invalid acess control manager address\""},"value":"invalid acess control manager address"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb","typeString":"literal_string \"invalid acess control manager address\""}],"id":2489,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18],"referencedDeclaration":-18,"src":"2724:7:13","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":2500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2724:94:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2501,"nodeType":"ExpressionStatement","src":"2724:94:13"},{"assignments":[2503],"declarations":[{"constant":false,"id":2503,"mutability":"mutable","name":"oldAccessControlManager","nameLocation":"2836:23:13","nodeType":"VariableDeclaration","scope":2520,"src":"2828:31:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2502,"name":"address","nodeType":"ElementaryTypeName","src":"2828:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":2508,"initialValue":{"arguments":[{"id":2506,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2412,"src":"2870:21:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}],"id":2505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2862:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2504,"name":"address","nodeType":"ElementaryTypeName","src":"2862:7:13","typeDescriptions":{}}},"id":2507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2862:30:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2828:64:13"},{"expression":{"id":2513,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":2509,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2412,"src":"2902:21:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":2511,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2486,"src":"2950:21:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2510,"name":"IAccessControlManagerV8","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2597,"src":"2926:23:13","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_IAccessControlManagerV8_$2597_$","typeString":"type(contract IAccessControlManagerV8)"}},"id":2512,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2926:46:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}},"src":"2902:70:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}},"id":2514,"nodeType":"ExpressionStatement","src":"2902:70:13"},{"eventCall":{"arguments":[{"id":2516,"name":"oldAccessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2503,"src":"3011:23:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2517,"name":"accessControlManager_","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2486,"src":"3036:21:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":2515,"name":"NewAccessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2424,"src":"2987:23:13","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_address_$returns$__$","typeString":"function (address,address)"}},"id":2518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"2987:71:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2519,"nodeType":"EmitStatement","src":"2982:76:13"}]},"documentation":{"id":2484,"nodeType":"StructuredDocumentation","src":"2475:160:13","text":" @dev Internal function to set address of AccessControlManager\n @param accessControlManager_ The new address of the AccessControlManager"},"id":2521,"implemented":true,"kind":"function","modifiers":[],"name":"_setAccessControlManager","nameLocation":"2649:24:13","nodeType":"FunctionDefinition","parameters":{"id":2487,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2486,"mutability":"mutable","name":"accessControlManager_","nameLocation":"2682:21:13","nodeType":"VariableDeclaration","scope":2521,"src":"2674:29:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2485,"name":"address","nodeType":"ElementaryTypeName","src":"2674:7:13","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2673:31:13"},"returnParameters":{"id":2488,"nodeType":"ParameterList","parameters":[],"src":"2714:0:13"},"scope":2552,"src":"2640:425:13","stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"body":{"id":2550,"nodeType":"Block","src":"3270:214:13","statements":[{"assignments":[2528],"declarations":[{"constant":false,"id":2528,"mutability":"mutable","name":"isAllowedToCall","nameLocation":"3285:15:13","nodeType":"VariableDeclaration","scope":2550,"src":"3280:20:13","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2527,"name":"bool","nodeType":"ElementaryTypeName","src":"3280:4:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":2535,"initialValue":{"arguments":[{"expression":{"id":2531,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3341:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3341:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2533,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2524,"src":"3353:9:13","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"expression":{"id":2529,"name":"_accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2412,"src":"3303:21:13","typeDescriptions":{"typeIdentifier":"t_contract$_IAccessControlManagerV8_$2597","typeString":"contract IAccessControlManagerV8"}},"id":2530,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"isAllowedToCall","nodeType":"MemberAccess","referencedDeclaration":2585,"src":"3303:37:13","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_string_memory_ptr_$returns$_t_bool_$","typeString":"function (address,string memory) view external returns (bool)"}},"id":2534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3303:60:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"VariableDeclarationStatement","src":"3280:83:13"},{"condition":{"id":2537,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"3378:16:13","subExpression":{"id":2536,"name":"isAllowedToCall","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2528,"src":"3379:15:13","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":2549,"nodeType":"IfStatement","src":"3374:104:13","trueBody":{"id":2548,"nodeType":"Block","src":"3396:82:13","statements":[{"errorCall":{"arguments":[{"expression":{"id":2539,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3430:3:13","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":2540,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberName":"sender","nodeType":"MemberAccess","src":"3430:10:13","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":2543,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3450:4:13","typeDescriptions":{"typeIdentifier":"t_contract$_AccessControlledV8_$2552","typeString":"contract AccessControlledV8"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_AccessControlledV8_$2552","typeString":"contract AccessControlledV8"}],"id":2542,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3442:7:13","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":2541,"name":"address","nodeType":"ElementaryTypeName","src":"3442:7:13","typeDescriptions":{}}},"id":2544,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3442:13:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":2545,"name":"signature","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2524,"src":"3457:9:13","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_string_memory_ptr","typeString":"string memory"}],"id":2538,"name":"Unauthorized","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2433,"src":"3417:12:13","typeDescriptions":{"typeIdentifier":"t_function_error_pure$_t_address_$_t_address_$_t_string_memory_ptr_$returns$__$","typeString":"function (address,address,string memory) pure"}},"id":2546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"3417:50:13","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2547,"nodeType":"RevertStatement","src":"3410:57:13"}]}}]},"documentation":{"id":2522,"nodeType":"StructuredDocumentation","src":"3071:126:13","text":" @notice Reverts if the call is not allowed by AccessControlManager\n @param signature Method signature"},"id":2551,"implemented":true,"kind":"function","modifiers":[],"name":"_checkAccessAllowed","nameLocation":"3211:19:13","nodeType":"FunctionDefinition","parameters":{"id":2525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2524,"mutability":"mutable","name":"signature","nameLocation":"3245:9:13","nodeType":"VariableDeclaration","scope":2551,"src":"3231:23:13","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_string_memory_ptr","typeString":"string"},"typeName":{"id":2523,"name":"string","nodeType":"ElementaryTypeName","src":"3231:6:13","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"3230:25:13"},"returnParameters":{"id":2526,"nodeType":"ParameterList","parameters":[],"src":"3270:0:13"},"scope":2552,"src":"3202:282:13","stateMutability":"view","virtual":false,"visibility":"internal"}],"scope":2553,"src":"586:2900:13","usedErrors":[2433]}],"src":"41:3446:13"},"id":13},"contracts/Governance/IAccessControlManagerV8.sol":{"ast":{"absolutePath":"contracts/Governance/IAccessControlManagerV8.sol","exportedSymbols":{"IAccessControl":[1121],"IAccessControlManagerV8":[2597]},"id":2598,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":2554,"literals":["solidity","0.8",".13"],"nodeType":"PragmaDirective","src":"41:23:14"},{"absolutePath":"@openzeppelin/contracts/access/IAccessControl.sol","file":"@openzeppelin/contracts/access/IAccessControl.sol","id":2555,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2598,"sourceUnit":1122,"src":"66:59:14","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2557,"name":"IAccessControl","nodeType":"IdentifierPath","referencedDeclaration":1121,"src":"298:14:14"},"id":2558,"nodeType":"InheritanceSpecifier","src":"298:14:14"}],"canonicalName":"IAccessControlManagerV8","contractDependencies":[],"contractKind":"interface","documentation":{"id":2556,"nodeType":"StructuredDocumentation","src":"127:133:14","text":" @title IAccessControlManagerV8\n @author Venus\n @notice Interface implemented by the `AccessControlManagerV8` contract."},"fullyImplemented":false,"id":2597,"linearizedBaseContracts":[2597,1121],"name":"IAccessControlManagerV8","nameLocation":"271:23:14","nodeType":"ContractDefinition","nodes":[{"functionSelector":"584f6b60","id":2567,"implemented":false,"kind":"function","modifiers":[],"name":"giveCallPermission","nameLocation":"328:18:14","nodeType":"FunctionDefinition","parameters":{"id":2565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2560,"mutability":"mutable","name":"contractAddress","nameLocation":"355:15:14","nodeType":"VariableDeclaration","scope":2567,"src":"347:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2559,"name":"address","nodeType":"ElementaryTypeName","src":"347:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2562,"mutability":"mutable","name":"functionSig","nameLocation":"388:11:14","nodeType":"VariableDeclaration","scope":2567,"src":"372:27:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2561,"name":"string","nodeType":"ElementaryTypeName","src":"372:6:14","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2564,"mutability":"mutable","name":"accountToPermit","nameLocation":"409:15:14","nodeType":"VariableDeclaration","scope":2567,"src":"401:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2563,"name":"address","nodeType":"ElementaryTypeName","src":"401:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"346:79:14"},"returnParameters":{"id":2566,"nodeType":"ParameterList","parameters":[],"src":"434:0:14"},"scope":2597,"src":"319:116:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"545f7a32","id":2576,"implemented":false,"kind":"function","modifiers":[],"name":"revokeCallPermission","nameLocation":"450:20:14","nodeType":"FunctionDefinition","parameters":{"id":2574,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2569,"mutability":"mutable","name":"contractAddress","nameLocation":"488:15:14","nodeType":"VariableDeclaration","scope":2576,"src":"480:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2568,"name":"address","nodeType":"ElementaryTypeName","src":"480:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2571,"mutability":"mutable","name":"functionSig","nameLocation":"529:11:14","nodeType":"VariableDeclaration","scope":2576,"src":"513:27:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2570,"name":"string","nodeType":"ElementaryTypeName","src":"513:6:14","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"},{"constant":false,"id":2573,"mutability":"mutable","name":"accountToRevoke","nameLocation":"558:15:14","nodeType":"VariableDeclaration","scope":2576,"src":"550:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2572,"name":"address","nodeType":"ElementaryTypeName","src":"550:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"470:109:14"},"returnParameters":{"id":2575,"nodeType":"ParameterList","parameters":[],"src":"588:0:14"},"scope":2597,"src":"441:148:14","stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"functionSelector":"18c5e8ab","id":2585,"implemented":false,"kind":"function","modifiers":[],"name":"isAllowedToCall","nameLocation":"604:15:14","nodeType":"FunctionDefinition","parameters":{"id":2581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2578,"mutability":"mutable","name":"account","nameLocation":"628:7:14","nodeType":"VariableDeclaration","scope":2585,"src":"620:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2577,"name":"address","nodeType":"ElementaryTypeName","src":"620:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2580,"mutability":"mutable","name":"functionSig","nameLocation":"653:11:14","nodeType":"VariableDeclaration","scope":2585,"src":"637:27:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2579,"name":"string","nodeType":"ElementaryTypeName","src":"637:6:14","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"619:46:14"},"returnParameters":{"id":2584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2583,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2585,"src":"689:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2582,"name":"bool","nodeType":"ElementaryTypeName","src":"689:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"688:6:14"},"scope":2597,"src":"595:100:14","stateMutability":"view","virtual":false,"visibility":"external"},{"functionSelector":"82bfd0f0","id":2596,"implemented":false,"kind":"function","modifiers":[],"name":"hasPermission","nameLocation":"710:13:14","nodeType":"FunctionDefinition","parameters":{"id":2592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2587,"mutability":"mutable","name":"account","nameLocation":"741:7:14","nodeType":"VariableDeclaration","scope":2596,"src":"733:15:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2586,"name":"address","nodeType":"ElementaryTypeName","src":"733:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2589,"mutability":"mutable","name":"contractAddress","nameLocation":"766:15:14","nodeType":"VariableDeclaration","scope":2596,"src":"758:23:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2588,"name":"address","nodeType":"ElementaryTypeName","src":"758:7:14","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":2591,"mutability":"mutable","name":"functionSig","nameLocation":"807:11:14","nodeType":"VariableDeclaration","scope":2596,"src":"791:27:14","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_string_calldata_ptr","typeString":"string"},"typeName":{"id":2590,"name":"string","nodeType":"ElementaryTypeName","src":"791:6:14","typeDescriptions":{"typeIdentifier":"t_string_storage_ptr","typeString":"string"}},"visibility":"internal"}],"src":"723:101:14"},"returnParameters":{"id":2595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":2596,"src":"848:4:14","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":2593,"name":"bool","nodeType":"ElementaryTypeName","src":"848:4:14","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"847:6:14"},"scope":2597,"src":"701:153:14","stateMutability":"view","virtual":false,"visibility":"external"}],"scope":2598,"src":"261:595:14","usedErrors":[]}],"src":"41:816:14"},"id":14},"contracts/test/MockAccessTest.sol":{"ast":{"absolutePath":"contracts/test/MockAccessTest.sol","exportedSymbols":{"AccessControlledV8":[2552],"AddressUpgradeable":[690],"ContextUpgradeable":[732],"IAccessControl":[1121],"IAccessControlManagerV8":[2597],"Initializable":[406],"MockAccessTest":[2616],"Ownable2StepUpgradeable":[105],"OwnableUpgradeable":[237]},"id":2617,"license":"BSD-3-Clause","nodeType":"SourceUnit","nodes":[{"id":2599,"literals":["solidity","0.8",".13"],"nodeType":"PragmaDirective","src":"41:23:15"},{"absolutePath":"contracts/Governance/AccessControlledV8.sol","file":"../Governance/AccessControlledV8.sol","id":2600,"nameLocation":"-1:-1:-1","nodeType":"ImportDirective","scope":2617,"sourceUnit":2553,"src":"66:46:15","symbolAliases":[],"unitAlias":""},{"abstract":false,"baseContracts":[{"baseName":{"id":2601,"name":"AccessControlledV8","nodeType":"IdentifierPath","referencedDeclaration":2552,"src":"141:18:15"},"id":2602,"nodeType":"InheritanceSpecifier","src":"141:18:15"}],"canonicalName":"MockAccessTest","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":2616,"linearizedBaseContracts":[2616,2552,105,237,732,406],"name":"MockAccessTest","nameLocation":"123:14:15","nodeType":"ContractDefinition","nodes":[{"body":{"id":2614,"nodeType":"Block","src":"328:72:15","statements":[{"expression":{"arguments":[{"id":2611,"name":"accessControlManager","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2605,"src":"372:20:15","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":2610,"name":"__AccessControlled_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":2460,"src":"338:33:15","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":2612,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"names":[],"nodeType":"FunctionCall","src":"338:55:15","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":2613,"nodeType":"ExpressionStatement","src":"338:55:15"}]},"documentation":{"id":2603,"nodeType":"StructuredDocumentation","src":"166:86:15","text":" @param accessControlManager Access control manager contract address"},"functionSelector":"c4d66de8","id":2615,"implemented":true,"kind":"function","modifiers":[{"id":2608,"kind":"modifierInvocation","modifierName":{"id":2607,"name":"initializer","nodeType":"IdentifierPath","referencedDeclaration":308,"src":"316:11:15"},"nodeType":"ModifierInvocation","src":"316:11:15"}],"name":"initialize","nameLocation":"266:10:15","nodeType":"FunctionDefinition","parameters":{"id":2606,"nodeType":"ParameterList","parameters":[{"constant":false,"id":2605,"mutability":"mutable","name":"accessControlManager","nameLocation":"285:20:15","nodeType":"VariableDeclaration","scope":2615,"src":"277:28:15","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":2604,"name":"address","nodeType":"ElementaryTypeName","src":"277:7:15","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"276:30:15"},"returnParameters":{"id":2609,"nodeType":"ParameterList","parameters":[],"src":"328:0:15"},"scope":2616,"src":"257:143:15","stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"scope":2617,"src":"114:288:15","usedErrors":[2433]}],"src":"41:362:15"},"id":15}},"contracts":{"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol":{"Ownable2StepUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).","kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptOwnership()":"79ba5097","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership} and {acceptOwnership}. This module is used through inheritance. It will make available all functions from parent (Ownable).\",\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":\"Ownable2StepUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n function __Ownable2Step_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable2Step_init_unchained() internal onlyInitializing {\\n }\\n address private _pendingOwner;\\n\\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Returns the address of the pending owner.\\n */\\n function pendingOwner() public view virtual returns (address) {\\n return _pendingOwner;\\n }\\n\\n /**\\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual override onlyOwner {\\n _pendingOwner = newOwner;\\n emit OwnershipTransferStarted(owner(), newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual override {\\n delete _pendingOwner;\\n super._transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev The new owner accepts the ownership transfer.\\n */\\n function acceptOwnership() external {\\n address sender = _msgSender();\\n require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n _transferOwnership(sender);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd712fb45b3ea0ab49679164e3895037adc26ce12879d5184feb040e01c1c07a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\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 ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\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 /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":244,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":247,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":731,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":116,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":236,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":25,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":104,"contract":"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol:Ownable2StepUpgradeable","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol":{"OwnableUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"details":"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.","kind":"dev","methods":{"owner()":{"details":"Returns the address of the current owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"transferOwnership(address)":{"details":"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"owner()":"8da5cb5b","renounceOwnership()":"715018a6","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Contract module which provides a basic access control mechanism, where there is an account (an owner) that can be granted exclusive access to specific functions. By default, the owner account will be the one that deploys the contract. This can later be changed with {transferOwnership}. This module is used through inheritance. It will make available the modifier `onlyOwner`, which can be applied to your functions to restrict their use to the owner.\",\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":\"OwnableUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\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 ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\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 /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":244,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":247,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":731,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":116,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":236,"contract":"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol:OwnableUpgradeable","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol":{"Initializable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"}],"devdoc":{"custom:oz-upgrades-unsafe-allow":"constructor constructor() { _disableInitializers(); } ``` ====","details":"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \"step\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ``` contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\"MyToken\", \"MTK\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\"MyToken\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```","events":{"Initialized(uint8)":{"details":"Triggered when the contract has been initialized or reinitialized."}},"kind":"dev","methods":{},"stateVariables":{"_initialized":{"custom:oz-retyped-from":"bool","details":"Indicates that the contract has been initialized."},"_initializing":{"details":"Indicates that the contract is in the process of being initialized."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"devdoc\":{\"custom:oz-upgrades-unsafe-allow\":\"constructor constructor() { _disableInitializers(); } ``` ====\",\"details\":\"This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer function so it can only be called once. The {initializer} modifier provided by this contract will have this effect. The initialization functions use a version number. Once a version number is used, it is consumed and cannot be reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in case an upgrade adds a module that needs to be initialized. For example: [.hljs-theme-light.nopadding] ``` contract MyToken is ERC20Upgradeable { function initialize() initializer public { __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\"); } } contract MyTokenV2 is MyToken, ERC20PermitUpgradeable { function initializeV2() reinitializer(2) public { __ERC20Permit_init(\\\"MyToken\\\"); } } ``` TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}. CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure that all initializers are idempotent. This is not verified automatically as constructors are by Solidity. [CAUTION] ==== Avoid leaving a contract uninitialized. An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke the {_disableInitializers} function in the constructor to automatically lock it when it is deployed: [.hljs-theme-light.nopadding] ```\",\"events\":{\"Initialized(uint8)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"}},\"kind\":\"dev\",\"methods\":{},\"stateVariables\":{\"_initialized\":{\"custom:oz-retyped-from\":\"bool\",\"details\":\"Indicates that the contract has been initialized.\"},\"_initializing\":{\"details\":\"Indicates that the contract is in the process of being initialized.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":\"Initializable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":244,"contract":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:Initializable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":247,"contract":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol:Initializable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"}],"types":{"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol":{"AddressUpgradeable":{"abi":[],"devdoc":{"details":"Collection of functions related to the address type","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f6db4aea646705e03710d87f9f98da7bd3abdfb740282186c4a260f8165b89664736f6c634300080d0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL 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 SWAP16 PUSH14 0xB4AEA646705E03710D87F9F98DA7 0xBD GASPRICE 0xBD 0xFB PUSH21 0x282186C4A260F8165B89664736F6C634300080D00 CALLER ","sourceMap":"194:8087:3:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;194:8087:3;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212209f6db4aea646705e03710d87f9f98da7bd3abdfb740282186c4a260f8165b89664736f6c634300080d0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SWAP16 PUSH14 0xB4AEA646705E03710D87F9F98DA7 0xBD GASPRICE 0xBD 0xFB PUSH21 0x282186C4A260F8165B89664736F6C634300080D00 CALLER ","sourceMap":"194:8087:3:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"_revert(bytes memory,string memory)":"infinite","functionCall(address,bytes memory)":"infinite","functionCall(address,bytes memory,string memory)":"infinite","functionCallWithValue(address,bytes memory,uint256)":"infinite","functionCallWithValue(address,bytes memory,uint256,string memory)":"infinite","functionStaticCall(address,bytes memory)":"infinite","functionStaticCall(address,bytes memory,string memory)":"infinite","isContract(address)":"infinite","sendValue(address payable,uint256)":"infinite","verifyCallResult(bool,bytes memory,string memory)":"infinite","verifyCallResultFromTarget(address,bool,bytes memory,string memory)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"Collection of functions related to the address type\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":\"AddressUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol":{"ContextUpgradeable":{"abi":[{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"}],"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":{},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"}],\"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\":{},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":\"ContextUpgradeable\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\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 ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\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 /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":244,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":247,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":731,"contract":"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:ContextUpgradeable","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"}],"types":{"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/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":{"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"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"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\":{\"@openzeppelin/contracts/access/AccessControl.sol\":\"AccessControl\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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 \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../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\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/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);\\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 // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `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 * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[{"astId":757,"contract":"@openzeppelin/contracts/access/AccessControl.sol:AccessControl","label":"_roles","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_struct(RoleData)752_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)752_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)752_storage"},"t_struct(RoleData)752_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":749,"contract":"@openzeppelin/contracts/access/AccessControl.sol:AccessControl","label":"members","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":751,"contract":"@openzeppelin/contracts/access/AccessControl.sol:AccessControl","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"}}},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/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":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":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.13+commit.abaa5c0e\"},\"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\":{\"@openzeppelin/contracts/access/IAccessControl.sol\":\"IAccessControl\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/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":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"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\":{\"@openzeppelin/contracts/utils/Context.sol\":\"Context\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/Strings.sol":{"Strings":{"abi":[],"devdoc":{"details":"String operations.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e8154714557272e47c783cd047c368a876de89fc355f422bcb192b3758d43a4c64736f6c634300080d0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL 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 0xE8 ISZERO SELFBALANCE EQ SSTORE PUSH19 0x72E47C783CD047C368A876DE89FC355F422BCB NOT 0x2B CALLDATACOPY PC 0xD4 GASPRICE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD 0xD STOP CALLER ","sourceMap":"188:2065:8:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;188:2065:8;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220e8154714557272e47c783cd047c368a876de89fc355f422bcb192b3758d43a4c64736f6c634300080d0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xE8 ISZERO SELFBALANCE EQ SSTORE PUSH19 0x72E47C783CD047C368A876DE89FC355F422BCB NOT 0x2B CALLDATACOPY PC 0xD4 GASPRICE 0x4C PUSH5 0x736F6C6343 STOP ADDMOD 0xD STOP CALLER ","sourceMap":"188:2065:8:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"internal":{"toHexString(address)":"infinite","toHexString(uint256)":"infinite","toHexString(uint256,uint256)":"infinite","toString(uint256)":"infinite"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"details\":\"String operations.\",\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/utils/Strings.sol\":\"Strings\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/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);\\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 // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `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 * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/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":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"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\":{\"@openzeppelin/contracts/utils/introspection/ERC165.sol\":\"ERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/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":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"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\":{\"@openzeppelin/contracts/utils/introspection/IERC165.sol\":\"IERC165\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"@openzeppelin/contracts/utils/math/Math.sol":{"Math":{"abi":[],"devdoc":{"details":"Standard math utilities missing in the Solidity language.","kind":"dev","methods":{},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205585752cd4708afa43ab7dd0ae24fcea1daef008071e2bba1e27c9dc817418f264736f6c634300080d0033","opcodes":"PUSH1 0x56 PUSH1 0x37 PUSH1 0xB DUP3 DUP3 DUP3 CODECOPY DUP1 MLOAD PUSH1 0x0 BYTE PUSH1 0x73 EQ PUSH1 0x2A JUMPI PUSH4 0x4E487B71 PUSH1 0xE0 SHL 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 SSTORE DUP6 PUSH22 0x2CD4708AFA43AB7DD0AE24FCEA1DAEF008071E2BBA1E 0x27 0xC9 0xDC DUP2 PUSH21 0x18F264736F6C634300080D00330000000000000000 ","sourceMap":"202:12302:11:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;202:12302:11;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212205585752cd4708afa43ab7dd0ae24fcea1daef008071e2bba1e27c9dc817418f264736f6c634300080d0033","opcodes":"PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 SSTORE DUP6 PUSH22 0x2CD4708AFA43AB7DD0AE24FCEA1DAEF008071E2BBA1E 0x27 0xC9 0xDC DUP2 PUSH21 0x18F264736F6C634300080D00330000000000000000 ","sourceMap":"202:12302:11:-:0;;;;;;;;"},"gasEstimates":{"creation":{"codeDepositCost":"17200","executionCost":"103","totalCost":"17303"},"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"}},"methodIdentifiers":{}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"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\":{\"@openzeppelin/contracts/utils/math/Math.sol\":\"Math\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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);\\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 // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `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 * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"version":1}}},"contracts/Governance/AccessControlManager.sol":{"AccessControlManager":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"string","name":"functionSig","type":"string"}],"name":"PermissionGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"address","name":"contractAddress","type":"address"},{"indexed":false,"internalType":"string","name":"functionSig","type":"string"}],"name":"PermissionRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"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":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"},{"internalType":"address","name":"accountToPermit","type":"address"}],"name":"giveCallPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"account","type":"address"},{"internalType":"string","name":"functionSig","type":"string"}],"name":"isAllowedToCall","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":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"},{"internalType":"address","name":"accountToRevoke","type":"address"}],"name":"revokeCallPermission","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":{"author":"Venus","details":"This contract is a wrapper of OpenZeppelin AccessControl extending it in a way to standartize access control within Venus Smart Contract Ecosystem.","events":{"PermissionGranted(address,address,string)":{"details":"If contract address is 0x000..0 this means that the account is a default admin of this function and can call any contract function with this signature"}},"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}."},"giveCallPermission(address,string,address)":{"custom:event":"Emits a {RoleGranted} and {PermissionGranted} events.","details":"this function can be called only from Role Admin or DEFAULT_ADMIN_ROLEif contractAddress is zero address, the account can access the specified function on **any** contract managed by this ACL","params":{"accountToPermit":"account that will be given access to the contract function","contractAddress":"address of contract for which call permissions will be granted","functionSig":"signature e.g. \"functionName(uint256,bool)\""}},"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."},"hasPermission(address,address,string)":{"details":"This function is used as a view function to check permissions rather than contract hook for access restriction check.","params":{"account":"for which call permissions will be checked against","contractAddress":"address of the restricted contract","functionSig":"signature of the restricted function e.g. \"functionName(uint256,bool)\""},"returns":{"_0":"false if the user account cannot call the particular contract function"}},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"isAllowedToCall(address,string)":{"details":"Since restricted contracts using this function as a permission hook, we can get contracts address with msg.sender","params":{"account":"for which call permissions will be checked","functionSig":"restricted function signature e.g. \"functionName(uint256,bool)\""},"returns":{"_0":"false if the user account cannot call the particular contract function"}},"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."},"revokeCallPermission(address,string,address)":{"custom:event":"Emits {RoleRevoked} and {PermissionRevoked} events.","details":"this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE \t\tMay emit a {RoleRevoked} event.","params":{"contractAddress":"address of contract for which call permissions will be revoked","functionSig":"signature e.g. \"functionName(uint256,bool)\""}},"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}."}},"title":"AccessControlManager","version":1},"evm":{"bytecode":{"functionDebugData":{"@_2256":{"entryPoint":null,"id":2256,"parameterSlots":0,"returnSlots":0},"@_grantRole_1016":{"entryPoint":47,"id":1016,"parameterSlots":2,"returnSlots":0},"@_msgSender_1133":{"entryPoint":null,"id":1133,"parameterSlots":0,"returnSlots":1},"@_setupRole_956":{"entryPoint":33,"id":956,"parameterSlots":2,"returnSlots":0},"@hasRole_812":{"entryPoint":null,"id":812,"parameterSlots":2,"returnSlots":1}},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b5061001c600033610021565b6100cd565b61002b828261002f565b5050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1661002b576000828152602081815260408083206001600160a01b03851684529091529020805460ff191660011790556100893390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b610f50806100dc6000396000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c8063545f7a321161008157806391d148541161005b57806391d148541461019b578063a217fddf146101df578063d547741f146101e757600080fd5b8063545f7a3214610162578063584f6b601461017557806382bfd0f01461018857600080fd5b8063248a9ca3116100b2578063248a9ca3146101095780632f2ff15d1461013a57806336568abe1461014f57600080fd5b806301ffc9a7146100ce57806318c5e8ab146100f6575b600080fd5b6100e16100dc366004610a74565b6101fa565b60405190151581526020015b60405180910390f35b6100e1610104366004610b28565b610293565b61012c610117366004610b7b565b60009081526020819052604090206001015490565b6040519081526020016100ed565b61014d610148366004610b94565b610368565b005b61014d61015d366004610b94565b610392565b61014d610170366004610bc0565b61044a565b61014d610183366004610bc0565b6104c7565b6100e1610196366004610c25565b610535565b6100e16101a9366004610b94565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61012c600081565b61014d6101f5366004610b94565b61059f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061028d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000803384846040516020016102ab93929190610c86565b60408051601f198184030181529181528151602092830120600081815280845282812073ffffffffffffffffffffffffffffffffffffffff8a16825290935291205490915060ff1615610302576001915050610361565b6000848460405160200161031893929190610c86565b60408051808303601f190181529181528151602092830120600090815280835281812073ffffffffffffffffffffffffffffffffffffffff8916825290925290205460ff169150505b9392505050565b600082815260208190526040902060010154610383816105c4565b61038d83836105d1565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61044682826106c1565b5050565b600084848460405160200161046193929190610c86565b604051602081830303815290604052805190602001209050610483818361059f565b7f55426a61e90ac7d7d1fc886b67b420ade8c8b535e68d655394bc271e3a12b8e2828686866040516104b89493929190610cc5565b60405180910390a15050505050565b60008484846040516020016104de93929190610c86565b6040516020818303038152906040528051906020012090506105008183610368565b7f69c5ce2d658fea352a2464f87ffbe1f09746c918a91da0994044c3767d641b3f828686866040516104b89493929190610cc5565b60008084848460405160200161054d93929190610c86565b60408051601f198184030181529181528151602092830120600081815280845282812073ffffffffffffffffffffffffffffffffffffffff8b16825290935291205490915060ff169695505050505050565b6000828152602081905260409020600101546105ba816105c4565b61038d83836106c1565b6105ce8133610778565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166104465760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556106633390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156104465760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610446576107b681610812565b6107c1836020610831565b6040516020016107d2929190610d4f565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261043391600401610dd0565b606061028d73ffffffffffffffffffffffffffffffffffffffff831660145b60606000610840836002610e32565b61084b906002610e6f565b67ffffffffffffffff81111561086357610863610e87565b6040519080825280601f01601f19166020018201604052801561088d576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106108c4576108c4610eb6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061092757610927610eb6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610963846002610e32565b61096e906001610e6f565b90505b6001811115610a0b577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106109af576109af610eb6565b1a60f81b8282815181106109c5576109c5610eb6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610a0481610ee5565b9050610971565b508315610361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610433565b600060208284031215610a8657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461036157600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610ada57600080fd5b919050565b60008083601f840112610af157600080fd5b50813567ffffffffffffffff811115610b0957600080fd5b602083019150836020828501011115610b2157600080fd5b9250929050565b600080600060408486031215610b3d57600080fd5b610b4684610ab6565b9250602084013567ffffffffffffffff811115610b6257600080fd5b610b6e86828701610adf565b9497909650939450505050565b600060208284031215610b8d57600080fd5b5035919050565b60008060408385031215610ba757600080fd5b82359150610bb760208401610ab6565b90509250929050565b60008060008060608587031215610bd657600080fd5b610bdf85610ab6565b9350602085013567ffffffffffffffff811115610bfb57600080fd5b610c0787828801610adf565b9094509250610c1a905060408601610ab6565b905092959194509250565b60008060008060608587031215610c3b57600080fd5b610c4485610ab6565b9350610c5260208601610ab6565b9250604085013567ffffffffffffffff811115610c6e57600080fd5b610c7a87828801610adf565b95989497509550505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b168152818360148301376000910160140190815292915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060606040830152826060830152828460808401376000608084840101526080601f19601f850116830101905095945050505050565b60005b83811015610d3a578181015183820152602001610d22565b83811115610d49576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610d87816017850160208801610d1f565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351610dc4816028840160208801610d1f565b01602801949350505050565b6020815260008251806020840152610def816040850160208701610d1f565b601f01601f19169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610e6a57610e6a610e03565b500290565b60008219821115610e8257610e82610e03565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081610ef457610ef4610e03565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220641e953a59194b8f69aff3bb5de5a696756347fa60acb6448027016d428fae5064736f6c634300080d0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x1C PUSH1 0x0 CALLER PUSH2 0x21 JUMP JUMPDEST PUSH2 0xCD JUMP JUMPDEST PUSH2 0x2B DUP3 DUP3 PUSH2 0x2F JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x2B JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH1 0xFF NOT AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x89 CALLER SWAP1 JUMP JUMPDEST PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP2 PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH2 0xF50 DUP1 PUSH2 0xDC PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x545F7A32 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0x91D14854 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x545F7A32 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0x584F6B60 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x82BFD0F0 EQ PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x248A9CA3 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x18C5E8AB EQ PUSH2 0xF6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE1 PUSH2 0xDC CALLDATASIZE PUSH1 0x4 PUSH2 0xA74 JUMP JUMPDEST PUSH2 0x1FA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE1 PUSH2 0x104 CALLDATASIZE PUSH1 0x4 PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x293 JUMP JUMPDEST PUSH2 0x12C PUSH2 0x117 CALLDATASIZE PUSH1 0x4 PUSH2 0xB7B JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xED JUMP JUMPDEST PUSH2 0x14D PUSH2 0x148 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x368 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14D PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x392 JUMP JUMPDEST PUSH2 0x14D PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0xBC0 JUMP JUMPDEST PUSH2 0x44A JUMP JUMPDEST PUSH2 0x14D PUSH2 0x183 CALLDATASIZE PUSH1 0x4 PUSH2 0xBC0 JUMP JUMPDEST PUSH2 0x4C7 JUMP JUMPDEST PUSH2 0xE1 PUSH2 0x196 CALLDATASIZE PUSH1 0x4 PUSH2 0xC25 JUMP JUMPDEST PUSH2 0x535 JUMP JUMPDEST PUSH2 0xE1 PUSH2 0x1A9 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x12C PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x14D PUSH2 0x1F5 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 EQ DUP1 PUSH2 0x28D JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 CALLER DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2AB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE DUP1 DUP5 MSTORE DUP3 DUP2 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE SWAP1 SWAP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x302 JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x361 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x318 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x0 SWAP1 DUP2 MSTORE DUP1 DUP4 MSTORE DUP2 DUP2 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 MSTORE SWAP1 SWAP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x383 DUP2 PUSH2 0x5C4 JUMP JUMPDEST PUSH2 0x38D DUP4 DUP4 PUSH2 0x5D1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND CALLER EQ PUSH2 0x43C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416363657373436F6E74726F6C3A2063616E206F6E6C792072656E6F756E6365 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20726F6C657320666F722073656C660000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x446 DUP3 DUP3 PUSH2 0x6C1 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x461 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x483 DUP2 DUP4 PUSH2 0x59F JUMP JUMPDEST PUSH32 0x55426A61E90AC7D7D1FC886B67B420ADE8C8B535E68D655394BC271E3A12B8E2 DUP3 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x4B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xCC5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x4DE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x500 DUP2 DUP4 PUSH2 0x368 JUMP JUMPDEST PUSH32 0x69C5CE2D658FEA352A2464F87FFBE1F09746C918A91DA0994044C3767D641B3F DUP3 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x4B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xCC5 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x54D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE DUP1 DUP5 MSTORE DUP3 DUP2 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND DUP3 MSTORE SWAP1 SWAP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x5BA DUP2 PUSH2 0x5C4 JUMP JUMPDEST PUSH2 0x38D DUP4 DUP4 PUSH2 0x6C1 JUMP JUMPDEST PUSH2 0x5CE DUP2 CALLER PUSH2 0x778 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x446 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x663 CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x446 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP6 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x446 JUMPI PUSH2 0x7B6 DUP2 PUSH2 0x812 JUMP JUMPDEST PUSH2 0x7C1 DUP4 PUSH1 0x20 PUSH2 0x831 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7D2 SWAP3 SWAP2 SWAP1 PUSH2 0xD4F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH2 0x433 SWAP2 PUSH1 0x4 ADD PUSH2 0xDD0 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x28D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x14 JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x840 DUP4 PUSH1 0x2 PUSH2 0xE32 JUMP JUMPDEST PUSH2 0x84B SWAP1 PUSH1 0x2 PUSH2 0xE6F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x863 JUMPI PUSH2 0x863 PUSH2 0xE87 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x88D JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH32 0x3000000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x8C4 JUMPI PUSH2 0x8C4 PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH32 0x7800000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x927 JUMPI PUSH2 0x927 PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x0 PUSH2 0x963 DUP5 PUSH1 0x2 PUSH2 0xE32 JUMP JUMPDEST PUSH2 0x96E SWAP1 PUSH1 0x1 PUSH2 0xE6F JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xA0B JUMPI PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 DUP6 PUSH1 0xF AND PUSH1 0x10 DUP2 LT PUSH2 0x9AF JUMPI PUSH2 0x9AF PUSH2 0xEB6 JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9C5 JUMPI PUSH2 0x9C5 PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x4 SWAP5 SWAP1 SWAP5 SHR SWAP4 PUSH2 0xA04 DUP2 PUSH2 0xEE5 JUMP JUMPDEST SWAP1 POP PUSH2 0x971 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0x361 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537472696E67733A20686578206C656E67746820696E73756666696369656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x433 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xADA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xAF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xB21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB46 DUP5 PUSH2 0xAB6 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6E DUP7 DUP3 DUP8 ADD PUSH2 0xADF JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0xBB7 PUSH1 0x20 DUP5 ADD PUSH2 0xAB6 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xBD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBDF DUP6 PUSH2 0xAB6 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC07 DUP8 DUP3 DUP9 ADD PUSH2 0xADF JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0xC1A SWAP1 POP PUSH1 0x40 DUP7 ADD PUSH2 0xAB6 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC44 DUP6 PUSH2 0xAB6 JUMP JUMPDEST SWAP4 POP PUSH2 0xC52 PUSH1 0x20 DUP7 ADD PUSH2 0xAB6 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC7A DUP8 DUP3 DUP9 ADD PUSH2 0xADF JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP5 PUSH1 0x60 SHL AND DUP2 MSTORE DUP2 DUP4 PUSH1 0x14 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 ADD PUSH1 0x14 ADD SWAP1 DUP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0x60 PUSH1 0x40 DUP4 ADD MSTORE DUP3 PUSH1 0x60 DUP4 ADD MSTORE DUP3 DUP5 PUSH1 0x80 DUP5 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x80 DUP5 DUP5 ADD ADD MSTORE PUSH1 0x80 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP4 ADD ADD SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD3A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD22 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD49 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x416363657373436F6E74726F6C3A206163636F756E7420000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0xD87 DUP2 PUSH1 0x17 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0xD1F JUMP JUMPDEST PUSH32 0x206973206D697373696E6720726F6C6520000000000000000000000000000000 PUSH1 0x17 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0xDC4 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0xD1F JUMP JUMPDEST ADD PUSH1 0x28 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xDEF DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xD1F JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0xE6A JUMPI PUSH2 0xE6A PUSH2 0xE03 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xE82 JUMPI PUSH2 0xE82 PUSH2 0xE03 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH2 0xEF4 JUMPI PUSH2 0xEF4 PUSH2 0xE03 JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x1E953A5919 0x4B DUP16 PUSH10 0xAFF3BB5DE5A696756347 STATICCALL PUSH1 0xAC 0xB6 DIFFICULTY DUP1 0x27 ADD PUSH14 0x428FAE5064736F6C634300080D00 CALLER ","sourceMap":"2815:4310:12:-:0;;;3437:193;;;;;;;;;-1:-1:-1;3581:42:12;2072:4:5;3612:10:12;3581;:42::i;:::-;2815:4310;;6811:110:5;6889:25;6900:4;6906:7;6889:10;:25::i;:::-;6811:110;;:::o;7461:233::-;2981:4;3004:12;;;;;;;;;;;-1:-1:-1;;;;;3004:29:5;;;;;;;;;;;;7539:149;;7582:6;:12;;;;;;;;;;;-1:-1:-1;;;;;7582:29:5;;;;;;;;;:36;;-1:-1:-1;;7582:36:5;7614:4;7582:36;;;7664:12;719:10:7;;640:96;7664:12:5;-1:-1:-1;;;;;7637:40:5;7655:7;-1:-1:-1;;;;;7637:40:5;7649:4;7637:40;;;;;;;;;;7461:233;;:::o;2815:4310:12:-;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@DEFAULT_ADMIN_ROLE_760":{"entryPoint":null,"id":760,"parameterSlots":0,"returnSlots":0},"@_checkRole_825":{"entryPoint":1476,"id":825,"parameterSlots":1,"returnSlots":0},"@_checkRole_864":{"entryPoint":1912,"id":864,"parameterSlots":2,"returnSlots":0},"@_grantRole_1016":{"entryPoint":1489,"id":1016,"parameterSlots":2,"returnSlots":0},"@_msgSender_1133":{"entryPoint":null,"id":1133,"parameterSlots":0,"returnSlots":1},"@_revokeRole_1047":{"entryPoint":1729,"id":1047,"parameterSlots":2,"returnSlots":0},"@getRoleAdmin_879":{"entryPoint":null,"id":879,"parameterSlots":1,"returnSlots":1},"@giveCallPermission_2288":{"entryPoint":1223,"id":2288,"parameterSlots":4,"returnSlots":0},"@grantRole_899":{"entryPoint":872,"id":899,"parameterSlots":2,"returnSlots":0},"@hasPermission_2397":{"entryPoint":1333,"id":2397,"parameterSlots":4,"returnSlots":1},"@hasRole_812":{"entryPoint":null,"id":812,"parameterSlots":2,"returnSlots":1},"@isAllowedToCall_2369":{"entryPoint":659,"id":2369,"parameterSlots":3,"returnSlots":1},"@renounceRole_942":{"entryPoint":914,"id":942,"parameterSlots":2,"returnSlots":0},"@revokeCallPermission_2320":{"entryPoint":1098,"id":2320,"parameterSlots":4,"returnSlots":0},"@revokeRole_919":{"entryPoint":1439,"id":919,"parameterSlots":2,"returnSlots":0},"@supportsInterface_1341":{"entryPoint":null,"id":1341,"parameterSlots":1,"returnSlots":1},"@supportsInterface_793":{"entryPoint":506,"id":793,"parameterSlots":1,"returnSlots":1},"@toHexString_1297":{"entryPoint":2097,"id":1297,"parameterSlots":2,"returnSlots":1},"@toHexString_1317":{"entryPoint":2066,"id":1317,"parameterSlots":1,"returnSlots":1},"abi_decode_address":{"entryPoint":2742,"id":null,"parameterSlots":1,"returnSlots":1},"abi_decode_string_calldata":{"entryPoint":2783,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_addresst_addresst_string_calldata_ptr":{"entryPoint":3109,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_addresst_string_calldata_ptr":{"entryPoint":2856,"id":null,"parameterSlots":2,"returnSlots":3},"abi_decode_tuple_t_addresst_string_calldata_ptrt_address":{"entryPoint":3008,"id":null,"parameterSlots":2,"returnSlots":4},"abi_decode_tuple_t_bytes32":{"entryPoint":2939,"id":null,"parameterSlots":2,"returnSlots":1},"abi_decode_tuple_t_bytes32t_address":{"entryPoint":2964,"id":null,"parameterSlots":2,"returnSlots":2},"abi_decode_tuple_t_bytes4":{"entryPoint":2676,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_packed_t_address_t_string_calldata_ptr__to_t_address_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":3206,"id":null,"parameterSlots":4,"returnSlots":1},"abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed":{"entryPoint":3407,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_address_t_address_t_string_calldata_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3269,"id":null,"parameterSlots":5,"returnSlots":1},"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":3536,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"checked_add_t_uint256":{"entryPoint":3695,"id":null,"parameterSlots":2,"returnSlots":1},"checked_mul_t_uint256":{"entryPoint":3634,"id":null,"parameterSlots":2,"returnSlots":1},"copy_memory_to_memory":{"entryPoint":3359,"id":null,"parameterSlots":3,"returnSlots":0},"decrement_t_uint256":{"entryPoint":3813,"id":null,"parameterSlots":1,"returnSlots":1},"panic_error_0x11":{"entryPoint":3587,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x32":{"entryPoint":3766,"id":null,"parameterSlots":0,"returnSlots":0},"panic_error_0x41":{"entryPoint":3719,"id":null,"parameterSlots":0,"returnSlots":0}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:7862:16","statements":[{"nodeType":"YulBlock","src":"6:3:16","statements":[]},{"body":{"nodeType":"YulBlock","src":"83:263:16","statements":[{"body":{"nodeType":"YulBlock","src":"129:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"138:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"141:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"131:6:16"},"nodeType":"YulFunctionCall","src":"131:12:16"},"nodeType":"YulExpressionStatement","src":"131:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"104:7:16"},{"name":"headStart","nodeType":"YulIdentifier","src":"113:9:16"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"100:3:16"},"nodeType":"YulFunctionCall","src":"100:23:16"},{"kind":"number","nodeType":"YulLiteral","src":"125:2:16","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"96:3:16"},"nodeType":"YulFunctionCall","src":"96:32:16"},"nodeType":"YulIf","src":"93:52:16"},{"nodeType":"YulVariableDeclaration","src":"154:36:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"180:9:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"167:12:16"},"nodeType":"YulFunctionCall","src":"167:23:16"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"158:5:16","type":""}]},{"body":{"nodeType":"YulBlock","src":"300:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"309:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"312:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"302:6:16"},"nodeType":"YulFunctionCall","src":"302:12:16"},"nodeType":"YulExpressionStatement","src":"302:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"212:5:16"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"223:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"230:66:16","type":"","value":"0xffffffff00000000000000000000000000000000000000000000000000000000"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"219:3:16"},"nodeType":"YulFunctionCall","src":"219:78:16"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"209:2:16"},"nodeType":"YulFunctionCall","src":"209:89:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"202:6:16"},"nodeType":"YulFunctionCall","src":"202:97:16"},"nodeType":"YulIf","src":"199:117:16"},{"nodeType":"YulAssignment","src":"325:15:16","value":{"name":"value","nodeType":"YulIdentifier","src":"335:5:16"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"325:6:16"}]}]},"name":"abi_decode_tuple_t_bytes4","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"49:9:16","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"60:7:16","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"72:6:16","type":""}],"src":"14:332:16"},{"body":{"nodeType":"YulBlock","src":"446:92:16","statements":[{"nodeType":"YulAssignment","src":"456:26:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"468:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"479:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"464:3:16"},"nodeType":"YulFunctionCall","src":"464:18:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"456:4:16"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"498:9:16"},{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"523:6:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"516:6:16"},"nodeType":"YulFunctionCall","src":"516:14:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"509:6:16"},"nodeType":"YulFunctionCall","src":"509:22:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"491:6:16"},"nodeType":"YulFunctionCall","src":"491:41:16"},"nodeType":"YulExpressionStatement","src":"491:41:16"}]},"name":"abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"415:9:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"426:6:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"437:4:16","type":""}],"src":"351:187:16"},{"body":{"nodeType":"YulBlock","src":"592:147:16","statements":[{"nodeType":"YulAssignment","src":"602:29:16","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"624:6:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"611:12:16"},"nodeType":"YulFunctionCall","src":"611:20:16"},"variableNames":[{"name":"value","nodeType":"YulIdentifier","src":"602:5:16"}]},{"body":{"nodeType":"YulBlock","src":"717:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"726:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"729:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"719:6:16"},"nodeType":"YulFunctionCall","src":"719:12:16"},"nodeType":"YulExpressionStatement","src":"719:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"653:5:16"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"664:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"671:42:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"660:3:16"},"nodeType":"YulFunctionCall","src":"660:54:16"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"650:2:16"},"nodeType":"YulFunctionCall","src":"650:65:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"643:6:16"},"nodeType":"YulFunctionCall","src":"643:73:16"},"nodeType":"YulIf","src":"640:93:16"}]},"name":"abi_decode_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"571:6:16","type":""}],"returnVariables":[{"name":"value","nodeType":"YulTypedName","src":"582:5:16","type":""}],"src":"543:196:16"},{"body":{"nodeType":"YulBlock","src":"817:275:16","statements":[{"body":{"nodeType":"YulBlock","src":"866:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"875:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"878:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"868:6:16"},"nodeType":"YulFunctionCall","src":"868:12:16"},"nodeType":"YulExpressionStatement","src":"868:12:16"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"845:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"853:4:16","type":"","value":"0x1f"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"841:3:16"},"nodeType":"YulFunctionCall","src":"841:17:16"},{"name":"end","nodeType":"YulIdentifier","src":"860:3:16"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"837:3:16"},"nodeType":"YulFunctionCall","src":"837:27:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"830:6:16"},"nodeType":"YulFunctionCall","src":"830:35:16"},"nodeType":"YulIf","src":"827:55:16"},{"nodeType":"YulAssignment","src":"891:30:16","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"914:6:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"901:12:16"},"nodeType":"YulFunctionCall","src":"901:20:16"},"variableNames":[{"name":"length","nodeType":"YulIdentifier","src":"891:6:16"}]},{"body":{"nodeType":"YulBlock","src":"964:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"973:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"976:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"966:6:16"},"nodeType":"YulFunctionCall","src":"966:12:16"},"nodeType":"YulExpressionStatement","src":"966:12:16"}]},"condition":{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"936:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"944:18:16","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"933:2:16"},"nodeType":"YulFunctionCall","src":"933:30:16"},"nodeType":"YulIf","src":"930:50:16"},{"nodeType":"YulAssignment","src":"989:29:16","value":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1005:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"1013:4:16","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1001:3:16"},"nodeType":"YulFunctionCall","src":"1001:17:16"},"variableNames":[{"name":"arrayPos","nodeType":"YulIdentifier","src":"989:8:16"}]},{"body":{"nodeType":"YulBlock","src":"1070:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1079:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1082:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1072:6:16"},"nodeType":"YulFunctionCall","src":"1072:12:16"},"nodeType":"YulExpressionStatement","src":"1072:12:16"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1041:6:16"},{"name":"length","nodeType":"YulIdentifier","src":"1049:6:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1037:3:16"},"nodeType":"YulFunctionCall","src":"1037:19:16"},{"kind":"number","nodeType":"YulLiteral","src":"1058:4:16","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1033:3:16"},"nodeType":"YulFunctionCall","src":"1033:30:16"},{"name":"end","nodeType":"YulIdentifier","src":"1065:3:16"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1030:2:16"},"nodeType":"YulFunctionCall","src":"1030:39:16"},"nodeType":"YulIf","src":"1027:59:16"}]},"name":"abi_decode_string_calldata","nodeType":"YulFunctionDefinition","parameters":[{"name":"offset","nodeType":"YulTypedName","src":"780:6:16","type":""},{"name":"end","nodeType":"YulTypedName","src":"788:3:16","type":""}],"returnVariables":[{"name":"arrayPos","nodeType":"YulTypedName","src":"796:8:16","type":""},{"name":"length","nodeType":"YulTypedName","src":"806:6:16","type":""}],"src":"744:348:16"},{"body":{"nodeType":"YulBlock","src":"1204:378:16","statements":[{"body":{"nodeType":"YulBlock","src":"1250:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1259:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1262:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1252:6:16"},"nodeType":"YulFunctionCall","src":"1252:12:16"},"nodeType":"YulExpressionStatement","src":"1252:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1225:7:16"},{"name":"headStart","nodeType":"YulIdentifier","src":"1234:9:16"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1221:3:16"},"nodeType":"YulFunctionCall","src":"1221:23:16"},{"kind":"number","nodeType":"YulLiteral","src":"1246:2:16","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1217:3:16"},"nodeType":"YulFunctionCall","src":"1217:32:16"},"nodeType":"YulIf","src":"1214:52:16"},{"nodeType":"YulAssignment","src":"1275:39:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1304:9:16"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"1285:18:16"},"nodeType":"YulFunctionCall","src":"1285:29:16"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1275:6:16"}]},{"nodeType":"YulVariableDeclaration","src":"1323:46:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1354:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1365:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1350:3:16"},"nodeType":"YulFunctionCall","src":"1350:18:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1337:12:16"},"nodeType":"YulFunctionCall","src":"1337:32:16"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"1327:6:16","type":""}]},{"body":{"nodeType":"YulBlock","src":"1412:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1421:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1424:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1414:6:16"},"nodeType":"YulFunctionCall","src":"1414:12:16"},"nodeType":"YulExpressionStatement","src":"1414:12:16"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"1384:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"1392:18:16","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"1381:2:16"},"nodeType":"YulFunctionCall","src":"1381:30:16"},"nodeType":"YulIf","src":"1378:50:16"},{"nodeType":"YulVariableDeclaration","src":"1437:85:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1494:9:16"},{"name":"offset","nodeType":"YulIdentifier","src":"1505:6:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1490:3:16"},"nodeType":"YulFunctionCall","src":"1490:22:16"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"1514:7:16"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"1463:26:16"},"nodeType":"YulFunctionCall","src":"1463:59:16"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"1441:8:16","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"1451:8:16","type":""}]},{"nodeType":"YulAssignment","src":"1531:18:16","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"1541:8:16"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"1531:6:16"}]},{"nodeType":"YulAssignment","src":"1558:18:16","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"1568:8:16"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"1558:6:16"}]}]},"name":"abi_decode_tuple_t_addresst_string_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1154:9:16","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1165:7:16","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1177:6:16","type":""},{"name":"value1","nodeType":"YulTypedName","src":"1185:6:16","type":""},{"name":"value2","nodeType":"YulTypedName","src":"1193:6:16","type":""}],"src":"1097:485:16"},{"body":{"nodeType":"YulBlock","src":"1657:110:16","statements":[{"body":{"nodeType":"YulBlock","src":"1703:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"1712:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"1715:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"1705:6:16"},"nodeType":"YulFunctionCall","src":"1705:12:16"},"nodeType":"YulExpressionStatement","src":"1705:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"1678:7:16"},{"name":"headStart","nodeType":"YulIdentifier","src":"1687:9:16"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"1674:3:16"},"nodeType":"YulFunctionCall","src":"1674:23:16"},{"kind":"number","nodeType":"YulLiteral","src":"1699:2:16","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"1670:3:16"},"nodeType":"YulFunctionCall","src":"1670:32:16"},"nodeType":"YulIf","src":"1667:52:16"},{"nodeType":"YulAssignment","src":"1728:33:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1751:9:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"1738:12:16"},"nodeType":"YulFunctionCall","src":"1738:23:16"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"1728:6:16"}]}]},"name":"abi_decode_tuple_t_bytes32","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1623:9:16","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"1634:7:16","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"1646:6:16","type":""}],"src":"1587:180:16"},{"body":{"nodeType":"YulBlock","src":"1873:76:16","statements":[{"nodeType":"YulAssignment","src":"1883:26:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1895:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1906:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1891:3:16"},"nodeType":"YulFunctionCall","src":"1891:18:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1883:4:16"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1925:9:16"},{"name":"value0","nodeType":"YulIdentifier","src":"1936:6:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1918:6:16"},"nodeType":"YulFunctionCall","src":"1918:25:16"},"nodeType":"YulExpressionStatement","src":"1918:25:16"}]},"name":"abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1842:9:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1853:6:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1864:4:16","type":""}],"src":"1772:177:16"},{"body":{"nodeType":"YulBlock","src":"2041:167:16","statements":[{"body":{"nodeType":"YulBlock","src":"2087:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2096:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2099:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2089:6:16"},"nodeType":"YulFunctionCall","src":"2089:12:16"},"nodeType":"YulExpressionStatement","src":"2089:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2062:7:16"},{"name":"headStart","nodeType":"YulIdentifier","src":"2071:9:16"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2058:3:16"},"nodeType":"YulFunctionCall","src":"2058:23:16"},{"kind":"number","nodeType":"YulLiteral","src":"2083:2:16","type":"","value":"64"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2054:3:16"},"nodeType":"YulFunctionCall","src":"2054:32:16"},"nodeType":"YulIf","src":"2051:52:16"},{"nodeType":"YulAssignment","src":"2112:33:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2135:9:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2122:12:16"},"nodeType":"YulFunctionCall","src":"2122:23:16"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2112:6:16"}]},{"nodeType":"YulAssignment","src":"2154:48:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2187:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2198:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2183:3:16"},"nodeType":"YulFunctionCall","src":"2183:18:16"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2164:18:16"},"nodeType":"YulFunctionCall","src":"2164:38:16"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2154:6:16"}]}]},"name":"abi_decode_tuple_t_bytes32t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1999:9:16","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2010:7:16","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2022:6:16","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2030:6:16","type":""}],"src":"1954:254:16"},{"body":{"nodeType":"YulBlock","src":"2337:435:16","statements":[{"body":{"nodeType":"YulBlock","src":"2383:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2392:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2395:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2385:6:16"},"nodeType":"YulFunctionCall","src":"2385:12:16"},"nodeType":"YulExpressionStatement","src":"2385:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2358:7:16"},{"name":"headStart","nodeType":"YulIdentifier","src":"2367:9:16"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2354:3:16"},"nodeType":"YulFunctionCall","src":"2354:23:16"},{"kind":"number","nodeType":"YulLiteral","src":"2379:2:16","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2350:3:16"},"nodeType":"YulFunctionCall","src":"2350:32:16"},"nodeType":"YulIf","src":"2347:52:16"},{"nodeType":"YulAssignment","src":"2408:39:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2437:9:16"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2418:18:16"},"nodeType":"YulFunctionCall","src":"2418:29:16"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2408:6:16"}]},{"nodeType":"YulVariableDeclaration","src":"2456:46:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2487:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2498:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2483:3:16"},"nodeType":"YulFunctionCall","src":"2483:18:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"2470:12:16"},"nodeType":"YulFunctionCall","src":"2470:32:16"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"2460:6:16","type":""}]},{"body":{"nodeType":"YulBlock","src":"2545:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2554:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2557:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2547:6:16"},"nodeType":"YulFunctionCall","src":"2547:12:16"},"nodeType":"YulExpressionStatement","src":"2547:12:16"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"2517:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"2525:18:16","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"2514:2:16"},"nodeType":"YulFunctionCall","src":"2514:30:16"},"nodeType":"YulIf","src":"2511:50:16"},{"nodeType":"YulVariableDeclaration","src":"2570:85:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2627:9:16"},{"name":"offset","nodeType":"YulIdentifier","src":"2638:6:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2623:3:16"},"nodeType":"YulFunctionCall","src":"2623:22:16"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"2647:7:16"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"2596:26:16"},"nodeType":"YulFunctionCall","src":"2596:59:16"},"variables":[{"name":"value1_1","nodeType":"YulTypedName","src":"2574:8:16","type":""},{"name":"value2_1","nodeType":"YulTypedName","src":"2584:8:16","type":""}]},{"nodeType":"YulAssignment","src":"2664:18:16","value":{"name":"value1_1","nodeType":"YulIdentifier","src":"2674:8:16"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"2664:6:16"}]},{"nodeType":"YulAssignment","src":"2691:18:16","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"2701:8:16"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"2691:6:16"}]},{"nodeType":"YulAssignment","src":"2718:48:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2751:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2762:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2747:3:16"},"nodeType":"YulFunctionCall","src":"2747:18:16"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2728:18:16"},"nodeType":"YulFunctionCall","src":"2728:38:16"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"2718:6:16"}]}]},"name":"abi_decode_tuple_t_addresst_string_calldata_ptrt_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2279:9:16","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2290:7:16","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2302:6:16","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2310:6:16","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2318:6:16","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2326:6:16","type":""}],"src":"2213:559:16"},{"body":{"nodeType":"YulBlock","src":"2901:435:16","statements":[{"body":{"nodeType":"YulBlock","src":"2947:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"2956:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"2959:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"2949:6:16"},"nodeType":"YulFunctionCall","src":"2949:12:16"},"nodeType":"YulExpressionStatement","src":"2949:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"2922:7:16"},{"name":"headStart","nodeType":"YulIdentifier","src":"2931:9:16"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"2918:3:16"},"nodeType":"YulFunctionCall","src":"2918:23:16"},{"kind":"number","nodeType":"YulLiteral","src":"2943:2:16","type":"","value":"96"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"2914:3:16"},"nodeType":"YulFunctionCall","src":"2914:32:16"},"nodeType":"YulIf","src":"2911:52:16"},{"nodeType":"YulAssignment","src":"2972:39:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3001:9:16"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"2982:18:16"},"nodeType":"YulFunctionCall","src":"2982:29:16"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"2972:6:16"}]},{"nodeType":"YulAssignment","src":"3020:48:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3053:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"3064:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3049:3:16"},"nodeType":"YulFunctionCall","src":"3049:18:16"}],"functionName":{"name":"abi_decode_address","nodeType":"YulIdentifier","src":"3030:18:16"},"nodeType":"YulFunctionCall","src":"3030:38:16"},"variableNames":[{"name":"value1","nodeType":"YulIdentifier","src":"3020:6:16"}]},{"nodeType":"YulVariableDeclaration","src":"3077:46:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3108:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"3119:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3104:3:16"},"nodeType":"YulFunctionCall","src":"3104:18:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"3091:12:16"},"nodeType":"YulFunctionCall","src":"3091:32:16"},"variables":[{"name":"offset","nodeType":"YulTypedName","src":"3081:6:16","type":""}]},{"body":{"nodeType":"YulBlock","src":"3166:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3175:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"3178:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"3168:6:16"},"nodeType":"YulFunctionCall","src":"3168:12:16"},"nodeType":"YulExpressionStatement","src":"3168:12:16"}]},"condition":{"arguments":[{"name":"offset","nodeType":"YulIdentifier","src":"3138:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"3146:18:16","type":"","value":"0xffffffffffffffff"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"3135:2:16"},"nodeType":"YulFunctionCall","src":"3135:30:16"},"nodeType":"YulIf","src":"3132:50:16"},{"nodeType":"YulVariableDeclaration","src":"3191:85:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3248:9:16"},{"name":"offset","nodeType":"YulIdentifier","src":"3259:6:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3244:3:16"},"nodeType":"YulFunctionCall","src":"3244:22:16"},{"name":"dataEnd","nodeType":"YulIdentifier","src":"3268:7:16"}],"functionName":{"name":"abi_decode_string_calldata","nodeType":"YulIdentifier","src":"3217:26:16"},"nodeType":"YulFunctionCall","src":"3217:59:16"},"variables":[{"name":"value2_1","nodeType":"YulTypedName","src":"3195:8:16","type":""},{"name":"value3_1","nodeType":"YulTypedName","src":"3205:8:16","type":""}]},{"nodeType":"YulAssignment","src":"3285:18:16","value":{"name":"value2_1","nodeType":"YulIdentifier","src":"3295:8:16"},"variableNames":[{"name":"value2","nodeType":"YulIdentifier","src":"3285:6:16"}]},{"nodeType":"YulAssignment","src":"3312:18:16","value":{"name":"value3_1","nodeType":"YulIdentifier","src":"3322:8:16"},"variableNames":[{"name":"value3","nodeType":"YulIdentifier","src":"3312:6:16"}]}]},"name":"abi_decode_tuple_t_addresst_addresst_string_calldata_ptr","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2843:9:16","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"2854:7:16","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"2866:6:16","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2874:6:16","type":""},{"name":"value2","nodeType":"YulTypedName","src":"2882:6:16","type":""},{"name":"value3","nodeType":"YulTypedName","src":"2890:6:16","type":""}],"src":"2777:559:16"},{"body":{"nodeType":"YulBlock","src":"3518:252:16","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3535:3:16"},{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"3548:2:16","type":"","value":"96"},{"name":"value0","nodeType":"YulIdentifier","src":"3552:6:16"}],"functionName":{"name":"shl","nodeType":"YulIdentifier","src":"3544:3:16"},"nodeType":"YulFunctionCall","src":"3544:15:16"},{"kind":"number","nodeType":"YulLiteral","src":"3561:66:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"3540:3:16"},"nodeType":"YulFunctionCall","src":"3540:88:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3528:6:16"},"nodeType":"YulFunctionCall","src":"3528:101:16"},"nodeType":"YulExpressionStatement","src":"3528:101:16"},{"expression":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3655:3:16"},{"kind":"number","nodeType":"YulLiteral","src":"3660:2:16","type":"","value":"20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3651:3:16"},"nodeType":"YulFunctionCall","src":"3651:12:16"},{"name":"value1","nodeType":"YulIdentifier","src":"3665:6:16"},{"name":"value2","nodeType":"YulIdentifier","src":"3673:6:16"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"3638:12:16"},"nodeType":"YulFunctionCall","src":"3638:42:16"},"nodeType":"YulExpressionStatement","src":"3638:42:16"},{"nodeType":"YulVariableDeclaration","src":"3689:35:16","value":{"arguments":[{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"3707:3:16"},{"name":"value2","nodeType":"YulIdentifier","src":"3712:6:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3703:3:16"},"nodeType":"YulFunctionCall","src":"3703:16:16"},{"kind":"number","nodeType":"YulLiteral","src":"3721:2:16","type":"","value":"20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3699:3:16"},"nodeType":"YulFunctionCall","src":"3699:25:16"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"3693:2:16","type":""}]},{"expression":{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"3740:2:16"},{"kind":"number","nodeType":"YulLiteral","src":"3744:1:16","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3733:6:16"},"nodeType":"YulFunctionCall","src":"3733:13:16"},"nodeType":"YulExpressionStatement","src":"3733:13:16"},{"nodeType":"YulAssignment","src":"3755:9:16","value":{"name":"_1","nodeType":"YulIdentifier","src":"3762:2:16"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"3755:3:16"}]}]},"name":"abi_encode_tuple_packed_t_address_t_string_calldata_ptr__to_t_address_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"3478:3:16","type":""},{"name":"value2","nodeType":"YulTypedName","src":"3483:6:16","type":""},{"name":"value1","nodeType":"YulTypedName","src":"3491:6:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"3499:6:16","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"3510:3:16","type":""}],"src":"3341:429:16"},{"body":{"nodeType":"YulBlock","src":"3949:237:16","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3966:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"3977:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3959:6:16"},"nodeType":"YulFunctionCall","src":"3959:21:16"},"nodeType":"YulExpressionStatement","src":"3959:21:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4000:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"4011:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3996:3:16"},"nodeType":"YulFunctionCall","src":"3996:18:16"},{"kind":"number","nodeType":"YulLiteral","src":"4016:2:16","type":"","value":"47"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3989:6:16"},"nodeType":"YulFunctionCall","src":"3989:30:16"},"nodeType":"YulExpressionStatement","src":"3989:30:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4039:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"4050:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4035:3:16"},"nodeType":"YulFunctionCall","src":"4035:18:16"},{"hexValue":"416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e6365","kind":"string","nodeType":"YulLiteral","src":"4055:34:16","type":"","value":"AccessControl: can only renounce"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4028:6:16"},"nodeType":"YulFunctionCall","src":"4028:62:16"},"nodeType":"YulExpressionStatement","src":"4028:62:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4110:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"4121:2:16","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4106:3:16"},"nodeType":"YulFunctionCall","src":"4106:18:16"},{"hexValue":"20726f6c657320666f722073656c66","kind":"string","nodeType":"YulLiteral","src":"4126:17:16","type":"","value":" roles for self"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4099:6:16"},"nodeType":"YulFunctionCall","src":"4099:45:16"},"nodeType":"YulExpressionStatement","src":"4099:45:16"},{"nodeType":"YulAssignment","src":"4153:27:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4165:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"4176:3:16","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4161:3:16"},"nodeType":"YulFunctionCall","src":"4161:19:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4153:4:16"}]}]},"name":"abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3926:9:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3940:4:16","type":""}],"src":"3775:411:16"},{"body":{"nodeType":"YulBlock","src":"4378:486:16","statements":[{"nodeType":"YulVariableDeclaration","src":"4388:52:16","value":{"kind":"number","nodeType":"YulLiteral","src":"4398:42:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"4392:2:16","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4456:9:16"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"4471:6:16"},{"name":"_1","nodeType":"YulIdentifier","src":"4479:2:16"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4467:3:16"},"nodeType":"YulFunctionCall","src":"4467:15:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4449:6:16"},"nodeType":"YulFunctionCall","src":"4449:34:16"},"nodeType":"YulExpressionStatement","src":"4449:34:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4503:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"4514:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4499:3:16"},"nodeType":"YulFunctionCall","src":"4499:18:16"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"4523:6:16"},{"name":"_1","nodeType":"YulIdentifier","src":"4531:2:16"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4519:3:16"},"nodeType":"YulFunctionCall","src":"4519:15:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4492:6:16"},"nodeType":"YulFunctionCall","src":"4492:43:16"},"nodeType":"YulExpressionStatement","src":"4492:43:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4555:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"4566:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4551:3:16"},"nodeType":"YulFunctionCall","src":"4551:18:16"},{"kind":"number","nodeType":"YulLiteral","src":"4571:2:16","type":"","value":"96"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4544:6:16"},"nodeType":"YulFunctionCall","src":"4544:30:16"},"nodeType":"YulExpressionStatement","src":"4544:30:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4594:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"4605:2:16","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4590:3:16"},"nodeType":"YulFunctionCall","src":"4590:18:16"},{"name":"value3","nodeType":"YulIdentifier","src":"4610:6:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4583:6:16"},"nodeType":"YulFunctionCall","src":"4583:34:16"},"nodeType":"YulExpressionStatement","src":"4583:34:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4643:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"4654:3:16","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4639:3:16"},"nodeType":"YulFunctionCall","src":"4639:19:16"},{"name":"value2","nodeType":"YulIdentifier","src":"4660:6:16"},{"name":"value3","nodeType":"YulIdentifier","src":"4668:6:16"}],"functionName":{"name":"calldatacopy","nodeType":"YulIdentifier","src":"4626:12:16"},"nodeType":"YulFunctionCall","src":"4626:49:16"},"nodeType":"YulExpressionStatement","src":"4626:49:16"},{"expression":{"arguments":[{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4699:9:16"},{"name":"value3","nodeType":"YulIdentifier","src":"4710:6:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4695:3:16"},"nodeType":"YulFunctionCall","src":"4695:22:16"},{"kind":"number","nodeType":"YulLiteral","src":"4719:3:16","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4691:3:16"},"nodeType":"YulFunctionCall","src":"4691:32:16"},{"kind":"number","nodeType":"YulLiteral","src":"4725:1:16","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"4684:6:16"},"nodeType":"YulFunctionCall","src":"4684:43:16"},"nodeType":"YulExpressionStatement","src":"4684:43:16"},{"nodeType":"YulAssignment","src":"4736:122:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"4752:9:16"},{"arguments":[{"arguments":[{"name":"value3","nodeType":"YulIdentifier","src":"4771:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"4779:2:16","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4767:3:16"},"nodeType":"YulFunctionCall","src":"4767:15:16"},{"kind":"number","nodeType":"YulLiteral","src":"4784:66:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"4763:3:16"},"nodeType":"YulFunctionCall","src":"4763:88:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4748:3:16"},"nodeType":"YulFunctionCall","src":"4748:104:16"},{"kind":"number","nodeType":"YulLiteral","src":"4854:3:16","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4744:3:16"},"nodeType":"YulFunctionCall","src":"4744:114:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"4736:4:16"}]}]},"name":"abi_encode_tuple_t_address_t_address_t_string_calldata_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"4323:9:16","type":""},{"name":"value3","nodeType":"YulTypedName","src":"4334:6:16","type":""},{"name":"value2","nodeType":"YulTypedName","src":"4342:6:16","type":""},{"name":"value1","nodeType":"YulTypedName","src":"4350:6:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"4358:6:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"4369:4:16","type":""}],"src":"4191:673:16"},{"body":{"nodeType":"YulBlock","src":"4922:205:16","statements":[{"nodeType":"YulVariableDeclaration","src":"4932:10:16","value":{"kind":"number","nodeType":"YulLiteral","src":"4941:1:16","type":"","value":"0"},"variables":[{"name":"i","nodeType":"YulTypedName","src":"4936:1:16","type":""}]},{"body":{"nodeType":"YulBlock","src":"5001:63:16","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5026:3:16"},{"name":"i","nodeType":"YulIdentifier","src":"5031:1:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5022:3:16"},"nodeType":"YulFunctionCall","src":"5022:11:16"},{"arguments":[{"arguments":[{"name":"src","nodeType":"YulIdentifier","src":"5045:3:16"},{"name":"i","nodeType":"YulIdentifier","src":"5050:1:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5041:3:16"},"nodeType":"YulFunctionCall","src":"5041:11:16"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5035:5:16"},"nodeType":"YulFunctionCall","src":"5035:18:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5015:6:16"},"nodeType":"YulFunctionCall","src":"5015:39:16"},"nodeType":"YulExpressionStatement","src":"5015:39:16"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4962:1:16"},{"name":"length","nodeType":"YulIdentifier","src":"4965:6:16"}],"functionName":{"name":"lt","nodeType":"YulIdentifier","src":"4959:2:16"},"nodeType":"YulFunctionCall","src":"4959:13:16"},"nodeType":"YulForLoop","post":{"nodeType":"YulBlock","src":"4973:19:16","statements":[{"nodeType":"YulAssignment","src":"4975:15:16","value":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"4984:1:16"},{"kind":"number","nodeType":"YulLiteral","src":"4987:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"4980:3:16"},"nodeType":"YulFunctionCall","src":"4980:10:16"},"variableNames":[{"name":"i","nodeType":"YulIdentifier","src":"4975:1:16"}]}]},"pre":{"nodeType":"YulBlock","src":"4955:3:16","statements":[]},"src":"4951:113:16"},{"body":{"nodeType":"YulBlock","src":"5090:31:16","statements":[{"expression":{"arguments":[{"arguments":[{"name":"dst","nodeType":"YulIdentifier","src":"5103:3:16"},{"name":"length","nodeType":"YulIdentifier","src":"5108:6:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5099:3:16"},"nodeType":"YulFunctionCall","src":"5099:16:16"},{"kind":"number","nodeType":"YulLiteral","src":"5117:1:16","type":"","value":"0"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5092:6:16"},"nodeType":"YulFunctionCall","src":"5092:27:16"},"nodeType":"YulExpressionStatement","src":"5092:27:16"}]},"condition":{"arguments":[{"name":"i","nodeType":"YulIdentifier","src":"5079:1:16"},{"name":"length","nodeType":"YulIdentifier","src":"5082:6:16"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"5076:2:16"},"nodeType":"YulFunctionCall","src":"5076:13:16"},"nodeType":"YulIf","src":"5073:48:16"}]},"name":"copy_memory_to_memory","nodeType":"YulFunctionDefinition","parameters":[{"name":"src","nodeType":"YulTypedName","src":"4900:3:16","type":""},{"name":"dst","nodeType":"YulTypedName","src":"4905:3:16","type":""},{"name":"length","nodeType":"YulTypedName","src":"4910:6:16","type":""}],"src":"4869:258:16"},{"body":{"nodeType":"YulBlock","src":"5521:397:16","statements":[{"expression":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5538:3:16"},{"hexValue":"416363657373436f6e74726f6c3a206163636f756e7420","kind":"string","nodeType":"YulLiteral","src":"5543:25:16","type":"","value":"AccessControl: account "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5531:6:16"},"nodeType":"YulFunctionCall","src":"5531:38:16"},"nodeType":"YulExpressionStatement","src":"5531:38:16"},{"nodeType":"YulVariableDeclaration","src":"5578:27:16","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5598:6:16"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5592:5:16"},"nodeType":"YulFunctionCall","src":"5592:13:16"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"5582:6:16","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"5640:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"5648:4:16","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5636:3:16"},"nodeType":"YulFunctionCall","src":"5636:17:16"},{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5659:3:16"},{"kind":"number","nodeType":"YulLiteral","src":"5664:2:16","type":"","value":"23"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5655:3:16"},"nodeType":"YulFunctionCall","src":"5655:12:16"},{"name":"length","nodeType":"YulIdentifier","src":"5669:6:16"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"5614:21:16"},"nodeType":"YulFunctionCall","src":"5614:62:16"},"nodeType":"YulExpressionStatement","src":"5614:62:16"},{"nodeType":"YulVariableDeclaration","src":"5685:26:16","value":{"arguments":[{"name":"pos","nodeType":"YulIdentifier","src":"5699:3:16"},{"name":"length","nodeType":"YulIdentifier","src":"5704:6:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5695:3:16"},"nodeType":"YulFunctionCall","src":"5695:16:16"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"5689:2:16","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5731:2:16"},{"kind":"number","nodeType":"YulLiteral","src":"5735:2:16","type":"","value":"23"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5727:3:16"},"nodeType":"YulFunctionCall","src":"5727:11:16"},{"hexValue":"206973206d697373696e6720726f6c6520","kind":"string","nodeType":"YulLiteral","src":"5740:19:16","type":"","value":" is missing role "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"5720:6:16"},"nodeType":"YulFunctionCall","src":"5720:40:16"},"nodeType":"YulExpressionStatement","src":"5720:40:16"},{"nodeType":"YulVariableDeclaration","src":"5769:29:16","value":{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5791:6:16"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"5785:5:16"},"nodeType":"YulFunctionCall","src":"5785:13:16"},"variables":[{"name":"length_1","nodeType":"YulTypedName","src":"5773:8:16","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"5833:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"5841:4:16","type":"","value":"0x20"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5829:3:16"},"nodeType":"YulFunctionCall","src":"5829:17:16"},{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5852:2:16"},{"kind":"number","nodeType":"YulLiteral","src":"5856:2:16","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5848:3:16"},"nodeType":"YulFunctionCall","src":"5848:11:16"},{"name":"length_1","nodeType":"YulIdentifier","src":"5861:8:16"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"5807:21:16"},"nodeType":"YulFunctionCall","src":"5807:63:16"},"nodeType":"YulExpressionStatement","src":"5807:63:16"},{"nodeType":"YulAssignment","src":"5879:33:16","value":{"arguments":[{"arguments":[{"name":"_1","nodeType":"YulIdentifier","src":"5894:2:16"},{"name":"length_1","nodeType":"YulIdentifier","src":"5898:8:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5890:3:16"},"nodeType":"YulFunctionCall","src":"5890:17:16"},{"kind":"number","nodeType":"YulLiteral","src":"5909:2:16","type":"","value":"40"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"5886:3:16"},"nodeType":"YulFunctionCall","src":"5886:26:16"},"variableNames":[{"name":"end","nodeType":"YulIdentifier","src":"5879:3:16"}]}]},"name":"abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"pos","nodeType":"YulTypedName","src":"5489:3:16","type":""},{"name":"value1","nodeType":"YulTypedName","src":"5494:6:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"5502:6:16","type":""}],"returnVariables":[{"name":"end","nodeType":"YulTypedName","src":"5513:3:16","type":""}],"src":"5132:786:16"},{"body":{"nodeType":"YulBlock","src":"6044:321:16","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6061:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"6072:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6054:6:16"},"nodeType":"YulFunctionCall","src":"6054:21:16"},"nodeType":"YulExpressionStatement","src":"6054:21:16"},{"nodeType":"YulVariableDeclaration","src":"6084:27:16","value":{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6104:6:16"}],"functionName":{"name":"mload","nodeType":"YulIdentifier","src":"6098:5:16"},"nodeType":"YulFunctionCall","src":"6098:13:16"},"variables":[{"name":"length","nodeType":"YulTypedName","src":"6088:6:16","type":""}]},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6131:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"6142:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6127:3:16"},"nodeType":"YulFunctionCall","src":"6127:18:16"},{"name":"length","nodeType":"YulIdentifier","src":"6147:6:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6120:6:16"},"nodeType":"YulFunctionCall","src":"6120:34:16"},"nodeType":"YulExpressionStatement","src":"6120:34:16"},{"expression":{"arguments":[{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"6189:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"6197:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6185:3:16"},"nodeType":"YulFunctionCall","src":"6185:15:16"},{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6206:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"6217:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6202:3:16"},"nodeType":"YulFunctionCall","src":"6202:18:16"},{"name":"length","nodeType":"YulIdentifier","src":"6222:6:16"}],"functionName":{"name":"copy_memory_to_memory","nodeType":"YulIdentifier","src":"6163:21:16"},"nodeType":"YulFunctionCall","src":"6163:66:16"},"nodeType":"YulExpressionStatement","src":"6163:66:16"},{"nodeType":"YulAssignment","src":"6238:121:16","value":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"6254:9:16"},{"arguments":[{"arguments":[{"name":"length","nodeType":"YulIdentifier","src":"6273:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"6281:2:16","type":"","value":"31"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6269:3:16"},"nodeType":"YulFunctionCall","src":"6269:15:16"},{"kind":"number","nodeType":"YulLiteral","src":"6286:66:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6265:3:16"},"nodeType":"YulFunctionCall","src":"6265:88:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6250:3:16"},"nodeType":"YulFunctionCall","src":"6250:104:16"},{"kind":"number","nodeType":"YulLiteral","src":"6356:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6246:3:16"},"nodeType":"YulFunctionCall","src":"6246:113:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"6238:4:16"}]}]},"name":"abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"6013:9:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"6024:6:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"6035:4:16","type":""}],"src":"5923:442:16"},{"body":{"nodeType":"YulBlock","src":"6402:152:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6419:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6422:77:16","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6412:6:16"},"nodeType":"YulFunctionCall","src":"6412:88:16"},"nodeType":"YulExpressionStatement","src":"6412:88:16"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6516:1:16","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"6519:4:16","type":"","value":"0x11"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6509:6:16"},"nodeType":"YulFunctionCall","src":"6509:15:16"},"nodeType":"YulExpressionStatement","src":"6509:15:16"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6540:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6543:4:16","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"6533:6:16"},"nodeType":"YulFunctionCall","src":"6533:15:16"},"nodeType":"YulExpressionStatement","src":"6533:15:16"}]},"name":"panic_error_0x11","nodeType":"YulFunctionDefinition","src":"6370:184:16"},{"body":{"nodeType":"YulBlock","src":"6611:176:16","statements":[{"body":{"nodeType":"YulBlock","src":"6730:22:16","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6732:16:16"},"nodeType":"YulFunctionCall","src":"6732:18:16"},"nodeType":"YulExpressionStatement","src":"6732:18:16"}]},"condition":{"arguments":[{"arguments":[{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6642:1:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6635:6:16"},"nodeType":"YulFunctionCall","src":"6635:9:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"6628:6:16"},"nodeType":"YulFunctionCall","src":"6628:17:16"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6650:1:16"},{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6657:66:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"},{"name":"x","nodeType":"YulIdentifier","src":"6725:1:16"}],"functionName":{"name":"div","nodeType":"YulIdentifier","src":"6653:3:16"},"nodeType":"YulFunctionCall","src":"6653:74:16"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6647:2:16"},"nodeType":"YulFunctionCall","src":"6647:81:16"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"6624:3:16"},"nodeType":"YulFunctionCall","src":"6624:105:16"},"nodeType":"YulIf","src":"6621:131:16"},{"nodeType":"YulAssignment","src":"6761:20:16","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6776:1:16"},{"name":"y","nodeType":"YulIdentifier","src":"6779:1:16"}],"functionName":{"name":"mul","nodeType":"YulIdentifier","src":"6772:3:16"},"nodeType":"YulFunctionCall","src":"6772:9:16"},"variableNames":[{"name":"product","nodeType":"YulIdentifier","src":"6761:7:16"}]}]},"name":"checked_mul_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6590:1:16","type":""},{"name":"y","nodeType":"YulTypedName","src":"6593:1:16","type":""}],"returnVariables":[{"name":"product","nodeType":"YulTypedName","src":"6599:7:16","type":""}],"src":"6559:228:16"},{"body":{"nodeType":"YulBlock","src":"6840:80:16","statements":[{"body":{"nodeType":"YulBlock","src":"6867:22:16","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"6869:16:16"},"nodeType":"YulFunctionCall","src":"6869:18:16"},"nodeType":"YulExpressionStatement","src":"6869:18:16"}]},"condition":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6856:1:16"},{"arguments":[{"name":"y","nodeType":"YulIdentifier","src":"6863:1:16"}],"functionName":{"name":"not","nodeType":"YulIdentifier","src":"6859:3:16"},"nodeType":"YulFunctionCall","src":"6859:6:16"}],"functionName":{"name":"gt","nodeType":"YulIdentifier","src":"6853:2:16"},"nodeType":"YulFunctionCall","src":"6853:13:16"},"nodeType":"YulIf","src":"6850:39:16"},{"nodeType":"YulAssignment","src":"6898:16:16","value":{"arguments":[{"name":"x","nodeType":"YulIdentifier","src":"6909:1:16"},{"name":"y","nodeType":"YulIdentifier","src":"6912:1:16"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"6905:3:16"},"nodeType":"YulFunctionCall","src":"6905:9:16"},"variableNames":[{"name":"sum","nodeType":"YulIdentifier","src":"6898:3:16"}]}]},"name":"checked_add_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"x","nodeType":"YulTypedName","src":"6823:1:16","type":""},{"name":"y","nodeType":"YulTypedName","src":"6826:1:16","type":""}],"returnVariables":[{"name":"sum","nodeType":"YulTypedName","src":"6832:3:16","type":""}],"src":"6792:128:16"},{"body":{"nodeType":"YulBlock","src":"6957:152:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"6974:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"6977:77:16","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"6967:6:16"},"nodeType":"YulFunctionCall","src":"6967:88:16"},"nodeType":"YulExpressionStatement","src":"6967:88:16"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7071:1:16","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7074:4:16","type":"","value":"0x41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7064:6:16"},"nodeType":"YulFunctionCall","src":"7064:15:16"},"nodeType":"YulExpressionStatement","src":"7064:15:16"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7095:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7098:4:16","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7088:6:16"},"nodeType":"YulFunctionCall","src":"7088:15:16"},"nodeType":"YulExpressionStatement","src":"7088:15:16"}]},"name":"panic_error_0x41","nodeType":"YulFunctionDefinition","src":"6925:184:16"},{"body":{"nodeType":"YulBlock","src":"7146:152:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7163:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7166:77:16","type":"","value":"35408467139433450592217433187231851964531694900788300625387963629091585785856"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7156:6:16"},"nodeType":"YulFunctionCall","src":"7156:88:16"},"nodeType":"YulExpressionStatement","src":"7156:88:16"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7260:1:16","type":"","value":"4"},{"kind":"number","nodeType":"YulLiteral","src":"7263:4:16","type":"","value":"0x32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7253:6:16"},"nodeType":"YulFunctionCall","src":"7253:15:16"},"nodeType":"YulExpressionStatement","src":"7253:15:16"},{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"7284:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"7287:4:16","type":"","value":"0x24"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"7277:6:16"},"nodeType":"YulFunctionCall","src":"7277:15:16"},"nodeType":"YulExpressionStatement","src":"7277:15:16"}]},"name":"panic_error_0x32","nodeType":"YulFunctionDefinition","src":"7114:184:16"},{"body":{"nodeType":"YulBlock","src":"7350:149:16","statements":[{"body":{"nodeType":"YulBlock","src":"7377:22:16","statements":[{"expression":{"arguments":[],"functionName":{"name":"panic_error_0x11","nodeType":"YulIdentifier","src":"7379:16:16"},"nodeType":"YulFunctionCall","src":"7379:18:16"},"nodeType":"YulExpressionStatement","src":"7379:18:16"}]},"condition":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7370:5:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"7363:6:16"},"nodeType":"YulFunctionCall","src":"7363:13:16"},"nodeType":"YulIf","src":"7360:39:16"},{"nodeType":"YulAssignment","src":"7408:85:16","value":{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"7419:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"7426:66:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7415:3:16"},"nodeType":"YulFunctionCall","src":"7415:78:16"},"variableNames":[{"name":"ret","nodeType":"YulIdentifier","src":"7408:3:16"}]}]},"name":"decrement_t_uint256","nodeType":"YulFunctionDefinition","parameters":[{"name":"value","nodeType":"YulTypedName","src":"7332:5:16","type":""}],"returnVariables":[{"name":"ret","nodeType":"YulTypedName","src":"7342:3:16","type":""}],"src":"7303:196:16"},{"body":{"nodeType":"YulBlock","src":"7678:182:16","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7695:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"7706:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7688:6:16"},"nodeType":"YulFunctionCall","src":"7688:21:16"},"nodeType":"YulExpressionStatement","src":"7688:21:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7729:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"7740:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7725:3:16"},"nodeType":"YulFunctionCall","src":"7725:18:16"},{"kind":"number","nodeType":"YulLiteral","src":"7745:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7718:6:16"},"nodeType":"YulFunctionCall","src":"7718:30:16"},"nodeType":"YulExpressionStatement","src":"7718:30:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7768:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"7779:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7764:3:16"},"nodeType":"YulFunctionCall","src":"7764:18:16"},{"hexValue":"537472696e67733a20686578206c656e67746820696e73756666696369656e74","kind":"string","nodeType":"YulLiteral","src":"7784:34:16","type":"","value":"Strings: hex length insufficient"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"7757:6:16"},"nodeType":"YulFunctionCall","src":"7757:62:16"},"nodeType":"YulExpressionStatement","src":"7757:62:16"},{"nodeType":"YulAssignment","src":"7828:26:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"7840:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"7851:2:16","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"7836:3:16"},"nodeType":"YulFunctionCall","src":"7836:18:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"7828:4:16"}]}]},"name":"abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"7655:9:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"7669:4:16","type":""}],"src":"7504:356:16"}]},"contents":"{\n { }\n function abi_decode_tuple_t_bytes4(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffff00000000000000000000000000000000000000000000000000000000))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_bool__to_t_bool__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, iszero(iszero(value0)))\n }\n function abi_decode_address(offset) -> value\n {\n value := calldataload(offset)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n }\n function abi_decode_string_calldata(offset, end) -> arrayPos, length\n {\n if iszero(slt(add(offset, 0x1f), end)) { revert(0, 0) }\n length := calldataload(offset)\n if gt(length, 0xffffffffffffffff) { revert(0, 0) }\n arrayPos := add(offset, 0x20)\n if gt(add(add(offset, length), 0x20), end) { revert(0, 0) }\n }\n function abi_decode_tuple_t_addresst_string_calldata_ptr(headStart, dataEnd) -> value0, value1, value2\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_string_calldata(add(headStart, offset), dataEnd)\n value1 := value1_1\n value2 := value2_1\n }\n function abi_decode_tuple_t_bytes32(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n value0 := calldataload(headStart)\n }\n function abi_encode_tuple_t_bytes32__to_t_bytes32__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, value0)\n }\n function abi_decode_tuple_t_bytes32t_address(headStart, dataEnd) -> value0, value1\n {\n if slt(sub(dataEnd, headStart), 64) { revert(0, 0) }\n value0 := calldataload(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n }\n function abi_decode_tuple_t_addresst_string_calldata_ptrt_address(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n let offset := calldataload(add(headStart, 32))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value1_1, value2_1 := abi_decode_string_calldata(add(headStart, offset), dataEnd)\n value1 := value1_1\n value2 := value2_1\n value3 := abi_decode_address(add(headStart, 64))\n }\n function abi_decode_tuple_t_addresst_addresst_string_calldata_ptr(headStart, dataEnd) -> value0, value1, value2, value3\n {\n if slt(sub(dataEnd, headStart), 96) { revert(0, 0) }\n value0 := abi_decode_address(headStart)\n value1 := abi_decode_address(add(headStart, 32))\n let offset := calldataload(add(headStart, 64))\n if gt(offset, 0xffffffffffffffff) { revert(0, 0) }\n let value2_1, value3_1 := abi_decode_string_calldata(add(headStart, offset), dataEnd)\n value2 := value2_1\n value3 := value3_1\n }\n function abi_encode_tuple_packed_t_address_t_string_calldata_ptr__to_t_address_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value2, value1, value0) -> end\n {\n mstore(pos, and(shl(96, value0), 0xffffffffffffffffffffffffffffffffffffffff000000000000000000000000))\n calldatacopy(add(pos, 20), value1, value2)\n let _1 := add(add(pos, value2), 20)\n mstore(_1, 0)\n end := _1\n }\n function abi_encode_tuple_t_stringliteral_fb06fa8ff2141e8ed74502f6792273793f25f0e9d3cf15344f3f5a0d4948fd4b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 47)\n mstore(add(headStart, 64), \"AccessControl: can only renounce\")\n mstore(add(headStart, 96), \" roles for self\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_address_t_address_t_string_calldata_ptr__to_t_address_t_address_t_string_memory_ptr__fromStack_reversed(headStart, value3, value2, value1, value0) -> tail\n {\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n mstore(add(headStart, 64), 96)\n mstore(add(headStart, 96), value3)\n calldatacopy(add(headStart, 128), value2, value3)\n mstore(add(add(headStart, value3), 128), 0)\n tail := add(add(headStart, and(add(value3, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 128)\n }\n function copy_memory_to_memory(src, dst, length)\n {\n let i := 0\n for { } lt(i, length) { i := add(i, 32) }\n {\n mstore(add(dst, i), mload(add(src, i)))\n }\n if gt(i, length) { mstore(add(dst, length), 0) }\n }\n function abi_encode_tuple_packed_t_stringliteral_da0d07ce4a2849fbfc4cb9d6f939e9bd93016c372ca4a5ff14fe06caf3d67874_t_string_memory_ptr_t_stringliteral_f986ce851518a691bccd44ea42a5a185d1b866ef6cb07984a09b81694d20ab69_t_string_memory_ptr__to_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr_t_string_memory_ptr__nonPadded_inplace_fromStack_reversed(pos, value1, value0) -> end\n {\n mstore(pos, \"AccessControl: account \")\n let length := mload(value0)\n copy_memory_to_memory(add(value0, 0x20), add(pos, 23), length)\n let _1 := add(pos, length)\n mstore(add(_1, 23), \" is missing role \")\n let length_1 := mload(value1)\n copy_memory_to_memory(add(value1, 0x20), add(_1, 40), length_1)\n end := add(add(_1, length_1), 40)\n }\n function abi_encode_tuple_t_string_memory_ptr__to_t_string_memory_ptr__fromStack_reversed(headStart, value0) -> tail\n {\n mstore(headStart, 32)\n let length := mload(value0)\n mstore(add(headStart, 32), length)\n copy_memory_to_memory(add(value0, 32), add(headStart, 64), length)\n tail := add(add(headStart, and(add(length, 31), 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0)), 64)\n }\n function panic_error_0x11()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x11)\n revert(0, 0x24)\n }\n function checked_mul_t_uint256(x, y) -> product\n {\n if and(iszero(iszero(x)), gt(y, div(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff, x))) { panic_error_0x11() }\n product := mul(x, y)\n }\n function checked_add_t_uint256(x, y) -> sum\n {\n if gt(x, not(y)) { panic_error_0x11() }\n sum := add(x, y)\n }\n function panic_error_0x41()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x41)\n revert(0, 0x24)\n }\n function panic_error_0x32()\n {\n mstore(0, 35408467139433450592217433187231851964531694900788300625387963629091585785856)\n mstore(4, 0x32)\n revert(0, 0x24)\n }\n function decrement_t_uint256(value) -> ret\n {\n if iszero(value) { panic_error_0x11() }\n ret := add(value, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)\n }\n function abi_encode_tuple_t_stringliteral_04fc88320d7c9f639317c75102c103ff0044d3075a5c627e24e76e5bbb2733c2__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Strings: hex length insufficient\")\n tail := add(headStart, 96)\n }\n}","id":16,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100c95760003560e01c8063545f7a321161008157806391d148541161005b57806391d148541461019b578063a217fddf146101df578063d547741f146101e757600080fd5b8063545f7a3214610162578063584f6b601461017557806382bfd0f01461018857600080fd5b8063248a9ca3116100b2578063248a9ca3146101095780632f2ff15d1461013a57806336568abe1461014f57600080fd5b806301ffc9a7146100ce57806318c5e8ab146100f6575b600080fd5b6100e16100dc366004610a74565b6101fa565b60405190151581526020015b60405180910390f35b6100e1610104366004610b28565b610293565b61012c610117366004610b7b565b60009081526020819052604090206001015490565b6040519081526020016100ed565b61014d610148366004610b94565b610368565b005b61014d61015d366004610b94565b610392565b61014d610170366004610bc0565b61044a565b61014d610183366004610bc0565b6104c7565b6100e1610196366004610c25565b610535565b6100e16101a9366004610b94565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b61012c600081565b61014d6101f5366004610b94565b61059f565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061028d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6000803384846040516020016102ab93929190610c86565b60408051601f198184030181529181528151602092830120600081815280845282812073ffffffffffffffffffffffffffffffffffffffff8a16825290935291205490915060ff1615610302576001915050610361565b6000848460405160200161031893929190610c86565b60408051808303601f190181529181528151602092830120600090815280835281812073ffffffffffffffffffffffffffffffffffffffff8916825290925290205460ff169150505b9392505050565b600082815260208190526040902060010154610383816105c4565b61038d83836105d1565b505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461043c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c66000000000000000000000000000000000060648201526084015b60405180910390fd5b61044682826106c1565b5050565b600084848460405160200161046193929190610c86565b604051602081830303815290604052805190602001209050610483818361059f565b7f55426a61e90ac7d7d1fc886b67b420ade8c8b535e68d655394bc271e3a12b8e2828686866040516104b89493929190610cc5565b60405180910390a15050505050565b60008484846040516020016104de93929190610c86565b6040516020818303038152906040528051906020012090506105008183610368565b7f69c5ce2d658fea352a2464f87ffbe1f09746c918a91da0994044c3767d641b3f828686866040516104b89493929190610cc5565b60008084848460405160200161054d93929190610c86565b60408051601f198184030181529181528151602092830120600081815280845282812073ffffffffffffffffffffffffffffffffffffffff8b16825290935291205490915060ff169695505050505050565b6000828152602081905260409020600101546105ba816105c4565b61038d83836106c1565b6105ce8133610778565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166104465760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff85168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556106633390565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16156104465760008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610446576107b681610812565b6107c1836020610831565b6040516020016107d2929190610d4f565b60408051601f19818403018152908290527f08c379a000000000000000000000000000000000000000000000000000000000825261043391600401610dd0565b606061028d73ffffffffffffffffffffffffffffffffffffffff831660145b60606000610840836002610e32565b61084b906002610e6f565b67ffffffffffffffff81111561086357610863610e87565b6040519080825280601f01601f19166020018201604052801561088d576020820181803683370190505b5090507f3000000000000000000000000000000000000000000000000000000000000000816000815181106108c4576108c4610eb6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811061092757610927610eb6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000610963846002610e32565b61096e906001610e6f565b90505b6001811115610a0b577f303132333435363738396162636465660000000000000000000000000000000085600f16601081106109af576109af610eb6565b1a60f81b8282815181106109c5576109c5610eb6565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060049490941c93610a0481610ee5565b9050610971565b508315610361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610433565b600060208284031215610a8657600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461036157600080fd5b803573ffffffffffffffffffffffffffffffffffffffff81168114610ada57600080fd5b919050565b60008083601f840112610af157600080fd5b50813567ffffffffffffffff811115610b0957600080fd5b602083019150836020828501011115610b2157600080fd5b9250929050565b600080600060408486031215610b3d57600080fd5b610b4684610ab6565b9250602084013567ffffffffffffffff811115610b6257600080fd5b610b6e86828701610adf565b9497909650939450505050565b600060208284031215610b8d57600080fd5b5035919050565b60008060408385031215610ba757600080fd5b82359150610bb760208401610ab6565b90509250929050565b60008060008060608587031215610bd657600080fd5b610bdf85610ab6565b9350602085013567ffffffffffffffff811115610bfb57600080fd5b610c0787828801610adf565b9094509250610c1a905060408601610ab6565b905092959194509250565b60008060008060608587031215610c3b57600080fd5b610c4485610ab6565b9350610c5260208601610ab6565b9250604085013567ffffffffffffffff811115610c6e57600080fd5b610c7a87828801610adf565b95989497509550505050565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008460601b168152818360148301376000910160140190815292915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525060606040830152826060830152828460808401376000608084840101526080601f19601f850116830101905095945050505050565b60005b83811015610d3a578181015183820152602001610d22565b83811115610d49576000848401525b50505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351610d87816017850160208801610d1f565b7f206973206d697373696e6720726f6c65200000000000000000000000000000006017918401918201528351610dc4816028840160208801610d1f565b01602801949350505050565b6020815260008251806020840152610def816040850160208701610d1f565b601f01601f19169190910160400192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615610e6a57610e6a610e03565b500290565b60008219821115610e8257610e82610e03565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081610ef457610ef4610e03565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019056fea2646970667358221220641e953a59194b8f69aff3bb5de5a696756347fa60acb6448027016d428fae5064736f6c634300080d0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0xC9 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x545F7A32 GT PUSH2 0x81 JUMPI DUP1 PUSH4 0x91D14854 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0x91D14854 EQ PUSH2 0x19B JUMPI DUP1 PUSH4 0xA217FDDF EQ PUSH2 0x1DF JUMPI DUP1 PUSH4 0xD547741F EQ PUSH2 0x1E7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x545F7A32 EQ PUSH2 0x162 JUMPI DUP1 PUSH4 0x584F6B60 EQ PUSH2 0x175 JUMPI DUP1 PUSH4 0x82BFD0F0 EQ PUSH2 0x188 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x248A9CA3 GT PUSH2 0xB2 JUMPI DUP1 PUSH4 0x248A9CA3 EQ PUSH2 0x109 JUMPI DUP1 PUSH4 0x2F2FF15D EQ PUSH2 0x13A JUMPI DUP1 PUSH4 0x36568ABE EQ PUSH2 0x14F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0x1FFC9A7 EQ PUSH2 0xCE JUMPI DUP1 PUSH4 0x18C5E8AB EQ PUSH2 0xF6 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xE1 PUSH2 0xDC CALLDATASIZE PUSH1 0x4 PUSH2 0xA74 JUMP JUMPDEST PUSH2 0x1FA JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 ISZERO ISZERO DUP2 MSTORE PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH2 0xE1 PUSH2 0x104 CALLDATASIZE PUSH1 0x4 PUSH2 0xB28 JUMP JUMPDEST PUSH2 0x293 JUMP JUMPDEST PUSH2 0x12C PUSH2 0x117 CALLDATASIZE PUSH1 0x4 PUSH2 0xB7B JUMP JUMPDEST PUSH1 0x0 SWAP1 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD SWAP1 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP2 MSTORE PUSH1 0x20 ADD PUSH2 0xED JUMP JUMPDEST PUSH2 0x14D PUSH2 0x148 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x368 JUMP JUMPDEST STOP JUMPDEST PUSH2 0x14D PUSH2 0x15D CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x392 JUMP JUMPDEST PUSH2 0x14D PUSH2 0x170 CALLDATASIZE PUSH1 0x4 PUSH2 0xBC0 JUMP JUMPDEST PUSH2 0x44A JUMP JUMPDEST PUSH2 0x14D PUSH2 0x183 CALLDATASIZE PUSH1 0x4 PUSH2 0xBC0 JUMP JUMPDEST PUSH2 0x4C7 JUMP JUMPDEST PUSH2 0xE1 PUSH2 0x196 CALLDATASIZE PUSH1 0x4 PUSH2 0xC25 JUMP JUMPDEST PUSH2 0x535 JUMP JUMPDEST PUSH2 0xE1 PUSH2 0x1A9 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH1 0x0 SWAP2 DUP3 MSTORE PUSH1 0x20 DUP3 DUP2 MSTORE PUSH1 0x40 DUP1 DUP5 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP4 SWAP1 SWAP4 AND DUP5 MSTORE SWAP2 SWAP1 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP1 JUMP JUMPDEST PUSH2 0x12C PUSH1 0x0 DUP2 JUMP JUMPDEST PUSH2 0x14D PUSH2 0x1F5 CALLDATASIZE PUSH1 0x4 PUSH2 0xB94 JUMP JUMPDEST PUSH2 0x59F JUMP JUMPDEST PUSH1 0x0 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP3 AND PUSH32 0x7965DB0B00000000000000000000000000000000000000000000000000000000 EQ DUP1 PUSH2 0x28D JUMPI POP PUSH32 0x1FFC9A700000000000000000000000000000000000000000000000000000000 PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP4 AND EQ JUMPDEST SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 DUP1 CALLER DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x2AB SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE DUP1 DUP5 MSTORE DUP3 DUP2 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP11 AND DUP3 MSTORE SWAP1 SWAP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND ISZERO PUSH2 0x302 JUMPI PUSH1 0x1 SWAP2 POP POP PUSH2 0x361 JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x318 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD DUP1 DUP4 SUB PUSH1 0x1F NOT ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x0 SWAP1 DUP2 MSTORE DUP1 DUP4 MSTORE DUP2 DUP2 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP10 AND DUP3 MSTORE SWAP1 SWAP3 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND SWAP2 POP POP JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x383 DUP2 PUSH2 0x5C4 JUMP JUMPDEST PUSH2 0x38D DUP4 DUP4 PUSH2 0x5D1 JUMP JUMPDEST POP POP POP JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND CALLER EQ PUSH2 0x43C JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2F PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x416363657373436F6E74726F6C3A2063616E206F6E6C792072656E6F756E6365 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x20726F6C657320666F722073656C660000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x446 DUP3 DUP3 PUSH2 0x6C1 JUMP JUMPDEST POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x461 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x483 DUP2 DUP4 PUSH2 0x59F JUMP JUMPDEST PUSH32 0x55426A61E90AC7D7D1FC886B67B420ADE8C8B535E68D655394BC271E3A12B8E2 DUP3 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x4B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xCC5 JUMP JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x4DE SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 DUP2 DUP4 SUB SUB DUP2 MSTORE SWAP1 PUSH1 0x40 MSTORE DUP1 MLOAD SWAP1 PUSH1 0x20 ADD KECCAK256 SWAP1 POP PUSH2 0x500 DUP2 DUP4 PUSH2 0x368 JUMP JUMPDEST PUSH32 0x69C5CE2D658FEA352A2464F87FFBE1F09746C918A91DA0994044C3767D641B3F DUP3 DUP7 DUP7 DUP7 PUSH1 0x40 MLOAD PUSH2 0x4B8 SWAP5 SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xCC5 JUMP JUMPDEST PUSH1 0x0 DUP1 DUP5 DUP5 DUP5 PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x54D SWAP4 SWAP3 SWAP2 SWAP1 PUSH2 0xC86 JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP2 DUP2 MSTORE DUP2 MLOAD PUSH1 0x20 SWAP3 DUP4 ADD KECCAK256 PUSH1 0x0 DUP2 DUP2 MSTORE DUP1 DUP5 MSTORE DUP3 DUP2 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP12 AND DUP3 MSTORE SWAP1 SWAP4 MSTORE SWAP2 KECCAK256 SLOAD SWAP1 SWAP2 POP PUSH1 0xFF AND SWAP7 SWAP6 POP POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 SWAP1 MSTORE PUSH1 0x40 SWAP1 KECCAK256 PUSH1 0x1 ADD SLOAD PUSH2 0x5BA DUP2 PUSH2 0x5C4 JUMP JUMPDEST PUSH2 0x38D DUP4 DUP4 PUSH2 0x6C1 JUMP JUMPDEST PUSH2 0x5CE DUP2 CALLER PUSH2 0x778 JUMP JUMPDEST POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x446 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE PUSH2 0x663 CALLER SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP4 PUSH32 0x2F8788117E7EFF1D82E926EC794901D17C78024A50270940304540A733656F0D PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND ISZERO PUSH2 0x446 JUMPI PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP1 DUP6 MSTORE SWAP3 MSTORE DUP1 DUP4 KECCAK256 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND SWAP1 SSTORE MLOAD CALLER SWAP3 DUP6 SWAP2 PUSH32 0xF6391F5C32D9C69D2A47EA670B442974B53935D1EDC7FD64EB21E047A839171B SWAP2 SWAP1 LOG4 POP POP JUMP JUMPDEST PUSH1 0x0 DUP3 DUP2 MSTORE PUSH1 0x20 DUP2 DUP2 MSTORE PUSH1 0x40 DUP1 DUP4 KECCAK256 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP6 AND DUP5 MSTORE SWAP1 SWAP2 MSTORE SWAP1 KECCAK256 SLOAD PUSH1 0xFF AND PUSH2 0x446 JUMPI PUSH2 0x7B6 DUP2 PUSH2 0x812 JUMP JUMPDEST PUSH2 0x7C1 DUP4 PUSH1 0x20 PUSH2 0x831 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH1 0x20 ADD PUSH2 0x7D2 SWAP3 SWAP2 SWAP1 PUSH2 0xD4F JUMP JUMPDEST PUSH1 0x40 DUP1 MLOAD PUSH1 0x1F NOT DUP2 DUP5 SUB ADD DUP2 MSTORE SWAP1 DUP3 SWAP1 MSTORE PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP3 MSTORE PUSH2 0x433 SWAP2 PUSH1 0x4 ADD PUSH2 0xDD0 JUMP JUMPDEST PUSH1 0x60 PUSH2 0x28D PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH1 0x14 JUMPDEST PUSH1 0x60 PUSH1 0x0 PUSH2 0x840 DUP4 PUSH1 0x2 PUSH2 0xE32 JUMP JUMPDEST PUSH2 0x84B SWAP1 PUSH1 0x2 PUSH2 0xE6F JUMP JUMPDEST PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0x863 JUMPI PUSH2 0x863 PUSH2 0xE87 JUMP JUMPDEST PUSH1 0x40 MLOAD SWAP1 DUP1 DUP3 MSTORE DUP1 PUSH1 0x1F ADD PUSH1 0x1F NOT AND PUSH1 0x20 ADD DUP3 ADD PUSH1 0x40 MSTORE DUP1 ISZERO PUSH2 0x88D JUMPI PUSH1 0x20 DUP3 ADD DUP2 DUP1 CALLDATASIZE DUP4 CALLDATACOPY ADD SWAP1 POP JUMPDEST POP SWAP1 POP PUSH32 0x3000000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x0 DUP2 MLOAD DUP2 LT PUSH2 0x8C4 JUMPI PUSH2 0x8C4 PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH32 0x7800000000000000000000000000000000000000000000000000000000000000 DUP2 PUSH1 0x1 DUP2 MLOAD DUP2 LT PUSH2 0x927 JUMPI PUSH2 0x927 PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x0 PUSH2 0x963 DUP5 PUSH1 0x2 PUSH2 0xE32 JUMP JUMPDEST PUSH2 0x96E SWAP1 PUSH1 0x1 PUSH2 0xE6F JUMP JUMPDEST SWAP1 POP JUMPDEST PUSH1 0x1 DUP2 GT ISZERO PUSH2 0xA0B JUMPI PUSH32 0x3031323334353637383961626364656600000000000000000000000000000000 DUP6 PUSH1 0xF AND PUSH1 0x10 DUP2 LT PUSH2 0x9AF JUMPI PUSH2 0x9AF PUSH2 0xEB6 JUMP JUMPDEST BYTE PUSH1 0xF8 SHL DUP3 DUP3 DUP2 MLOAD DUP2 LT PUSH2 0x9C5 JUMPI PUSH2 0x9C5 PUSH2 0xEB6 JUMP JUMPDEST PUSH1 0x20 ADD ADD SWAP1 PUSH31 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF NOT AND SWAP1 DUP2 PUSH1 0x0 BYTE SWAP1 MSTORE8 POP PUSH1 0x4 SWAP5 SWAP1 SWAP5 SHR SWAP4 PUSH2 0xA04 DUP2 PUSH2 0xEE5 JUMP JUMPDEST SWAP1 POP PUSH2 0x971 JUMP JUMPDEST POP DUP4 ISZERO PUSH2 0x361 JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x537472696E67733A20686578206C656E67746820696E73756666696369656E74 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x433 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xA86 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH32 0xFFFFFFFF00000000000000000000000000000000000000000000000000000000 DUP2 AND DUP2 EQ PUSH2 0x361 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0xADA JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 DUP4 PUSH1 0x1F DUP5 ADD SLT PUSH2 0xAF1 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP DUP2 CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB09 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x20 DUP4 ADD SWAP2 POP DUP4 PUSH1 0x20 DUP3 DUP6 ADD ADD GT ISZERO PUSH2 0xB21 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 PUSH1 0x40 DUP5 DUP7 SUB SLT ISZERO PUSH2 0xB3D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB46 DUP5 PUSH2 0xAB6 JUMP JUMPDEST SWAP3 POP PUSH1 0x20 DUP5 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xB62 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xB6E DUP7 DUP3 DUP8 ADD PUSH2 0xADF JUMP JUMPDEST SWAP5 SWAP8 SWAP1 SWAP7 POP SWAP4 SWAP5 POP POP POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0xB8D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP CALLDATALOAD SWAP2 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x40 DUP4 DUP6 SUB SLT ISZERO PUSH2 0xBA7 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP3 CALLDATALOAD SWAP2 POP PUSH2 0xBB7 PUSH1 0x20 DUP5 ADD PUSH2 0xAB6 JUMP JUMPDEST SWAP1 POP SWAP3 POP SWAP3 SWAP1 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xBD6 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xBDF DUP6 PUSH2 0xAB6 JUMP JUMPDEST SWAP4 POP PUSH1 0x20 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xBFB JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC07 DUP8 DUP3 DUP9 ADD PUSH2 0xADF JUMP JUMPDEST SWAP1 SWAP5 POP SWAP3 POP PUSH2 0xC1A SWAP1 POP PUSH1 0x40 DUP7 ADD PUSH2 0xAB6 JUMP JUMPDEST SWAP1 POP SWAP3 SWAP6 SWAP2 SWAP5 POP SWAP3 POP JUMP JUMPDEST PUSH1 0x0 DUP1 PUSH1 0x0 DUP1 PUSH1 0x60 DUP6 DUP8 SUB SLT ISZERO PUSH2 0xC3B JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC44 DUP6 PUSH2 0xAB6 JUMP JUMPDEST SWAP4 POP PUSH2 0xC52 PUSH1 0x20 DUP7 ADD PUSH2 0xAB6 JUMP JUMPDEST SWAP3 POP PUSH1 0x40 DUP6 ADD CALLDATALOAD PUSH8 0xFFFFFFFFFFFFFFFF DUP2 GT ISZERO PUSH2 0xC6E JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xC7A DUP8 DUP3 DUP9 ADD PUSH2 0xADF JUMP JUMPDEST SWAP6 SWAP9 SWAP5 SWAP8 POP SWAP6 POP POP POP POP JUMP JUMPDEST PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 DUP5 PUSH1 0x60 SHL AND DUP2 MSTORE DUP2 DUP4 PUSH1 0x14 DUP4 ADD CALLDATACOPY PUSH1 0x0 SWAP2 ADD PUSH1 0x14 ADD SWAP1 DUP2 MSTORE SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP1 DUP8 AND DUP4 MSTORE DUP1 DUP7 AND PUSH1 0x20 DUP5 ADD MSTORE POP PUSH1 0x60 PUSH1 0x40 DUP4 ADD MSTORE DUP3 PUSH1 0x60 DUP4 ADD MSTORE DUP3 DUP5 PUSH1 0x80 DUP5 ADD CALLDATACOPY PUSH1 0x0 PUSH1 0x80 DUP5 DUP5 ADD ADD MSTORE PUSH1 0x80 PUSH1 0x1F NOT PUSH1 0x1F DUP6 ADD AND DUP4 ADD ADD SWAP1 POP SWAP6 SWAP5 POP POP POP POP POP JUMP JUMPDEST PUSH1 0x0 JUMPDEST DUP4 DUP2 LT ISZERO PUSH2 0xD3A JUMPI DUP2 DUP2 ADD MLOAD DUP4 DUP3 ADD MSTORE PUSH1 0x20 ADD PUSH2 0xD22 JUMP JUMPDEST DUP4 DUP2 GT ISZERO PUSH2 0xD49 JUMPI PUSH1 0x0 DUP5 DUP5 ADD MSTORE JUMPDEST POP POP POP POP JUMP JUMPDEST PUSH32 0x416363657373436F6E74726F6C3A206163636F756E7420000000000000000000 DUP2 MSTORE PUSH1 0x0 DUP4 MLOAD PUSH2 0xD87 DUP2 PUSH1 0x17 DUP6 ADD PUSH1 0x20 DUP9 ADD PUSH2 0xD1F JUMP JUMPDEST PUSH32 0x206973206D697373696E6720726F6C6520000000000000000000000000000000 PUSH1 0x17 SWAP2 DUP5 ADD SWAP2 DUP3 ADD MSTORE DUP4 MLOAD PUSH2 0xDC4 DUP2 PUSH1 0x28 DUP5 ADD PUSH1 0x20 DUP9 ADD PUSH2 0xD1F JUMP JUMPDEST ADD PUSH1 0x28 ADD SWAP5 SWAP4 POP POP POP POP JUMP JUMPDEST PUSH1 0x20 DUP2 MSTORE PUSH1 0x0 DUP3 MLOAD DUP1 PUSH1 0x20 DUP5 ADD MSTORE PUSH2 0xDEF DUP2 PUSH1 0x40 DUP6 ADD PUSH1 0x20 DUP8 ADD PUSH2 0xD1F JUMP JUMPDEST PUSH1 0x1F ADD PUSH1 0x1F NOT AND SWAP2 SWAP1 SWAP2 ADD PUSH1 0x40 ADD SWAP3 SWAP2 POP POP JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x11 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DIV DUP4 GT DUP3 ISZERO ISZERO AND ISZERO PUSH2 0xE6A JUMPI PUSH2 0xE6A PUSH2 0xE03 JUMP JUMPDEST POP MUL SWAP1 JUMP JUMPDEST PUSH1 0x0 DUP3 NOT DUP3 GT ISZERO PUSH2 0xE82 JUMPI PUSH2 0xE82 PUSH2 0xE03 JUMP JUMPDEST POP ADD SWAP1 JUMP JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x41 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH32 0x4E487B7100000000000000000000000000000000000000000000000000000000 PUSH1 0x0 MSTORE PUSH1 0x32 PUSH1 0x4 MSTORE PUSH1 0x24 PUSH1 0x0 REVERT JUMPDEST PUSH1 0x0 DUP2 PUSH2 0xEF4 JUMPI PUSH2 0xEF4 PUSH2 0xE03 JUMP JUMPDEST POP PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF ADD SWAP1 JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH5 0x1E953A5919 0x4B DUP16 PUSH10 0xAFF3BB5DE5A696756347 STATICCALL PUSH1 0xAC 0xB6 DIFFICULTY DUP1 0x27 ADD PUSH14 0x428FAE5064736F6C634300080D00 CALLER ","sourceMap":"2815:4310:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2606:202:5;;;;;;:::i;:::-;;:::i;:::-;;;516:14:16;;509:22;491:41;;479:2;464:18;2606:202:5;;;;;;;;5898:389:12;;;;;;:::i;:::-;;:::i;4378:129:5:-;;;;;;:::i;:::-;4452:7;4478:12;;;;;;;;;;:22;;;;4378:129;;;;1918:25:16;;;1906:2;1891:18;4378:129:5;1772:177:16;4803:145:5;;;;;;:::i;:::-;;:::i;:::-;;5912:214;;;;;;:::i;:::-;;:::i;5061:357:12:-;;;;;;:::i;:::-;;:::i;4278:324::-;;;;;;:::i;:::-;;:::i;6844:279::-;;;;;;:::i;:::-;;:::i;2895:145:5:-;;;;;;:::i;:::-;2981:4;3004:12;;;;;;;;;;;:29;;;;;;;;;;;;;;;;2895:145;2027:49;;2072:4;2027:49;;5228:147;;;;;;:::i;:::-;;:::i;2606:202::-;2691:4;2714:47;;;2729:32;2714:47;;:87;;-1:-1:-1;952:25:9;937:40;;;;2765:36:5;2707:94;2606:202;-1:-1:-1;;2606:202:5:o;5898:389:12:-;5990:4;6006:12;6048:10;6060:11;;6031:41;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6031:41:12;;;;;;;;;6021:52;;6031:41;6021:52;;;;2981:4:5;3004:12;;;;;;;;;:29;;;;;;;;;;;6021:52:12;;-1:-1:-1;3004:29:5;;6084:197:12;;;6133:4;6126:11;;;;;6084:197;6210:1;6214:11;;6185:41;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;6185:41:12;;;;;;6175:52;;6185:41;6175:52;;;;2981:4:5;3004:12;;;;;;;;;:29;;;;;;;;;;;;;;-1:-1:-1;;5898:389:12;;;;;;:::o;4803:145:5:-;4452:7;4478:12;;;;;;;;;;:22;;;2505:16;2516:4;2505:10;:16::i;:::-;4916:25:::1;4927:4;4933:7;4916:10;:25::i;:::-;4803:145:::0;;;:::o;5912:214::-;6007:23;;;719:10:7;6007:23:5;5999:83;;;;;;;3977:2:16;5999:83:5;;;3959:21:16;4016:2;3996:18;;;3989:30;4055:34;4035:18;;;4028:62;4126:17;4106:18;;;4099:45;4161:19;;5999:83:5;;;;;;;;;6093:26;6105:4;6111:7;6093:11;:26::i;:::-;5912:214;;:::o;5061:357:12:-;5217:12;5259:15;5276:11;;5242:46;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5232:57;;;;;;5217:72;;5299:33;5310:4;5316:15;5299:10;:33::i;:::-;5347:64;5365:15;5382;5399:11;;5347:64;;;;;;;;;:::i;:::-;;;;;;;;5207:211;5061:357;;;;:::o;4278:324::-;4402:12;4444:15;4461:11;;4427:46;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4417:57;;;;;;4402:72;;4484:32;4494:4;4500:15;4484:9;:32::i;:::-;4531:64;4549:15;4566;4583:11;;4531:64;;;;;;;;;:::i;6844:279::-;6989:4;7005:12;7047:15;7064:11;;7030:46;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7030:46:12;;;;;;;;;7020:57;;7030:46;7020:57;;;;2981:4:5;3004:12;;;;;;;;;:29;;;;;;;;;;;7020:57:12;;-1:-1:-1;3004:29:5;;7087::12;6844:279;-1:-1:-1;;;;;;6844:279:12:o;5228:147:5:-;4452:7;4478:12;;;;;;;;;;:22;;;2505:16;2516:4;2505:10;:16::i;:::-;5342:26:::1;5354:4;5360:7;5342:11;:26::i;3334:103::-:0;3400:30;3411:4;719:10:7;3400::5;:30::i;:::-;3334:103;:::o;7461:233::-;2981:4;3004:12;;;;;;;;;;;:29;;;;;;;;;;;;;7539:149;;7582:6;:12;;;;;;;;;;;:29;;;;;;;;;;:36;;;;7614:4;7582:36;;;7664:12;719:10:7;;640:96;7664:12:5;7637:40;;7655:7;7637:40;;7649:4;7637:40;;;;;;;;;;7461:233;;:::o;7865:234::-;2981:4;3004:12;;;;;;;;;;;:29;;;;;;;;;;;;;7944:149;;;8018:5;7986:12;;;;;;;;;;;:29;;;;;;;;;;;:37;;;;;;8042:40;719:10:7;;7986:12:5;;8042:40;;8018:5;8042:40;7865:234;;:::o;3718:479::-;2981:4;3004:12;;;;;;;;;;;:29;;;;;;;;;;;;;3801:390;;3989:28;4009:7;3989:19;:28::i;:::-;4088:38;4116:4;4123:2;4088:19;:38::i;:::-;3896:252;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;3896:252:5;;;;;;;;;;3844:336;;;;;;;;:::i;2102:149:8:-;2160:13;2192:52;2204:22;;;311:2;1513:437;1588:13;1613:19;1645:10;1649:6;1645:1;:10;:::i;:::-;:14;;1658:1;1645:14;:::i;:::-;1635:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1635:25:8;;1613:47;;1670:15;:6;1677:1;1670:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;;1695;:6;1702:1;1695:9;;;;;;;;:::i;:::-;;;;:15;;;;;;;;;;-1:-1:-1;1725:9:8;1737:10;1741:6;1737:1;:10;:::i;:::-;:14;;1750:1;1737:14;:::i;:::-;1725:26;;1720:128;1757:1;1753;:5;1720:128;;;1791:8;1800:5;1808:3;1800:11;1791:21;;;;;;;:::i;:::-;;;;1779:6;1786:1;1779:9;;;;;;;;:::i;:::-;;;;:33;;;;;;;;;;-1:-1:-1;1836:1:8;1826:11;;;;;1760:3;;;:::i;:::-;;;1720:128;;;-1:-1:-1;1865:10:8;;1857:55;;;;;;;7706:2:16;1857:55:8;;;7688:21:16;;;7725:18;;;7718:30;7784:34;7764:18;;;7757:62;7836:18;;1857:55:8;7504:356:16;14:332;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:196;611:20;;671:42;660:54;;650:65;;640:93;;729:1;726;719:12;640:93;543:196;;;:::o;744:348::-;796:8;806:6;860:3;853:4;845:6;841:17;837:27;827:55;;878:1;875;868:12;827:55;-1:-1:-1;901:20:16;;944:18;933:30;;930:50;;;976:1;973;966:12;930:50;1013:4;1005:6;1001:17;989:29;;1065:3;1058:4;1049:6;1041;1037:19;1033:30;1030:39;1027:59;;;1082:1;1079;1072:12;1027:59;744:348;;;;;:::o;1097:485::-;1177:6;1185;1193;1246:2;1234:9;1225:7;1221:23;1217:32;1214:52;;;1262:1;1259;1252:12;1214:52;1285:29;1304:9;1285:29;:::i;:::-;1275:39;;1365:2;1354:9;1350:18;1337:32;1392:18;1384:6;1381:30;1378:50;;;1424:1;1421;1414:12;1378:50;1463:59;1514:7;1505:6;1494:9;1490:22;1463:59;:::i;:::-;1097:485;;1541:8;;-1:-1:-1;1437:85:16;;-1:-1:-1;;;;1097:485:16:o;1587:180::-;1646:6;1699:2;1687:9;1678:7;1674:23;1670:32;1667:52;;;1715:1;1712;1705:12;1667:52;-1:-1:-1;1738:23:16;;1587:180;-1:-1:-1;1587:180:16:o;1954:254::-;2022:6;2030;2083:2;2071:9;2062:7;2058:23;2054:32;2051:52;;;2099:1;2096;2089:12;2051:52;2135:9;2122:23;2112:33;;2164:38;2198:2;2187:9;2183:18;2164:38;:::i;:::-;2154:48;;1954:254;;;;;:::o;2213:559::-;2302:6;2310;2318;2326;2379:2;2367:9;2358:7;2354:23;2350:32;2347:52;;;2395:1;2392;2385:12;2347:52;2418:29;2437:9;2418:29;:::i;:::-;2408:39;;2498:2;2487:9;2483:18;2470:32;2525:18;2517:6;2514:30;2511:50;;;2557:1;2554;2547:12;2511:50;2596:59;2647:7;2638:6;2627:9;2623:22;2596:59;:::i;:::-;2674:8;;-1:-1:-1;2570:85:16;-1:-1:-1;2728:38:16;;-1:-1:-1;2762:2:16;2747:18;;2728:38;:::i;:::-;2718:48;;2213:559;;;;;;;:::o;2777:::-;2866:6;2874;2882;2890;2943:2;2931:9;2922:7;2918:23;2914:32;2911:52;;;2959:1;2956;2949:12;2911:52;2982:29;3001:9;2982:29;:::i;:::-;2972:39;;3030:38;3064:2;3053:9;3049:18;3030:38;:::i;:::-;3020:48;;3119:2;3108:9;3104:18;3091:32;3146:18;3138:6;3135:30;3132:50;;;3178:1;3175;3168:12;3132:50;3217:59;3268:7;3259:6;3248:9;3244:22;3217:59;:::i;:::-;2777:559;;;;-1:-1:-1;3295:8:16;-1:-1:-1;;;;2777:559:16:o;3341:429::-;3561:66;3552:6;3548:2;3544:15;3540:88;3535:3;3528:101;3673:6;3665;3660:2;3655:3;3651:12;3638:42;3510:3;3703:16;;3721:2;3699:25;3733:13;;;3699:25;3341:429;-1:-1:-1;;3341:429:16:o;4191:673::-;4369:4;4398:42;4479:2;4471:6;4467:15;4456:9;4449:34;4531:2;4523:6;4519:15;4514:2;4503:9;4499:18;4492:43;;4571:2;4566;4555:9;4551:18;4544:30;4610:6;4605:2;4594:9;4590:18;4583:34;4668:6;4660;4654:3;4643:9;4639:19;4626:49;4725:1;4719:3;4710:6;4699:9;4695:22;4691:32;4684:43;4854:3;-1:-1:-1;;4779:2:16;4771:6;4767:15;4763:88;4752:9;4748:104;4744:114;4736:122;;4191:673;;;;;;;:::o;4869:258::-;4941:1;4951:113;4965:6;4962:1;4959:13;4951:113;;;5041:11;;;5035:18;5022:11;;;5015:39;4987:2;4980:10;4951:113;;;5082:6;5079:1;5076:13;5073:48;;;5117:1;5108:6;5103:3;5099:16;5092:27;5073:48;;4869:258;;;:::o;5132:786::-;5543:25;5538:3;5531:38;5513:3;5598:6;5592:13;5614:62;5669:6;5664:2;5659:3;5655:12;5648:4;5640:6;5636:17;5614:62;:::i;:::-;5740:19;5735:2;5695:16;;;5727:11;;;5720:40;5785:13;;5807:63;5785:13;5856:2;5848:11;;5841:4;5829:17;;5807:63;:::i;:::-;5890:17;5909:2;5886:26;;5132:786;-1:-1:-1;;;;5132:786:16:o;5923:442::-;6072:2;6061:9;6054:21;6035:4;6104:6;6098:13;6147:6;6142:2;6131:9;6127:18;6120:34;6163:66;6222:6;6217:2;6206:9;6202:18;6197:2;6189:6;6185:15;6163:66;:::i;:::-;6281:2;6269:15;-1:-1:-1;;6265:88:16;6250:104;;;;6356:2;6246:113;;5923:442;-1:-1:-1;;5923:442:16:o;6370:184::-;6422:77;6419:1;6412:88;6519:4;6516:1;6509:15;6543:4;6540:1;6533:15;6559:228;6599:7;6725:1;6657:66;6653:74;6650:1;6647:81;6642:1;6635:9;6628:17;6624:105;6621:131;;;6732:18;;:::i;:::-;-1:-1:-1;6772:9:16;;6559:228::o;6792:128::-;6832:3;6863:1;6859:6;6856:1;6853:13;6850:39;;;6869:18;;:::i;:::-;-1:-1:-1;6905:9:16;;6792:128::o;6925:184::-;6977:77;6974:1;6967:88;7074:4;7071:1;7064:15;7098:4;7095:1;7088:15;7114:184;7166:77;7163:1;7156:88;7263:4;7260:1;7253:15;7287:4;7284:1;7277:15;7303:196;7342:3;7370:5;7360:39;;7379:18;;:::i;:::-;-1:-1:-1;7426:66:16;7415:78;;7303:196::o"},"gasEstimates":{"creation":{"codeDepositCost":"784000","executionCost":"29510","totalCost":"813510"},"external":{"DEFAULT_ADMIN_ROLE()":"239","getRoleAdmin(bytes32)":"2470","giveCallPermission(address,string,address)":"infinite","grantRole(bytes32,address)":"infinite","hasPermission(address,address,string)":"infinite","hasRole(bytes32,address)":"2637","isAllowedToCall(address,string)":"infinite","renounceRole(bytes32,address)":"28972","revokeCallPermission(address,string,address)":"infinite","revokeRole(bytes32,address)":"infinite","supportsInterface(bytes4)":"393"}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","getRoleAdmin(bytes32)":"248a9ca3","giveCallPermission(address,string,address)":"584f6b60","grantRole(bytes32,address)":"2f2ff15d","hasPermission(address,address,string)":"82bfd0f0","hasRole(bytes32,address)":"91d14854","isAllowedToCall(address,string)":"18c5e8ab","renounceRole(bytes32,address)":"36568abe","revokeCallPermission(address,string,address)":"545f7a32","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"PermissionGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"PermissionRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"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\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"accountToPermit\",\"type\":\"address\"}],\"name\":\"giveCallPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"isAllowedToCall\",\"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\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"accountToRevoke\",\"type\":\"address\"}],\"name\":\"revokeCallPermission\",\"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\":{\"author\":\"Venus\",\"details\":\"This contract is a wrapper of OpenZeppelin AccessControl extending it in a way to standartize access control within Venus Smart Contract Ecosystem.\",\"events\":{\"PermissionGranted(address,address,string)\":{\"details\":\"If contract address is 0x000..0 this means that the account is a default admin of this function and can call any contract function with this signature\"}},\"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}.\"},\"giveCallPermission(address,string,address)\":{\"custom:event\":\"Emits a {RoleGranted} and {PermissionGranted} events.\",\"details\":\"this function can be called only from Role Admin or DEFAULT_ADMIN_ROLEif contractAddress is zero address, the account can access the specified function on **any** contract managed by this ACL\",\"params\":{\"accountToPermit\":\"account that will be given access to the contract function\",\"contractAddress\":\"address of contract for which call permissions will be granted\",\"functionSig\":\"signature e.g. \\\"functionName(uint256,bool)\\\"\"}},\"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.\"},\"hasPermission(address,address,string)\":{\"details\":\"This function is used as a view function to check permissions rather than contract hook for access restriction check.\",\"params\":{\"account\":\"for which call permissions will be checked against\",\"contractAddress\":\"address of the restricted contract\",\"functionSig\":\"signature of the restricted function e.g. \\\"functionName(uint256,bool)\\\"\"},\"returns\":{\"_0\":\"false if the user account cannot call the particular contract function\"}},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"isAllowedToCall(address,string)\":{\"details\":\"Since restricted contracts using this function as a permission hook, we can get contracts address with msg.sender\",\"params\":{\"account\":\"for which call permissions will be checked\",\"functionSig\":\"restricted function signature e.g. \\\"functionName(uint256,bool)\\\"\"},\"returns\":{\"_0\":\"false if the user account cannot call the particular contract function\"}},\"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.\"},\"revokeCallPermission(address,string,address)\":{\"custom:event\":\"Emits {RoleRevoked} and {PermissionRevoked} events.\",\"details\":\"this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE \\t\\tMay emit a {RoleRevoked} event.\",\"params\":{\"contractAddress\":\"address of contract for which call permissions will be revoked\",\"functionSig\":\"signature e.g. \\\"functionName(uint256,bool)\\\"\"}},\"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}.\"}},\"title\":\"AccessControlManager\",\"version\":1},\"userdoc\":{\"events\":{\"PermissionGranted(address,address,string)\":{\"notice\":\"Emitted when an account is given a permission to a certain contract function\"},\"PermissionRevoked(address,address,string)\":{\"notice\":\"Emitted when an account is revoked a permission to a certain contract function\"}},\"kind\":\"user\",\"methods\":{\"giveCallPermission(address,string,address)\":{\"notice\":\"Gives a function call permission to one single account\"},\"hasPermission(address,address,string)\":{\"notice\":\"Verifies if the given account can call a contract's guarded function\"},\"isAllowedToCall(address,string)\":{\"notice\":\"Verifies if the given account can call a contract's guarded function\"},\"revokeCallPermission(address,string,address)\":{\"notice\":\"Revokes an account's permission to a particular function call\"}},\"notice\":\"Access control plays a crucial role in the Venus governance model. It is used to restrict functions so that they can only be called from one account or list of accounts (EOA or Contract Accounts). The implementation of `AccessControlManager`(https://github.com/VenusProtocol/governance-contracts/blob/main/contracts/Governance/AccessControlManager.sol) inherits the [Open Zeppelin AccessControl](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/AccessControl.sol) contract as a base for role management logic. There are two role types: admin and granular permissions. ## Granular Roles Granular roles are built by hashing the contract address and its function signature. For example, given contract `Foo` with function `Foo.bar()` which is guarded by ACM, calling `giveRolePermission` for account B do the following: 1. Compute `keccak256(contractFooAddress,functionSignatureBar)` 1. Add the computed role to the roles of account B 1. Account B now can call `ContractFoo.bar()` ## Admin Roles Admin roles allow for an address to call a function signature on any contract guarded by the `AccessControlManager`. This is particularly useful for contracts created by factories. For Admin roles a null address is hashed in place of the contract address (`keccak256(0x0000000000000000000000000000000000000000,functionSignatureBar)`. In the previous example, giving account B the admin role, account B will have permissions to call the `bar()` function on any contract that is guarded by ACM, not only contract A. ## Protocol Integration All restricted functions in Venus Protocol use a hook to ACM in order to check if the caller has the right permission to call the guarded function. `AccessControlledV5` and `AccessControlledV8` abstract contract makes this integration easier. They call ACM's external method `isAllowedToCall(address caller, string functionSig)`. Here is an example of how `setCollateralFactor` function in `Comptroller` is integrated with ACM: ``` contract Comptroller is [...] AccessControlledV8 { [...] function setCollateralFactor(VToken vToken, uint256 newCollateralFactorMantissa, uint256 newLiquidationThresholdMantissa) external { _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\"); [...] } } ```\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Governance/AccessControlManager.sol\":\"AccessControlManager\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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 \\\"./IAccessControl.sol\\\";\\nimport \\\"../utils/Context.sol\\\";\\nimport \\\"../utils/Strings.sol\\\";\\nimport \\\"../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\",\"keccak256\":\"0x67e3daf189111d6d5b0464ed09cf9f0605a22c4b965a7fcecd707101faff008a\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0xa4d1d62251f8574deb032a35fc948386a9b4de74b812d4f545a1ac120486b48a\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0xd10975de010d89fd1c78dc5e8a9a7e7f496198085c151648f20cba166b32582b\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0x447a5f3ddc18419d41ff92b3773fb86471b1db25773e07f877f548918a185bf1\",\"license\":\"MIT\"},\"@openzeppelin/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);\\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 // \\u2192 `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))`\\n // \\u2192 `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 * 8) < value ? 1 : 0);\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa1e8e83cd0087785df04ac79fb395d9f3684caeaf973d9e2c71caef723a3a5d6\",\"license\":\"MIT\"},\"contracts/Governance/AccessControlManager.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.13;\\nimport \\\"@openzeppelin/contracts/access/AccessControl.sol\\\";\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlManager\\n * @author Venus\\n * @dev This contract is a wrapper of OpenZeppelin AccessControl extending it in a way to standartize access control within Venus Smart Contract Ecosystem.\\n * @notice Access control plays a crucial role in the Venus governance model. It is used to restrict functions so that they can only be called from one\\n * account or list of accounts (EOA or Contract Accounts).\\n *\\n * The implementation of `AccessControlManager`(https://github.com/VenusProtocol/governance-contracts/blob/main/contracts/Governance/AccessControlManager.sol)\\n * inherits the [Open Zeppelin AccessControl](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/AccessControl.sol)\\n * contract as a base for role management logic. There are two role types: admin and granular permissions.\\n * \\n * ## Granular Roles\\n * \\n * Granular roles are built by hashing the contract address and its function signature. For example, given contract `Foo` with function `Foo.bar()` which\\n * is guarded by ACM, calling `giveRolePermission` for account B do the following:\\n * \\n * 1. Compute `keccak256(contractFooAddress,functionSignatureBar)`\\n * 1. Add the computed role to the roles of account B\\n * 1. Account B now can call `ContractFoo.bar()`\\n * \\n * ## Admin Roles\\n * \\n * Admin roles allow for an address to call a function signature on any contract guarded by the `AccessControlManager`. This is particularly useful for\\n * contracts created by factories.\\n * \\n * For Admin roles a null address is hashed in place of the contract address (`keccak256(0x0000000000000000000000000000000000000000,functionSignatureBar)`.\\n * \\n * In the previous example, giving account B the admin role, account B will have permissions to call the `bar()` function on any contract that is guarded by\\n * ACM, not only contract A.\\n * \\n * ## Protocol Integration\\n * \\n * All restricted functions in Venus Protocol use a hook to ACM in order to check if the caller has the right permission to call the guarded function.\\n * `AccessControlledV5` and `AccessControlledV8` abstract contract makes this integration easier. They call ACM's external method\\n * `isAllowedToCall(address caller, string functionSig)`. Here is an example of how `setCollateralFactor` function in `Comptroller` is integrated with ACM:\\n\\n```\\n contract Comptroller is [...] AccessControlledV8 {\\n [...]\\n function setCollateralFactor(VToken vToken, uint256 newCollateralFactorMantissa, uint256 newLiquidationThresholdMantissa) external {\\n _checkAccessAllowed(\\\"setCollateralFactor(address,uint256,uint256)\\\");\\n [...]\\n }\\n }\\n```\\n */\\ncontract AccessControlManager is AccessControl, IAccessControlManagerV8 {\\n /// @notice Emitted when an account is given a permission to a certain contract function\\n /// @dev If contract address is 0x000..0 this means that the account is a default admin of this function and\\n /// can call any contract function with this signature\\n event PermissionGranted(address account, address contractAddress, string functionSig);\\n\\n /// @notice Emitted when an account is revoked a permission to a certain contract function\\n event PermissionRevoked(address account, address contractAddress, string functionSig);\\n\\n constructor() {\\n // Grant the contract deployer the default admin role: it will be able\\n // to grant and revoke any roles\\n _setupRole(DEFAULT_ADMIN_ROLE, msg.sender);\\n }\\n\\n /**\\n * @notice Gives a function call permission to one single account\\n * @dev this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE\\n * @param contractAddress address of contract for which call permissions will be granted\\n * @dev if contractAddress is zero address, the account can access the specified function\\n * on **any** contract managed by this ACL\\n * @param functionSig signature e.g. \\\"functionName(uint256,bool)\\\"\\n * @param accountToPermit account that will be given access to the contract function\\n * @custom:event Emits a {RoleGranted} and {PermissionGranted} events.\\n */\\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) public {\\n bytes32 role = keccak256(abi.encodePacked(contractAddress, functionSig));\\n grantRole(role, accountToPermit);\\n emit PermissionGranted(accountToPermit, contractAddress, functionSig);\\n }\\n\\n /**\\n * @notice Revokes an account's permission to a particular function call\\n * @dev this function can be called only from Role Admin or DEFAULT_ADMIN_ROLE\\n * \\t\\tMay emit a {RoleRevoked} event.\\n * @param contractAddress address of contract for which call permissions will be revoked\\n * @param functionSig signature e.g. \\\"functionName(uint256,bool)\\\"\\n * @custom:event Emits {RoleRevoked} and {PermissionRevoked} events.\\n */\\n function revokeCallPermission(\\n address contractAddress,\\n string calldata functionSig,\\n address accountToRevoke\\n ) public {\\n bytes32 role = keccak256(abi.encodePacked(contractAddress, functionSig));\\n revokeRole(role, accountToRevoke);\\n emit PermissionRevoked(accountToRevoke, contractAddress, functionSig);\\n }\\n\\n /**\\n * @notice Verifies if the given account can call a contract's guarded function\\n * @dev Since restricted contracts using this function as a permission hook, we can get contracts address with msg.sender\\n * @param account for which call permissions will be checked\\n * @param functionSig restricted function signature e.g. \\\"functionName(uint256,bool)\\\"\\n * @return false if the user account cannot call the particular contract function\\n *\\n */\\n function isAllowedToCall(address account, string calldata functionSig) public view returns (bool) {\\n bytes32 role = keccak256(abi.encodePacked(msg.sender, functionSig));\\n\\n if (hasRole(role, account)) {\\n return true;\\n } else {\\n role = keccak256(abi.encodePacked(address(0), functionSig));\\n return hasRole(role, account);\\n }\\n }\\n\\n /**\\n * @notice Verifies if the given account can call a contract's guarded function\\n * @dev This function is used as a view function to check permissions rather than contract hook for access restriction check.\\n * @param account for which call permissions will be checked against\\n * @param contractAddress address of the restricted contract\\n * @param functionSig signature of the restricted function e.g. \\\"functionName(uint256,bool)\\\"\\n * @return false if the user account cannot call the particular contract function\\n */\\n function hasPermission(\\n address account,\\n address contractAddress,\\n string calldata functionSig\\n ) public view returns (bool) {\\n bytes32 role = keccak256(abi.encodePacked(contractAddress, functionSig));\\n return hasRole(role, account);\\n }\\n}\\n\",\"keccak256\":\"0x3f0f81ca42dcf3e7c9d5eec0df565f195784e429028e4fd0cac76976efbc7502\",\"license\":\"BSD-3-Clause\"},\"contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.13;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n function revokeCallPermission(\\n address contractAddress,\\n string calldata functionSig,\\n address accountToRevoke\\n ) external;\\n\\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n function hasPermission(\\n address account,\\n address contractAddress,\\n string calldata functionSig\\n ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x8adbe291d659987faf4de606736227ad9d8e1a0e284a33a6ca12b30ab2a504b2\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":757,"contract":"contracts/Governance/AccessControlManager.sol:AccessControlManager","label":"_roles","offset":0,"slot":"0","type":"t_mapping(t_bytes32,t_struct(RoleData)752_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)752_storage)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => struct AccessControl.RoleData)","numberOfBytes":"32","value":"t_struct(RoleData)752_storage"},"t_struct(RoleData)752_storage":{"encoding":"inplace","label":"struct AccessControl.RoleData","members":[{"astId":749,"contract":"contracts/Governance/AccessControlManager.sol:AccessControlManager","label":"members","offset":0,"slot":"0","type":"t_mapping(t_address,t_bool)"},{"astId":751,"contract":"contracts/Governance/AccessControlManager.sol:AccessControlManager","label":"adminRole","offset":0,"slot":"1","type":"t_bytes32"}],"numberOfBytes":"64"}}},"userdoc":{"events":{"PermissionGranted(address,address,string)":{"notice":"Emitted when an account is given a permission to a certain contract function"},"PermissionRevoked(address,address,string)":{"notice":"Emitted when an account is revoked a permission to a certain contract function"}},"kind":"user","methods":{"giveCallPermission(address,string,address)":{"notice":"Gives a function call permission to one single account"},"hasPermission(address,address,string)":{"notice":"Verifies if the given account can call a contract's guarded function"},"isAllowedToCall(address,string)":{"notice":"Verifies if the given account can call a contract's guarded function"},"revokeCallPermission(address,string,address)":{"notice":"Revokes an account's permission to a particular function call"}},"notice":"Access control plays a crucial role in the Venus governance model. It is used to restrict functions so that they can only be called from one account or list of accounts (EOA or Contract Accounts). The implementation of `AccessControlManager`(https://github.com/VenusProtocol/governance-contracts/blob/main/contracts/Governance/AccessControlManager.sol) inherits the [Open Zeppelin AccessControl](https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/AccessControl.sol) contract as a base for role management logic. There are two role types: admin and granular permissions. ## Granular Roles Granular roles are built by hashing the contract address and its function signature. For example, given contract `Foo` with function `Foo.bar()` which is guarded by ACM, calling `giveRolePermission` for account B do the following: 1. Compute `keccak256(contractFooAddress,functionSignatureBar)` 1. Add the computed role to the roles of account B 1. Account B now can call `ContractFoo.bar()` ## Admin Roles Admin roles allow for an address to call a function signature on any contract guarded by the `AccessControlManager`. This is particularly useful for contracts created by factories. For Admin roles a null address is hashed in place of the contract address (`keccak256(0x0000000000000000000000000000000000000000,functionSignatureBar)`. In the previous example, giving account B the admin role, account B will have permissions to call the `bar()` function on any contract that is guarded by ACM, not only contract A. ## Protocol Integration All restricted functions in Venus Protocol use a hook to ACM in order to check if the caller has the right permission to call the guarded function. `AccessControlledV5` and `AccessControlledV8` abstract contract makes this integration easier. They call ACM's external method `isAllowedToCall(address caller, string functionSig)`. Here is an example of how `setCollateralFactor` function in `Comptroller` is integrated with ACM: ``` contract Comptroller is [...] AccessControlledV8 { [...] function setCollateralFactor(VToken vToken, uint256 newCollateralFactorMantissa, uint256 newLiquidationThresholdMantissa) external { _checkAccessAllowed(\"setCollateralFactor(address,uint256,uint256)\"); [...] } } ```","version":1}}},"contracts/Governance/AccessControlledV8.sol":{"AccessControlledV8":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"author":"Venus","kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"stateVariables":{"__gap":{"details":"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps"}},"title":"AccessControlledV8","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","setAccessControlManager(address)":"0e32cb86","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Venus\",\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"stateVariables\":{\"__gap\":{\"details\":\"This empty reserved space is put in place to allow future versions to add new variables without shifting down storage in the inheritance chain. See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\"}},\"title\":\"AccessControlledV8\",\"version\":1},\"userdoc\":{\"errors\":{\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}]},\"events\":{\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"}},\"kind\":\"user\",\"methods\":{\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"}},\"notice\":\"This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13) to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Governance/AccessControlledV8.sol\":\"AccessControlledV8\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n function __Ownable2Step_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable2Step_init_unchained() internal onlyInitializing {\\n }\\n address private _pendingOwner;\\n\\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Returns the address of the pending owner.\\n */\\n function pendingOwner() public view virtual returns (address) {\\n return _pendingOwner;\\n }\\n\\n /**\\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual override onlyOwner {\\n _pendingOwner = newOwner;\\n emit OwnershipTransferStarted(owner(), newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual override {\\n delete _pendingOwner;\\n super._transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev The new owner accepts the ownership transfer.\\n */\\n function acceptOwnership() external {\\n address sender = _msgSender();\\n require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n _transferOwnership(sender);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd712fb45b3ea0ab49679164e3895037adc26ce12879d5184feb040e01c1c07a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\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 ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\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 /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.13;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n /// @notice Access control manager contract\\n IAccessControlManagerV8 private _accessControlManager;\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n\\n /// @notice Emitted when access control manager contract address is changed\\n event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n /// @notice Thrown when the action is prohibited by AccessControlManager\\n error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n __Ownable2Step_init();\\n __AccessControlled_init_unchained(accessControlManager_);\\n }\\n\\n function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n _setAccessControlManager(accessControlManager_);\\n }\\n\\n /**\\n * @notice Sets the address of AccessControlManager\\n * @dev Admin function to set address of AccessControlManager\\n * @param accessControlManager_ The new address of the AccessControlManager\\n * @custom:event Emits NewAccessControlManager event\\n * @custom:access Only Governance\\n */\\n function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n _setAccessControlManager(accessControlManager_);\\n }\\n\\n /**\\n * @notice Returns the address of the access control manager contract\\n */\\n function accessControlManager() external view returns (IAccessControlManagerV8) {\\n return _accessControlManager;\\n }\\n\\n /**\\n * @dev Internal function to set address of AccessControlManager\\n * @param accessControlManager_ The new address of the AccessControlManager\\n */\\n function _setAccessControlManager(address accessControlManager_) internal {\\n require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n address oldAccessControlManager = address(_accessControlManager);\\n _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n }\\n\\n /**\\n * @notice Reverts if the call is not allowed by AccessControlManager\\n * @param signature Method signature\\n */\\n function _checkAccessAllowed(string memory signature) internal view {\\n bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n if (!isAllowedToCall) {\\n revert Unauthorized(msg.sender, address(this), signature);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1b805a5d09990e2c4f7839afe7726a02f8452261eb3d0d488e24129ec0a7736d\",\"license\":\"BSD-3-Clause\"},\"contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.13;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n function revokeCallPermission(\\n address contractAddress,\\n string calldata functionSig,\\n address accountToRevoke\\n ) external;\\n\\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n function hasPermission(\\n address account,\\n address contractAddress,\\n string calldata functionSig\\n ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x8adbe291d659987faf4de606736227ad9d8e1a0e284a33a6ca12b30ab2a504b2\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":244,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":247,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":731,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":116,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":236,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":25,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":104,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":2412,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"_accessControlManager","offset":0,"slot":"151","type":"t_contract(IAccessControlManagerV8)2597"},{"astId":2417,"contract":"contracts/Governance/AccessControlledV8.sol:AccessControlledV8","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IAccessControlManagerV8)2597":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}]},"events":{"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"}},"kind":"user","methods":{"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"}},"notice":"This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13) to integrate access controlled mechanism. It provides initialise methods and verifying access methods.","version":1}}},"contracts/Governance/IAccessControlManagerV8.sol":{"IAccessControlManagerV8":{"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":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"},{"internalType":"address","name":"accountToPermit","type":"address"}],"name":"giveCallPermission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"}],"name":"hasPermission","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"account","type":"address"},{"internalType":"string","name":"functionSig","type":"string"}],"name":"isAllowedToCall","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":"address","name":"contractAddress","type":"address"},{"internalType":"string","name":"functionSig","type":"string"},{"internalType":"address","name":"accountToRevoke","type":"address"}],"name":"revokeCallPermission","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":{"author":"Venus","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."}},"title":"IAccessControlManagerV8","version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"deployedBytecode":{"functionDebugData":{},"generatedSources":[],"immutableReferences":{},"linkReferences":{},"object":"","opcodes":"","sourceMap":""},"gasEstimates":null,"methodIdentifiers":{"getRoleAdmin(bytes32)":"248a9ca3","giveCallPermission(address,string,address)":"584f6b60","grantRole(bytes32,address)":"2f2ff15d","hasPermission(address,address,string)":"82bfd0f0","hasRole(bytes32,address)":"91d14854","isAllowedToCall(address,string)":"18c5e8ab","renounceRole(bytes32,address)":"36568abe","revokeCallPermission(address,string,address)":"545f7a32","revokeRole(bytes32,address)":"d547741f"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"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\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"accountToPermit\",\"type\":\"address\"}],\"name\":\"giveCallPermission\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"hasPermission\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"}],\"name\":\"isAllowedToCall\",\"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\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"functionSig\",\"type\":\"string\"},{\"internalType\":\"address\",\"name\":\"accountToRevoke\",\"type\":\"address\"}],\"name\":\"revokeCallPermission\",\"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\":{\"author\":\"Venus\",\"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.\"}},\"title\":\"IAccessControlManagerV8\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"notice\":\"Interface implemented by the `AccessControlManagerV8` contract.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/Governance/IAccessControlManagerV8.sol\":\"IAccessControlManagerV8\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/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\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.13;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n function revokeCallPermission(\\n address contractAddress,\\n string calldata functionSig,\\n address accountToRevoke\\n ) external;\\n\\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n function hasPermission(\\n address account,\\n address contractAddress,\\n string calldata functionSig\\n ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x8adbe291d659987faf4de606736227ad9d8e1a0e284a33a6ca12b30ab2a504b2\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[],"types":null},"userdoc":{"kind":"user","methods":{},"notice":"Interface implemented by the `AccessControlManagerV8` contract.","version":1}}},"contracts/test/MockAccessTest.sol":{"MockAccessTest":{"abi":[{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"calledContract","type":"address"},{"internalType":"string","name":"methodSignature","type":"string"}],"name":"Unauthorized","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"version","type":"uint8"}],"name":"Initialized","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldAccessControlManager","type":"address"},{"indexed":false,"internalType":"address","name":"newAccessControlManager","type":"address"}],"name":"NewAccessControlManager","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"accessControlManager","outputs":[{"internalType":"contract IAccessControlManagerV8","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"accessControlManager_","type":"address"}],"name":"setAccessControlManager","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}],"devdoc":{"kind":"dev","methods":{"acceptOwnership()":{"details":"The new owner accepts the ownership transfer."},"initialize(address)":{"params":{"accessControlManager":"Access control manager contract address"}},"owner()":{"details":"Returns the address of the current owner."},"pendingOwner()":{"details":"Returns the address of the pending owner."},"renounceOwnership()":{"details":"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."},"setAccessControlManager(address)":{"custom:access":"Only Governance","custom:event":"Emits NewAccessControlManager event","details":"Admin function to set address of AccessControlManager","params":{"accessControlManager_":"The new address of the AccessControlManager"}},"transferOwnership(address)":{"details":"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner."}},"version":1},"evm":{"bytecode":{"functionDebugData":{},"generatedSources":[],"linkReferences":{},"object":"608060405234801561001057600080fd5b506107d0806100206000396000f3fe608060405234801561001057600080fd5b50600436106100885760003560e01c8063b4a0bdf31161005b578063b4a0bdf3146100f5578063c4d66de814610113578063e30c397814610126578063f2fde38b1461014457600080fd5b80630e32cb861461008d578063715018a6146100a257806379ba5097146100aa5780638da5cb5b146100b2575b600080fd5b6100a061009b36600461075d565b610157565b005b6100a061016b565b6100a061017f565b60335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60975473ffffffffffffffffffffffffffffffffffffffff166100cc565b6100a061012136600461075d565b610236565b60655473ffffffffffffffffffffffffffffffffffffffff166100cc565b6100a061015236600461075d565b6103cb565b61015f61047b565b610168816104fc565b50565b61017361047b565b61017d600061061e565b565b606554339073ffffffffffffffffffffffffffffffffffffffff16811461022d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101688161061e565b600054610100900460ff16158080156102565750600054600160ff909116105b806102705750303b158015610270575060005460ff166001145b6102fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561035a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6103638261064f565b80156103c757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b6103d361047b565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561043660335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60335473ffffffffffffffffffffffffffffffffffffffff16331461017d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610224565b73ffffffffffffffffffffffffffffffffffffffff811661059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e6167657220616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610224565b6097805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa091016103be565b606580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610168816106e6565b600054610100900460ff1661015f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610224565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020828403121561076f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461079357600080fd5b939250505056fea2646970667358221220c3115a278068d49108fe8d65a871866cb167594549082c406ef4f2c7b78616f464736f6c634300080d0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH2 0x7D0 DUP1 PUSH2 0x20 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB4A0BDF3 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xB2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x75D JUMP JUMPDEST PUSH2 0x157 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA0 PUSH2 0x16B JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x17F JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x97 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCC JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x121 CALLDATASIZE PUSH1 0x4 PUSH2 0x75D JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCC JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x152 CALLDATASIZE PUSH1 0x4 PUSH2 0x75D JUMP JUMPDEST PUSH2 0x3CB JUMP JUMPDEST PUSH2 0x15F PUSH2 0x47B JUMP JUMPDEST PUSH2 0x168 DUP2 PUSH2 0x4FC JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x173 PUSH2 0x47B JUMP JUMPDEST PUSH2 0x17D PUSH1 0x0 PUSH2 0x61E JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 EQ PUSH2 0x22D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E6577206F776E65720000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x168 DUP2 PUSH2 0x61E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x256 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x270 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x270 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x2FC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x647920696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x363 DUP3 PUSH2 0x64F JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x47B JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x436 PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x17D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x224 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x59F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP1 SWAP3 AND DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP2 ADD PUSH2 0x3BE JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH2 0x168 DUP2 PUSH2 0x6E6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E697469616C697A696E67000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x76F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC3 GT GAS 0x27 DUP1 PUSH9 0xD49108FE8D65A87186 PUSH13 0xB167594549082C406EF4F2C7B7 DUP7 AND DELEGATECALL PUSH5 0x736F6C6343 STOP ADDMOD 0xD STOP CALLER ","sourceMap":"114:288:15:-:0;;;;;;;;;;;;;;;;;;;"},"deployedBytecode":{"functionDebugData":{"@__AccessControlled_init_unchained_2460":{"entryPoint":1615,"id":2460,"parameterSlots":1,"returnSlots":0},"@_checkOwner_174":{"entryPoint":1147,"id":174,"parameterSlots":0,"returnSlots":0},"@_msgSender_717":{"entryPoint":null,"id":717,"parameterSlots":0,"returnSlots":1},"@_setAccessControlManager_2521":{"entryPoint":1276,"id":2521,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_231":{"entryPoint":1766,"id":231,"parameterSlots":1,"returnSlots":0},"@_transferOwnership_77":{"entryPoint":1566,"id":77,"parameterSlots":1,"returnSlots":0},"@acceptOwnership_99":{"entryPoint":383,"id":99,"parameterSlots":0,"returnSlots":0},"@accessControlManager_2483":{"entryPoint":null,"id":2483,"parameterSlots":0,"returnSlots":1},"@initialize_2615":{"entryPoint":566,"id":2615,"parameterSlots":1,"returnSlots":0},"@isContract_424":{"entryPoint":null,"id":424,"parameterSlots":1,"returnSlots":1},"@owner_160":{"entryPoint":null,"id":160,"parameterSlots":0,"returnSlots":1},"@pendingOwner_40":{"entryPoint":null,"id":40,"parameterSlots":0,"returnSlots":1},"@renounceOwnership_188":{"entryPoint":363,"id":188,"parameterSlots":0,"returnSlots":0},"@setAccessControlManager_2473":{"entryPoint":343,"id":2473,"parameterSlots":1,"returnSlots":0},"@transferOwnership_60":{"entryPoint":971,"id":60,"parameterSlots":1,"returnSlots":0},"abi_decode_tuple_t_address":{"entryPoint":1885,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":3,"returnSlots":1},"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$2597__to_t_address__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":2,"returnSlots":1},"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1},"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed":{"entryPoint":null,"id":null,"parameterSlots":1,"returnSlots":1}},"generatedSources":[{"ast":{"nodeType":"YulBlock","src":"0:3354:16","statements":[{"nodeType":"YulBlock","src":"6:3:16","statements":[]},{"body":{"nodeType":"YulBlock","src":"84:239:16","statements":[{"body":{"nodeType":"YulBlock","src":"130:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"139:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"142:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"132:6:16"},"nodeType":"YulFunctionCall","src":"132:12:16"},"nodeType":"YulExpressionStatement","src":"132:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"dataEnd","nodeType":"YulIdentifier","src":"105:7:16"},{"name":"headStart","nodeType":"YulIdentifier","src":"114:9:16"}],"functionName":{"name":"sub","nodeType":"YulIdentifier","src":"101:3:16"},"nodeType":"YulFunctionCall","src":"101:23:16"},{"kind":"number","nodeType":"YulLiteral","src":"126:2:16","type":"","value":"32"}],"functionName":{"name":"slt","nodeType":"YulIdentifier","src":"97:3:16"},"nodeType":"YulFunctionCall","src":"97:32:16"},"nodeType":"YulIf","src":"94:52:16"},{"nodeType":"YulVariableDeclaration","src":"155:36:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"181:9:16"}],"functionName":{"name":"calldataload","nodeType":"YulIdentifier","src":"168:12:16"},"nodeType":"YulFunctionCall","src":"168:23:16"},"variables":[{"name":"value","nodeType":"YulTypedName","src":"159:5:16","type":""}]},{"body":{"nodeType":"YulBlock","src":"277:16:16","statements":[{"expression":{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"286:1:16","type":"","value":"0"},{"kind":"number","nodeType":"YulLiteral","src":"289:1:16","type":"","value":"0"}],"functionName":{"name":"revert","nodeType":"YulIdentifier","src":"279:6:16"},"nodeType":"YulFunctionCall","src":"279:12:16"},"nodeType":"YulExpressionStatement","src":"279:12:16"}]},"condition":{"arguments":[{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"213:5:16"},{"arguments":[{"name":"value","nodeType":"YulIdentifier","src":"224:5:16"},{"kind":"number","nodeType":"YulLiteral","src":"231:42:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"220:3:16"},"nodeType":"YulFunctionCall","src":"220:54:16"}],"functionName":{"name":"eq","nodeType":"YulIdentifier","src":"210:2:16"},"nodeType":"YulFunctionCall","src":"210:65:16"}],"functionName":{"name":"iszero","nodeType":"YulIdentifier","src":"203:6:16"},"nodeType":"YulFunctionCall","src":"203:73:16"},"nodeType":"YulIf","src":"200:93:16"},{"nodeType":"YulAssignment","src":"302:15:16","value":{"name":"value","nodeType":"YulIdentifier","src":"312:5:16"},"variableNames":[{"name":"value0","nodeType":"YulIdentifier","src":"302:6:16"}]}]},"name":"abi_decode_tuple_t_address","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"50:9:16","type":""},{"name":"dataEnd","nodeType":"YulTypedName","src":"61:7:16","type":""}],"returnVariables":[{"name":"value0","nodeType":"YulTypedName","src":"73:6:16","type":""}],"src":"14:309:16"},{"body":{"nodeType":"YulBlock","src":"429:125:16","statements":[{"nodeType":"YulAssignment","src":"439:26:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"451:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"462:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"447:3:16"},"nodeType":"YulFunctionCall","src":"447:18:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"439:4:16"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"481:9:16"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"496:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"504:42:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"492:3:16"},"nodeType":"YulFunctionCall","src":"492:55:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"474:6:16"},"nodeType":"YulFunctionCall","src":"474:74:16"},"nodeType":"YulExpressionStatement","src":"474:74:16"}]},"name":"abi_encode_tuple_t_address__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"398:9:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"409:6:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"420:4:16","type":""}],"src":"328:226:16"},{"body":{"nodeType":"YulBlock","src":"692:125:16","statements":[{"nodeType":"YulAssignment","src":"702:26:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"714:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"725:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"710:3:16"},"nodeType":"YulFunctionCall","src":"710:18:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"702:4:16"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"744:9:16"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"759:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"767:42:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"755:3:16"},"nodeType":"YulFunctionCall","src":"755:55:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"737:6:16"},"nodeType":"YulFunctionCall","src":"737:74:16"},"nodeType":"YulExpressionStatement","src":"737:74:16"}]},"name":"abi_encode_tuple_t_contract$_IAccessControlManagerV8_$2597__to_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"661:9:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"672:6:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"683:4:16","type":""}],"src":"559:258:16"},{"body":{"nodeType":"YulBlock","src":"996:231:16","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1013:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1024:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1006:6:16"},"nodeType":"YulFunctionCall","src":"1006:21:16"},"nodeType":"YulExpressionStatement","src":"1006:21:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1047:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1058:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1043:3:16"},"nodeType":"YulFunctionCall","src":"1043:18:16"},{"kind":"number","nodeType":"YulLiteral","src":"1063:2:16","type":"","value":"41"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1036:6:16"},"nodeType":"YulFunctionCall","src":"1036:30:16"},"nodeType":"YulExpressionStatement","src":"1036:30:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1086:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1097:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1082:3:16"},"nodeType":"YulFunctionCall","src":"1082:18:16"},{"hexValue":"4f776e61626c6532537465703a2063616c6c6572206973206e6f742074686520","kind":"string","nodeType":"YulLiteral","src":"1102:34:16","type":"","value":"Ownable2Step: caller is not the "}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1075:6:16"},"nodeType":"YulFunctionCall","src":"1075:62:16"},"nodeType":"YulExpressionStatement","src":"1075:62:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1157:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1168:2:16","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1153:3:16"},"nodeType":"YulFunctionCall","src":"1153:18:16"},{"hexValue":"6e6577206f776e6572","kind":"string","nodeType":"YulLiteral","src":"1173:11:16","type":"","value":"new owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1146:6:16"},"nodeType":"YulFunctionCall","src":"1146:39:16"},"nodeType":"YulExpressionStatement","src":"1146:39:16"},{"nodeType":"YulAssignment","src":"1194:27:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1206:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1217:3:16","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1202:3:16"},"nodeType":"YulFunctionCall","src":"1202:19:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1194:4:16"}]}]},"name":"abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"973:9:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"987:4:16","type":""}],"src":"822:405:16"},{"body":{"nodeType":"YulBlock","src":"1406:236:16","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1423:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1434:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1416:6:16"},"nodeType":"YulFunctionCall","src":"1416:21:16"},"nodeType":"YulExpressionStatement","src":"1416:21:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1457:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1468:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1453:3:16"},"nodeType":"YulFunctionCall","src":"1453:18:16"},{"kind":"number","nodeType":"YulLiteral","src":"1473:2:16","type":"","value":"46"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1446:6:16"},"nodeType":"YulFunctionCall","src":"1446:30:16"},"nodeType":"YulExpressionStatement","src":"1446:30:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1496:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1507:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1492:3:16"},"nodeType":"YulFunctionCall","src":"1492:18:16"},{"hexValue":"496e697469616c697a61626c653a20636f6e747261637420697320616c726561","kind":"string","nodeType":"YulLiteral","src":"1512:34:16","type":"","value":"Initializable: contract is alrea"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1485:6:16"},"nodeType":"YulFunctionCall","src":"1485:62:16"},"nodeType":"YulExpressionStatement","src":"1485:62:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1567:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1578:2:16","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1563:3:16"},"nodeType":"YulFunctionCall","src":"1563:18:16"},{"hexValue":"647920696e697469616c697a6564","kind":"string","nodeType":"YulLiteral","src":"1583:16:16","type":"","value":"dy initialized"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1556:6:16"},"nodeType":"YulFunctionCall","src":"1556:44:16"},"nodeType":"YulExpressionStatement","src":"1556:44:16"},{"nodeType":"YulAssignment","src":"1609:27:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1621:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1632:3:16","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1617:3:16"},"nodeType":"YulFunctionCall","src":"1617:19:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1609:4:16"}]}]},"name":"abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1383:9:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1397:4:16","type":""}],"src":"1232:410:16"},{"body":{"nodeType":"YulBlock","src":"1754:87:16","statements":[{"nodeType":"YulAssignment","src":"1764:26:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1776:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"1787:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"1772:3:16"},"nodeType":"YulFunctionCall","src":"1772:18:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"1764:4:16"}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"1806:9:16"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"1821:6:16"},{"kind":"number","nodeType":"YulLiteral","src":"1829:4:16","type":"","value":"0xff"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"1817:3:16"},"nodeType":"YulFunctionCall","src":"1817:17:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"1799:6:16"},"nodeType":"YulFunctionCall","src":"1799:36:16"},"nodeType":"YulExpressionStatement","src":"1799:36:16"}]},"name":"abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1723:9:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"1734:6:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"1745:4:16","type":""}],"src":"1647:194:16"},{"body":{"nodeType":"YulBlock","src":"2020:182:16","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2037:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2048:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2030:6:16"},"nodeType":"YulFunctionCall","src":"2030:21:16"},"nodeType":"YulExpressionStatement","src":"2030:21:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2071:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2082:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2067:3:16"},"nodeType":"YulFunctionCall","src":"2067:18:16"},{"kind":"number","nodeType":"YulLiteral","src":"2087:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2060:6:16"},"nodeType":"YulFunctionCall","src":"2060:30:16"},"nodeType":"YulExpressionStatement","src":"2060:30:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2110:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2121:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2106:3:16"},"nodeType":"YulFunctionCall","src":"2106:18:16"},{"hexValue":"4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572","kind":"string","nodeType":"YulLiteral","src":"2126:34:16","type":"","value":"Ownable: caller is not the owner"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2099:6:16"},"nodeType":"YulFunctionCall","src":"2099:62:16"},"nodeType":"YulExpressionStatement","src":"2099:62:16"},{"nodeType":"YulAssignment","src":"2170:26:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2182:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2193:2:16","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2178:3:16"},"nodeType":"YulFunctionCall","src":"2178:18:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2170:4:16"}]}]},"name":"abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"1997:9:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2011:4:16","type":""}],"src":"1846:356:16"},{"body":{"nodeType":"YulBlock","src":"2381:227:16","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2398:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2409:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2391:6:16"},"nodeType":"YulFunctionCall","src":"2391:21:16"},"nodeType":"YulExpressionStatement","src":"2391:21:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2432:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2443:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2428:3:16"},"nodeType":"YulFunctionCall","src":"2428:18:16"},{"kind":"number","nodeType":"YulLiteral","src":"2448:2:16","type":"","value":"37"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2421:6:16"},"nodeType":"YulFunctionCall","src":"2421:30:16"},"nodeType":"YulExpressionStatement","src":"2421:30:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2471:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2482:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2467:3:16"},"nodeType":"YulFunctionCall","src":"2467:18:16"},{"hexValue":"696e76616c696420616365737320636f6e74726f6c206d616e61676572206164","kind":"string","nodeType":"YulLiteral","src":"2487:34:16","type":"","value":"invalid acess control manager ad"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2460:6:16"},"nodeType":"YulFunctionCall","src":"2460:62:16"},"nodeType":"YulExpressionStatement","src":"2460:62:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2542:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2553:2:16","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2538:3:16"},"nodeType":"YulFunctionCall","src":"2538:18:16"},{"hexValue":"6472657373","kind":"string","nodeType":"YulLiteral","src":"2558:7:16","type":"","value":"dress"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2531:6:16"},"nodeType":"YulFunctionCall","src":"2531:35:16"},"nodeType":"YulExpressionStatement","src":"2531:35:16"},{"nodeType":"YulAssignment","src":"2575:27:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2587:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2598:3:16","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2583:3:16"},"nodeType":"YulFunctionCall","src":"2583:19:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2575:4:16"}]}]},"name":"abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2358:9:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2372:4:16","type":""}],"src":"2207:401:16"},{"body":{"nodeType":"YulBlock","src":"2742:198:16","statements":[{"nodeType":"YulAssignment","src":"2752:26:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2764:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2775:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2760:3:16"},"nodeType":"YulFunctionCall","src":"2760:18:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"2752:4:16"}]},{"nodeType":"YulVariableDeclaration","src":"2787:52:16","value":{"kind":"number","nodeType":"YulLiteral","src":"2797:42:16","type":"","value":"0xffffffffffffffffffffffffffffffffffffffff"},"variables":[{"name":"_1","nodeType":"YulTypedName","src":"2791:2:16","type":""}]},{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2855:9:16"},{"arguments":[{"name":"value0","nodeType":"YulIdentifier","src":"2870:6:16"},{"name":"_1","nodeType":"YulIdentifier","src":"2878:2:16"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2866:3:16"},"nodeType":"YulFunctionCall","src":"2866:15:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2848:6:16"},"nodeType":"YulFunctionCall","src":"2848:34:16"},"nodeType":"YulExpressionStatement","src":"2848:34:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"2902:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"2913:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"2898:3:16"},"nodeType":"YulFunctionCall","src":"2898:18:16"},{"arguments":[{"name":"value1","nodeType":"YulIdentifier","src":"2922:6:16"},{"name":"_1","nodeType":"YulIdentifier","src":"2930:2:16"}],"functionName":{"name":"and","nodeType":"YulIdentifier","src":"2918:3:16"},"nodeType":"YulFunctionCall","src":"2918:15:16"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"2891:6:16"},"nodeType":"YulFunctionCall","src":"2891:43:16"},"nodeType":"YulExpressionStatement","src":"2891:43:16"}]},"name":"abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"2703:9:16","type":""},{"name":"value1","nodeType":"YulTypedName","src":"2714:6:16","type":""},{"name":"value0","nodeType":"YulTypedName","src":"2722:6:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"2733:4:16","type":""}],"src":"2613:327:16"},{"body":{"nodeType":"YulBlock","src":"3119:233:16","statements":[{"expression":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3136:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"3147:2:16","type":"","value":"32"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3129:6:16"},"nodeType":"YulFunctionCall","src":"3129:21:16"},"nodeType":"YulExpressionStatement","src":"3129:21:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3170:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"3181:2:16","type":"","value":"32"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3166:3:16"},"nodeType":"YulFunctionCall","src":"3166:18:16"},{"kind":"number","nodeType":"YulLiteral","src":"3186:2:16","type":"","value":"43"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3159:6:16"},"nodeType":"YulFunctionCall","src":"3159:30:16"},"nodeType":"YulExpressionStatement","src":"3159:30:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3209:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"3220:2:16","type":"","value":"64"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3205:3:16"},"nodeType":"YulFunctionCall","src":"3205:18:16"},{"hexValue":"496e697469616c697a61626c653a20636f6e7472616374206973206e6f742069","kind":"string","nodeType":"YulLiteral","src":"3225:34:16","type":"","value":"Initializable: contract is not i"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3198:6:16"},"nodeType":"YulFunctionCall","src":"3198:62:16"},"nodeType":"YulExpressionStatement","src":"3198:62:16"},{"expression":{"arguments":[{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3280:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"3291:2:16","type":"","value":"96"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3276:3:16"},"nodeType":"YulFunctionCall","src":"3276:18:16"},{"hexValue":"6e697469616c697a696e67","kind":"string","nodeType":"YulLiteral","src":"3296:13:16","type":"","value":"nitializing"}],"functionName":{"name":"mstore","nodeType":"YulIdentifier","src":"3269:6:16"},"nodeType":"YulFunctionCall","src":"3269:41:16"},"nodeType":"YulExpressionStatement","src":"3269:41:16"},{"nodeType":"YulAssignment","src":"3319:27:16","value":{"arguments":[{"name":"headStart","nodeType":"YulIdentifier","src":"3331:9:16"},{"kind":"number","nodeType":"YulLiteral","src":"3342:3:16","type":"","value":"128"}],"functionName":{"name":"add","nodeType":"YulIdentifier","src":"3327:3:16"},"nodeType":"YulFunctionCall","src":"3327:19:16"},"variableNames":[{"name":"tail","nodeType":"YulIdentifier","src":"3319:4:16"}]}]},"name":"abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed","nodeType":"YulFunctionDefinition","parameters":[{"name":"headStart","nodeType":"YulTypedName","src":"3096:9:16","type":""}],"returnVariables":[{"name":"tail","nodeType":"YulTypedName","src":"3110:4:16","type":""}],"src":"2945:407:16"}]},"contents":"{\n { }\n function abi_decode_tuple_t_address(headStart, dataEnd) -> value0\n {\n if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n let value := calldataload(headStart)\n if iszero(eq(value, and(value, 0xffffffffffffffffffffffffffffffffffffffff))) { revert(0, 0) }\n value0 := value\n }\n function abi_encode_tuple_t_address__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_contract$_IAccessControlManagerV8_$2597__to_t_address__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xffffffffffffffffffffffffffffffffffffffff))\n }\n function abi_encode_tuple_t_stringliteral_225559eb8402045bea7ff07c35d0ad8c0547830223ac1c21d44fb948d6896ebc__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 41)\n mstore(add(headStart, 64), \"Ownable2Step: caller is not the \")\n mstore(add(headStart, 96), \"new owner\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_stringliteral_7a2a4e26842155ea933fe6eb6e3137eb5a296dcdf55721c552be7b4c3cc23759__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 46)\n mstore(add(headStart, 64), \"Initializable: contract is alrea\")\n mstore(add(headStart, 96), \"dy initialized\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_rational_1_by_1__to_t_uint8__fromStack_reversed(headStart, value0) -> tail\n {\n tail := add(headStart, 32)\n mstore(headStart, and(value0, 0xff))\n }\n function abi_encode_tuple_t_stringliteral_9924ebdf1add33d25d4ef888e16131f0a5687b0580a36c21b5c301a6c462effe__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 32)\n mstore(add(headStart, 64), \"Ownable: caller is not the owner\")\n tail := add(headStart, 96)\n }\n function abi_encode_tuple_t_stringliteral_4fb90961f89e1ad09bee577e07c3323ef046bc07751bb17057bc82e05747edcb__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 37)\n mstore(add(headStart, 64), \"invalid acess control manager ad\")\n mstore(add(headStart, 96), \"dress\")\n tail := add(headStart, 128)\n }\n function abi_encode_tuple_t_address_t_address__to_t_address_t_address__fromStack_reversed(headStart, value1, value0) -> tail\n {\n tail := add(headStart, 64)\n let _1 := 0xffffffffffffffffffffffffffffffffffffffff\n mstore(headStart, and(value0, _1))\n mstore(add(headStart, 32), and(value1, _1))\n }\n function abi_encode_tuple_t_stringliteral_d688db918bb9dd50354922faa108595679886fe9ff08046ad1ffe30aaea55f8b__to_t_string_memory_ptr__fromStack_reversed(headStart) -> tail\n {\n mstore(headStart, 32)\n mstore(add(headStart, 32), 43)\n mstore(add(headStart, 64), \"Initializable: contract is not i\")\n mstore(add(headStart, 96), \"nitializing\")\n tail := add(headStart, 128)\n }\n}","id":16,"language":"Yul","name":"#utility.yul"}],"immutableReferences":{},"linkReferences":{},"object":"608060405234801561001057600080fd5b50600436106100885760003560e01c8063b4a0bdf31161005b578063b4a0bdf3146100f5578063c4d66de814610113578063e30c397814610126578063f2fde38b1461014457600080fd5b80630e32cb861461008d578063715018a6146100a257806379ba5097146100aa5780638da5cb5b146100b2575b600080fd5b6100a061009b36600461075d565b610157565b005b6100a061016b565b6100a061017f565b60335473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b60975473ffffffffffffffffffffffffffffffffffffffff166100cc565b6100a061012136600461075d565b610236565b60655473ffffffffffffffffffffffffffffffffffffffff166100cc565b6100a061015236600461075d565b6103cb565b61015f61047b565b610168816104fc565b50565b61017361047b565b61017d600061061e565b565b606554339073ffffffffffffffffffffffffffffffffffffffff16811461022d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e6572000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b6101688161061e565b600054610100900460ff16158080156102565750600054600160ff909116105b806102705750303b158015610270575060005460ff166001145b6102fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610224565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561035a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b6103638261064f565b80156103c757600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b6103d361047b565b6065805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915561043660335473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60335473ffffffffffffffffffffffffffffffffffffffff16331461017d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610224565b73ffffffffffffffffffffffffffffffffffffffff811661059f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f696e76616c696420616365737320636f6e74726f6c206d616e6167657220616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152608401610224565b6097805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f66fd58e82f7b31a2a5c30e0888f3093efe4e111b00cd2b0c31fe014601293aa091016103be565b606580547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055610168816106e6565b600054610100900460ff1661015f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610224565b6033805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006020828403121561076f57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff8116811461079357600080fd5b939250505056fea2646970667358221220c3115a278068d49108fe8d65a871866cb167594549082c406ef4f2c7b78616f464736f6c634300080d0033","opcodes":"PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH2 0x88 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0xB4A0BDF3 GT PUSH2 0x5B JUMPI DUP1 PUSH4 0xB4A0BDF3 EQ PUSH2 0xF5 JUMPI DUP1 PUSH4 0xC4D66DE8 EQ PUSH2 0x113 JUMPI DUP1 PUSH4 0xE30C3978 EQ PUSH2 0x126 JUMPI DUP1 PUSH4 0xF2FDE38B EQ PUSH2 0x144 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP1 PUSH4 0xE32CB86 EQ PUSH2 0x8D JUMPI DUP1 PUSH4 0x715018A6 EQ PUSH2 0xA2 JUMPI DUP1 PUSH4 0x79BA5097 EQ PUSH2 0xAA JUMPI DUP1 PUSH4 0x8DA5CB5B EQ PUSH2 0xB2 JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH2 0xA0 PUSH2 0x9B CALLDATASIZE PUSH1 0x4 PUSH2 0x75D JUMP JUMPDEST PUSH2 0x157 JUMP JUMPDEST STOP JUMPDEST PUSH2 0xA0 PUSH2 0x16B JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x17F JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN JUMPDEST PUSH1 0x97 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCC JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x121 CALLDATASIZE PUSH1 0x4 PUSH2 0x75D JUMP JUMPDEST PUSH2 0x236 JUMP JUMPDEST PUSH1 0x65 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH2 0xCC JUMP JUMPDEST PUSH2 0xA0 PUSH2 0x152 CALLDATASIZE PUSH1 0x4 PUSH2 0x75D JUMP JUMPDEST PUSH2 0x3CB JUMP JUMPDEST PUSH2 0x15F PUSH2 0x47B JUMP JUMPDEST PUSH2 0x168 DUP2 PUSH2 0x4FC JUMP JUMPDEST POP JUMP JUMPDEST PUSH2 0x173 PUSH2 0x47B JUMP JUMPDEST PUSH2 0x17D PUSH1 0x0 PUSH2 0x61E JUMP JUMPDEST JUMP JUMPDEST PUSH1 0x65 SLOAD CALLER SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 EQ PUSH2 0x22D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x29 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C6532537465703A2063616C6C6572206973206E6F742074686520 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E6577206F776E65720000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 REVERT JUMPDEST PUSH2 0x168 DUP2 PUSH2 0x61E JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND ISZERO DUP1 DUP1 ISZERO PUSH2 0x256 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0x1 PUSH1 0xFF SWAP1 SWAP2 AND LT JUMPDEST DUP1 PUSH2 0x270 JUMPI POP ADDRESS EXTCODESIZE ISZERO DUP1 ISZERO PUSH2 0x270 JUMPI POP PUSH1 0x0 SLOAD PUSH1 0xFF AND PUSH1 0x1 EQ JUMPDEST PUSH2 0x2FC JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2E PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E747261637420697320616C726561 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x647920696E697469616C697A6564000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00 AND PUSH1 0x1 OR SWAP1 SSTORE DUP1 ISZERO PUSH2 0x35A JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF AND PUSH2 0x100 OR SWAP1 SSTORE JUMPDEST PUSH2 0x363 DUP3 PUSH2 0x64F JUMP JUMPDEST DUP1 ISZERO PUSH2 0x3C7 JUMPI PUSH1 0x0 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FF AND SWAP1 SSTORE PUSH1 0x40 MLOAD PUSH1 0x1 DUP2 MSTORE PUSH32 0x7F26B83FF96E1F2B6A682F133852F6798A09C465DA95921460CEFB3847402498 SWAP1 PUSH1 0x20 ADD JUMPDEST PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG1 JUMPDEST POP POP JUMP JUMPDEST PUSH2 0x3D3 PUSH2 0x47B JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 SWAP1 SWAP2 AND DUP2 OR SWAP1 SWAP2 SSTORE PUSH2 0x436 PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND SWAP1 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND PUSH32 0x38D16B8CAC22D99FC7C124B9CD0DE2D3FA1FAEF420BFE791D8C362D765E22700 PUSH1 0x40 MLOAD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 LOG3 POP JUMP JUMPDEST PUSH1 0x33 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND CALLER EQ PUSH2 0x17D JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD DUP2 SWAP1 MSTORE PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x4F776E61626C653A2063616C6C6572206973206E6F7420746865206F776E6572 PUSH1 0x44 DUP3 ADD MSTORE PUSH1 0x64 ADD PUSH2 0x224 JUMP JUMPDEST PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND PUSH2 0x59F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x25 PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x696E76616C696420616365737320636F6E74726F6C206D616E61676572206164 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6472657373000000000000000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x97 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 DUP1 MLOAD SWAP2 SWAP1 SWAP3 AND DUP1 DUP3 MSTORE PUSH1 0x20 DUP3 ADD SWAP4 SWAP1 SWAP4 MSTORE PUSH32 0x66FD58E82F7B31A2A5C30E0888F3093EFE4E111B00CD2B0C31FE014601293AA0 SWAP2 ADD PUSH2 0x3BE JUMP JUMPDEST PUSH1 0x65 DUP1 SLOAD PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 AND SWAP1 SSTORE PUSH2 0x168 DUP2 PUSH2 0x6E6 JUMP JUMPDEST PUSH1 0x0 SLOAD PUSH2 0x100 SWAP1 DIV PUSH1 0xFF AND PUSH2 0x15F JUMPI PUSH1 0x40 MLOAD PUSH32 0x8C379A000000000000000000000000000000000000000000000000000000000 DUP2 MSTORE PUSH1 0x20 PUSH1 0x4 DUP3 ADD MSTORE PUSH1 0x2B PUSH1 0x24 DUP3 ADD MSTORE PUSH32 0x496E697469616C697A61626C653A20636F6E7472616374206973206E6F742069 PUSH1 0x44 DUP3 ADD MSTORE PUSH32 0x6E697469616C697A696E67000000000000000000000000000000000000000000 PUSH1 0x64 DUP3 ADD MSTORE PUSH1 0x84 ADD PUSH2 0x224 JUMP JUMPDEST PUSH1 0x33 DUP1 SLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP4 DUP2 AND PUSH32 0xFFFFFFFFFFFFFFFFFFFFFFFF0000000000000000000000000000000000000000 DUP4 AND DUP2 OR SWAP1 SWAP4 SSTORE PUSH1 0x40 MLOAD SWAP2 AND SWAP2 SWAP1 DUP3 SWAP1 PUSH32 0x8BE0079C531659141344CD1FD0A4F28419497F9722A3DAAFE3B4186F6B6457E0 SWAP1 PUSH1 0x0 SWAP1 LOG3 POP POP JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x76F JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 CALLDATALOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF DUP2 AND DUP2 EQ PUSH2 0x793 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 0xC3 GT GAS 0x27 DUP1 PUSH9 0xD49108FE8D65A87186 PUSH13 0xB167594549082C406EF4F2C7B7 DUP7 AND DELEGATECALL PUSH5 0x736F6C6343 STOP ADDMOD 0xD STOP CALLER ","sourceMap":"114:288:15:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2101:147:13;;;;;;:::i;:::-;;:::i;:::-;;2071:101:1;;;:::i;2010:206:0:-;;;:::i;1441:85:1:-;1513:6;;;;1441:85;;;504:42:16;492:55;;;474:74;;462:2;447:18;1441:85:1;;;;;;;2344:125:13;2441:21;;;;2344:125;;257:143:15;;;;;;:::i;:::-;;:::i;1123:99:0:-;1202:13;;;;1123:99;;1415:178;;;;;;:::i;:::-;;:::i;2101:147:13:-;1334:13:1;:11;:13::i;:::-;2194:47:13::1;2219:21;2194:24;:47::i;:::-;2101:147:::0;:::o;2071:101:1:-;1334:13;:11;:13::i;:::-;2135:30:::1;2162:1;2135:18;:30::i;:::-;2071:101::o:0;2010:206:0:-;1202:13;;929:10:4;;2103:24:0;1202:13;2103:24;;2095:78;;;;;;;1024:2:16;2095:78:0;;;1006:21:16;1063:2;1043:18;;;1036:30;1102:34;1082:18;;;1075:62;1173:11;1153:18;;;1146:39;1202:19;;2095:78:0;;;;;;;;;2183:26;2202:6;2183:18;:26::i;257:143:15:-;3268:19:2;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:2;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:2;1476:19:3;:23;;;3376:66:2;;-1:-1:-1;3425:12:2;;;;;:17;3376:66;3314:201;;;;;;;1434:2:16;3314:201:2;;;1416:21:16;1473:2;1453:18;;;1446:30;1512:34;1492:18;;;1485:62;1583:16;1563:18;;;1556:44;1617:19;;3314:201:2;1232:410:16;3314:201:2;3525:12;:16;;;;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;;;;;;;3551:65;338:55:15::1;372:20;338:33;:55::i;:::-;3640:14:2::0;3636:99;;;3686:5;3670:21;;;;;;3710:14;;-1:-1:-1;1799:36:16;;3710:14:2;;1787:2:16;1772:18;3710:14:2;;;;;;;;3636:99;3258:483;257:143:15;:::o;1415:178:0:-;1334:13:1;:11;:13::i;:::-;1504::0::1;:24:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;;;1568:7:::1;1513:6:1::0;;;;;1441:85;1568:7:0::1;1543:43;;;;;;;;;;;;1415:178:::0;:::o;1599:130:1:-;1513:6;;1662:23;1513:6;929:10:4;1662:23:1;1654:68;;;;;;;2048:2:16;1654:68:1;;;2030:21:16;;;2067:18;;;2060:30;2126:34;2106:18;;;2099:62;2178:18;;1654:68:1;1846:356:16;2640:425:13;2732:44;;;2724:94;;;;;;;2409:2:16;2724:94:13;;;2391:21:16;2448:2;2428:18;;;2421:30;2487:34;2467:18;;;2460:62;2558:7;2538:18;;;2531:35;2583:19;;2724:94:13;2207:401:16;2724:94:13;2870:21;;;;2902:70;;;;;;;;;;;2987:71;;;2870:21;;;;2848:34:16;;;2913:2;2898:18;;2891:43;;;;2987:71:13;;2760:18:16;2987:71:13;2613:327:16;1777:153:0;1866:13;1859:20;;;;;;1889:34;1914:8;1889:24;:34::i;1618:164:13:-;5363:13:2;;;;;;;5355:69;;;;;;;3147:2:16;5355:69:2;;;3129:21:16;3186:2;3166:18;;;3159:30;3225:34;3205:18;;;3198:62;3296:13;3276:18;;;3269:41;3327:19;;5355:69:2;2945:407:16;2673:187:1;2765:6;;;;2781:17;;;;;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;14:309:16:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;231:42;224:5;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:16:o"},"gasEstimates":{"creation":{"codeDepositCost":"400000","executionCost":"436","totalCost":"400436"},"external":{"acceptOwnership()":"infinite","accessControlManager()":"2295","initialize(address)":"infinite","owner()":"2351","pendingOwner()":"2339","renounceOwnership()":"infinite","setAccessControlManager(address)":"28065","transferOwnership(address)":"30371"}},"methodIdentifiers":{"acceptOwnership()":"79ba5097","accessControlManager()":"b4a0bdf3","initialize(address)":"c4d66de8","owner()":"8da5cb5b","pendingOwner()":"e30c3978","renounceOwnership()":"715018a6","setAccessControlManager(address)":"0e32cb86","transferOwnership(address)":"f2fde38b"}},"metadata":"{\"compiler\":{\"version\":\"0.8.13+commit.abaa5c0e\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"calledContract\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"methodSignature\",\"type\":\"string\"}],\"name\":\"Unauthorized\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"oldAccessControlManager\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAccessControlManager\",\"type\":\"address\"}],\"name\":\"NewAccessControlManager\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"accessControlManager\",\"outputs\":[{\"internalType\":\"contract IAccessControlManagerV8\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"accessControlManager_\",\"type\":\"address\"}],\"name\":\"setAccessControlManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptOwnership()\":{\"details\":\"The new owner accepts the ownership transfer.\"},\"initialize(address)\":{\"params\":{\"accessControlManager\":\"Access control manager contract address\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pendingOwner()\":{\"details\":\"Returns the address of the pending owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"setAccessControlManager(address)\":{\"custom:access\":\"Only Governance\",\"custom:event\":\"Emits NewAccessControlManager event\",\"details\":\"Admin function to set address of AccessControlManager\",\"params\":{\"accessControlManager_\":\"The new address of the AccessControlManager\"}},\"transferOwnership(address)\":{\"details\":\"Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"Unauthorized(address,address,string)\":[{\"notice\":\"Thrown when the action is prohibited by AccessControlManager\"}]},\"events\":{\"NewAccessControlManager(address,address)\":{\"notice\":\"Emitted when access control manager contract address is changed\"}},\"kind\":\"user\",\"methods\":{\"accessControlManager()\":{\"notice\":\"Returns the address of the access control manager contract\"},\"setAccessControlManager(address)\":{\"notice\":\"Sets the address of AccessControlManager\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/test/MockAccessTest.sol\":\"MockAccessTest\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":10000},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (access/Ownable2Step.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./OwnableUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership} and {acceptOwnership}.\\n *\\n * This module is used through inheritance. It will make available all functions\\n * from parent (Ownable).\\n */\\nabstract contract Ownable2StepUpgradeable is Initializable, OwnableUpgradeable {\\n function __Ownable2Step_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable2Step_init_unchained() internal onlyInitializing {\\n }\\n address private _pendingOwner;\\n\\n event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Returns the address of the pending owner.\\n */\\n function pendingOwner() public view virtual returns (address) {\\n return _pendingOwner;\\n }\\n\\n /**\\n * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one.\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual override onlyOwner {\\n _pendingOwner = newOwner;\\n emit OwnershipTransferStarted(owner(), newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner.\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual override {\\n delete _pendingOwner;\\n super._transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev The new owner accepts the ownership transfer.\\n */\\n function acceptOwnership() external {\\n address sender = _msgSender();\\n require(pendingOwner() == sender, \\\"Ownable2Step: caller is not the new owner\\\");\\n _transferOwnership(sender);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0xd712fb45b3ea0ab49679164e3895037adc26ce12879d5184feb040e01c1c07a9\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/ContextUpgradeable.sol\\\";\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract OwnableUpgradeable is Initializable, ContextUpgradeable {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n function __Ownable_init() internal onlyInitializing {\\n __Ownable_init_unchained();\\n }\\n\\n function __Ownable_init_unchained() internal onlyInitializing {\\n _transferOwnership(_msgSender());\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n _checkOwner();\\n _;\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if the sender is not the owner.\\n */\\n function _checkOwner() internal view virtual {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n}\\n\",\"keccak256\":\"0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.1) (proxy/utils/Initializable.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../../utils/AddressUpgradeable.sol\\\";\\n\\n/**\\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\\n *\\n * The initialization functions use a version number. Once a version number is used, it is consumed and cannot be\\n * reused. This mechanism prevents re-execution of each \\\"step\\\" but allows the creation of new initialization steps in\\n * case an upgrade adds a module that needs to be initialized.\\n *\\n * For example:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * contract MyToken is ERC20Upgradeable {\\n * function initialize() initializer public {\\n * __ERC20_init(\\\"MyToken\\\", \\\"MTK\\\");\\n * }\\n * }\\n * contract MyTokenV2 is MyToken, ERC20PermitUpgradeable {\\n * function initializeV2() reinitializer(2) public {\\n * __ERC20Permit_init(\\\"MyToken\\\");\\n * }\\n * }\\n * ```\\n *\\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\\n *\\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\\n *\\n * [CAUTION]\\n * ====\\n * Avoid leaving a contract uninitialized.\\n *\\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\\n * contract, which may impact the proxy. To prevent the implementation contract from being used, you should invoke\\n * the {_disableInitializers} function in the constructor to automatically lock it when it is deployed:\\n *\\n * [.hljs-theme-light.nopadding]\\n * ```\\n * /// @custom:oz-upgrades-unsafe-allow constructor\\n * constructor() {\\n * _disableInitializers();\\n * }\\n * ```\\n * ====\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n * @custom:oz-retyped-from bool\\n */\\n uint8 private _initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private _initializing;\\n\\n /**\\n * @dev Triggered when the contract has been initialized or reinitialized.\\n */\\n event Initialized(uint8 version);\\n\\n /**\\n * @dev A modifier that defines a protected initializer function that can be invoked at most once. In its scope,\\n * `onlyInitializing` functions can be used to initialize parent contracts.\\n *\\n * Similar to `reinitializer(1)`, except that functions marked with `initializer` can be nested in the context of a\\n * constructor.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier initializer() {\\n bool isTopLevelCall = !_initializing;\\n require(\\n (isTopLevelCall && _initialized < 1) || (!AddressUpgradeable.isContract(address(this)) && _initialized == 1),\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n _initialized = 1;\\n if (isTopLevelCall) {\\n _initializing = true;\\n }\\n _;\\n if (isTopLevelCall) {\\n _initializing = false;\\n emit Initialized(1);\\n }\\n }\\n\\n /**\\n * @dev A modifier that defines a protected reinitializer function that can be invoked at most once, and only if the\\n * contract hasn't been initialized to a greater version before. In its scope, `onlyInitializing` functions can be\\n * used to initialize parent contracts.\\n *\\n * A reinitializer may be used after the original initialization step. This is essential to configure modules that\\n * are added through upgrades and that require initialization.\\n *\\n * When `version` is 1, this modifier is similar to `initializer`, except that functions marked with `reinitializer`\\n * cannot be nested. If one is invoked in the context of another, execution will revert.\\n *\\n * Note that versions can jump in increments greater than 1; this implies that if multiple reinitializers coexist in\\n * a contract, executing them in the right order is up to the developer or operator.\\n *\\n * WARNING: setting the version to 255 will prevent any future reinitialization.\\n *\\n * Emits an {Initialized} event.\\n */\\n modifier reinitializer(uint8 version) {\\n require(!_initializing && _initialized < version, \\\"Initializable: contract is already initialized\\\");\\n _initialized = version;\\n _initializing = true;\\n _;\\n _initializing = false;\\n emit Initialized(version);\\n }\\n\\n /**\\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\\n * {initializer} and {reinitializer} modifiers, directly or indirectly.\\n */\\n modifier onlyInitializing() {\\n require(_initializing, \\\"Initializable: contract is not initializing\\\");\\n _;\\n }\\n\\n /**\\n * @dev Locks the contract, preventing any future reinitialization. This cannot be part of an initializer call.\\n * Calling this in the constructor of a contract will prevent that contract from being initialized or reinitialized\\n * to any version. It is recommended to use this to lock implementation contracts that are designed to be called\\n * through proxies.\\n *\\n * Emits an {Initialized} event the first time it is successfully executed.\\n */\\n function _disableInitializers() internal virtual {\\n require(!_initializing, \\\"Initializable: contract is initializing\\\");\\n if (_initialized < type(uint8).max) {\\n _initialized = type(uint8).max;\\n emit Initialized(type(uint8).max);\\n }\\n }\\n\\n /**\\n * @dev Returns the highest version that has been initialized. See {reinitializer}.\\n */\\n function _getInitializedVersion() internal view returns (uint8) {\\n return _initialized;\\n }\\n\\n /**\\n * @dev Returns `true` if the contract is currently initializing. See {onlyInitializing}.\\n */\\n function _isInitializing() internal view returns (bool) {\\n return _initializing;\\n }\\n}\\n\",\"keccak256\":\"0x037c334add4b033ad3493038c25be1682d78c00992e1acb0e2795caff3925271\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.8.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary AddressUpgradeable {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResultFromTarget(target, success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling\\n * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.\\n *\\n * _Available since v4.8._\\n */\\n function verifyCallResultFromTarget(\\n address target,\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n if (success) {\\n if (returndata.length == 0) {\\n // only check isContract if the call was successful and the return data is empty\\n // otherwise we already know that it was a contract\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n }\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n /**\\n * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason or using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n _revert(returndata, errorMessage);\\n }\\n }\\n\\n function _revert(bytes memory returndata, string memory errorMessage) private pure {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n /// @solidity memory-safe-assembly\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x2edcb41c121abc510932e8d83ff8b82cf9cdde35e7c297622f5c29ef0af25183\",\"license\":\"MIT\"},\"@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\nimport \\\"../proxy/utils/Initializable.sol\\\";\\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 ContextUpgradeable is Initializable {\\n function __Context_init() internal onlyInitializing {\\n }\\n\\n function __Context_init_unchained() internal onlyInitializing {\\n }\\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 /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[50] private __gap;\\n}\\n\",\"keccak256\":\"0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149\",\"license\":\"MIT\"},\"@openzeppelin/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\",\"keccak256\":\"0x59ce320a585d7e1f163cd70390a0ef2ff9cec832e2aa544293a00692465a7a57\",\"license\":\"MIT\"},\"contracts/Governance/AccessControlledV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.13;\\n\\nimport \\\"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol\\\";\\nimport \\\"@openzeppelin/contracts-upgradeable/access/Ownable2StepUpgradeable.sol\\\";\\n\\nimport \\\"./IAccessControlManagerV8.sol\\\";\\n\\n/**\\n * @title AccessControlledV8\\n * @author Venus\\n * @notice This contract is helper between access control manager and actual contract. This contract further inherited by other contract (using solidity 0.8.13)\\n * to integrate access controlled mechanism. It provides initialise methods and verifying access methods.\\n */\\nabstract contract AccessControlledV8 is Initializable, Ownable2StepUpgradeable {\\n /// @notice Access control manager contract\\n IAccessControlManagerV8 private _accessControlManager;\\n\\n /**\\n * @dev This empty reserved space is put in place to allow future versions to add new\\n * variables without shifting down storage in the inheritance chain.\\n * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps\\n */\\n uint256[49] private __gap;\\n\\n /// @notice Emitted when access control manager contract address is changed\\n event NewAccessControlManager(address oldAccessControlManager, address newAccessControlManager);\\n\\n /// @notice Thrown when the action is prohibited by AccessControlManager\\n error Unauthorized(address sender, address calledContract, string methodSignature);\\n\\n function __AccessControlled_init(address accessControlManager_) internal onlyInitializing {\\n __Ownable2Step_init();\\n __AccessControlled_init_unchained(accessControlManager_);\\n }\\n\\n function __AccessControlled_init_unchained(address accessControlManager_) internal onlyInitializing {\\n _setAccessControlManager(accessControlManager_);\\n }\\n\\n /**\\n * @notice Sets the address of AccessControlManager\\n * @dev Admin function to set address of AccessControlManager\\n * @param accessControlManager_ The new address of the AccessControlManager\\n * @custom:event Emits NewAccessControlManager event\\n * @custom:access Only Governance\\n */\\n function setAccessControlManager(address accessControlManager_) external onlyOwner {\\n _setAccessControlManager(accessControlManager_);\\n }\\n\\n /**\\n * @notice Returns the address of the access control manager contract\\n */\\n function accessControlManager() external view returns (IAccessControlManagerV8) {\\n return _accessControlManager;\\n }\\n\\n /**\\n * @dev Internal function to set address of AccessControlManager\\n * @param accessControlManager_ The new address of the AccessControlManager\\n */\\n function _setAccessControlManager(address accessControlManager_) internal {\\n require(address(accessControlManager_) != address(0), \\\"invalid acess control manager address\\\");\\n address oldAccessControlManager = address(_accessControlManager);\\n _accessControlManager = IAccessControlManagerV8(accessControlManager_);\\n emit NewAccessControlManager(oldAccessControlManager, accessControlManager_);\\n }\\n\\n /**\\n * @notice Reverts if the call is not allowed by AccessControlManager\\n * @param signature Method signature\\n */\\n function _checkAccessAllowed(string memory signature) internal view {\\n bool isAllowedToCall = _accessControlManager.isAllowedToCall(msg.sender, signature);\\n\\n if (!isAllowedToCall) {\\n revert Unauthorized(msg.sender, address(this), signature);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x1b805a5d09990e2c4f7839afe7726a02f8452261eb3d0d488e24129ec0a7736d\",\"license\":\"BSD-3-Clause\"},\"contracts/Governance/IAccessControlManagerV8.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.13;\\n\\nimport \\\"@openzeppelin/contracts/access/IAccessControl.sol\\\";\\n\\n/**\\n * @title IAccessControlManagerV8\\n * @author Venus\\n * @notice Interface implemented by the `AccessControlManagerV8` contract.\\n */\\ninterface IAccessControlManagerV8 is IAccessControl {\\n function giveCallPermission(address contractAddress, string calldata functionSig, address accountToPermit) external;\\n\\n function revokeCallPermission(\\n address contractAddress,\\n string calldata functionSig,\\n address accountToRevoke\\n ) external;\\n\\n function isAllowedToCall(address account, string calldata functionSig) external view returns (bool);\\n\\n function hasPermission(\\n address account,\\n address contractAddress,\\n string calldata functionSig\\n ) external view returns (bool);\\n}\\n\",\"keccak256\":\"0x8adbe291d659987faf4de606736227ad9d8e1a0e284a33a6ca12b30ab2a504b2\",\"license\":\"BSD-3-Clause\"},\"contracts/test/MockAccessTest.sol\":{\"content\":\"// SPDX-License-Identifier: BSD-3-Clause\\npragma solidity 0.8.13;\\n\\nimport \\\"../Governance/AccessControlledV8.sol\\\";\\n\\ncontract MockAccessTest is AccessControlledV8 {\\n /**\\n * @param accessControlManager Access control manager contract address\\n */\\n function initialize(address accessControlManager) external initializer {\\n __AccessControlled_init_unchained(accessControlManager);\\n }\\n}\\n\",\"keccak256\":\"0x0066742514c027cc5c8c84dd4c7555fe02e9c62746cddeb027904634fed44d50\",\"license\":\"BSD-3-Clause\"}},\"version\":1}","storageLayout":{"storage":[{"astId":244,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"_initialized","offset":0,"slot":"0","type":"t_uint8"},{"astId":247,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"_initializing","offset":1,"slot":"0","type":"t_bool"},{"astId":731,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"__gap","offset":0,"slot":"1","type":"t_array(t_uint256)50_storage"},{"astId":116,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"_owner","offset":0,"slot":"51","type":"t_address"},{"astId":236,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"__gap","offset":0,"slot":"52","type":"t_array(t_uint256)49_storage"},{"astId":25,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"_pendingOwner","offset":0,"slot":"101","type":"t_address"},{"astId":104,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"__gap","offset":0,"slot":"102","type":"t_array(t_uint256)49_storage"},{"astId":2412,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"_accessControlManager","offset":0,"slot":"151","type":"t_contract(IAccessControlManagerV8)2597"},{"astId":2417,"contract":"contracts/test/MockAccessTest.sol:MockAccessTest","label":"__gap","offset":0,"slot":"152","type":"t_array(t_uint256)49_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)49_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[49]","numberOfBytes":"1568"},"t_array(t_uint256)50_storage":{"base":"t_uint256","encoding":"inplace","label":"uint256[50]","numberOfBytes":"1600"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_contract(IAccessControlManagerV8)2597":{"encoding":"inplace","label":"contract IAccessControlManagerV8","numberOfBytes":"20"},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"},"t_uint8":{"encoding":"inplace","label":"uint8","numberOfBytes":"1"}}},"userdoc":{"errors":{"Unauthorized(address,address,string)":[{"notice":"Thrown when the action is prohibited by AccessControlManager"}]},"events":{"NewAccessControlManager(address,address)":{"notice":"Emitted when access control manager contract address is changed"}},"kind":"user","methods":{"accessControlManager()":{"notice":"Returns the address of the access control manager contract"},"setAccessControlManager(address)":{"notice":"Sets the address of AccessControlManager"}},"version":1}}}}}}