=======================
👁👁 STORAGE LAYOUT snapshot 👁👁
=======================

=======================
➡ src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger
=======================

| Name               | Type                     | Slot | Offset | Bytes | Contract                                                 |
|--------------------|--------------------------|------|--------|-------|----------------------------------------------------------|
| spacer_0_0_20      | address                  | 0    | 0      | 20    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| _initialized       | uint8                    | 0    | 20     | 1     | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| _initializing      | bool                     | 0    | 21     | 1     | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_1_0_1600    | uint256[50]              | 1    | 0      | 1600  | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_51_0_20     | address                  | 51   | 0      | 20    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_52_0_1568   | uint256[49]              | 52   | 0      | 1568  | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_101_0_1     | bool                     | 101  | 0      | 1     | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_102_0_1568  | uint256[49]              | 102  | 0      | 1568  | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_151_0_32    | uint256                  | 151  | 0      | 32    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_152_0_1568  | uint256[49]              | 152  | 0      | 1568  | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_201_0_32    | mapping(bytes32 => bool) | 201  | 0      | 32    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| spacer_202_0_32    | mapping(bytes32 => bool) | 202  | 0      | 32    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| successfulMessages | mapping(bytes32 => bool) | 203  | 0      | 32    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| xDomainMsgSender   | address                  | 204  | 0      | 20    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| msgNonce           | uint240                  | 205  | 0      | 30    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| failedMessages     | mapping(bytes32 => bool) | 206  | 0      | 32    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| __gap              | uint256[42]              | 207  | 0      | 1344  | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |
| PORTAL             | contract OptimismPortal  | 249  | 0      | 20    | src/L1/L1CrossDomainMessenger.sol:L1CrossDomainMessenger |

=======================
➡ src/L1/L1StandardBridge.sol:L1StandardBridge
=======================

| Name          | Type                                            | Slot | Offset | Bytes | Contract                                     |
|---------------|-------------------------------------------------|------|--------|-------|----------------------------------------------|
| _initialized  | uint8                                           | 0    | 0      | 1     | src/L1/L1StandardBridge.sol:L1StandardBridge |
| _initializing | bool                                            | 0    | 1      | 1     | src/L1/L1StandardBridge.sol:L1StandardBridge |
| spacer_0_2_20 | address                                         | 0    | 2      | 20    | src/L1/L1StandardBridge.sol:L1StandardBridge |
| spacer_1_0_20 | address                                         | 1    | 0      | 20    | src/L1/L1StandardBridge.sol:L1StandardBridge |
| deposits      | mapping(address => mapping(address => uint256)) | 2    | 0      | 32    | src/L1/L1StandardBridge.sol:L1StandardBridge |
| messenger     | contract CrossDomainMessenger                   | 3    | 0      | 20    | src/L1/L1StandardBridge.sol:L1StandardBridge |
| __gap         | uint256[46]                                     | 4    | 0      | 1472  | src/L1/L1StandardBridge.sol:L1StandardBridge |

=======================
➡ src/L1/L2OutputOracle.sol:L2OutputOracle
=======================

| Name                | Type                          | Slot | Offset | Bytes | Contract                                 |
|---------------------|-------------------------------|------|--------|-------|------------------------------------------|
| _initialized        | uint8                         | 0    | 0      | 1     | src/L1/L2OutputOracle.sol:L2OutputOracle |
| _initializing       | bool                          | 0    | 1      | 1     | src/L1/L2OutputOracle.sol:L2OutputOracle |
| startingBlockNumber | uint256                       | 1    | 0      | 32    | src/L1/L2OutputOracle.sol:L2OutputOracle |
| startingTimestamp   | uint256                       | 2    | 0      | 32    | src/L1/L2OutputOracle.sol:L2OutputOracle |
| l2Outputs           | struct Types.OutputProposal[] | 3    | 0      | 32    | src/L1/L2OutputOracle.sol:L2OutputOracle |
| challenger          | address                       | 4    | 0      | 20    | src/L1/L2OutputOracle.sol:L2OutputOracle |
| proposer            | address                       | 5    | 0      | 20    | src/L1/L2OutputOracle.sol:L2OutputOracle |

