{
    "id": "9d1a3182633612bd337d811d567d5d60",
    "_format": "hh-sol-build-info-1",
    "solcVersion": "0.8.9",
    "solcLongVersion": "0.8.9+commit.e5eed63a",
    "input": {
        "language": "Solidity",
        "sources": {
            "contracts/insured-bridge/ovm/iOVM_CrossDomainMessenger.sol": {
                "content": "// Copied directly from https://github.com/ethereum-optimism/optimism/blob/7ffb83509c589bd35c2e5f9cb2c6ccbd5f346175/packages/contracts/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\n// with a change to the solidity version. Old line is commented out for transparency.\n\n// SPDX-License-Identifier: MIT\n// pragma solidity >0.5.0 <0.8.0;\npragma solidity ^0.8.0;\n\n/**\n * @title iOVM_CrossDomainMessenger\n */\ninterface iOVM_CrossDomainMessenger {\n    /**********\n     * Events *\n     **********/\n\n    event SentMessage(bytes message);\n    event RelayedMessage(bytes32 msgHash);\n    event FailedRelayedMessage(bytes32 msgHash);\n\n    /*************\n     * Variables *\n     *************/\n\n    function xDomainMessageSender() external view returns (address);\n\n    /********************\n     * Public Functions *\n     ********************/\n\n    /**\n     * Sends a cross domain message to the target messenger.\n     * @param _target Target contract address.\n     * @param _message Message to send to the target.\n     * @param _gasLimit Gas limit for the provided message.\n     */\n    function sendMessage(\n        address _target,\n        bytes calldata _message,\n        uint32 _gasLimit\n    ) external;\n}\n"
            },
            "contracts/insured-bridge/ovm/OVM_CrossDomainEnabled.sol": {
                "content": "// Copied directly from https://github.com/ethereum-optimism/optimism/blob/7ffb83509c589bd35c2e5f9cb2c6ccbd5f346175/packages/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol\n// with a change to the solidity version. Old line is commented out for transparency.\n\n// SPDX-License-Identifier: MIT\n// pragma solidity >0.5.0 <0.8.0;\npragma solidity ^0.8.0;\n\n/* Interface Imports */\nimport \"./iOVM_CrossDomainMessenger.sol\";\n\n/**\n * @title OVM_CrossDomainEnabled\n * @dev Helper contract for contracts performing cross-domain communications\n *\n * Compiler used: defined by inheriting contract\n * Runtime target: defined by inheriting contract\n */\ncontract OVM_CrossDomainEnabled {\n    /*************\n     * Variables *\n     *************/\n\n    // Messenger contract used to send and recieve messages from the other domain.\n    address public messenger;\n\n    /***************\n     * Constructor *\n     ***************/\n\n    /**\n     * @param _messenger Address of the CrossDomainMessenger on the current layer.\n     */\n    constructor(address _messenger) {\n        messenger = _messenger;\n    }\n\n    /**********************\n     * Function Modifiers *\n     **********************/\n\n    /**\n     * Enforces that the modified function is only callable by a specific cross-domain account.\n     * @param _sourceDomainAccount The only account on the originating domain which is\n     *  authenticated to call this function.\n     */\n    modifier onlyFromCrossDomainAccount(address _sourceDomainAccount) {\n        require(msg.sender == address(getCrossDomainMessenger()), \"OVM_XCHAIN: messenger contract unauthenticated\");\n\n        require(\n            getCrossDomainMessenger().xDomainMessageSender() == _sourceDomainAccount,\n            \"OVM_XCHAIN: wrong sender of cross-domain message\"\n        );\n\n        _;\n    }\n\n    /**********************\n     * Internal Functions *\n     **********************/\n\n    /**\n     * Gets the messenger, usually from storage. This function is exposed in case a child contract\n     * needs to override.\n     * @return The address of the cross-domain messenger contract which should be used.\n     */\n    function getCrossDomainMessenger() internal virtual returns (iOVM_CrossDomainMessenger) {\n        return iOVM_CrossDomainMessenger(messenger);\n    }\n\n    /**\n     * Sends a message to an account on another domain\n     * @param _crossDomainTarget The intended recipient on the destination domain\n     * @param _message The data to send to the target (usually calldata to a function with\n     *  `onlyFromCrossDomainAccount()`)\n     * @param _gasLimit The gasLimit for the receipt of the message on the target domain.\n     */\n    function sendCrossDomainMessage(\n        address _crossDomainTarget,\n        uint32 _gasLimit,\n        bytes memory _message\n    ) internal {\n        getCrossDomainMessenger().sendMessage(_crossDomainTarget, _message, _gasLimit);\n    }\n}\n"
            }
        },
        "settings": {
            "optimizer": {
                "enabled": true,
                "runs": 1000000
            },
            "outputSelection": {
                "*": {
                    "*": [
                        "abi",
                        "evm.bytecode",
                        "evm.deployedBytecode",
                        "evm.methodIdentifiers",
                        "metadata",
                        "devdoc",
                        "userdoc",
                        "storageLayout",
                        "evm.gasEstimates"
                    ],
                    "": [
                        "ast"
                    ]
                }
            },
            "metadata": {
                "useLiteralContent": true
            }
        }
    },
    "output": {
        "contracts": {
            "contracts/insured-bridge/ovm/OVM_CrossDomainEnabled.sol": {
                "OVM_CrossDomainEnabled": {
                    "abi": [
                        {
                            "inputs": [
                                {
                                    "internalType": "address",
                                    "name": "_messenger",
                                    "type": "address"
                                }
                            ],
                            "stateMutability": "nonpayable",
                            "type": "constructor"
                        },
                        {
                            "inputs": [],
                            "name": "messenger",
                            "outputs": [
                                {
                                    "internalType": "address",
                                    "name": "",
                                    "type": "address"
                                }
                            ],
                            "stateMutability": "view",
                            "type": "function"
                        }
                    ],
                    "devdoc": {
                        "details": "Helper contract for contracts performing cross-domain communications Compiler used: defined by inheriting contract Runtime target: defined by inheriting contract",
                        "kind": "dev",
                        "methods": {
                            "constructor": {
                                "params": {
                                    "_messenger": "Address of the CrossDomainMessenger on the current layer."
                                }
                            }
                        },
                        "title": "OVM_CrossDomainEnabled",
                        "version": 1
                    },
                    "evm": {
                        "bytecode": {
                            "functionDebugData": {
                                "@_16": {
                                    "entryPoint": null,
                                    "id": 16,
                                    "parameterSlots": 1,
                                    "returnSlots": 0
                                },
                                "abi_decode_tuple_t_address_fromMemory": {
                                    "entryPoint": 84,
                                    "id": null,
                                    "parameterSlots": 2,
                                    "returnSlots": 1
                                }
                            },
                            "generatedSources": [
                                {
                                    "ast": {
                                        "nodeType": "YulBlock",
                                        "src": "0:306:2",
                                        "statements": [
                                            {
                                                "nodeType": "YulBlock",
                                                "src": "6:3:2",
                                                "statements": []
                                            },
                                            {
                                                "body": {
                                                    "nodeType": "YulBlock",
                                                    "src": "95:209:2",
                                                    "statements": [
                                                        {
                                                            "body": {
                                                                "nodeType": "YulBlock",
                                                                "src": "141:16:2",
                                                                "statements": [
                                                                    {
                                                                        "expression": {
                                                                            "arguments": [
                                                                                {
                                                                                    "kind": "number",
                                                                                    "nodeType": "YulLiteral",
                                                                                    "src": "150:1:2",
                                                                                    "type": "",
                                                                                    "value": "0"
                                                                                },
                                                                                {
                                                                                    "kind": "number",
                                                                                    "nodeType": "YulLiteral",
                                                                                    "src": "153:1:2",
                                                                                    "type": "",
                                                                                    "value": "0"
                                                                                }
                                                                            ],
                                                                            "functionName": {
                                                                                "name": "revert",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "143:6:2"
                                                                            },
                                                                            "nodeType": "YulFunctionCall",
                                                                            "src": "143:12:2"
                                                                        },
                                                                        "nodeType": "YulExpressionStatement",
                                                                        "src": "143:12:2"
                                                                    }
                                                                ]
                                                            },
                                                            "condition": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "name": "dataEnd",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "116:7:2"
                                                                            },
                                                                            {
                                                                                "name": "headStart",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "125:9:2"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "sub",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "112:3:2"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "112:23:2"
                                                                    },
                                                                    {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "137:2:2",
                                                                        "type": "",
                                                                        "value": "32"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "slt",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "108:3:2"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "108:32:2"
                                                            },
                                                            "nodeType": "YulIf",
                                                            "src": "105:52:2"
                                                        },
                                                        {
                                                            "nodeType": "YulVariableDeclaration",
                                                            "src": "166:29:2",
                                                            "value": {
                                                                "arguments": [
                                                                    {
                                                                        "name": "headStart",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "185:9:2"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "mload",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "179:5:2"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "179:16:2"
                                                            },
                                                            "variables": [
                                                                {
                                                                    "name": "value",
                                                                    "nodeType": "YulTypedName",
                                                                    "src": "170:5:2",
                                                                    "type": ""
                                                                }
                                                            ]
                                                        },
                                                        {
                                                            "body": {
                                                                "nodeType": "YulBlock",
                                                                "src": "258:16:2",
                                                                "statements": [
                                                                    {
                                                                        "expression": {
                                                                            "arguments": [
                                                                                {
                                                                                    "kind": "number",
                                                                                    "nodeType": "YulLiteral",
                                                                                    "src": "267:1:2",
                                                                                    "type": "",
                                                                                    "value": "0"
                                                                                },
                                                                                {
                                                                                    "kind": "number",
                                                                                    "nodeType": "YulLiteral",
                                                                                    "src": "270:1:2",
                                                                                    "type": "",
                                                                                    "value": "0"
                                                                                }
                                                                            ],
                                                                            "functionName": {
                                                                                "name": "revert",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "260:6:2"
                                                                            },
                                                                            "nodeType": "YulFunctionCall",
                                                                            "src": "260:12:2"
                                                                        },
                                                                        "nodeType": "YulExpressionStatement",
                                                                        "src": "260:12:2"
                                                                    }
                                                                ]
                                                            },
                                                            "condition": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "name": "value",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "217:5:2"
                                                                            },
                                                                            {
                                                                                "arguments": [
                                                                                    {
                                                                                        "name": "value",
                                                                                        "nodeType": "YulIdentifier",
                                                                                        "src": "228:5:2"
                                                                                    },
                                                                                    {
                                                                                        "arguments": [
                                                                                            {
                                                                                                "arguments": [
                                                                                                    {
                                                                                                        "kind": "number",
                                                                                                        "nodeType": "YulLiteral",
                                                                                                        "src": "243:3:2",
                                                                                                        "type": "",
                                                                                                        "value": "160"
                                                                                                    },
                                                                                                    {
                                                                                                        "kind": "number",
                                                                                                        "nodeType": "YulLiteral",
                                                                                                        "src": "248:1:2",
                                                                                                        "type": "",
                                                                                                        "value": "1"
                                                                                                    }
                                                                                                ],
                                                                                                "functionName": {
                                                                                                    "name": "shl",
                                                                                                    "nodeType": "YulIdentifier",
                                                                                                    "src": "239:3:2"
                                                                                                },
                                                                                                "nodeType": "YulFunctionCall",
                                                                                                "src": "239:11:2"
                                                                                            },
                                                                                            {
                                                                                                "kind": "number",
                                                                                                "nodeType": "YulLiteral",
                                                                                                "src": "252:1:2",
                                                                                                "type": "",
                                                                                                "value": "1"
                                                                                            }
                                                                                        ],
                                                                                        "functionName": {
                                                                                            "name": "sub",
                                                                                            "nodeType": "YulIdentifier",
                                                                                            "src": "235:3:2"
                                                                                        },
                                                                                        "nodeType": "YulFunctionCall",
                                                                                        "src": "235:19:2"
                                                                                    }
                                                                                ],
                                                                                "functionName": {
                                                                                    "name": "and",
                                                                                    "nodeType": "YulIdentifier",
                                                                                    "src": "224:3:2"
                                                                                },
                                                                                "nodeType": "YulFunctionCall",
                                                                                "src": "224:31:2"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "eq",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "214:2:2"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "214:42:2"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "iszero",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "207:6:2"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "207:50:2"
                                                            },
                                                            "nodeType": "YulIf",
                                                            "src": "204:70:2"
                                                        },
                                                        {
                                                            "nodeType": "YulAssignment",
                                                            "src": "283:15:2",
                                                            "value": {
                                                                "name": "value",
                                                                "nodeType": "YulIdentifier",
                                                                "src": "293:5:2"
                                                            },
                                                            "variableNames": [
                                                                {
                                                                    "name": "value0",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "283:6:2"
                                                                }
                                                            ]
                                                        }
                                                    ]
                                                },
                                                "name": "abi_decode_tuple_t_address_fromMemory",
                                                "nodeType": "YulFunctionDefinition",
                                                "parameters": [
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulTypedName",
                                                        "src": "61:9:2",
                                                        "type": ""
                                                    },
                                                    {
                                                        "name": "dataEnd",
                                                        "nodeType": "YulTypedName",
                                                        "src": "72:7:2",
                                                        "type": ""
                                                    }
                                                ],
                                                "returnVariables": [
                                                    {
                                                        "name": "value0",
                                                        "nodeType": "YulTypedName",
                                                        "src": "84:6:2",
                                                        "type": ""
                                                    }
                                                ],
                                                "src": "14:290:2"
                                            }
                                        ]
                                    },
                                    "contents": "{\n    { }\n    function abi_decode_tuple_t_address_fromMemory(headStart, dataEnd) -> value0\n    {\n        if slt(sub(dataEnd, headStart), 32) { revert(0, 0) }\n        let value := mload(headStart)\n        if iszero(eq(value, and(value, sub(shl(160, 1), 1)))) { revert(0, 0) }\n        value0 := value\n    }\n}",
                                    "id": 2,
                                    "language": "Yul",
                                    "name": "#utility.yul"
                                }
                            ],
                            "linkReferences": {},
                            "object": "608060405234801561001057600080fd5b5060405161013d38038061013d83398101604081905261002f91610054565b600080546001600160a01b0319166001600160a01b0392909216919091179055610084565b60006020828403121561006657600080fd5b81516001600160a01b038116811461007d57600080fd5b9392505050565b60ab806100926000396000f3fe6080604052348015600f57600080fd5b506004361060285760003560e01c80633cb747bf14602d575b600080fd5b600054604c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea26469706673582212202055864bbb4cd208501aacf87d72cfb62682da21a8cbdc69912af029402bae1c64736f6c63430008090033",
                            "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH2 0x10 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x40 MLOAD PUSH2 0x13D CODESIZE SUB DUP1 PUSH2 0x13D DUP4 CODECOPY DUP2 ADD PUSH1 0x40 DUP2 SWAP1 MSTORE PUSH2 0x2F SWAP2 PUSH2 0x54 JUMP JUMPDEST PUSH1 0x0 DUP1 SLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB NOT AND PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB SWAP3 SWAP1 SWAP3 AND SWAP2 SWAP1 SWAP2 OR SWAP1 SSTORE PUSH2 0x84 JUMP JUMPDEST PUSH1 0x0 PUSH1 0x20 DUP3 DUP5 SUB SLT ISZERO PUSH2 0x66 JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST DUP2 MLOAD PUSH1 0x1 PUSH1 0x1 PUSH1 0xA0 SHL SUB DUP2 AND DUP2 EQ PUSH2 0x7D JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST SWAP4 SWAP3 POP POP POP JUMP JUMPDEST PUSH1 0xAB DUP1 PUSH2 0x92 PUSH1 0x0 CODECOPY PUSH1 0x0 RETURN INVALID PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3CB747BF EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x4C SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 SSTORE DUP7 0x4B 0xBB 0x4C 0xD2 ADDMOD POP BYTE 0xAC 0xF8 PUSH30 0x72CFB62682DA21A8CBDC69912AF029402BAE1C64736F6C63430008090033 ",
                            "sourceMap": "674:2248:0:-:0;;;1049:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1091:9;:22;;-1:-1:-1;;;;;;1091:22:0;-1:-1:-1;;;;;1091:22:0;;;;;;;;;;674:2248;;14:290:2;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:2;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:2:o;:::-;674:2248:0;;;;;;"
                        },
                        "deployedBytecode": {
                            "functionDebugData": {
                                "@messenger_5": {
                                    "entryPoint": null,
                                    "id": 5,
                                    "parameterSlots": 0,
                                    "returnSlots": 0
                                },
                                "abi_encode_tuple_t_address__to_t_address__fromStack_reversed": {
                                    "entryPoint": null,
                                    "id": null,
                                    "parameterSlots": 2,
                                    "returnSlots": 1
                                }
                            },
                            "generatedSources": [
                                {
                                    "ast": {
                                        "nodeType": "YulBlock",
                                        "src": "0:242:2",
                                        "statements": [
                                            {
                                                "nodeType": "YulBlock",
                                                "src": "6:3:2",
                                                "statements": []
                                            },
                                            {
                                                "body": {
                                                    "nodeType": "YulBlock",
                                                    "src": "115:125:2",
                                                    "statements": [
                                                        {
                                                            "nodeType": "YulAssignment",
                                                            "src": "125:26:2",
                                                            "value": {
                                                                "arguments": [
                                                                    {
                                                                        "name": "headStart",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "137:9:2"
                                                                    },
                                                                    {
                                                                        "kind": "number",
                                                                        "nodeType": "YulLiteral",
                                                                        "src": "148:2:2",
                                                                        "type": "",
                                                                        "value": "32"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "add",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "133:3:2"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "133:18:2"
                                                            },
                                                            "variableNames": [
                                                                {
                                                                    "name": "tail",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "125:4:2"
                                                                }
                                                            ]
                                                        },
                                                        {
                                                            "expression": {
                                                                "arguments": [
                                                                    {
                                                                        "name": "headStart",
                                                                        "nodeType": "YulIdentifier",
                                                                        "src": "167:9:2"
                                                                    },
                                                                    {
                                                                        "arguments": [
                                                                            {
                                                                                "name": "value0",
                                                                                "nodeType": "YulIdentifier",
                                                                                "src": "182:6:2"
                                                                            },
                                                                            {
                                                                                "kind": "number",
                                                                                "nodeType": "YulLiteral",
                                                                                "src": "190:42:2",
                                                                                "type": "",
                                                                                "value": "0xffffffffffffffffffffffffffffffffffffffff"
                                                                            }
                                                                        ],
                                                                        "functionName": {
                                                                            "name": "and",
                                                                            "nodeType": "YulIdentifier",
                                                                            "src": "178:3:2"
                                                                        },
                                                                        "nodeType": "YulFunctionCall",
                                                                        "src": "178:55:2"
                                                                    }
                                                                ],
                                                                "functionName": {
                                                                    "name": "mstore",
                                                                    "nodeType": "YulIdentifier",
                                                                    "src": "160:6:2"
                                                                },
                                                                "nodeType": "YulFunctionCall",
                                                                "src": "160:74:2"
                                                            },
                                                            "nodeType": "YulExpressionStatement",
                                                            "src": "160:74:2"
                                                        }
                                                    ]
                                                },
                                                "name": "abi_encode_tuple_t_address__to_t_address__fromStack_reversed",
                                                "nodeType": "YulFunctionDefinition",
                                                "parameters": [
                                                    {
                                                        "name": "headStart",
                                                        "nodeType": "YulTypedName",
                                                        "src": "84:9:2",
                                                        "type": ""
                                                    },
                                                    {
                                                        "name": "value0",
                                                        "nodeType": "YulTypedName",
                                                        "src": "95:6:2",
                                                        "type": ""
                                                    }
                                                ],
                                                "returnVariables": [
                                                    {
                                                        "name": "tail",
                                                        "nodeType": "YulTypedName",
                                                        "src": "106:4:2",
                                                        "type": ""
                                                    }
                                                ],
                                                "src": "14:226:2"
                                            }
                                        ]
                                    },
                                    "contents": "{\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}",
                                    "id": 2,
                                    "language": "Yul",
                                    "name": "#utility.yul"
                                }
                            ],
                            "immutableReferences": {},
                            "linkReferences": {},
                            "object": "6080604052348015600f57600080fd5b506004361060285760003560e01c80633cb747bf14602d575b600080fd5b600054604c9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f3fea26469706673582212202055864bbb4cd208501aacf87d72cfb62682da21a8cbdc69912af029402bae1c64736f6c63430008090033",
                            "opcodes": "PUSH1 0x80 PUSH1 0x40 MSTORE CALLVALUE DUP1 ISZERO PUSH1 0xF JUMPI PUSH1 0x0 DUP1 REVERT JUMPDEST POP PUSH1 0x4 CALLDATASIZE LT PUSH1 0x28 JUMPI PUSH1 0x0 CALLDATALOAD PUSH1 0xE0 SHR DUP1 PUSH4 0x3CB747BF EQ PUSH1 0x2D JUMPI JUMPDEST PUSH1 0x0 DUP1 REVERT JUMPDEST PUSH1 0x0 SLOAD PUSH1 0x4C SWAP1 PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF AND DUP2 JUMP JUMPDEST PUSH1 0x40 MLOAD PUSH20 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF SWAP1 SWAP2 AND DUP2 MSTORE PUSH1 0x20 ADD PUSH1 0x40 MLOAD DUP1 SWAP2 SUB SWAP1 RETURN INVALID LOG2 PUSH5 0x6970667358 0x22 SLT KECCAK256 KECCAK256 SSTORE DUP7 0x4B 0xBB 0x4C 0xD2 ADDMOD POP BYTE 0xAC 0xF8 PUSH30 0x72CFB62682DA21A8CBDC69912AF029402BAE1C64736F6C63430008090033 ",
                            "sourceMap": "674:2248:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;854:24;;;;;;;;;;;;190:42:2;178:55;;;160:74;;148:2;133:18;854:24:0;;;;;;"
                        },
                        "gasEstimates": {
                            "creation": {
                                "codeDepositCost": "34200",
                                "executionCost": "infinite",
                                "totalCost": "infinite"
                            },
                            "external": {
                                "messenger()": "2279"
                            },
                            "internal": {
                                "getCrossDomainMessenger()": "infinite",
                                "sendCrossDomainMessage(address,uint32,bytes memory)": "infinite"
                            }
                        },
                        "methodIdentifiers": {
                            "messenger()": "3cb747bf"
                        }
                    },
                    "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_messenger\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"Helper contract for contracts performing cross-domain communications Compiler used: defined by inheriting contract Runtime target: defined by inheriting contract\",\"kind\":\"dev\",\"methods\":{\"constructor\":{\"params\":{\"_messenger\":\"Address of the CrossDomainMessenger on the current layer.\"}}},\"title\":\"OVM_CrossDomainEnabled\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/insured-bridge/ovm/OVM_CrossDomainEnabled.sol\":\"OVM_CrossDomainEnabled\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/insured-bridge/ovm/OVM_CrossDomainEnabled.sol\":{\"content\":\"// Copied directly from https://github.com/ethereum-optimism/optimism/blob/7ffb83509c589bd35c2e5f9cb2c6ccbd5f346175/packages/contracts/contracts/optimistic-ethereum/libraries/bridge/OVM_CrossDomainEnabled.sol\\n// with a change to the solidity version. Old line is commented out for transparency.\\n\\n// SPDX-License-Identifier: MIT\\n// pragma solidity >0.5.0 <0.8.0;\\npragma solidity ^0.8.0;\\n\\n/* Interface Imports */\\nimport \\\"./iOVM_CrossDomainMessenger.sol\\\";\\n\\n/**\\n * @title OVM_CrossDomainEnabled\\n * @dev Helper contract for contracts performing cross-domain communications\\n *\\n * Compiler used: defined by inheriting contract\\n * Runtime target: defined by inheriting contract\\n */\\ncontract OVM_CrossDomainEnabled {\\n    /*************\\n     * Variables *\\n     *************/\\n\\n    // Messenger contract used to send and recieve messages from the other domain.\\n    address public messenger;\\n\\n    /***************\\n     * Constructor *\\n     ***************/\\n\\n    /**\\n     * @param _messenger Address of the CrossDomainMessenger on the current layer.\\n     */\\n    constructor(address _messenger) {\\n        messenger = _messenger;\\n    }\\n\\n    /**********************\\n     * Function Modifiers *\\n     **********************/\\n\\n    /**\\n     * Enforces that the modified function is only callable by a specific cross-domain account.\\n     * @param _sourceDomainAccount The only account on the originating domain which is\\n     *  authenticated to call this function.\\n     */\\n    modifier onlyFromCrossDomainAccount(address _sourceDomainAccount) {\\n        require(msg.sender == address(getCrossDomainMessenger()), \\\"OVM_XCHAIN: messenger contract unauthenticated\\\");\\n\\n        require(\\n            getCrossDomainMessenger().xDomainMessageSender() == _sourceDomainAccount,\\n            \\\"OVM_XCHAIN: wrong sender of cross-domain message\\\"\\n        );\\n\\n        _;\\n    }\\n\\n    /**********************\\n     * Internal Functions *\\n     **********************/\\n\\n    /**\\n     * Gets the messenger, usually from storage. This function is exposed in case a child contract\\n     * needs to override.\\n     * @return The address of the cross-domain messenger contract which should be used.\\n     */\\n    function getCrossDomainMessenger() internal virtual returns (iOVM_CrossDomainMessenger) {\\n        return iOVM_CrossDomainMessenger(messenger);\\n    }\\n\\n    /**\\n     * Sends a message to an account on another domain\\n     * @param _crossDomainTarget The intended recipient on the destination domain\\n     * @param _message The data to send to the target (usually calldata to a function with\\n     *  `onlyFromCrossDomainAccount()`)\\n     * @param _gasLimit The gasLimit for the receipt of the message on the target domain.\\n     */\\n    function sendCrossDomainMessage(\\n        address _crossDomainTarget,\\n        uint32 _gasLimit,\\n        bytes memory _message\\n    ) internal {\\n        getCrossDomainMessenger().sendMessage(_crossDomainTarget, _message, _gasLimit);\\n    }\\n}\\n\",\"keccak256\":\"0xee9562fd7f450be9701e72c094077087860152a5f81bf049408482a9ae849629\",\"license\":\"MIT\"},\"contracts/insured-bridge/ovm/iOVM_CrossDomainMessenger.sol\":{\"content\":\"// Copied directly from https://github.com/ethereum-optimism/optimism/blob/7ffb83509c589bd35c2e5f9cb2c6ccbd5f346175/packages/contracts/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\\n// with a change to the solidity version. Old line is commented out for transparency.\\n\\n// SPDX-License-Identifier: MIT\\n// pragma solidity >0.5.0 <0.8.0;\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title iOVM_CrossDomainMessenger\\n */\\ninterface iOVM_CrossDomainMessenger {\\n    /**********\\n     * Events *\\n     **********/\\n\\n    event SentMessage(bytes message);\\n    event RelayedMessage(bytes32 msgHash);\\n    event FailedRelayedMessage(bytes32 msgHash);\\n\\n    /*************\\n     * Variables *\\n     *************/\\n\\n    function xDomainMessageSender() external view returns (address);\\n\\n    /********************\\n     * Public Functions *\\n     ********************/\\n\\n    /**\\n     * Sends a cross domain message to the target messenger.\\n     * @param _target Target contract address.\\n     * @param _message Message to send to the target.\\n     * @param _gasLimit Gas limit for the provided message.\\n     */\\n    function sendMessage(\\n        address _target,\\n        bytes calldata _message,\\n        uint32 _gasLimit\\n    ) external;\\n}\\n\",\"keccak256\":\"0x47be9de0b65d3b404f2a26cb6d6bf21f8f3c7b08630a7f15421799348f0ab597\",\"license\":\"MIT\"}},\"version\":1}",
                    "storageLayout": {
                        "storage": [
                            {
                                "astId": 5,
                                "contract": "contracts/insured-bridge/ovm/OVM_CrossDomainEnabled.sol:OVM_CrossDomainEnabled",
                                "label": "messenger",
                                "offset": 0,
                                "slot": "0",
                                "type": "t_address"
                            }
                        ],
                        "types": {
                            "t_address": {
                                "encoding": "inplace",
                                "label": "address",
                                "numberOfBytes": "20"
                            }
                        }
                    },
                    "userdoc": {
                        "kind": "user",
                        "methods": {},
                        "version": 1
                    }
                }
            },
            "contracts/insured-bridge/ovm/iOVM_CrossDomainMessenger.sol": {
                "iOVM_CrossDomainMessenger": {
                    "abi": [
                        {
                            "anonymous": false,
                            "inputs": [
                                {
                                    "indexed": false,
                                    "internalType": "bytes32",
                                    "name": "msgHash",
                                    "type": "bytes32"
                                }
                            ],
                            "name": "FailedRelayedMessage",
                            "type": "event"
                        },
                        {
                            "anonymous": false,
                            "inputs": [
                                {
                                    "indexed": false,
                                    "internalType": "bytes32",
                                    "name": "msgHash",
                                    "type": "bytes32"
                                }
                            ],
                            "name": "RelayedMessage",
                            "type": "event"
                        },
                        {
                            "anonymous": false,
                            "inputs": [
                                {
                                    "indexed": false,
                                    "internalType": "bytes",
                                    "name": "message",
                                    "type": "bytes"
                                }
                            ],
                            "name": "SentMessage",
                            "type": "event"
                        },
                        {
                            "inputs": [
                                {
                                    "internalType": "address",
                                    "name": "_target",
                                    "type": "address"
                                },
                                {
                                    "internalType": "bytes",
                                    "name": "_message",
                                    "type": "bytes"
                                },
                                {
                                    "internalType": "uint32",
                                    "name": "_gasLimit",
                                    "type": "uint32"
                                }
                            ],
                            "name": "sendMessage",
                            "outputs": [],
                            "stateMutability": "nonpayable",
                            "type": "function"
                        },
                        {
                            "inputs": [],
                            "name": "xDomainMessageSender",
                            "outputs": [
                                {
                                    "internalType": "address",
                                    "name": "",
                                    "type": "address"
                                }
                            ],
                            "stateMutability": "view",
                            "type": "function"
                        }
                    ],
                    "devdoc": {
                        "kind": "dev",
                        "methods": {
                            "sendMessage(address,bytes,uint32)": {
                                "params": {
                                    "_gasLimit": "Gas limit for the provided message.",
                                    "_message": "Message to send to the target.",
                                    "_target": "Target contract address."
                                }
                            }
                        },
                        "title": "iOVM_CrossDomainMessenger",
                        "version": 1
                    },
                    "evm": {
                        "bytecode": {
                            "functionDebugData": {},
                            "generatedSources": [],
                            "linkReferences": {},
                            "object": "",
                            "opcodes": "",
                            "sourceMap": ""
                        },
                        "deployedBytecode": {
                            "functionDebugData": {},
                            "generatedSources": [],
                            "immutableReferences": {},
                            "linkReferences": {},
                            "object": "",
                            "opcodes": "",
                            "sourceMap": ""
                        },
                        "gasEstimates": null,
                        "methodIdentifiers": {
                            "sendMessage(address,bytes,uint32)": "3dbb202b",
                            "xDomainMessageSender()": "6e296e45"
                        }
                    },
                    "metadata": "{\"compiler\":{\"version\":\"0.8.9+commit.e5eed63a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"FailedRelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"msgHash\",\"type\":\"bytes32\"}],\"name\":\"RelayedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"SentMessage\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_message\",\"type\":\"bytes\"},{\"internalType\":\"uint32\",\"name\":\"_gasLimit\",\"type\":\"uint32\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"xDomainMessageSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"sendMessage(address,bytes,uint32)\":{\"params\":{\"_gasLimit\":\"Gas limit for the provided message.\",\"_message\":\"Message to send to the target.\",\"_target\":\"Target contract address.\"}}},\"title\":\"iOVM_CrossDomainMessenger\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"sendMessage(address,bytes,uint32)\":{\"notice\":\"Sends a cross domain message to the target messenger.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/insured-bridge/ovm/iOVM_CrossDomainMessenger.sol\":\"iOVM_CrossDomainMessenger\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[]},\"sources\":{\"contracts/insured-bridge/ovm/iOVM_CrossDomainMessenger.sol\":{\"content\":\"// Copied directly from https://github.com/ethereum-optimism/optimism/blob/7ffb83509c589bd35c2e5f9cb2c6ccbd5f346175/packages/contracts/contracts/optimistic-ethereum/iOVM/bridge/messaging/iOVM_CrossDomainMessenger.sol\\n// with a change to the solidity version. Old line is commented out for transparency.\\n\\n// SPDX-License-Identifier: MIT\\n// pragma solidity >0.5.0 <0.8.0;\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title iOVM_CrossDomainMessenger\\n */\\ninterface iOVM_CrossDomainMessenger {\\n    /**********\\n     * Events *\\n     **********/\\n\\n    event SentMessage(bytes message);\\n    event RelayedMessage(bytes32 msgHash);\\n    event FailedRelayedMessage(bytes32 msgHash);\\n\\n    /*************\\n     * Variables *\\n     *************/\\n\\n    function xDomainMessageSender() external view returns (address);\\n\\n    /********************\\n     * Public Functions *\\n     ********************/\\n\\n    /**\\n     * Sends a cross domain message to the target messenger.\\n     * @param _target Target contract address.\\n     * @param _message Message to send to the target.\\n     * @param _gasLimit Gas limit for the provided message.\\n     */\\n    function sendMessage(\\n        address _target,\\n        bytes calldata _message,\\n        uint32 _gasLimit\\n    ) external;\\n}\\n\",\"keccak256\":\"0x47be9de0b65d3b404f2a26cb6d6bf21f8f3c7b08630a7f15421799348f0ab597\",\"license\":\"MIT\"}},\"version\":1}",
                    "storageLayout": {
                        "storage": [],
                        "types": null
                    },
                    "userdoc": {
                        "kind": "user",
                        "methods": {
                            "sendMessage(address,bytes,uint32)": {
                                "notice": "Sends a cross domain message to the target messenger."
                            }
                        },
                        "version": 1
                    }
                }
            }
        },
        "sources": {
            "contracts/insured-bridge/ovm/OVM_CrossDomainEnabled.sol": {
                "ast": {
                    "absolutePath": "contracts/insured-bridge/ovm/OVM_CrossDomainEnabled.sol",
                    "exportedSymbols": {
                        "OVM_CrossDomainEnabled": [
                            77
                        ],
                        "iOVM_CrossDomainMessenger": [
                            108
                        ]
                    },
                    "id": 78,
                    "license": "MIT",
                    "nodeType": "SourceUnit",
                    "nodes": [
                        {
                            "id": 1,
                            "literals": [
                                "solidity",
                                "^",
                                "0.8",
                                ".0"
                            ],
                            "nodeType": "PragmaDirective",
                            "src": "362:23:0"
                        },
                        {
                            "absolutePath": "contracts/insured-bridge/ovm/iOVM_CrossDomainMessenger.sol",
                            "file": "./iOVM_CrossDomainMessenger.sol",
                            "id": 2,
                            "nameLocation": "-1:-1:-1",
                            "nodeType": "ImportDirective",
                            "scope": 78,
                            "sourceUnit": 109,
                            "src": "411:41:0",
                            "symbolAliases": [],
                            "unitAlias": ""
                        },
                        {
                            "abstract": false,
                            "baseContracts": [],
                            "canonicalName": "OVM_CrossDomainEnabled",
                            "contractDependencies": [],
                            "contractKind": "contract",
                            "documentation": {
                                "id": 3,
                                "nodeType": "StructuredDocumentation",
                                "src": "454:219:0",
                                "text": " @title OVM_CrossDomainEnabled\n @dev Helper contract for contracts performing cross-domain communications\n Compiler used: defined by inheriting contract\n Runtime target: defined by inheriting contract"
                            },
                            "fullyImplemented": true,
                            "id": 77,
                            "linearizedBaseContracts": [
                                77
                            ],
                            "name": "OVM_CrossDomainEnabled",
                            "nameLocation": "683:22:0",
                            "nodeType": "ContractDefinition",
                            "nodes": [
                                {
                                    "constant": false,
                                    "functionSelector": "3cb747bf",
                                    "id": 5,
                                    "mutability": "mutable",
                                    "name": "messenger",
                                    "nameLocation": "869:9:0",
                                    "nodeType": "VariableDeclaration",
                                    "scope": 77,
                                    "src": "854:24:0",
                                    "stateVariable": true,
                                    "storageLocation": "default",
                                    "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                    },
                                    "typeName": {
                                        "id": 4,
                                        "name": "address",
                                        "nodeType": "ElementaryTypeName",
                                        "src": "854:7:0",
                                        "stateMutability": "nonpayable",
                                        "typeDescriptions": {
                                            "typeIdentifier": "t_address",
                                            "typeString": "address"
                                        }
                                    },
                                    "visibility": "public"
                                },
                                {
                                    "body": {
                                        "id": 15,
                                        "nodeType": "Block",
                                        "src": "1081:39:0",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "id": 13,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "leftHandSide": {
                                                        "id": 11,
                                                        "name": "messenger",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 5,
                                                        "src": "1091:9:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "nodeType": "Assignment",
                                                    "operator": "=",
                                                    "rightHandSide": {
                                                        "id": 12,
                                                        "name": "_messenger",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 8,
                                                        "src": "1103:10:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_address",
                                                            "typeString": "address"
                                                        }
                                                    },
                                                    "src": "1091:22:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "id": 14,
                                                "nodeType": "ExpressionStatement",
                                                "src": "1091:22:0"
                                            }
                                        ]
                                    },
                                    "documentation": {
                                        "id": 6,
                                        "nodeType": "StructuredDocumentation",
                                        "src": "950:94:0",
                                        "text": " @param _messenger Address of the CrossDomainMessenger on the current layer."
                                    },
                                    "id": 16,
                                    "implemented": true,
                                    "kind": "constructor",
                                    "modifiers": [],
                                    "name": "",
                                    "nameLocation": "-1:-1:-1",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 9,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 8,
                                                "mutability": "mutable",
                                                "name": "_messenger",
                                                "nameLocation": "1069:10:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 16,
                                                "src": "1061:18:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 7,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1061:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "1060:20:0"
                                    },
                                    "returnParameters": {
                                        "id": 10,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "1081:0:0"
                                    },
                                    "scope": 77,
                                    "src": "1049:71:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": false,
                                    "visibility": "public"
                                },
                                {
                                    "body": {
                                        "id": 44,
                                        "nodeType": "Block",
                                        "src": "1522:314:0",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 29,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "expression": {
                                                                    "id": 22,
                                                                    "name": "msg",
                                                                    "nodeType": "Identifier",
                                                                    "overloadedDeclarations": [],
                                                                    "referencedDeclaration": -15,
                                                                    "src": "1540:3:0",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_magic_message",
                                                                        "typeString": "msg"
                                                                    }
                                                                },
                                                                "id": 23,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "lValueRequested": false,
                                                                "memberName": "sender",
                                                                "nodeType": "MemberAccess",
                                                                "src": "1540:10:0",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "arguments": [
                                                                    {
                                                                        "arguments": [],
                                                                        "expression": {
                                                                            "argumentTypes": [],
                                                                            "id": 26,
                                                                            "name": "getCrossDomainMessenger",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 57,
                                                                            "src": "1562:23:0",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_contract$_iOVM_CrossDomainMessenger_$108_$",
                                                                                "typeString": "function () returns (contract iOVM_CrossDomainMessenger)"
                                                                            }
                                                                        },
                                                                        "id": 27,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "1562:25:0",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_iOVM_CrossDomainMessenger_$108",
                                                                            "typeString": "contract iOVM_CrossDomainMessenger"
                                                                        }
                                                                    }
                                                                ],
                                                                "expression": {
                                                                    "argumentTypes": [
                                                                        {
                                                                            "typeIdentifier": "t_contract$_iOVM_CrossDomainMessenger_$108",
                                                                            "typeString": "contract iOVM_CrossDomainMessenger"
                                                                        }
                                                                    ],
                                                                    "id": 25,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": true,
                                                                    "lValueRequested": false,
                                                                    "nodeType": "ElementaryTypeNameExpression",
                                                                    "src": "1554:7:0",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_type$_t_address_$",
                                                                        "typeString": "type(address)"
                                                                    },
                                                                    "typeName": {
                                                                        "id": 24,
                                                                        "name": "address",
                                                                        "nodeType": "ElementaryTypeName",
                                                                        "src": "1554:7:0",
                                                                        "typeDescriptions": {}
                                                                    }
                                                                },
                                                                "id": 28,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "typeConversion",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "1554:34:0",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "1540:48:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4f564d5f58434841494e3a206d657373656e67657220636f6e747261637420756e61757468656e74696361746564",
                                                            "id": 30,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1590:48:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_5b2b17fa57c18b360a25ff5b64e8a89fcbfec4633e9c1ab0bc3e17241dab5bf0",
                                                                "typeString": "literal_string \"OVM_XCHAIN: messenger contract unauthenticated\""
                                                            },
                                                            "value": "OVM_XCHAIN: messenger contract unauthenticated"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_5b2b17fa57c18b360a25ff5b64e8a89fcbfec4633e9c1ab0bc3e17241dab5bf0",
                                                                "typeString": "literal_string \"OVM_XCHAIN: messenger contract unauthenticated\""
                                                            }
                                                        ],
                                                        "id": 21,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "1532:7:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 31,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1532:107:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 32,
                                                "nodeType": "ExpressionStatement",
                                                "src": "1532:107:0"
                                            },
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "commonType": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            "id": 39,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                                "arguments": [],
                                                                "expression": {
                                                                    "argumentTypes": [],
                                                                    "expression": {
                                                                        "arguments": [],
                                                                        "expression": {
                                                                            "argumentTypes": [],
                                                                            "id": 34,
                                                                            "name": "getCrossDomainMessenger",
                                                                            "nodeType": "Identifier",
                                                                            "overloadedDeclarations": [],
                                                                            "referencedDeclaration": 57,
                                                                            "src": "1671:23:0",
                                                                            "typeDescriptions": {
                                                                                "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_contract$_iOVM_CrossDomainMessenger_$108_$",
                                                                                "typeString": "function () returns (contract iOVM_CrossDomainMessenger)"
                                                                            }
                                                                        },
                                                                        "id": 35,
                                                                        "isConstant": false,
                                                                        "isLValue": false,
                                                                        "isPure": false,
                                                                        "kind": "functionCall",
                                                                        "lValueRequested": false,
                                                                        "names": [],
                                                                        "nodeType": "FunctionCall",
                                                                        "src": "1671:25:0",
                                                                        "tryCall": false,
                                                                        "typeDescriptions": {
                                                                            "typeIdentifier": "t_contract$_iOVM_CrossDomainMessenger_$108",
                                                                            "typeString": "contract iOVM_CrossDomainMessenger"
                                                                        }
                                                                    },
                                                                    "id": 36,
                                                                    "isConstant": false,
                                                                    "isLValue": false,
                                                                    "isPure": false,
                                                                    "lValueRequested": false,
                                                                    "memberName": "xDomainMessageSender",
                                                                    "nodeType": "MemberAccess",
                                                                    "referencedDeclaration": 97,
                                                                    "src": "1671:46:0",
                                                                    "typeDescriptions": {
                                                                        "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                                                                        "typeString": "function () view external returns (address)"
                                                                    }
                                                                },
                                                                "id": 37,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": false,
                                                                "kind": "functionCall",
                                                                "lValueRequested": false,
                                                                "names": [],
                                                                "nodeType": "FunctionCall",
                                                                "src": "1671:48:0",
                                                                "tryCall": false,
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "==",
                                                            "rightExpression": {
                                                                "id": 38,
                                                                "name": "_sourceDomainAccount",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 19,
                                                                "src": "1723:20:0",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_address",
                                                                    "typeString": "address"
                                                                }
                                                            },
                                                            "src": "1671:72:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            }
                                                        },
                                                        {
                                                            "hexValue": "4f564d5f58434841494e3a2077726f6e672073656e646572206f662063726f73732d646f6d61696e206d657373616765",
                                                            "id": 40,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": true,
                                                            "kind": "string",
                                                            "lValueRequested": false,
                                                            "nodeType": "Literal",
                                                            "src": "1757:50:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_stringliteral_b9f330afcd8426930dd3959aa423b89339071f6d325fff04c2294de8b5f06099",
                                                                "typeString": "literal_string \"OVM_XCHAIN: wrong sender of cross-domain message\""
                                                            },
                                                            "value": "OVM_XCHAIN: wrong sender of cross-domain message"
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_bool",
                                                                "typeString": "bool"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_stringliteral_b9f330afcd8426930dd3959aa423b89339071f6d325fff04c2294de8b5f06099",
                                                                "typeString": "literal_string \"OVM_XCHAIN: wrong sender of cross-domain message\""
                                                            }
                                                        ],
                                                        "id": 33,
                                                        "name": "require",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [
                                                            -18,
                                                            -18
                                                        ],
                                                        "referencedDeclaration": -18,
                                                        "src": "1650:7:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                                            "typeString": "function (bool,string memory) pure"
                                                        }
                                                    },
                                                    "id": 41,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "1650:167:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 42,
                                                "nodeType": "ExpressionStatement",
                                                "src": "1650:167:0"
                                            },
                                            {
                                                "id": 43,
                                                "nodeType": "PlaceholderStatement",
                                                "src": "1828:1:0"
                                            }
                                        ]
                                    },
                                    "documentation": {
                                        "id": 17,
                                        "nodeType": "StructuredDocumentation",
                                        "src": "1212:239:0",
                                        "text": " Enforces that the modified function is only callable by a specific cross-domain account.\n @param _sourceDomainAccount The only account on the originating domain which is\n  authenticated to call this function."
                                    },
                                    "id": 45,
                                    "name": "onlyFromCrossDomainAccount",
                                    "nameLocation": "1465:26:0",
                                    "nodeType": "ModifierDefinition",
                                    "parameters": {
                                        "id": 20,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 19,
                                                "mutability": "mutable",
                                                "name": "_sourceDomainAccount",
                                                "nameLocation": "1500:20:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 45,
                                                "src": "1492:28:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 18,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1492:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "1491:30:0"
                                    },
                                    "src": "1456:380:0",
                                    "virtual": false,
                                    "visibility": "internal"
                                },
                                {
                                    "body": {
                                        "id": 56,
                                        "nodeType": "Block",
                                        "src": "2245:60:0",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 53,
                                                            "name": "messenger",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 5,
                                                            "src": "2288:9:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        ],
                                                        "id": 52,
                                                        "name": "iOVM_CrossDomainMessenger",
                                                        "nodeType": "Identifier",
                                                        "overloadedDeclarations": [],
                                                        "referencedDeclaration": 108,
                                                        "src": "2262:25:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_type$_t_contract$_iOVM_CrossDomainMessenger_$108_$",
                                                            "typeString": "type(contract iOVM_CrossDomainMessenger)"
                                                        }
                                                    },
                                                    "id": 54,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "typeConversion",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2262:36:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_iOVM_CrossDomainMessenger_$108",
                                                        "typeString": "contract iOVM_CrossDomainMessenger"
                                                    }
                                                },
                                                "functionReturnParameters": 51,
                                                "id": 55,
                                                "nodeType": "Return",
                                                "src": "2255:43:0"
                                            }
                                        ]
                                    },
                                    "documentation": {
                                        "id": 46,
                                        "nodeType": "StructuredDocumentation",
                                        "src": "1928:224:0",
                                        "text": " Gets the messenger, usually from storage. This function is exposed in case a child contract\n needs to override.\n @return The address of the cross-domain messenger contract which should be used."
                                    },
                                    "id": 57,
                                    "implemented": true,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "getCrossDomainMessenger",
                                    "nameLocation": "2166:23:0",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 47,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "2189:2:0"
                                    },
                                    "returnParameters": {
                                        "id": 51,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 50,
                                                "mutability": "mutable",
                                                "name": "",
                                                "nameLocation": "-1:-1:-1",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 57,
                                                "src": "2218:25:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_contract$_iOVM_CrossDomainMessenger_$108",
                                                    "typeString": "contract iOVM_CrossDomainMessenger"
                                                },
                                                "typeName": {
                                                    "id": 49,
                                                    "nodeType": "UserDefinedTypeName",
                                                    "pathNode": {
                                                        "id": 48,
                                                        "name": "iOVM_CrossDomainMessenger",
                                                        "nodeType": "IdentifierPath",
                                                        "referencedDeclaration": 108,
                                                        "src": "2218:25:0"
                                                    },
                                                    "referencedDeclaration": 108,
                                                    "src": "2218:25:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_contract$_iOVM_CrossDomainMessenger_$108",
                                                        "typeString": "contract iOVM_CrossDomainMessenger"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "2217:27:0"
                                    },
                                    "scope": 77,
                                    "src": "2157:148:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": true,
                                    "visibility": "internal"
                                },
                                {
                                    "body": {
                                        "id": 75,
                                        "nodeType": "Block",
                                        "src": "2825:95:0",
                                        "statements": [
                                            {
                                                "expression": {
                                                    "arguments": [
                                                        {
                                                            "id": 70,
                                                            "name": "_crossDomainTarget",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 60,
                                                            "src": "2873:18:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            }
                                                        },
                                                        {
                                                            "id": 71,
                                                            "name": "_message",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 64,
                                                            "src": "2893:8:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            }
                                                        },
                                                        {
                                                            "id": 72,
                                                            "name": "_gasLimit",
                                                            "nodeType": "Identifier",
                                                            "overloadedDeclarations": [],
                                                            "referencedDeclaration": 62,
                                                            "src": "2903:9:0",
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_uint32",
                                                                "typeString": "uint32"
                                                            }
                                                        }
                                                    ],
                                                    "expression": {
                                                        "argumentTypes": [
                                                            {
                                                                "typeIdentifier": "t_address",
                                                                "typeString": "address"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_bytes_memory_ptr",
                                                                "typeString": "bytes memory"
                                                            },
                                                            {
                                                                "typeIdentifier": "t_uint32",
                                                                "typeString": "uint32"
                                                            }
                                                        ],
                                                        "expression": {
                                                            "arguments": [],
                                                            "expression": {
                                                                "argumentTypes": [],
                                                                "id": 67,
                                                                "name": "getCrossDomainMessenger",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 57,
                                                                "src": "2835:23:0",
                                                                "typeDescriptions": {
                                                                    "typeIdentifier": "t_function_internal_nonpayable$__$returns$_t_contract$_iOVM_CrossDomainMessenger_$108_$",
                                                                    "typeString": "function () returns (contract iOVM_CrossDomainMessenger)"
                                                                }
                                                            },
                                                            "id": 68,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "kind": "functionCall",
                                                            "lValueRequested": false,
                                                            "names": [],
                                                            "nodeType": "FunctionCall",
                                                            "src": "2835:25:0",
                                                            "tryCall": false,
                                                            "typeDescriptions": {
                                                                "typeIdentifier": "t_contract$_iOVM_CrossDomainMessenger_$108",
                                                                "typeString": "contract iOVM_CrossDomainMessenger"
                                                            }
                                                        },
                                                        "id": 69,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "memberName": "sendMessage",
                                                        "nodeType": "MemberAccess",
                                                        "referencedDeclaration": 107,
                                                        "src": "2835:37:0",
                                                        "typeDescriptions": {
                                                            "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes_memory_ptr_$_t_uint32_$returns$__$",
                                                            "typeString": "function (address,bytes memory,uint32) external"
                                                        }
                                                    },
                                                    "id": 73,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "kind": "functionCall",
                                                    "lValueRequested": false,
                                                    "names": [],
                                                    "nodeType": "FunctionCall",
                                                    "src": "2835:78:0",
                                                    "tryCall": false,
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_tuple$__$",
                                                        "typeString": "tuple()"
                                                    }
                                                },
                                                "id": 74,
                                                "nodeType": "ExpressionStatement",
                                                "src": "2835:78:0"
                                            }
                                        ]
                                    },
                                    "documentation": {
                                        "id": 58,
                                        "nodeType": "StructuredDocumentation",
                                        "src": "2311:369:0",
                                        "text": " Sends a message to an account on another domain\n @param _crossDomainTarget The intended recipient on the destination domain\n @param _message The data to send to the target (usually calldata to a function with\n  `onlyFromCrossDomainAccount()`)\n @param _gasLimit The gasLimit for the receipt of the message on the target domain."
                                    },
                                    "id": 76,
                                    "implemented": true,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "sendCrossDomainMessage",
                                    "nameLocation": "2694:22:0",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 65,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 60,
                                                "mutability": "mutable",
                                                "name": "_crossDomainTarget",
                                                "nameLocation": "2734:18:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 76,
                                                "src": "2726:26:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 59,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2726:7:0",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 62,
                                                "mutability": "mutable",
                                                "name": "_gasLimit",
                                                "nameLocation": "2769:9:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 76,
                                                "src": "2762:16:0",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint32",
                                                    "typeString": "uint32"
                                                },
                                                "typeName": {
                                                    "id": 61,
                                                    "name": "uint32",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2762:6:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint32",
                                                        "typeString": "uint32"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 64,
                                                "mutability": "mutable",
                                                "name": "_message",
                                                "nameLocation": "2801:8:0",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 76,
                                                "src": "2788:21:0",
                                                "stateVariable": false,
                                                "storageLocation": "memory",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes"
                                                },
                                                "typeName": {
                                                    "id": 63,
                                                    "name": "bytes",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "2788:5:0",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_storage_ptr",
                                                        "typeString": "bytes"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "2716:99:0"
                                    },
                                    "returnParameters": {
                                        "id": 66,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "2825:0:0"
                                    },
                                    "scope": 77,
                                    "src": "2685:235:0",
                                    "stateMutability": "nonpayable",
                                    "virtual": false,
                                    "visibility": "internal"
                                }
                            ],
                            "scope": 78,
                            "src": "674:2248:0",
                            "usedErrors": []
                        }
                    ],
                    "src": "362:2561:0"
                },
                "id": 0
            },
            "contracts/insured-bridge/ovm/iOVM_CrossDomainMessenger.sol": {
                "ast": {
                    "absolutePath": "contracts/insured-bridge/ovm/iOVM_CrossDomainMessenger.sol",
                    "exportedSymbols": {
                        "iOVM_CrossDomainMessenger": [
                            108
                        ]
                    },
                    "id": 109,
                    "license": "MIT",
                    "nodeType": "SourceUnit",
                    "nodes": [
                        {
                            "id": 79,
                            "literals": [
                                "solidity",
                                "^",
                                "0.8",
                                ".0"
                            ],
                            "nodeType": "PragmaDirective",
                            "src": "370:23:1"
                        },
                        {
                            "abstract": false,
                            "baseContracts": [],
                            "canonicalName": "iOVM_CrossDomainMessenger",
                            "contractDependencies": [],
                            "contractKind": "interface",
                            "documentation": {
                                "id": 80,
                                "nodeType": "StructuredDocumentation",
                                "src": "395:43:1",
                                "text": " @title iOVM_CrossDomainMessenger"
                            },
                            "fullyImplemented": false,
                            "id": 108,
                            "linearizedBaseContracts": [
                                108
                            ],
                            "name": "iOVM_CrossDomainMessenger",
                            "nameLocation": "449:25:1",
                            "nodeType": "ContractDefinition",
                            "nodes": [
                                {
                                    "anonymous": false,
                                    "id": 84,
                                    "name": "SentMessage",
                                    "nameLocation": "537:11:1",
                                    "nodeType": "EventDefinition",
                                    "parameters": {
                                        "id": 83,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 82,
                                                "indexed": false,
                                                "mutability": "mutable",
                                                "name": "message",
                                                "nameLocation": "555:7:1",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 84,
                                                "src": "549:13:1",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_memory_ptr",
                                                    "typeString": "bytes"
                                                },
                                                "typeName": {
                                                    "id": 81,
                                                    "name": "bytes",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "549:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_storage_ptr",
                                                        "typeString": "bytes"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "548:15:1"
                                    },
                                    "src": "531:33:1"
                                },
                                {
                                    "anonymous": false,
                                    "id": 88,
                                    "name": "RelayedMessage",
                                    "nameLocation": "575:14:1",
                                    "nodeType": "EventDefinition",
                                    "parameters": {
                                        "id": 87,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 86,
                                                "indexed": false,
                                                "mutability": "mutable",
                                                "name": "msgHash",
                                                "nameLocation": "598:7:1",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 88,
                                                "src": "590:15:1",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                "typeName": {
                                                    "id": 85,
                                                    "name": "bytes32",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "590:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "589:17:1"
                                    },
                                    "src": "569:38:1"
                                },
                                {
                                    "anonymous": false,
                                    "id": 92,
                                    "name": "FailedRelayedMessage",
                                    "nameLocation": "618:20:1",
                                    "nodeType": "EventDefinition",
                                    "parameters": {
                                        "id": 91,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 90,
                                                "indexed": false,
                                                "mutability": "mutable",
                                                "name": "msgHash",
                                                "nameLocation": "647:7:1",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 92,
                                                "src": "639:15:1",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes32",
                                                    "typeString": "bytes32"
                                                },
                                                "typeName": {
                                                    "id": 89,
                                                    "name": "bytes32",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "639:7:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes32",
                                                        "typeString": "bytes32"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "638:17:1"
                                    },
                                    "src": "612:44:1"
                                },
                                {
                                    "functionSelector": "6e296e45",
                                    "id": 97,
                                    "implemented": false,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "xDomainMessageSender",
                                    "nameLocation": "730:20:1",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 93,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "750:2:1"
                                    },
                                    "returnParameters": {
                                        "id": 96,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 95,
                                                "mutability": "mutable",
                                                "name": "",
                                                "nameLocation": "-1:-1:-1",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 97,
                                                "src": "776:7:1",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 94,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "776:7:1",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "775:9:1"
                                    },
                                    "scope": 108,
                                    "src": "721:64:1",
                                    "stateMutability": "view",
                                    "virtual": false,
                                    "visibility": "external"
                                },
                                {
                                    "documentation": {
                                        "id": 98,
                                        "nodeType": "StructuredDocumentation",
                                        "src": "871:233:1",
                                        "text": " Sends a cross domain message to the target messenger.\n @param _target Target contract address.\n @param _message Message to send to the target.\n @param _gasLimit Gas limit for the provided message."
                                    },
                                    "functionSelector": "3dbb202b",
                                    "id": 107,
                                    "implemented": false,
                                    "kind": "function",
                                    "modifiers": [],
                                    "name": "sendMessage",
                                    "nameLocation": "1118:11:1",
                                    "nodeType": "FunctionDefinition",
                                    "parameters": {
                                        "id": 105,
                                        "nodeType": "ParameterList",
                                        "parameters": [
                                            {
                                                "constant": false,
                                                "id": 100,
                                                "mutability": "mutable",
                                                "name": "_target",
                                                "nameLocation": "1147:7:1",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 107,
                                                "src": "1139:15:1",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_address",
                                                    "typeString": "address"
                                                },
                                                "typeName": {
                                                    "id": 99,
                                                    "name": "address",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1139:7:1",
                                                    "stateMutability": "nonpayable",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_address",
                                                        "typeString": "address"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 102,
                                                "mutability": "mutable",
                                                "name": "_message",
                                                "nameLocation": "1179:8:1",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 107,
                                                "src": "1164:23:1",
                                                "stateVariable": false,
                                                "storageLocation": "calldata",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_bytes_calldata_ptr",
                                                    "typeString": "bytes"
                                                },
                                                "typeName": {
                                                    "id": 101,
                                                    "name": "bytes",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1164:5:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_bytes_storage_ptr",
                                                        "typeString": "bytes"
                                                    }
                                                },
                                                "visibility": "internal"
                                            },
                                            {
                                                "constant": false,
                                                "id": 104,
                                                "mutability": "mutable",
                                                "name": "_gasLimit",
                                                "nameLocation": "1204:9:1",
                                                "nodeType": "VariableDeclaration",
                                                "scope": 107,
                                                "src": "1197:16:1",
                                                "stateVariable": false,
                                                "storageLocation": "default",
                                                "typeDescriptions": {
                                                    "typeIdentifier": "t_uint32",
                                                    "typeString": "uint32"
                                                },
                                                "typeName": {
                                                    "id": 103,
                                                    "name": "uint32",
                                                    "nodeType": "ElementaryTypeName",
                                                    "src": "1197:6:1",
                                                    "typeDescriptions": {
                                                        "typeIdentifier": "t_uint32",
                                                        "typeString": "uint32"
                                                    }
                                                },
                                                "visibility": "internal"
                                            }
                                        ],
                                        "src": "1129:90:1"
                                    },
                                    "returnParameters": {
                                        "id": 106,
                                        "nodeType": "ParameterList",
                                        "parameters": [],
                                        "src": "1228:0:1"
                                    },
                                    "scope": 108,
                                    "src": "1109:120:1",
                                    "stateMutability": "nonpayable",
                                    "virtual": false,
                                    "visibility": "external"
                                }
                            ],
                            "scope": 109,
                            "src": "439:792:1",
                            "usedErrors": []
                        }
                    ],
                    "src": "370:862:1"
                },
                "id": 1
            }
        }
    }
}
