{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_core_bridge_address",
          "type": "address"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "getCurrentMsg",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "encodedMsg",
          "type": "bytes"
        }
      ],
      "name": "receiveEncodedMsg",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "chainId",
          "type": "uint16"
        },
        {
          "internalType": "bytes32",
          "name": "applicationAddr",
          "type": "bytes32"
        }
      ],
      "name": "registerApplicationContracts",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes",
          "name": "str",
          "type": "bytes"
        }
      ],
      "name": "sendMsg",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "sequence",
          "type": "uint64"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "[encoded data, 5770 characters]",
    "sourceMap": "98:1823:0:-:0;;;182:16;;;-1:-1:-1;;;;182:16:0;;;327:131;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;378:5;:18;;386:10;-1:-1:-1;;;;;;378:18:0;;;;;;;-1:-1:-1;406:45:0;;;;;-1:-1:-1;;;;;406:45:0;;;;;;;;;;98:1823;;14:290:3;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:3;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:3:o;:::-;98:1823:0;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "[encoded data, 5416 characters]",
    "sourceMap": "98:1823:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;633:822;;;;;;:::i;:::-;;:::i;:::-;;1691:228;;;;;;:::i;:::-;;:::i;465:162::-;;;;;;:::i;:::-;;:::i;:::-;;;2425:18:3;2413:31;;;2395:50;;2383:2;2368:18;465:162:0;;;;;;;;1461:95;;;:::i;:::-;;;;;;;:::i;633:822::-;763:11;;:40;;-1:-1:-1;;;763:40:0;;703:22;;;;;;-1:-1:-1;;;;;763:11:0;;:28;;:40;;792:10;;763:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;763:40:0;;;;;;;;;;;;:::i;:::-;702:101;;;;;;1005:5;1012:6;997:22;;;;;-1:-1:-1;;;997:22:0;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;1145:17:0;;;;1123;;;;1101:40;;;;;;:21;:40;;;;;;:61;1093:98;;;;-1:-1:-1;;;1093:98:0;;7862:2:3;1093:98:0;;;7844:21:3;7901:2;7881:18;;;7874:30;7940:26;7920:18;;;7913:54;7984:18;;1093:98:0;7660:348:3;1093:98:0;1300:7;;;;1281:27;;;;:18;:27;;;;;;;;1280:28;1272:66;;;;-1:-1:-1;;;1272:66:0;;8215:2:3;1272:66:0;;;8197:21:3;8254:2;8234:18;;;8227:30;8293:27;8273:18;;;8266:55;8338:18;;1272:66:0;8013:349:3;1272:66:0;1367:7;;;;1348:27;;;;:18;:27;;;;;;;:34;;-1:-1:-1;;1348:34:0;1378:4;1348:34;;;1437:10;;;;1416:32;;;;1348:27;1416:32;;;;;;:::i;:::-;;692:763;;;633:822;:::o;1691:228::-;1809:5;;-1:-1:-1;;;;;1809:5:0;1795:10;:19;1787:67;;;;-1:-1:-1;;;1787:67:0;;8569:2:3;1787:67:0;;;8551:21:3;8608:2;8588:18;;;8581:30;8647:34;8627:18;;;8620:62;-1:-1:-1;;;8698:18:3;;;8691:33;8741:19;;1787:67:0;8367:399:3;1787:67:0;1864:30;;;;;;;;:21;:30;;;;;:48;1691:228::o;465:162::-;554:11;;;:41;;-1:-1:-1;;;554:41:0;;516:15;;-1:-1:-1;;;;;554:11:0;;;:26;;:41;;-1:-1:-1;;;581:5:0;;;;;;588:3;;554:41;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;613:5;;;543:52;;-1:-1:-1;613:7:0;;-1:-1:-1;;;613:5:0;;;;;:7;:::i;:::-;605:5;;:15;;;;;;;;;;;;;;;;;;465:162;;;:::o;1461:95::-;1507:13;1538:11;1531:18;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1461:95;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:127:3;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:253;218:2;212:9;260:4;248:17;;295:18;280:34;;316:22;;;277:62;274:88;;;342:18;;:::i;:::-;378:2;371:22;146:253;:::o;404:255::-;476:2;470:9;518:6;506:19;;555:18;540:34;;576:22;;;537:62;534:88;;;602:18;;:::i;664:275::-;735:2;729:9;800:2;781:13;;-1:-1:-1;;777:27:3;765:40;;835:18;820:34;;856:22;;;817:62;814:88;;;882:18;;:::i;:::-;918:2;911:22;664:275;;-1:-1:-1;664:275:3:o;944:186::-;992:4;1025:18;1017:6;1014:30;1011:56;;;1047:18;;:::i;:::-;-1:-1:-1;1113:2:3;1092:15;-1:-1:-1;;1088:29:3;1119:4;1084:40;;944:186::o;1135:671::-;1203:6;1256:2;1244:9;1235:7;1231:23;1227:32;1224:52;;;1272:1;1269;1262:12;1224:52;1312:9;1299:23;1345:18;1337:6;1334:30;1331:50;;;1377:1;1374;1367:12;1331:50;1400:22;;1453:4;1445:13;;1441:27;-1:-1:-1;1431:55:3;;1482:1;1479;1472:12;1431:55;1518:2;1505:16;1543:48;1559:31;1587:2;1559:31;:::i;:::-;1543:48;:::i;:::-;1614:2;1607:5;1600:17;1654:7;1649:2;1644;1640;1636:11;1632:20;1629:33;1626:53;;;1675:1;1672;1665:12;1626:53;1730:2;1725;1721;1717:11;1712:2;1705:5;1701:14;1688:45;1774:1;1753:14;;;1769:2;1749:23;1742:34;;;;1757:5;1135:671;-1:-1:-1;;;;1135:671:3:o;1811:117::-;1896:6;1889:5;1885:18;1878:5;1875:29;1865:57;;1918:1;1915;1908:12;1865:57;1811:117;:::o;1933:313::-;2000:6;2008;2061:2;2049:9;2040:7;2036:23;2032:32;2029:52;;;2077:1;2074;2067:12;2029:52;2116:9;2103:23;2135:30;2159:5;2135:30;:::i;:::-;2184:5;2236:2;2221:18;;;;2208:32;;-1:-1:-1;;;1933:313:3:o;2456:258::-;2528:1;2538:113;2552:6;2549:1;2546:13;2538:113;;;2628:11;;;2622:18;2609:11;;;2602:39;2574:2;2567:10;2538:113;;;2669:6;2666:1;2663:13;2660:48;;;2704:1;2695:6;2690:3;2686:16;2679:27;2660:48;;2456:258;;;:::o;2719:::-;2761:3;2799:5;2793:12;2826:6;2821:3;2814:19;2842:63;2898:6;2891:4;2886:3;2882:14;2875:4;2868:5;2864:16;2842:63;:::i;:::-;2959:2;2938:15;-1:-1:-1;;2934:29:3;2925:39;;;;2966:4;2921:50;;2719:258;-1:-1:-1;;2719:258:3:o;2982:220::-;3131:2;3120:9;3113:21;3094:4;3151:45;3192:2;3181:9;3177:18;3169:6;3151:45;:::i;:::-;3143:53;2982:220;-1:-1:-1;;;2982:220:3:o;3430:160::-;3507:13;;3560:4;3549:16;;3539:27;;3529:55;;3580:1;3577;3570:12;3529:55;3430:160;;;:::o;3595:167::-;3673:13;;3726:10;3715:22;;3705:33;;3695:61;;3752:1;3749;3742:12;3767:136;3845:13;;3867:30;3845:13;3867:30;:::i;3908:175::-;3986:13;;4039:18;4028:30;;4018:41;;4008:69;;4073:1;4070;4063:12;4088:428;4141:5;4194:3;4187:4;4179:6;4175:17;4171:27;4161:55;;4212:1;4209;4202:12;4161:55;4241:6;4235:13;4272:48;4288:31;4316:2;4288:31;:::i;4272:48::-;4345:2;4336:7;4329:19;4391:3;4384:4;4379:2;4371:6;4367:15;4363:26;4360:35;4357:55;;;4408:1;4405;4398:12;4357:55;4421:64;4482:2;4475:4;4466:7;4462:18;4455:4;4447:6;4443:17;4421:64;:::i;:::-;4503:7;4088:428;-1:-1:-1;;;;4088:428:3:o;4521:1177::-;4595:5;4648:3;4641:4;4633:6;4629:17;4625:27;4615:55;;4666:1;4663;4656:12;4615:55;4695:6;4689:13;4721:4;4744:18;4740:2;4737:26;4734:52;;;4766:18;;:::i;:::-;4806:36;4838:2;4833;4830:1;4826:10;4822:19;4806:36;:::i;:::-;4876:15;;;4962:1;4958:10;;;;4946:23;;4942:32;;;4907:12;;;;4986:15;;;4983:35;;;5014:1;5011;5004:12;4983:35;5050:2;5042:6;5038:15;5062:607;5078:6;5073:3;5070:15;5062:607;;;5156:4;5150:3;5145;5141:13;5137:24;5134:114;;;5202:1;5231:2;5227;5220:14;5134:114;5274:22;;:::i;:::-;5329:3;5323:10;5316:5;5309:25;5385:2;5380:3;5376:12;5370:19;5365:2;5358:5;5354:14;5347:43;5413:2;5451:41;5488:2;5483:3;5479:12;5451:41;:::i;:::-;5435:14;;;5428:65;5516:2;5554:41;5582:12;;;5554:41;:::i;:::-;5538:14;;;5531:65;5609:18;;5647:12;;;;5104:4;5095:14;5062:607;;;-1:-1:-1;5687:5:3;4521:1177;-1:-1:-1;;;;;;4521:1177:3:o;5703:164::-;5779:13;;5828;;5821:21;5811:32;;5801:60;;5857:1;5854;5847:12;5872:1783;5986:6;5994;6002;6055:2;6043:9;6034:7;6030:23;6026:32;6023:52;;;6071:1;6068;6061:12;6023:52;6104:9;6098:16;6133:18;6174:2;6166:6;6163:14;6160:34;;;6190:1;6187;6180:12;6160:34;6213:22;;;;6269:6;6251:16;;;6247:29;6244:49;;;6289:1;6286;6279:12;6244:49;6315:22;;:::i;:::-;6360:31;6388:2;6360:31;:::i;:::-;6353:5;6346:46;6424:41;6461:2;6457;6453:11;6424:41;:::i;:::-;6419:2;6412:5;6408:14;6401:65;6498:41;6535:2;6531;6527:11;6498:41;:::i;:::-;6493:2;6486:5;6482:14;6475:65;6572:41;6609:2;6605;6601:11;6572:41;:::i;:::-;6567:2;6560:5;6556:14;6549:65;6661:3;6657:2;6653:12;6647:19;6641:3;6634:5;6630:15;6623:44;6700:42;6737:3;6733:2;6729:12;6700:42;:::i;:::-;6694:3;6687:5;6683:15;6676:67;6776:41;6812:3;6808:2;6804:12;6776:41;:::i;:::-;6770:3;6763:5;6759:15;6752:66;6857:3;6853:2;6849:12;6843:19;6887:2;6877:8;6874:16;6871:36;;;6903:1;6900;6893:12;6871:36;6940:55;6987:7;6976:8;6972:2;6968:17;6940:55;:::i;:::-;6934:3;6927:5;6923:15;6916:80;;7015:3;7050:41;7087:2;7083;7079:11;7050:41;:::i;:::-;7034:14;;;7027:65;7111:3;7145:11;;;7139:18;7169:16;;;7166:36;;;7198:1;7195;7188:12;7166:36;7234:76;7302:7;7291:8;7287:2;7283:17;7234:76;:::i;:::-;7218:14;;;7211:100;;;;-1:-1:-1;7330:3:3;7371:11;;;7365:18;7349:14;;;7342:42;7222:5;-1:-1:-1;7427:46:3;7469:2;7454:18;;7427:46;:::i;:::-;7417:56;;7519:2;7508:9;7504:18;7498:25;7482:41;;7548:2;7538:8;7535:16;7532:36;;;7564:1;7561;7554:12;7532:36;;7587:62;7641:7;7630:8;7619:9;7615:24;7587:62;:::i;:::-;7577:72;;;5872:1783;;;;;:::o;8771:392::-;8990:10;8982:6;8978:23;8967:9;8960:42;9038:2;9033;9022:9;9018:18;9011:30;8941:4;9058:45;9099:2;9088:9;9084:18;9076:6;9058:45;:::i;:::-;9050:53;;9151:4;9143:6;9139:17;9134:2;9123:9;9119:18;9112:45;8771:392;;;;;;:::o;9168:206::-;9237:6;9290:2;9278:9;9269:7;9265:23;9261:32;9258:52;;;9306:1;9303;9296:12;9258:52;9329:39;9358:9;9329:39;:::i;9379:325::-;9418:3;9446:10;9483:2;9480:1;9476:10;9513:2;9510:1;9506:10;9544:3;9540:2;9536:12;9531:3;9528:21;9525:144;;;9591:10;9586:3;9582:20;9579:1;9572:31;9626:4;9623:1;9616:15;9654:4;9651:1;9644:15;9525:144;9685:13;;9379:325;-1:-1:-1;;;;9379:325:3:o;9709:380::-;9788:1;9784:12;;;;9831;;;9852:61;;9906:4;9898:6;9894:17;9884:27;;9852:61;9959:2;9951:6;9948:14;9928:18;9925:38;9922:161;;;10005:10;10000:3;9996:20;9993:1;9986:31;10040:4;10037:1;10030:15;10068:4;10065:1;10058:15;9922:161;;9709:380;;;:::o",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "getCurrentMsg()": "ff206cf8",
    "receiveEncodedMsg(bytes)": "496d76ff",
    "registerApplicationContracts(uint16,bytes32)": "5f327e1c",
    "sendMsg(bytes)": "737a3ca4"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_core_bridge_address\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"getCurrentMsg\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedMsg\",\"type\":\"bytes\"}],\"name\":\"receiveEncodedMsg\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"chainId\",\"type\":\"uint16\"},{\"internalType\":\"bytes32\",\"name\":\"applicationAddr\",\"type\":\"bytes32\"}],\"name\":\"registerApplicationContracts\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"str\",\"type\":\"bytes\"}],\"name\":\"sendMsg\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"registerApplicationContracts(uint16,bytes32)\":{\"notice\":\"Registers it's sibling applications on other chains as the only ones that can send this instance messages\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/Messenger.sol\":\"Messenger\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"src/Messenger.sol\":{\"keccak256\":\"0xc1612910472d31c40c466dd0607e3252d9d3ed8fc61cc21cd691d0777f0ea603\",\"license\":\"Unlicense\",\"urls\":[\"bzz-raw://6aa09e11177d17a247c62d1edfbfdd9a39ecd6adf1916de6699e1a4b8db161a9\",\"dweb:/ipfs/QmeJKe52xxRgTPYAzYGfWxd6etp4FMQf64DDFEjN1kJuaB\"]},\"src/Wormhole/IWormhole.sol\":{\"keccak256\":\"0xa83711083ba6529aeedafc74593865aecece3904dc0ca18b624a3212e038c8f5\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://88e7ef004e8802e44517ddb91ab00669a79ab6814b8bbcb3dc4bbb3d13b3ebd6\",\"dweb:/ipfs/QmXcGqQpUPV9so9RzdYhD2konP679fLCiXEZr44bgGVVJe\"]},\"src/Wormhole/Structs.sol\":{\"keccak256\":\"0xf6067f3a7ac8ccd239a50aa2ef5620ffe31bc86a3757571e13e57a3a0f476b37\",\"license\":\"Apache 2\",\"urls\":[\"bzz-raw://813db91e92feacdf21da3986e1a59d38befc34103cd09e61d30471c228e3a6f2\",\"dweb:/ipfs/QmWeRrqvbite8YCHu97Lsta1Y3TR9WzQ9k2spaF6S3VQZZ\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.10+commit.fc410830"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "_core_bridge_address",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "getCurrentMsg",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "bytes",
              "name": "encodedMsg",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "receiveEncodedMsg"
        },
        {
          "inputs": [
            {
              "internalType": "uint16",
              "name": "chainId",
              "type": "uint16"
            },
            {
              "internalType": "bytes32",
              "name": "applicationAddr",
              "type": "bytes32"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "registerApplicationContracts"
        },
        {
          "inputs": [
            {
              "internalType": "bytes",
              "name": "str",
              "type": "bytes"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "sendMsg",
          "outputs": [
            {
              "internalType": "uint64",
              "name": "sequence",
              "type": "uint64"
            }
          ]
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {},
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {
          "registerApplicationContracts(uint16,bytes32)": {
            "notice": "Registers it's sibling applications on other chains as the only ones that can send this instance messages"
          }
        },
        "version": 1
      }
    },
    "settings": {
      "remappings": [],
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "metadata": {
        "bytecodeHash": "ipfs"
      },
      "compilationTarget": {
        "src/Messenger.sol": "Messenger"
      },
      "libraries": {}
    },
    "sources": {
      "src/Messenger.sol": {
        "keccak256": "0xc1612910472d31c40c466dd0607e3252d9d3ed8fc61cc21cd691d0777f0ea603",
        "urls": [
          "bzz-raw://6aa09e11177d17a247c62d1edfbfdd9a39ecd6adf1916de6699e1a4b8db161a9",
          "dweb:/ipfs/QmeJKe52xxRgTPYAzYGfWxd6etp4FMQf64DDFEjN1kJuaB"
        ],
        "license": "Unlicense"
      },
      "src/Wormhole/IWormhole.sol": {
        "keccak256": "0xa83711083ba6529aeedafc74593865aecece3904dc0ca18b624a3212e038c8f5",
        "urls": [
          "bzz-raw://88e7ef004e8802e44517ddb91ab00669a79ab6814b8bbcb3dc4bbb3d13b3ebd6",
          "dweb:/ipfs/QmXcGqQpUPV9so9RzdYhD2konP679fLCiXEZr44bgGVVJe"
        ],
        "license": "Apache 2"
      },
      "src/Wormhole/Structs.sol": {
        "keccak256": "0xf6067f3a7ac8ccd239a50aa2ef5620ffe31bc86a3757571e13e57a3a0f476b37",
        "urls": [
          "bzz-raw://813db91e92feacdf21da3986e1a59d38befc34103cd09e61d30471c228e3a6f2",
          "dweb:/ipfs/QmWeRrqvbite8YCHu97Lsta1Y3TR9WzQ9k2spaF6S3VQZZ"
        ],
        "license": "Apache 2"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/Messenger.sol",
    "id": 153,
    "exportedSymbols": {
      "IWormhole": [
        279
      ],
      "Messenger": [
        152
      ],
      "Structs": [
        329
      ]
    },
    "nodeType": "SourceUnit",
    "src": "37:1885:0",
    "nodes": [
      {
        "id": 1,
        "nodeType": "PragmaDirective",
        "src": "37:23:0",
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ]
      },
      {
        "id": 2,
        "nodeType": "ImportDirective",
        "src": "62:34:0",
        "absolutePath": "src/Wormhole/IWormhole.sol",
        "file": "./Wormhole/IWormhole.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 153,
        "sourceUnit": 280,
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "id": 152,
        "nodeType": "ContractDefinition",
        "src": "98:1823:0",
        "nodes": [
          {
            "id": 4,
            "nodeType": "VariableDeclaration",
            "src": "123:26:0",
            "constant": false,
            "mutability": "mutable",
            "name": "current_msg",
            "nameLocation": "138:11:0",
            "scope": 152,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 3,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "123:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "id": 7,
            "nodeType": "VariableDeclaration",
            "src": "155:21:0",
            "constant": false,
            "mutability": "mutable",
            "name": "core_bridge",
            "nameLocation": "165:11:0",
            "scope": 152,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IWormhole_$279",
              "typeString": "contract IWormhole"
            },
            "typeName": {
              "id": 6,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 5,
                "name": "IWormhole",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 279,
                "src": "155:9:0"
              },
              "referencedDeclaration": 279,
              "src": "155:9:0",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IWormhole_$279",
                "typeString": "contract IWormhole"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 10,
            "nodeType": "VariableDeclaration",
            "src": "182:16:0",
            "constant": false,
            "mutability": "mutable",
            "name": "nonce",
            "nameLocation": "189:5:0",
            "scope": 152,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint32",
              "typeString": "uint32"
            },
            "typeName": {
              "id": 8,
              "name": "uint32",
              "nodeType": "ElementaryTypeName",
              "src": "182:6:0",
              "typeDescriptions": {
                "typeIdentifier": "t_uint32",
                "typeString": "uint32"
              }
            },
            "value": {
              "hexValue": "30",
              "id": 9,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "197:1:0",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_0_by_1",
                "typeString": "int_const 0"
              },
              "value": "0"
            },
            "visibility": "internal"
          },
          {
            "id": 14,
            "nodeType": "VariableDeclaration",
            "src": "204:48:0",
            "constant": false,
            "mutability": "mutable",
            "name": "_applicationContracts",
            "nameLocation": "231:21:0",
            "scope": 152,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint16_$_t_bytes32_$",
              "typeString": "mapping(uint16 => bytes32)"
            },
            "typeName": {
              "id": 13,
              "keyType": {
                "id": 11,
                "name": "uint16",
                "nodeType": "ElementaryTypeName",
                "src": "212:6:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint16",
                  "typeString": "uint16"
                }
              },
              "nodeType": "Mapping",
              "src": "204:26:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint16_$_t_bytes32_$",
                "typeString": "mapping(uint16 => bytes32)"
              },
              "valueType": {
                "id": 12,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "222:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 16,
            "nodeType": "VariableDeclaration",
            "src": "258:13:0",
            "constant": false,
            "mutability": "mutable",
            "name": "owner",
            "nameLocation": "266:5:0",
            "scope": 152,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 15,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "258:7:0",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 20,
            "nodeType": "VariableDeclaration",
            "src": "277:43:0",
            "constant": false,
            "mutability": "mutable",
            "name": "_completedMessages",
            "nameLocation": "302:18:0",
            "scope": 152,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
              "typeString": "mapping(bytes32 => bool)"
            },
            "typeName": {
              "id": 19,
              "keyType": {
                "id": 17,
                "name": "bytes32",
                "nodeType": "ElementaryTypeName",
                "src": "285:7:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bytes32",
                  "typeString": "bytes32"
                }
              },
              "nodeType": "Mapping",
              "src": "277:24:0",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                "typeString": "mapping(bytes32 => bool)"
              },
              "valueType": {
                "id": 18,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "296:4:0",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "internal"
          },
          {
            "id": 37,
            "nodeType": "FunctionDefinition",
            "src": "327:131:0",
            "body": {
              "id": 36,
              "nodeType": "Block",
              "src": "368:90:0",
              "statements": [
                {
                  "expression": {
                    "id": 28,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 25,
                      "name": "owner",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 16,
                      "src": "378:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 26,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "386:3:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 27,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "src": "386:10:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "378:18:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "id": 29,
                  "nodeType": "ExpressionStatement",
                  "src": "378:18:0"
                },
                {
                  "expression": {
                    "id": 34,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 30,
                      "name": "core_bridge",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 7,
                      "src": "406:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWormhole_$279",
                        "typeString": "contract IWormhole"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 32,
                          "name": "_core_bridge_address",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22,
                          "src": "430:20:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 31,
                        "name": "IWormhole",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 279,
                        "src": "420:9:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IWormhole_$279_$",
                          "typeString": "type(contract IWormhole)"
                        }
                      },
                      "id": 33,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "420:31:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IWormhole_$279",
                        "typeString": "contract IWormhole"
                      }
                    },
                    "src": "406:45:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IWormhole_$279",
                      "typeString": "contract IWormhole"
                    }
                  },
                  "id": 35,
                  "nodeType": "ExpressionStatement",
                  "src": "406:45:0"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 23,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 22,
                  "mutability": "mutable",
                  "name": "_core_bridge_address",
                  "nameLocation": "347:20:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 37,
                  "src": "339:28:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 21,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "339:7:0",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "338:30:0"
            },
            "returnParameters": {
              "id": 24,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "368:0:0"
            },
            "scope": 152,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 60,
            "nodeType": "FunctionDefinition",
            "src": "465:162:0",
            "body": {
              "id": 59,
              "nodeType": "Block",
              "src": "533:94:0",
              "statements": [
                {
                  "expression": {
                    "id": 51,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 44,
                      "name": "sequence",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 42,
                      "src": "543:8:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 47,
                          "name": "nonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 10,
                          "src": "581:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          }
                        },
                        {
                          "id": 48,
                          "name": "str",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 39,
                          "src": "588:3:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        {
                          "hexValue": "31",
                          "id": 49,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "593:1:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint32",
                            "typeString": "uint32"
                          },
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          },
                          {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          }
                        ],
                        "expression": {
                          "id": 45,
                          "name": "core_bridge",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 7,
                          "src": "554:11:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IWormhole_$279",
                            "typeString": "contract IWormhole"
                          }
                        },
                        "id": 46,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "publishMessage",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 180,
                        "src": "554:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_external_payable$_t_uint32_$_t_bytes_memory_ptr_$_t_uint8_$returns$_t_uint64_$",
                          "typeString": "function (uint32,bytes memory,uint8) payable external returns (uint64)"
                        }
                      },
                      "id": 50,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "554:41:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "543:52:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 52,
                  "nodeType": "ExpressionStatement",
                  "src": "543:52:0"
                },
                {
                  "expression": {
                    "id": 57,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 53,
                      "name": "nonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 10,
                      "src": "605:5:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 56,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 54,
                        "name": "nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 10,
                        "src": "613:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 55,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "619:1:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "613:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "605:15:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 58,
                  "nodeType": "ExpressionStatement",
                  "src": "605:15:0"
                }
              ]
            },
            "functionSelector": "737a3ca4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sendMsg",
            "nameLocation": "474:7:0",
            "parameters": {
              "id": 40,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 39,
                  "mutability": "mutable",
                  "name": "str",
                  "nameLocation": "495:3:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 60,
                  "src": "482:16:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 38,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "482:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "481:18:0"
            },
            "returnParameters": {
              "id": 43,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 42,
                  "mutability": "mutable",
                  "name": "sequence",
                  "nameLocation": "523:8:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 60,
                  "src": "516:15:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 41,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "516:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "515:17:0"
            },
            "scope": 152,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 120,
            "nodeType": "FunctionDefinition",
            "src": "633:822:0",
            "body": {
              "id": 119,
              "nodeType": "Block",
              "src": "692:763:0",
              "statements": [
                {
                  "assignments": [
                    69,
                    71,
                    73
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 69,
                      "mutability": "mutable",
                      "name": "vm",
                      "nameLocation": "723:2:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 119,
                      "src": "703:22:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_VM_$328_memory_ptr",
                        "typeString": "struct Structs.VM"
                      },
                      "typeName": {
                        "id": 68,
                        "nodeType": "UserDefinedTypeName",
                        "pathNode": {
                          "id": 67,
                          "name": "IWormhole.VM",
                          "nodeType": "IdentifierPath",
                          "referencedDeclaration": 328,
                          "src": "703:12:0"
                        },
                        "referencedDeclaration": 328,
                        "src": "703:12:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_VM_$328_storage_ptr",
                          "typeString": "struct Structs.VM"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 71,
                      "mutability": "mutable",
                      "name": "valid",
                      "nameLocation": "732:5:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 119,
                      "src": "727:10:0",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 70,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "727:4:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 73,
                      "mutability": "mutable",
                      "name": "reason",
                      "nameLocation": "753:6:0",
                      "nodeType": "VariableDeclaration",
                      "scope": 119,
                      "src": "739:20:0",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 72,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "739:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 78,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 76,
                        "name": "encodedMsg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 62,
                        "src": "792:10:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 74,
                        "name": "core_bridge",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 7,
                        "src": "763:11:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IWormhole_$279",
                          "typeString": "contract IWormhole"
                        }
                      },
                      "id": 75,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "parseAndVerifyVM",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 192,
                      "src": "763:28:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_bytes_memory_ptr_$returns$_t_struct$_VM_$328_memory_ptr_$_t_bool_$_t_string_memory_ptr_$",
                        "typeString": "function (bytes memory) view external returns (struct Structs.VM memory,bool,string memory)"
                      }
                    },
                    "id": 77,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "763:40:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_struct$_VM_$328_memory_ptr_$_t_bool_$_t_string_memory_ptr_$",
                      "typeString": "tuple(struct Structs.VM memory,bool,string memory)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "702:101:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 80,
                        "name": "valid",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 71,
                        "src": "1005:5:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "id": 81,
                        "name": "reason",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 73,
                        "src": "1012:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_string_memory_ptr",
                          "typeString": "string memory"
                        }
                      ],
                      "id": 79,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "997:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 82,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "997:22:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 83,
                  "nodeType": "ExpressionStatement",
                  "src": "997:22:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 91,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "baseExpression": {
                            "id": 85,
                            "name": "_applicationContracts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 14,
                            "src": "1101:21:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint16_$_t_bytes32_$",
                              "typeString": "mapping(uint16 => bytes32)"
                            }
                          },
                          "id": 88,
                          "indexExpression": {
                            "expression": {
                              "id": 86,
                              "name": "vm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69,
                              "src": "1123:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VM_$328_memory_ptr",
                                "typeString": "struct Structs.VM memory"
                              }
                            },
                            "id": 87,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "emitterChainId",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 311,
                            "src": "1123:17:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1101:40:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "expression": {
                            "id": 89,
                            "name": "vm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69,
                            "src": "1145:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VM_$328_memory_ptr",
                              "typeString": "struct Structs.VM memory"
                            }
                          },
                          "id": 90,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "emitterAddress",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 313,
                          "src": "1145:17:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "1101:61:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "496e76616c696420456d6974746572204164647265737321",
                        "id": 92,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1164:26:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f496f877e2734cc33859d6eebf6eb783eb0c07a93151b05d0dc70cb8571cfab1",
                          "typeString": "literal_string \"Invalid Emitter Address!\""
                        },
                        "value": "Invalid Emitter Address!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f496f877e2734cc33859d6eebf6eb783eb0c07a93151b05d0dc70cb8571cfab1",
                          "typeString": "literal_string \"Invalid Emitter Address!\""
                        }
                      ],
                      "id": 84,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1093:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 93,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1093:98:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 94,
                  "nodeType": "ExpressionStatement",
                  "src": "1093:98:0"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 100,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "UnaryOperation",
                        "operator": "!",
                        "prefix": true,
                        "src": "1280:28:0",
                        "subExpression": {
                          "baseExpression": {
                            "id": 96,
                            "name": "_completedMessages",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 20,
                            "src": "1281:18:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                              "typeString": "mapping(bytes32 => bool)"
                            }
                          },
                          "id": 99,
                          "indexExpression": {
                            "expression": {
                              "id": 97,
                              "name": "vm",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 69,
                              "src": "1300:2:0",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_VM_$328_memory_ptr",
                                "typeString": "struct Structs.VM memory"
                              }
                            },
                            "id": 98,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "hash",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 327,
                            "src": "1300:7:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "1281:27:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4d65737361676520616c72656164792070726f636573736564",
                        "id": 101,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1310:27:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ce52e83d839057c6eded6c3ade48bb15cfa535fddf47c137ba979ab4aea203cc",
                          "typeString": "literal_string \"Message already processed\""
                        },
                        "value": "Message already processed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ce52e83d839057c6eded6c3ade48bb15cfa535fddf47c137ba979ab4aea203cc",
                          "typeString": "literal_string \"Message already processed\""
                        }
                      ],
                      "id": 95,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1272:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1272:66:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 103,
                  "nodeType": "ExpressionStatement",
                  "src": "1272:66:0"
                },
                {
                  "expression": {
                    "id": 109,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 104,
                        "name": "_completedMessages",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 20,
                        "src": "1348:18:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_bytes32_$_t_bool_$",
                          "typeString": "mapping(bytes32 => bool)"
                        }
                      },
                      "id": 107,
                      "indexExpression": {
                        "expression": {
                          "id": 105,
                          "name": "vm",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 69,
                          "src": "1367:2:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_VM_$328_memory_ptr",
                            "typeString": "struct Structs.VM memory"
                          }
                        },
                        "id": 106,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "hash",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 327,
                        "src": "1367:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1348:27:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 108,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "1378:4:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "1348:34:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 110,
                  "nodeType": "ExpressionStatement",
                  "src": "1348:34:0"
                },
                {
                  "expression": {
                    "id": 117,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 111,
                      "name": "current_msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 4,
                      "src": "1416:11:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 114,
                            "name": "vm",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 69,
                            "src": "1437:2:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_VM_$328_memory_ptr",
                              "typeString": "struct Structs.VM memory"
                            }
                          },
                          "id": 115,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "payload",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 319,
                          "src": "1437:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        ],
                        "id": 113,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "1430:6:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_string_storage_ptr_$",
                          "typeString": "type(string storage pointer)"
                        },
                        "typeName": {
                          "id": 112,
                          "name": "string",
                          "nodeType": "ElementaryTypeName",
                          "src": "1430:6:0",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 116,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "1430:18:0",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "1416:32:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 118,
                  "nodeType": "ExpressionStatement",
                  "src": "1416:32:0"
                }
              ]
            },
            "functionSelector": "496d76ff",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "receiveEncodedMsg",
            "nameLocation": "642:17:0",
            "parameters": {
              "id": 63,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 62,
                  "mutability": "mutable",
                  "name": "encodedMsg",
                  "nameLocation": "673:10:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 120,
                  "src": "660:23:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 61,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "660:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "659:25:0"
            },
            "returnParameters": {
              "id": 64,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "692:0:0"
            },
            "scope": 152,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 128,
            "nodeType": "FunctionDefinition",
            "src": "1461:95:0",
            "body": {
              "id": 127,
              "nodeType": "Block",
              "src": "1521:35:0",
              "statements": [
                {
                  "expression": {
                    "id": 125,
                    "name": "current_msg",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 4,
                    "src": "1538:11:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 124,
                  "id": 126,
                  "nodeType": "Return",
                  "src": "1531:18:0"
                }
              ]
            },
            "functionSelector": "ff206cf8",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getCurrentMsg",
            "nameLocation": "1470:13:0",
            "parameters": {
              "id": 121,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1483:2:0"
            },
            "returnParameters": {
              "id": 124,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 123,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 128,
                  "src": "1507:13:0",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 122,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "1507:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1506:15:0"
            },
            "scope": 152,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 151,
            "nodeType": "FunctionDefinition",
            "src": "1691:228:0",
            "body": {
              "id": 150,
              "nodeType": "Block",
              "src": "1777:142:0",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 137,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "1795:3:0",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 138,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "1795:10:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 139,
                          "name": "owner",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 16,
                          "src": "1809:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "1795:19:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4f6e6c79206f776e65722063616e207265676973746572206e657720636861696e7321",
                        "id": 141,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "1816:37:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_698f093739048e0d0d04d257a772e914828254033190db3d927fdda8176c85a9",
                          "typeString": "literal_string \"Only owner can register new chains!\""
                        },
                        "value": "Only owner can register new chains!"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_698f093739048e0d0d04d257a772e914828254033190db3d927fdda8176c85a9",
                          "typeString": "literal_string \"Only owner can register new chains!\""
                        }
                      ],
                      "id": 136,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "1787:7:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 142,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1787:67:0",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 143,
                  "nodeType": "ExpressionStatement",
                  "src": "1787:67:0"
                },
                {
                  "expression": {
                    "id": 148,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 144,
                        "name": "_applicationContracts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 14,
                        "src": "1864:21:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint16_$_t_bytes32_$",
                          "typeString": "mapping(uint16 => bytes32)"
                        }
                      },
                      "id": 146,
                      "indexExpression": {
                        "id": 145,
                        "name": "chainId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 131,
                        "src": "1886:7:0",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "1864:30:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 147,
                      "name": "applicationAddr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 133,
                      "src": "1897:15:0",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "1864:48:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 149,
                  "nodeType": "ExpressionStatement",
                  "src": "1864:48:0"
                }
              ]
            },
            "documentation": {
              "id": 129,
              "nodeType": "StructuredDocumentation",
              "src": "1561:125:0",
              "text": "Registers it's sibling applications on other chains as the only ones that can send this instance messages"
            },
            "functionSelector": "5f327e1c",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "registerApplicationContracts",
            "nameLocation": "1700:28:0",
            "parameters": {
              "id": 134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 131,
                  "mutability": "mutable",
                  "name": "chainId",
                  "nameLocation": "1736:7:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 151,
                  "src": "1729:14:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint16",
                    "typeString": "uint16"
                  },
                  "typeName": {
                    "id": 130,
                    "name": "uint16",
                    "nodeType": "ElementaryTypeName",
                    "src": "1729:6:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint16",
                      "typeString": "uint16"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 133,
                  "mutability": "mutable",
                  "name": "applicationAddr",
                  "nameLocation": "1753:15:0",
                  "nodeType": "VariableDeclaration",
                  "scope": 151,
                  "src": "1745:23:0",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 132,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1745:7:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1728:41:0"
            },
            "returnParameters": {
              "id": 135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1777:0:0"
            },
            "scope": 152,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [],
        "canonicalName": "Messenger",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          152
        ],
        "name": "Messenger",
        "nameLocation": "107:9:0",
        "scope": 153,
        "usedErrors": []
      }
    ],
    "license": "Unlicense"
  },
  "id": 0
}