=======================
➡ src/L1/OptimismPortal.sol:OptimismPortal
=======================

| Name                 | Type                                                       | Slot | Offset | Bytes | Contract                                 |
|----------------------|------------------------------------------------------------|------|--------|-------|------------------------------------------|
| _initialized         | uint8                                                      | 0    | 0      | 1     | src/L1/OptimismPortal.sol:OptimismPortal |
| _initializing        | bool                                                       | 0    | 1      | 1     | src/L1/OptimismPortal.sol:OptimismPortal |
| params               | struct ResourceMetering.ResourceParams                     | 1    | 0      | 32    | src/L1/OptimismPortal.sol:OptimismPortal |
| __gap                | uint256[48]                                                | 2    | 0      | 1536  | src/L1/OptimismPortal.sol:OptimismPortal |
| l2Sender             | address                                                    | 50   | 0      | 20    | src/L1/OptimismPortal.sol:OptimismPortal |
| finalizedWithdrawals | mapping(bytes32 => bool)                                   | 51   | 0      | 32    | src/L1/OptimismPortal.sol:OptimismPortal |
| provenWithdrawals    | mapping(bytes32 => struct OptimismPortal.ProvenWithdrawal) | 52   | 0      | 32    | src/L1/OptimismPortal.sol:OptimismPortal |
| paused               | bool                                                       | 53   | 0      | 1     | src/L1/OptimismPortal.sol:OptimismPortal |
| l2Oracle             | contract L2OutputOracle                                    | 53   | 1      | 20    | src/L1/OptimismPortal.sol:OptimismPortal |
| systemConfig         | contract SystemConfig                                      | 54   | 0      | 20    | src/L1/OptimismPortal.sol:OptimismPortal |
| guardian             | address                                                    | 55   | 0      | 20    | src/L1/OptimismPortal.sol:OptimismPortal |

=======================
➡ src/L1/SystemConfig.sol:SystemConfig
=======================

| Name            | Type                                   | Slot | Offset | Bytes | Contract                             |
|-----------------|----------------------------------------|------|--------|-------|--------------------------------------|
| _initialized    | uint8                                  | 0    | 0      | 1     | src/L1/SystemConfig.sol:SystemConfig |
| _initializing   | bool                                   | 0    | 1      | 1     | src/L1/SystemConfig.sol:SystemConfig |
| __gap           | uint256[50]                            | 1    | 0      | 1600  | src/L1/SystemConfig.sol:SystemConfig |
| _owner          | address                                | 51   | 0      | 20    | src/L1/SystemConfig.sol:SystemConfig |
| __gap           | uint256[49]                            | 52   | 0      | 1568  | src/L1/SystemConfig.sol:SystemConfig |
| overhead        | uint256                                | 101  | 0      | 32    | src/L1/SystemConfig.sol:SystemConfig |
| scalar          | uint256                                | 102  | 0      | 32    | src/L1/SystemConfig.sol:SystemConfig |
| batcherHash     | bytes32                                | 103  | 0      | 32    | src/L1/SystemConfig.sol:SystemConfig |
| gasLimit        | uint64                                 | 104  | 0      | 8     | src/L1/SystemConfig.sol:SystemConfig |
| _resourceConfig | struct ResourceMetering.ResourceConfig | 105  | 0      | 32    | src/L1/SystemConfig.sol:SystemConfig |
| startBlock      | uint256                                | 106  | 0      | 32    | src/L1/SystemConfig.sol:SystemConfig |

=======================
➡ src/L1/L1ERC721Bridge.sol:L1ERC721Bridge
=======================

| Name          | Type                                                             | Slot | Offset | Bytes | Contract                                 |
|---------------|------------------------------------------------------------------|------|--------|-------|------------------------------------------|
| _initialized  | uint8                                                            | 0    | 0      | 1     | src/L1/L1ERC721Bridge.sol:L1ERC721Bridge |
| _initializing | bool                                                             | 0    | 1      | 1     | src/L1/L1ERC721Bridge.sol:L1ERC721Bridge |
| messenger     | contract CrossDomainMessenger                                    | 0    | 2      | 20    | src/L1/L1ERC721Bridge.sol:L1ERC721Bridge |
| __gap         | uint256[48]                                                      | 1    | 0      | 1536  | src/L1/L1ERC721Bridge.sol:L1ERC721Bridge |
| deposits      | mapping(address => mapping(address => mapping(uint256 => bool))) | 49   | 0      | 32    | src/L1/L1ERC721Bridge.sol:L1ERC721Bridge |

