{
  "abi": [],
  "allSourcePaths": {
    "23": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/StorageSlot.sol"
  },
  "ast": {
    "absolutePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/StorageSlot.sol",
    "exportedSymbols": {
      "StorageSlot": [
        28706
      ]
    },
    "id": 28707,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 28648,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "105:23:23"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "documentation": {
          "id": 28649,
          "nodeType": "StructuredDocumentation",
          "src": "130:1148:23",
          "text": " @dev Library for reading and writing primitive types to specific storage slots.\n Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n This library helps with reading and writing to such slots without the need for inline assembly.\n The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n Example usage to set ERC1967 implementation slot:\n ```\n contract ERC1967 {\n     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n     function _getImplementation() internal view returns (address) {\n         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n     }\n     function _setImplementation(address newImplementation) internal {\n         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n     }\n }\n ```\n _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._"
        },
        "fullyImplemented": true,
        "id": 28706,
        "linearizedBaseContracts": [
          28706
        ],
        "name": "StorageSlot",
        "nameLocation": "1287:11:23",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "StorageSlot.AddressSlot",
            "id": 28652,
            "members": [
              {
                "constant": false,
                "id": 28651,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "1342:5:23",
                "nodeType": "VariableDeclaration",
                "scope": 28652,
                "src": "1334:13:23",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                },
                "typeName": {
                  "id": 28650,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "1334:7:23",
                  "stateMutability": "nonpayable",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "AddressSlot",
            "nameLocation": "1312:11:23",
            "nodeType": "StructDefinition",
            "scope": 28706,
            "src": "1305:49:23",
            "visibility": "public"
          },
          {
            "canonicalName": "StorageSlot.BooleanSlot",
            "id": 28655,
            "members": [
              {
                "constant": false,
                "id": 28654,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "1394:5:23",
                "nodeType": "VariableDeclaration",
                "scope": 28655,
                "src": "1389:10:23",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                },
                "typeName": {
                  "id": 28653,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "1389:4:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "BooleanSlot",
            "nameLocation": "1367:11:23",
            "nodeType": "StructDefinition",
            "scope": 28706,
            "src": "1360:46:23",
            "visibility": "public"
          },
          {
            "canonicalName": "StorageSlot.Bytes32Slot",
            "id": 28658,
            "members": [
              {
                "constant": false,
                "id": 28657,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "1449:5:23",
                "nodeType": "VariableDeclaration",
                "scope": 28658,
                "src": "1441:13:23",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                },
                "typeName": {
                  "id": 28656,
                  "name": "bytes32",
                  "nodeType": "ElementaryTypeName",
                  "src": "1441:7:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Bytes32Slot",
            "nameLocation": "1419:11:23",
            "nodeType": "StructDefinition",
            "scope": 28706,
            "src": "1412:49:23",
            "visibility": "public"
          },
          {
            "canonicalName": "StorageSlot.Uint256Slot",
            "id": 28661,
            "members": [
              {
                "constant": false,
                "id": 28660,
                "mutability": "mutable",
                "name": "value",
                "nameLocation": "1504:5:23",
                "nodeType": "VariableDeclaration",
                "scope": 28661,
                "src": "1496:13:23",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 28659,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "1496:7:23",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "Uint256Slot",
            "nameLocation": "1474:11:23",
            "nodeType": "StructDefinition",
            "scope": 28706,
            "src": "1467:49:23",
            "visibility": "public"
          },
          {
            "body": {
              "id": 28671,
              "nodeType": "Block",
              "src": "1698:106:23",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "1760:38:23",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "1774:14:23",
                        "value": {
                          "name": "slot",
                          "nodeType": "YulIdentifier",
                          "src": "1784:4:23"
                        },
                        "variableNames": [
                          {
                            "name": "r.slot",
                            "nodeType": "YulIdentifier",
                            "src": "1774:6:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": "@solidity memory-safe-assembly",
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28668,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "1774:6:23",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28664,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "1784:4:23",
                      "valueSize": 1
                    }
                  ],
                  "id": 28670,
                  "nodeType": "InlineAssembly",
                  "src": "1751:47:23"
                }
              ]
            },
            "documentation": {
              "id": 28662,
              "nodeType": "StructuredDocumentation",
              "src": "1522:87:23",
              "text": " @dev Returns an `AddressSlot` with member `value` located at `slot`."
            },
            "id": 28672,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAddressSlot",
            "nameLocation": "1623:14:23",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28664,
                  "mutability": "mutable",
                  "name": "slot",
                  "nameLocation": "1646:4:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 28672,
                  "src": "1638:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28663,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1638:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1637:14:23"
            },
            "returnParameters": {
              "id": 28669,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28668,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "1695:1:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 28672,
                  "src": "1675:21:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_AddressSlot_$28652_storage_ptr",
                    "typeString": "struct StorageSlot.AddressSlot"
                  },
                  "typeName": {
                    "id": 28667,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28666,
                      "name": "AddressSlot",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 28652,
                      "src": "1675:11:23"
                    },
                    "referencedDeclaration": 28652,
                    "src": "1675:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_AddressSlot_$28652_storage_ptr",
                      "typeString": "struct StorageSlot.AddressSlot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1674:23:23"
            },
            "scope": 28706,
            "src": "1614:190:23",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 28682,
              "nodeType": "Block",
              "src": "1986:106:23",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2048:38:23",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2062:14:23",
                        "value": {
                          "name": "slot",
                          "nodeType": "YulIdentifier",
                          "src": "2072:4:23"
                        },
                        "variableNames": [
                          {
                            "name": "r.slot",
                            "nodeType": "YulIdentifier",
                            "src": "2062:6:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": "@solidity memory-safe-assembly",
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28679,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "2062:6:23",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28675,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2072:4:23",
                      "valueSize": 1
                    }
                  ],
                  "id": 28681,
                  "nodeType": "InlineAssembly",
                  "src": "2039:47:23"
                }
              ]
            },
            "documentation": {
              "id": 28673,
              "nodeType": "StructuredDocumentation",
              "src": "1810:87:23",
              "text": " @dev Returns an `BooleanSlot` with member `value` located at `slot`."
            },
            "id": 28683,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBooleanSlot",
            "nameLocation": "1911:14:23",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28676,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28675,
                  "mutability": "mutable",
                  "name": "slot",
                  "nameLocation": "1934:4:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 28683,
                  "src": "1926:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28674,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1926:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1925:14:23"
            },
            "returnParameters": {
              "id": 28680,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28679,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "1983:1:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 28683,
                  "src": "1963:21:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_BooleanSlot_$28655_storage_ptr",
                    "typeString": "struct StorageSlot.BooleanSlot"
                  },
                  "typeName": {
                    "id": 28678,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28677,
                      "name": "BooleanSlot",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 28655,
                      "src": "1963:11:23"
                    },
                    "referencedDeclaration": 28655,
                    "src": "1963:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_BooleanSlot_$28655_storage_ptr",
                      "typeString": "struct StorageSlot.BooleanSlot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1962:23:23"
            },
            "scope": 28706,
            "src": "1902:190:23",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 28693,
              "nodeType": "Block",
              "src": "2274:106:23",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2336:38:23",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2350:14:23",
                        "value": {
                          "name": "slot",
                          "nodeType": "YulIdentifier",
                          "src": "2360:4:23"
                        },
                        "variableNames": [
                          {
                            "name": "r.slot",
                            "nodeType": "YulIdentifier",
                            "src": "2350:6:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": "@solidity memory-safe-assembly",
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28690,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "2350:6:23",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28686,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2360:4:23",
                      "valueSize": 1
                    }
                  ],
                  "id": 28692,
                  "nodeType": "InlineAssembly",
                  "src": "2327:47:23"
                }
              ]
            },
            "documentation": {
              "id": 28684,
              "nodeType": "StructuredDocumentation",
              "src": "2098:87:23",
              "text": " @dev Returns an `Bytes32Slot` with member `value` located at `slot`."
            },
            "id": 28694,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getBytes32Slot",
            "nameLocation": "2199:14:23",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28686,
                  "mutability": "mutable",
                  "name": "slot",
                  "nameLocation": "2222:4:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 28694,
                  "src": "2214:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28685,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2214:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2213:14:23"
            },
            "returnParameters": {
              "id": 28691,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28690,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "2271:1:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 28694,
                  "src": "2251:21:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Bytes32Slot_$28658_storage_ptr",
                    "typeString": "struct StorageSlot.Bytes32Slot"
                  },
                  "typeName": {
                    "id": 28689,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28688,
                      "name": "Bytes32Slot",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 28658,
                      "src": "2251:11:23"
                    },
                    "referencedDeclaration": 28658,
                    "src": "2251:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Bytes32Slot_$28658_storage_ptr",
                      "typeString": "struct StorageSlot.Bytes32Slot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2250:23:23"
            },
            "scope": 28706,
            "src": "2190:190:23",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 28704,
              "nodeType": "Block",
              "src": "2562:106:23",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2624:38:23",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "2638:14:23",
                        "value": {
                          "name": "slot",
                          "nodeType": "YulIdentifier",
                          "src": "2648:4:23"
                        },
                        "variableNames": [
                          {
                            "name": "r.slot",
                            "nodeType": "YulIdentifier",
                            "src": "2638:6:23"
                          }
                        ]
                      }
                    ]
                  },
                  "documentation": "@solidity memory-safe-assembly",
                  "evmVersion": "istanbul",
                  "externalReferences": [
                    {
                      "declaration": 28701,
                      "isOffset": false,
                      "isSlot": true,
                      "src": "2638:6:23",
                      "suffix": "slot",
                      "valueSize": 1
                    },
                    {
                      "declaration": 28697,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2648:4:23",
                      "valueSize": 1
                    }
                  ],
                  "id": 28703,
                  "nodeType": "InlineAssembly",
                  "src": "2615:47:23"
                }
              ]
            },
            "documentation": {
              "id": 28695,
              "nodeType": "StructuredDocumentation",
              "src": "2386:87:23",
              "text": " @dev Returns an `Uint256Slot` with member `value` located at `slot`."
            },
            "id": 28705,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getUint256Slot",
            "nameLocation": "2487:14:23",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 28698,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28697,
                  "mutability": "mutable",
                  "name": "slot",
                  "nameLocation": "2510:4:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 28705,
                  "src": "2502:12:23",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28696,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2502:7:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2501:14:23"
            },
            "returnParameters": {
              "id": 28702,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28701,
                  "mutability": "mutable",
                  "name": "r",
                  "nameLocation": "2559:1:23",
                  "nodeType": "VariableDeclaration",
                  "scope": 28705,
                  "src": "2539:21:23",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Uint256Slot_$28661_storage_ptr",
                    "typeString": "struct StorageSlot.Uint256Slot"
                  },
                  "typeName": {
                    "id": 28700,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 28699,
                      "name": "Uint256Slot",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 28661,
                      "src": "2539:11:23"
                    },
                    "referencedDeclaration": 28661,
                    "src": "2539:11:23",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Uint256Slot_$28661_storage_ptr",
                      "typeString": "struct StorageSlot.Uint256Slot"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2538:23:23"
            },
            "scope": 28706,
            "src": "2478:190:23",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 28707,
        "src": "1279:1391:23"
      }
    ],
    "src": "105:2566:23"
  },
  "bytecode": "60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206a2c412733cbd814c742ba03a6dc2c93a2257d291ff7737fdb76aef4d122fb4f64736f6c63430008020033",
  "bytecodeSha1": "1ce946f6a4eaa185320328620ccf999b9e86db7c",
  "compiler": {
    "evm_version": "istanbul",
    "optimizer": {
      "enabled": true,
      "runs": 200
    },
    "version": "0.8.2+commit.661d1103"
  },
  "contractName": "StorageSlot",
  "coverageMap": {
    "branches": {
      "23": {}
    },
    "statements": {
      "23": {}
    }
  },
  "dependencies": [],
  "deployedBytecode": "73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212206a2c412733cbd814c742ba03a6dc2c93a2257d291ff7737fdb76aef4d122fb4f64736f6c63430008020033",
  "deployedSourceMap": "1279:1391:23:-:0;;;;;;;;",
  "language": "Solidity",
  "natspec": {
    "details": "Library for reading and writing primitive types to specific storage slots. Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts. This library helps with reading and writing to such slots without the need for inline assembly. The functions in this library return Slot structs that contain a `value` member that can be used to read or write. Example usage to set ERC1967 implementation slot: ``` contract ERC1967 {     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;     function _getImplementation() internal view returns (address) {         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;     }     function _setImplementation(address newImplementation) internal {         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;     } } ``` _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._",
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "offset": [
    1279,
    2670
  ],
  "opcodes": "PUSH20 0x0 ADDRESS EQ PUSH1 0x80 PUSH1 0x40 MSTORE PUSH1 0x0 DUP1 REVERT INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 PUSH11 0x2C412733CBD814C742BA03 0xA6 0xDC 0x2C SWAP4 LOG2 0x25 PUSH30 0x291FF7737FDB76AEF4D122FB4F64736F6C63430008020033000000000000 ",
  "pcMap": {
    "0": {
      "offset": [
        1279,
        2670
      ],
      "op": "PUSH20",
      "path": "23",
      "value": "0x0"
    },
    "21": {
      "fn": null,
      "offset": [
        1279,
        2670
      ],
      "op": "ADDRESS",
      "path": "23"
    },
    "22": {
      "fn": null,
      "offset": [
        1279,
        2670
      ],
      "op": "EQ",
      "path": "23"
    },
    "23": {
      "fn": null,
      "offset": [
        1279,
        2670
      ],
      "op": "PUSH1",
      "path": "23",
      "value": "0x80"
    },
    "25": {
      "fn": null,
      "offset": [
        1279,
        2670
      ],
      "op": "PUSH1",
      "path": "23",
      "value": "0x40"
    },
    "27": {
      "fn": null,
      "offset": [
        1279,
        2670
      ],
      "op": "MSTORE",
      "path": "23"
    },
    "28": {
      "fn": null,
      "offset": [
        1279,
        2670
      ],
      "op": "PUSH1",
      "path": "23",
      "value": "0x0"
    },
    "30": {
      "fn": null,
      "offset": [
        1279,
        2670
      ],
      "op": "DUP1",
      "path": "23"
    },
    "31": {
      "fn": null,
      "offset": [
        1279,
        2670
      ],
      "op": "REVERT",
      "path": "23"
    }
  },
  "sha1": "4c48fbf403a420a06f911e66a5f61af169dbf236",
  "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.7.0) (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n *     bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n *     function _getImplementation() internal view returns (address) {\n *         return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n *     }\n *\n *     function _setImplementation(address newImplementation) internal {\n *         require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n *         StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n *     }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n    struct AddressSlot {\n        address value;\n    }\n\n    struct BooleanSlot {\n        bool value;\n    }\n\n    struct Bytes32Slot {\n        bytes32 value;\n    }\n\n    struct Uint256Slot {\n        uint256 value;\n    }\n\n    /**\n     * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n     */\n    function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n     */\n    function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n     */\n    function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n\n    /**\n     * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n     */\n    function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n        /// @solidity memory-safe-assembly\n        assembly {\n            r.slot := slot\n        }\n    }\n}\n",
  "sourceMap": "1279:1391:23:-:0;;;;;;;;;;;;;;;-1:-1:-1;;;1279:1391:23;;;;;;;;;;;;;;;;;",
  "sourcePath": "/home/vscode/.brownie/packages/OpenZeppelin/openzeppelin-contracts@4.7.3/contracts/utils/StorageSlot.sol",
  "type": "library"
}