=======================
➡ src/legacy/DeployerWhitelist.sol:DeployerWhitelist
=======================

| Name      | Type                     | Slot | Offset | Bytes | Contract                                           |
|-----------|--------------------------|------|--------|-------|----------------------------------------------------|
| owner     | address                  | 0    | 0      | 20    | src/legacy/DeployerWhitelist.sol:DeployerWhitelist |
| whitelist | mapping(address => bool) | 1    | 0      | 32    | src/legacy/DeployerWhitelist.sol:DeployerWhitelist |

=======================
➡ src/L2/L1Block.sol:L1Block
=======================

| Name           | Type    | Slot | Offset | Bytes | Contract                   |
|----------------|---------|------|--------|-------|----------------------------|
| number         | uint64  | 0    | 0      | 8     | src/L2/L1Block.sol:L1Block |
| timestamp      | uint64  | 0    | 8      | 8     | src/L2/L1Block.sol:L1Block |
| basefee        | uint256 | 1    | 0      | 32    | src/L2/L1Block.sol:L1Block |
| hash           | bytes32 | 2    | 0      | 32    | src/L2/L1Block.sol:L1Block |
| sequenceNumber | uint64  | 3    | 0      | 8     | src/L2/L1Block.sol:L1Block |
| batcherHash    | bytes32 | 4    | 0      | 32    | src/L2/L1Block.sol:L1Block |
| l1FeeOverhead  | uint256 | 5    | 0      | 32    | src/L2/L1Block.sol:L1Block |
| l1FeeScalar    | uint256 | 6    | 0      | 32    | src/L2/L1Block.sol:L1Block |

=======================
➡ src/legacy/L1BlockNumber.sol:L1BlockNumber
=======================

| Name | Type | Slot | Offset | Bytes | Contract |
|------|------|------|--------|-------|----------|

=======================
➡ src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger
=======================

| Name               | Type                     | Slot | Offset | Bytes | Contract                                                 |
|--------------------|--------------------------|------|--------|-------|----------------------------------------------------------|
| spacer_0_0_20      | address                  | 0    | 0      | 20    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| _initialized       | uint8                    | 0    | 20     | 1     | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| _initializing      | bool                     | 0    | 21     | 1     | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_1_0_1600    | uint256[50]              | 1    | 0      | 1600  | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_51_0_20     | address                  | 51   | 0      | 20    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_52_0_1568   | uint256[49]              | 52   | 0      | 1568  | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_101_0_1     | bool                     | 101  | 0      | 1     | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_102_0_1568  | uint256[49]              | 102  | 0      | 1568  | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_151_0_32    | uint256                  | 151  | 0      | 32    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_152_0_1568  | uint256[49]              | 152  | 0      | 1568  | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_201_0_32    | mapping(bytes32 => bool) | 201  | 0      | 32    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| spacer_202_0_32    | mapping(bytes32 => bool) | 202  | 0      | 32    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| successfulMessages | mapping(bytes32 => bool) | 203  | 0      | 32    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| xDomainMsgSender   | address                  | 204  | 0      | 20    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| msgNonce           | uint240                  | 205  | 0      | 30    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| failedMessages     | mapping(bytes32 => bool) | 206  | 0      | 32    | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |
| __gap              | uint256[42]              | 207  | 0      | 1344  | src/L2/L2CrossDomainMessenger.sol:L2CrossDomainMessenger |

=======================
➡ src/L2/L2StandardBridge.sol:L2StandardBridge
=======================

| Name          | Type                                            | Slot | Offset | Bytes | Contract                                     |
|---------------|-------------------------------------------------|------|--------|-------|----------------------------------------------|
| _initialized  | uint8                                           | 0    | 0      | 1     | src/L2/L2StandardBridge.sol:L2StandardBridge |
| _initializing | bool                                            | 0    | 1      | 1     | src/L2/L2StandardBridge.sol:L2StandardBridge |
| spacer_0_2_20 | address                                         | 0    | 2      | 20    | src/L2/L2StandardBridge.sol:L2StandardBridge |
| spacer_1_0_20 | address                                         | 1    | 0      | 20    | src/L2/L2StandardBridge.sol:L2StandardBridge |
| deposits      | mapping(address => mapping(address => uint256)) | 2    | 0      | 32    | src/L2/L2StandardBridge.sol:L2StandardBridge |
| messenger     | contract CrossDomainMessenger                   | 3    | 0      | 20    | src/L2/L2StandardBridge.sol:L2StandardBridge |
| __gap         | uint256[46]                                     | 4    | 0      | 1472  | src/L2/L2StandardBridge.sol:L2StandardBridge |

=======================
➡ src/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser
=======================

| Name         | Type                     | Slot | Offset | Bytes | Contract                                           |
|--------------|--------------------------|------|--------|-------|----------------------------------------------------|
| sentMessages | mapping(bytes32 => bool) | 0    | 0      | 32    | src/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser |
| msgNonce     | uint240                  | 1    | 0      | 30    | src/L2/L2ToL1MessagePasser.sol:L2ToL1MessagePasser |

=======================
➡ src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH
=======================

| Name         | Type                                            | Slot | Offset | Bytes | Contract                                     |
|--------------|-------------------------------------------------|------|--------|-------|----------------------------------------------|
| _balances    | mapping(address => uint256)                     | 0    | 0      | 32    | src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |
| _allowances  | mapping(address => mapping(address => uint256)) | 1    | 0      | 32    | src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |
| _totalSupply | uint256                                         | 2    | 0      | 32    | src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |
| _name        | string                                          | 3    | 0      | 32    | src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |
| _symbol      | string                                          | 4    | 0      | 32    | src/legacy/LegacyERC20ETH.sol:LegacyERC20ETH |

=======================
➡ src/L2/SequencerFeeVault.sol:SequencerFeeVault
=======================

| Name           | Type    | Slot | Offset | Bytes | Contract                                       |
|----------------|---------|------|--------|-------|------------------------------------------------|
| totalProcessed | uint256 | 0    | 0      | 32    | src/L2/SequencerFeeVault.sol:SequencerFeeVault |

=======================
➡ src/L2/BaseFeeVault.sol:BaseFeeVault
=======================

| Name           | Type    | Slot | Offset | Bytes | Contract                             |
|----------------|---------|------|--------|-------|--------------------------------------|
| totalProcessed | uint256 | 0    | 0      | 32    | src/L2/BaseFeeVault.sol:BaseFeeVault |

=======================
➡ src/L2/L1FeeVault.sol:L1FeeVault
=======================

| Name           | Type    | Slot | Offset | Bytes | Contract                         |
|----------------|---------|------|--------|-------|----------------------------------|
| totalProcessed | uint256 | 0    | 0      | 32    | src/L2/L1FeeVault.sol:L1FeeVault |

=======================
➡ src/L2/L2ERC721Bridge.sol:L2ERC721Bridge
=======================

| Name          | Type                          | Slot | Offset | Bytes | Contract                                 |
|---------------|-------------------------------|------|--------|-------|------------------------------------------|
| _initialized  | uint8                         | 0    | 0      | 1     | src/L2/L2ERC721Bridge.sol:L2ERC721Bridge |
| _initializing | bool                          | 0    | 1      | 1     | src/L2/L2ERC721Bridge.sol:L2ERC721Bridge |
| messenger     | contract CrossDomainMessenger | 0    | 2      | 20    | src/L2/L2ERC721Bridge.sol:L2ERC721Bridge |
| __gap         | uint256[48]                   | 1    | 0      | 1536  | src/L2/L2ERC721Bridge.sol:L2ERC721Bridge |

=======================
➡ src/vendor/WETH9.sol:WETH9
=======================

| Name      | Type                                            | Slot | Offset | Bytes | Contract                   |
|-----------|-------------------------------------------------|------|--------|-------|----------------------------|
| name      | string                                          | 0    | 0      | 32    | src/vendor/WETH9.sol:WETH9 |
| symbol    | string                                          | 1    | 0      | 32    | src/vendor/WETH9.sol:WETH9 |
| decimals  | uint8                                           | 2    | 0      | 1     | src/vendor/WETH9.sol:WETH9 |
| balanceOf | mapping(address => uint256)                     | 3    | 0      | 32    | src/vendor/WETH9.sol:WETH9 |
| allowance | mapping(address => mapping(address => uint256)) | 4    | 0      | 32    | src/vendor/WETH9.sol:WETH9 |

=======================
➡ src/universal/ProxyAdmin.sol:ProxyAdmin
=======================

| Name               | Type                                          | Slot | Offset | Bytes | Contract                                |
|--------------------|-----------------------------------------------|------|--------|-------|-----------------------------------------|
| _owner             | address                                       | 0    | 0      | 20    | src/universal/ProxyAdmin.sol:ProxyAdmin |
| proxyType          | mapping(address => enum ProxyAdmin.ProxyType) | 1    | 0      | 32    | src/universal/ProxyAdmin.sol:ProxyAdmin |
| implementationName | mapping(address => string)                    | 2    | 0      | 32    | src/universal/ProxyAdmin.sol:ProxyAdmin |
| addressManager     | contract AddressManager                       | 3    | 0      | 20    | src/universal/ProxyAdmin.sol:ProxyAdmin |
| upgrading          | bool                                          | 3    | 20     | 1     | src/universal/ProxyAdmin.sol:ProxyAdmin |

=======================
➡ src/universal/Proxy.sol:Proxy
=======================

| Name | Type | Slot | Offset | Bytes | Contract |
|------|------|------|--------|-------|----------|

=======================
➡ src/legacy/L1ChugSplashProxy.sol:L1ChugSplashProxy
=======================

| Name | Type | Slot | Offset | Bytes | Contract |
|------|------|------|--------|-------|----------|

=======================
➡ src/universal/OptimismMintableERC20.sol:OptimismMintableERC20
=======================

| Name         | Type                                            | Slot | Offset | Bytes | Contract                                                      |
|--------------|-------------------------------------------------|------|--------|-------|---------------------------------------------------------------|
| _balances    | mapping(address => uint256)                     | 0    | 0      | 32    | src/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |
| _allowances  | mapping(address => mapping(address => uint256)) | 1    | 0      | 32    | src/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |
| _totalSupply | uint256                                         | 2    | 0      | 32    | src/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |
| _name        | string                                          | 3    | 0      | 32    | src/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |
| _symbol      | string                                          | 4    | 0      | 32    | src/universal/OptimismMintableERC20.sol:OptimismMintableERC20 |

=======================
➡ src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory
=======================

| Name          | Type    | Slot | Offset | Bytes | Contract                                                                    |
|---------------|---------|------|--------|-------|-----------------------------------------------------------------------------|
| _initialized  | uint8   | 0    | 0      | 1     | src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory |
| _initializing | bool    | 0    | 1      | 1     | src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory |
| bridge        | address | 0    | 2      | 20    | src/universal/OptimismMintableERC20Factory.sol:OptimismMintableERC20Factory |

=======================
➡ src/dispute/DisputeGameFactory.sol:DisputeGameFactory
=======================

| Name             | Type                                       | Slot | Offset | Bytes | Contract                                              |
|------------------|--------------------------------------------|------|--------|-------|-------------------------------------------------------|
| _initialized     | uint8                                      | 0    | 0      | 1     | src/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| _initializing    | bool                                       | 0    | 1      | 1     | src/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| __gap            | uint256[50]                                | 1    | 0      | 1600  | src/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| _owner           | address                                    | 51   | 0      | 20    | src/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| __gap            | uint256[49]                                | 52   | 0      | 1568  | src/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| gameImpls        | mapping(GameType => contract IDisputeGame) | 101  | 0      | 32    | src/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| _disputeGames    | mapping(Hash => GameId)                    | 102  | 0      | 32    | src/dispute/DisputeGameFactory.sol:DisputeGameFactory |
| _disputeGameList | GameId[]                                   | 103  | 0      | 32    | src/dispute/DisputeGameFactory.sol:DisputeGameFactory |
