{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_localDomain",
          "type": "uint32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "messageHash",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "leafIndex",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "destinationAndNonce",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "committedRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "message",
          "type": "bytes"
        }
      ],
      "name": "Dispatch",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32[2]",
          "name": "newRoot",
          "type": "bytes32[2]"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature2",
          "type": "bytes"
        }
      ],
      "name": "DoubleUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "ImproperUpdate",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "oldUpdater",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newUpdater",
          "type": "address"
        }
      ],
      "name": "NewUpdater",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "updaterManager",
          "type": "address"
        }
      ],
      "name": "NewUpdaterManager",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "homeDomain",
          "type": "uint32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "oldRoot",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newRoot",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "signature",
          "type": "bytes"
        }
      ],
      "name": "Update",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "updater",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "reporter",
          "type": "address"
        }
      ],
      "name": "UpdaterSlashed",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "MAX_MESSAGE_BODY_BYTES",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "committedRoot",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "count",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_destinationDomain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipientAddress",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_messageBody",
          "type": "bytes"
        }
      ],
      "name": "dispatch",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_oldRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32[2]",
          "name": "_newRoot",
          "type": "bytes32[2]"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "_signature2",
          "type": "bytes"
        }
      ],
      "name": "doubleUpdate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "homeDomainHash",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_oldRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_newRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "improperUpdate",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IUpdaterManager",
          "name": "_updaterManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "localDomain",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "nonces",
      "outputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_item",
          "type": "bytes32"
        }
      ],
      "name": "queueContains",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "queueEnd",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "queueLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "root",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_updater",
          "type": "address"
        }
      ],
      "name": "setUpdater",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_updaterManager",
          "type": "address"
        }
      ],
      "name": "setUpdaterManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "state",
      "outputs": [
        {
          "internalType": "enum NomadBase.States",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "suggestUpdate",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "_committedRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_new",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tree",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "count",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_committedRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_newRoot",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_signature",
          "type": "bytes"
        }
      ],
      "name": "update",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updater",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "updaterManager",
      "outputs": [
        {
          "internalType": "contract IUpdaterManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60a060405234801561001057600080fd5b50604051612f69380380612f698339818101604052602081101561003357600080fd5b505160e081901b6001600160e01b03191660805263ffffffff16612ef6610073600039806109875280610a685280610ffc52806115ed5250612ef66000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639df6c8e1116100ee578063df034cd011610097578063f6d1610211610071578063f6d16102146105fc578063fa31de0114610604578063fd54b228146106bc578063ffa1ad74146106c4576101ae565b8063df034cd0146105b9578063ebf0c717146105c1578063f2fde38b146105c9576101ae565b8063b95a2001116100c8578063b95a20011461053a578063c19d93fb1461055d578063c4d66de814610586576101ae565b80639df6c8e114610478578063ab91c7b014610480578063b31c01fb14610488576101ae565b806367a6771d1161015b5780638da5cb5b116101355780638da5cb5b1461032f5780638e4e30e0146103605780639776120e146104125780639d54f41914610445576101ae565b806367a6771d146102fe578063715018a6146103065780638d3638f41461030e576101ae565b806336e104de1161018c57806336e104de146102cd57806345630b1a146102ee578063522ae002146102f6576101ae565b806306661abd146101b357806319d9d21a146101cd5780632bef28921461029c575b600080fd5b6101bb6106e2565b60408051918252519081900360200190f35b61029a600480360360a08110156101e357600080fd5b813591602081019181019060808101606082013564010000000081111561020957600080fd5b82018360208201111561021b57600080fd5b8035906020019184600183028401116401000000008311171561023d57600080fd5b91939092909160208101903564010000000081111561025b57600080fd5b82018360208201111561026d57600080fd5b8035906020019184600183028401116401000000008311171561028f57600080fd5b5090925090506106e8565b005b6102b9600480360360208110156102b257600080fd5b5035610945565b604080519115158252519081900360200190f35b6102d5610958565b6040805192835260208301919091528051918290030190f35b6101bb610980565b6101bb6109b0565b6101bb6109b6565b61029a6109bc565b610316610a66565b6040805163ffffffff9092168252519081900360200190f35b610337610a8a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102b96004803603606081101561037657600080fd5b81359160208101359181019060608101604082013564010000000081111561039d57600080fd5b8201836020820111156103af57600080fd5b803590602001918460018302840111640100000000831117156103d157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610aa6945050505050565b61029a6004803603602081101561042857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610cf9565b61029a6004803603602081101561045b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e27565b610337610ef9565b6101bb610f16565b61029a6004803603606081101561049e57600080fd5b8135916020810135918101906060810160408201356401000000008111156104c557600080fd5b8201836020820111156104d757600080fd5b803590602001918460018302840111640100000000831117156104f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f22945050505050565b6103166004803603602081101561055057600080fd5b503563ffffffff166110c0565b6105656110d9565b6040518082600281111561057557fe5b815260200191505060405180910390f35b61029a6004803603602081101561059c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110fa565b6103376112be565b6101bb6112da565b61029a600480360360208110156105df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112e6565b6101bb611488565b61029a6004803603606081101561061a57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561064757600080fd5b82018360208201111561065957600080fd5b8035906020019184600183028401116401000000008311171561067b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611494945050505050565b6101bb61170a565b6106cc611710565b6040805160ff9092168252519081900360200190f35b60545490565b600260ea5474010000000000000000000000000000000000000000900460ff16600281111561071357fe5b141561078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516020601f86018190048102820181019092528481526107c2918891883591889088908190840183828082843760009201919091525061171592505050565b8015610811575061081186866001602002013584848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061171592505050565b801561082257508435602086013514155b1561093d5761082f6117a7565b7f2c3f60bab4170347826231b75a920b5053941ddebc6eed6fd2c25721648b186f8686868686866040518087815260200186600260200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910182810360409081018252810186905290506020810160608201878780828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910184810383528581526020019050858580828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039a509098505050505050505050a15b505050505050565b60006109526001836118ba565b92915050565b600080610965600161192a565b1561097c5760eb549150610979600161196a565b90505b9091565b60006109ab7f00000000000000000000000000000000000000000000000000000000000000006119a7565b905090565b61080081565b60eb5481565b6109c4611a1c565b73ffffffffffffffffffffffffffffffffffffffff166109e2610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614610a6457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60b85473ffffffffffffffffffffffffffffffffffffffff1690565b6000600260ea5474010000000000000000000000000000000000000000900460ff166002811115610ad357fe5b1415610b4057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b610b4b848484611715565b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2175706461746572207369670000000000000000000000000000000000000000604482015290519081900360640190fd5b60eb548414610c2657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f7420612063757272656e7420757064617465000000000000000000000000604482015290519081900360640190fd5b610c316001846118ba565b610cee57610c3d6117a7565b7f6844fd5e21c932b5197b78ac11bf96e2eaa4e882dd0c88087060cf2065c04ab28484846040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610caa578181015183820152602001610c92565b50505050905090810190601f168015610cd75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1506001610cf2565b5060005b9392505050565b610d01611a1c565b73ffffffffffffffffffffffffffffffffffffffff16610d1f610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614610da157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610daa81611a20565b610e248173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d6020811015610e1d57600080fd5b5051611b0e565b50565b61011c5473ffffffffffffffffffffffffffffffffffffffff163314610eae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f21757064617465724d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b610eb781611b0e565b5060ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b61011c5473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ab600161192a565b600260ea5474010000000000000000000000000000000000000000900460ff166002811115610f4d57fe5b1415610fba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b610fc5838383610aa6565b15610fcf576110bb565b6000610fdb6001611b96565b905082811415610feb5750610ff1565b50610fcf565b8160eb8190555081837f000000000000000000000000000000000000000000000000000000000000000063ffffffff167f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b2846040518080602001828103825283818151815260200191508051906020019080838360005b83811015611080578181015183820152602001611068565b50505050905090810190601f1680156110ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390a45b505050565b61011b6020526000908152604090205463ffffffff1681565b60ea5474010000000000000000000000000000000000000000900460ff1681565b600054610100900460ff16806111135750611113611ccf565b80611121575060005460ff16155b611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff161580156111dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6111e4611ce0565b6111ed82611a20565b61011c54604080517fdf034cd0000000000000000000000000000000000000000000000000000000008152905161128b9273ffffffffffffffffffffffffffffffffffffffff169163df034cd0916004808301926020929190829003018186803b15801561125a57600080fd5b505afa15801561126e573d6000803e3d6000fd5b505050506040513d602081101561128457600080fd5b5051611dfd565b80156112ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b60ea5473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ab6034611f61565b6112ee611a1c565b73ffffffffffffffffffffffffffffffffffffffff1661130c610a8a565b73ffffffffffffffffffffffffffffffffffffffff161461138e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166113fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612e526026913960400191505060405180910390fd5b60b85460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360b880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006109ab600161196a565b600260ea5474010000000000000000000000000000000000000000900460ff1660028111156114bf57fe5b141561152c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b6108008151111561159e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff808416600090815261011b602052604081208054808416600181019094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009091161790556116167f00000000000000000000000000000000000000000000000000000000000000003384888888611f74565b8051602082012090915061162b60348261204a565b61163e6116366112da565b600190612152565b5061164986846121bf565b67ffffffffffffffff16600161165d6106e2565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a60eb54866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156116c75781810151838201526020016116af565b50505050905090810190601f1680156116f45780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b60545481565b600081565b600080611720610980565b8585604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050611761816121d9565b60ea5490915073ffffffffffffffffffffffffffffffffffffffff16611787828561222a565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167402000000000000000000000000000000000000000017905561011c54604080517f5b3c2cbf000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691635b3c2cbf9160248082019260009290919082900301818387803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b505060ea5460405133935073ffffffffffffffffffffffffffffffffffffffff90911691507f98064af315f26d7333ba107ba43a128ec74345f4d4e6f2549840fe092a1c8bce90600090a3565b81546000906fffffffffffffffffffffffffffffffff165b835470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff168111610cee576000818152600185016020526040902054831415611922576001915050610952565b6001016118d2565b80546000906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911661196282826122c4565b949350505050565b805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1660009081526001909101602052604090205490565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020808401919091527f4e4f4d41440000000000000000000000000000000000000000000000000000006024840152815180840360090181526029909301909152815191012090565b3390565b611a29816122de565b611a9457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f21636f6e747261637420757064617465724d616e616765720000000000000000604482015290519081900360640190fd5b61011c805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f958d788fb4c373604cd4c73aa8c592de127d0819b49bb4dc02c8ecd666e965bf9181900360200190a150565b60ea805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a929181900390910190a15050565b80546000906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169116611bce82826122c4565b611c3957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f456d707479000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6fffffffffffffffffffffffffffffffff8116600090815260018501602052604090205492508215611c8a576fffffffffffffffffffffffffffffffff811660009081526001850160205260408120555b83547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166001919091016fffffffffffffffffffffffffffffffff1617909255919050565b6000611cda306122de565b15905090565b600054610100900460ff1680611cf95750611cf9611ccf565b80611d07575060005460ff16155b611d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611dc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611dcc60016122e4565b8015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680611e165750611e16611ccf565b80611e24575060005460ff16155b611e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611ee7612328565b611ef082611b0e565b60ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156112ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b600061095282611f6f61241a565b6128db565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061200557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611fc8565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b602082015463ffffffff116120c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6d65726b6c6520747265652066756c6c00000000000000000000000000000000604482015290519081900360640190fd5b6020820180546001019081905560005b602081101561214f5781600116600114156120fc57828482602081106120f257fe5b0155506112ba9050565b83816020811061210857fe5b01548360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092506002828161214457fe5b0491506001016120d0565b50fe5b81546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009283900482166001019182169092029190911783558115610952576fffffffffffffffffffffffffffffffff8116600090815260019390930160205260409092205590565b63ffffffff1660209190911b67ffffffff00000000161790565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461229c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6122ba86828585612999565b9695505050505050565b60019103016fffffffffffffffffffffffffffffffff1690565b3b151590565b80546fffffffffffffffffffffffffffffffff16610e245780547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600117815550565b600054610100900460ff16806123415750612341611ccf565b8061234f575060005460ff16155b6123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff1615801561240a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b612412612b90565b611dcc612ca2565b612422612e32565b600081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560208201527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3060408201527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8560608201527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934460808201527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d60a08201527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196860c08201527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8360e08201527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6101008201527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06101208201527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56101408201527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926101608201527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6101808201527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6101a08201527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6101c08201527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26101e08201527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6102008201527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6102208201527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06102408201527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06102608201527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26102808201527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96102a08201527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776102c08201527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526102e08201527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6103008201527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6103208201527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06103408201527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6103608201527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6103808201527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226103a08201527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356103c08201527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96103e082015290565b6020820154600090815b602081101561299157600182821c16600086836020811061290257fe5b0154905081600114156129455780856040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209450612987565b8486846020811061295257fe5b602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012094505b50506001016128e5565b505092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612e786022913960400191505060405180910390fd5b8360ff16601b1480612a2957508360ff16601c145b612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612ec86022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ada573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600054610100900460ff1680612ba95750612ba9611ccf565b80612bb7575060005460ff16155b612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611dcc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680612cbb5750612cbb611ccf565b80612cc9575060005460ff16155b612d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015612d8457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000612d8e611a1c565b60b880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b604051806104000160405280602090602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a",
    "sourceMap": "959:13898:63:-:0;;;4026:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4026:59:63;2520:26:65;;;;-1:-1:-1;;;;;;2520:26:65;;;959:13898:63;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101ae5760003560e01c80639df6c8e1116100ee578063df034cd011610097578063f6d1610211610071578063f6d16102146105fc578063fa31de0114610604578063fd54b228146106bc578063ffa1ad74146106c4576101ae565b8063df034cd0146105b9578063ebf0c717146105c1578063f2fde38b146105c9576101ae565b8063b95a2001116100c8578063b95a20011461053a578063c19d93fb1461055d578063c4d66de814610586576101ae565b80639df6c8e114610478578063ab91c7b014610480578063b31c01fb14610488576101ae565b806367a6771d1161015b5780638da5cb5b116101355780638da5cb5b1461032f5780638e4e30e0146103605780639776120e146104125780639d54f41914610445576101ae565b806367a6771d146102fe578063715018a6146103065780638d3638f41461030e576101ae565b806336e104de1161018c57806336e104de146102cd57806345630b1a146102ee578063522ae002146102f6576101ae565b806306661abd146101b357806319d9d21a146101cd5780632bef28921461029c575b600080fd5b6101bb6106e2565b60408051918252519081900360200190f35b61029a600480360360a08110156101e357600080fd5b813591602081019181019060808101606082013564010000000081111561020957600080fd5b82018360208201111561021b57600080fd5b8035906020019184600183028401116401000000008311171561023d57600080fd5b91939092909160208101903564010000000081111561025b57600080fd5b82018360208201111561026d57600080fd5b8035906020019184600183028401116401000000008311171561028f57600080fd5b5090925090506106e8565b005b6102b9600480360360208110156102b257600080fd5b5035610945565b604080519115158252519081900360200190f35b6102d5610958565b6040805192835260208301919091528051918290030190f35b6101bb610980565b6101bb6109b0565b6101bb6109b6565b61029a6109bc565b610316610a66565b6040805163ffffffff9092168252519081900360200190f35b610337610a8a565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b6102b96004803603606081101561037657600080fd5b81359160208101359181019060608101604082013564010000000081111561039d57600080fd5b8201836020820111156103af57600080fd5b803590602001918460018302840111640100000000831117156103d157600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610aa6945050505050565b61029a6004803603602081101561042857600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610cf9565b61029a6004803603602081101561045b57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16610e27565b610337610ef9565b6101bb610f16565b61029a6004803603606081101561049e57600080fd5b8135916020810135918101906060810160408201356401000000008111156104c557600080fd5b8201836020820111156104d757600080fd5b803590602001918460018302840111640100000000831117156104f957600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610f22945050505050565b6103166004803603602081101561055057600080fd5b503563ffffffff166110c0565b6105656110d9565b6040518082600281111561057557fe5b815260200191505060405180910390f35b61029a6004803603602081101561059c57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166110fa565b6103376112be565b6101bb6112da565b61029a600480360360208110156105df57600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166112e6565b6101bb611488565b61029a6004803603606081101561061a57600080fd5b63ffffffff8235169160208101359181019060608101604082013564010000000081111561064757600080fd5b82018360208201111561065957600080fd5b8035906020019184600183028401116401000000008311171561067b57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550611494945050505050565b6101bb61170a565b6106cc611710565b6040805160ff9092168252519081900360200190f35b60545490565b600260ea5474010000000000000000000000000000000000000000900460ff16600281111561071357fe5b141561078057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b604080516020601f86018190048102820181019092528481526107c2918891883591889088908190840183828082843760009201919091525061171592505050565b8015610811575061081186866001602002013584848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061171592505050565b801561082257508435602086013514155b1561093d5761082f6117a7565b7f2c3f60bab4170347826231b75a920b5053941ddebc6eed6fd2c25721648b186f8686868686866040518087815260200186600260200280828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910182810360409081018252810186905290506020810160608201878780828437600083820152601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01690910184810383528581526020019050858580828437600083820152604051601f9091017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169092018290039a509098505050505050505050a15b505050505050565b60006109526001836118ba565b92915050565b600080610965600161192a565b1561097c5760eb549150610979600161196a565b90505b9091565b60006109ab7f00000000000000000000000000000000000000000000000000000000000000006119a7565b905090565b61080081565b60eb5481565b6109c4611a1c565b73ffffffffffffffffffffffffffffffffffffffff166109e2610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614610a6457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b7f000000000000000000000000000000000000000000000000000000000000000081565b60b85473ffffffffffffffffffffffffffffffffffffffff1690565b6000600260ea5474010000000000000000000000000000000000000000900460ff166002811115610ad357fe5b1415610b4057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b610b4b848484611715565b610bb657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f2175706461746572207369670000000000000000000000000000000000000000604482015290519081900360640190fd5b60eb548414610c2657604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f6e6f7420612063757272656e7420757064617465000000000000000000000000604482015290519081900360640190fd5b610c316001846118ba565b610cee57610c3d6117a7565b7f6844fd5e21c932b5197b78ac11bf96e2eaa4e882dd0c88087060cf2065c04ab28484846040518084815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015610caa578181015183820152602001610c92565b50505050905090810190601f168015610cd75780820380516001836020036101000a031916815260200191505b5094505050505060405180910390a1506001610cf2565b5060005b9392505050565b610d01611a1c565b73ffffffffffffffffffffffffffffffffffffffff16610d1f610a8a565b73ffffffffffffffffffffffffffffffffffffffff1614610da157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b610daa81611a20565b610e248173ffffffffffffffffffffffffffffffffffffffff1663df034cd06040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d6020811015610e1d57600080fd5b5051611b0e565b50565b61011c5473ffffffffffffffffffffffffffffffffffffffff163314610eae57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f21757064617465724d616e616765720000000000000000000000000000000000604482015290519081900360640190fd5b610eb781611b0e565b5060ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000179055565b61011c5473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ab600161192a565b600260ea5474010000000000000000000000000000000000000000900460ff166002811115610f4d57fe5b1415610fba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b610fc5838383610aa6565b15610fcf576110bb565b6000610fdb6001611b96565b905082811415610feb5750610ff1565b50610fcf565b8160eb8190555081837f000000000000000000000000000000000000000000000000000000000000000063ffffffff167f608828ad904a0c9250c09004ba7226efb08f35a5c815bb3f76b5a8a271cd08b2846040518080602001828103825283818151815260200191508051906020019080838360005b83811015611080578181015183820152602001611068565b50505050905090810190601f1680156110ad5780820380516001836020036101000a031916815260200191505b509250505060405180910390a45b505050565b61011b6020526000908152604090205463ffffffff1681565b60ea5474010000000000000000000000000000000000000000900460ff1681565b600054610100900460ff16806111135750611113611ccf565b80611121575060005460ff16155b611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff161580156111dc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6111e4611ce0565b6111ed82611a20565b61011c54604080517fdf034cd0000000000000000000000000000000000000000000000000000000008152905161128b9273ffffffffffffffffffffffffffffffffffffffff169163df034cd0916004808301926020929190829003018186803b15801561125a57600080fd5b505afa15801561126e573d6000803e3d6000fd5b505050506040513d602081101561128457600080fd5b5051611dfd565b80156112ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b60ea5473ffffffffffffffffffffffffffffffffffffffff1681565b60006109ab6034611f61565b6112ee611a1c565b73ffffffffffffffffffffffffffffffffffffffff1661130c610a8a565b73ffffffffffffffffffffffffffffffffffffffff161461138e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff81166113fa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526026815260200180612e526026913960400191505060405180910390fd5b60b85460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a360b880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60006109ab600161196a565b600260ea5474010000000000000000000000000000000000000000900460ff1660028111156114bf57fe5b141561152c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6661696c65642073746174650000000000000000000000000000000000000000604482015290519081900360640190fd5b6108008151111561159e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f6d736720746f6f206c6f6e670000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff808416600090815261011b602052604081208054808416600181019094167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000009091161790556116167f00000000000000000000000000000000000000000000000000000000000000003384888888611f74565b8051602082012090915061162b60348261204a565b61163e6116366112da565b600190612152565b5061164986846121bf565b67ffffffffffffffff16600161165d6106e2565b03827f9d4c83d2e57d7d381feb264b44a5015e7f9ef26340f4fc46b558a6dc16dd811a60eb54866040518083815260200180602001828103825283818151815260200191508051906020019080838360005b838110156116c75781810151838201526020016116af565b50505050905090810190601f1680156116f45780820380516001836020036101000a031916815260200191505b50935050505060405180910390a4505050505050565b60545481565b600081565b600080611720610980565b8585604051602001808481526020018381526020018281526020019350505050604051602081830303815290604052805190602001209050611761816121d9565b60ea5490915073ffffffffffffffffffffffffffffffffffffffff16611787828561222a565b73ffffffffffffffffffffffffffffffffffffffff161495945050505050565b60ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167402000000000000000000000000000000000000000017905561011c54604080517f5b3c2cbf000000000000000000000000000000000000000000000000000000008152336004820152905173ffffffffffffffffffffffffffffffffffffffff90921691635b3c2cbf9160248082019260009290919082900301818387803b15801561185957600080fd5b505af115801561186d573d6000803e3d6000fd5b505060ea5460405133935073ffffffffffffffffffffffffffffffffffffffff90911691507f98064af315f26d7333ba107ba43a128ec74345f4d4e6f2549840fe092a1c8bce90600090a3565b81546000906fffffffffffffffffffffffffffffffff165b835470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff168111610cee576000818152600185016020526040902054831415611922576001915050610952565b6001016118d2565b80546000906fffffffffffffffffffffffffffffffff70010000000000000000000000000000000082048116911661196282826122c4565b949350505050565b805470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1660009081526001909101602052604090205490565b6040805160e09290921b7fffffffff00000000000000000000000000000000000000000000000000000000166020808401919091527f4e4f4d41440000000000000000000000000000000000000000000000000000006024840152815180840360090181526029909301909152815191012090565b3390565b611a29816122de565b611a9457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f21636f6e747261637420757064617465724d616e616765720000000000000000604482015290519081900360640190fd5b61011c805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff0000000000000000000000000000000000000000909116811790915560408051918252517f958d788fb4c373604cd4c73aa8c592de127d0819b49bb4dc02c8ecd666e965bf9181900360200190a150565b60ea805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040805191909216808252602082019390935281517f0f20622a7af9e952a6fec654a196f29e04477b5d335772c26902bec35cc9f22a929181900390910190a15050565b80546000906fffffffffffffffffffffffffffffffff700100000000000000000000000000000000820481169116611bce82826122c4565b611c3957604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f456d707479000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6fffffffffffffffffffffffffffffffff8116600090815260018501602052604090205492508215611c8a576fffffffffffffffffffffffffffffffff811660009081526001850160205260408120555b83547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166001919091016fffffffffffffffffffffffffffffffff1617909255919050565b6000611cda306122de565b15905090565b600054610100900460ff1680611cf95750611cf9611ccf565b80611d07575060005460ff16155b611d5c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611dc257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611dcc60016122e4565b8015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680611e165750611e16611ccf565b80611e24575060005460ff16155b611e79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611edf57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b611ee7612328565b611ef082611b0e565b60ea80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000017905580156112ba57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555050565b600061095282611f6f61241a565b6128db565b6060868686868686604051602001808763ffffffff1660e01b81526004018681526020018563ffffffff1660e01b81526004018463ffffffff1660e01b815260040183815260200182805190602001908083835b6020831061200557805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101611fc8565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405290509695505050505050565b602082015463ffffffff116120c057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6d65726b6c6520747265652066756c6c00000000000000000000000000000000604482015290519081900360640190fd5b6020820180546001019081905560005b602081101561214f5781600116600114156120fc57828482602081106120f257fe5b0155506112ba9050565b83816020811061210857fe5b01548360405160200180838152602001828152602001925050506040516020818303038152906040528051906020012092506002828161214457fe5b0491506001016120d0565b50fe5b81546fffffffffffffffffffffffffffffffff8082167001000000000000000000000000000000009283900482166001019182169092029190911783558115610952576fffffffffffffffffffffffffffffffff8116600090815260019390930160205260409092205590565b63ffffffff1660209190911b67ffffffff00000000161790565b604080517f19457468657265756d205369676e6564204d6573736167653a0a333200000000602080830191909152603c8083019490945282518083039094018452605c909101909152815191012090565b6000815160411461229c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015290519081900360640190fd5b60208201516040830151606084015160001a6122ba86828585612999565b9695505050505050565b60019103016fffffffffffffffffffffffffffffffff1690565b3b151590565b80546fffffffffffffffffffffffffffffffff16610e245780547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016600117815550565b600054610100900460ff16806123415750612341611ccf565b8061234f575060005460ff16155b6123a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff1615801561240a57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b612412612b90565b611dcc612ca2565b612422612e32565b600081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb560208201527fb4c11951957c6f8f642c4af61cd6b24640fec6dc7fc607ee8206a99e92410d3060408201527f21ddb9a356815c3fac1026b6dec5df3124afbadb485c9ba5a3e3398a04b7ba8560608201527fe58769b32a1beaf1ea27375a44095a0d1fb664ce2dd358e7fcbfb78c26a1934460808201527f0eb01ebfc9ed27500cd4dfc979272d1f0913cc9f66540d7e8005811109e1cf2d60a08201527f887c22bd8750d34016ac3c66b5ff102dacdd73f6b014e710b51e8022af9a196860c08201527fffd70157e48063fc33c97a050f7f640233bf646cc98d9524c6b92bcf3ab56f8360e08201527f9867cc5f7f196b93bae1e27e6320742445d290f2263827498b54fec539f756af6101008201527fcefad4e508c098b9a7e1d8feb19955fb02ba9675585078710969d3440f5054e06101208201527ff9dc3e7fe016e050eff260334f18a5d4fe391d82092319f5964f2e2eb7c1c3a56101408201527ff8b13a49e282f609c317a833fb8d976d11517c571d1221a265d25af778ecf8926101608201527f3490c6ceeb450aecdc82e28293031d10c7d73bf85e57bf041a97360aa2c5d99c6101808201527fc1df82d9c4b87413eae2ef048f94b4d3554cea73d92b0f7af96e0271c691e2bb6101a08201527f5c67add7c6caf302256adedf7ab114da0acfe870d449a3a489f781d659e8becc6101c08201527fda7bce9f4e8618b6bd2f4132ce798cdc7a60e7e1460a7299e3c6342a579626d26101e08201527f2733e50f526ec2fa19a22b31e8ed50f23cd1fdf94c9154ed3a7609a2f1ff981f6102008201527fe1d3b5c807b281e4683cc6d6315cf95b9ade8641defcb32372f1c126e398ef7a6102208201527f5a2dce0a8a7f68bb74560f8f71837c2c2ebbcbf7fffb42ae1896f13f7c7479a06102408201527fb46a28b6f55540f89444f63de0378e3d121be09e06cc9ded1c20e65876d36aa06102608201527fc65e9645644786b620e2dd2ad648ddfcbf4a7e5b1a3a4ecfe7f64667a3f0b7e26102808201527ff4418588ed35a2458cffeb39b93d26f18d2ab13bdce6aee58e7b99359ec2dfd96102a08201527f5a9c16dc00d6ef18b7933a6f8dc65ccb55667138776f7dea101070dc8796e3776102c08201527f4df84f40ae0c8229d0d6069e5c8f39a7c299677a09d367fc7b05e3bc380ee6526102e08201527fcdc72595f74c7b1043d0e1ffbab734648c838dfb0527d971b602bc216c9619ef6103008201527f0abf5ac974a1ed57f4050aa510dd9c74f508277b39d7973bb2dfccc5eeb0618d6103208201527fb8cd74046ff337f0a7bf2c8e03e10f642c1886798d71806ab1e888d9e5ee87d06103408201527f838c5655cb21c6cb83313b5a631175dff4963772cce9108188b34ac87c81c41e6103608201527f662ee4dd2dd7b2bc707961b1e646c4047669dcb6584f0d8d770daf5d7e7deb2e6103808201527f388ab20e2573d171a88108e79d820e98f26c0b84aa8b2f4aa4968dbb818ea3226103a08201527f93237c50ba75ee485f4c22adf2f741400bdf8d6a9cc7df7ecae576221665d7356103c08201527f8448818bb4ae4562849e949e17ac16e0be16688e156b5cf15e098c627c0056a96103e082015290565b6020820154600090815b602081101561299157600182821c16600086836020811061290257fe5b0154905081600114156129455780856040516020018083815260200182815260200192505050604051602081830303815290604052805190602001209450612987565b8486846020811061295257fe5b602002015160405160200180838152602001828152602001925050506040516020818303038152906040528051906020012094505b50506001016128e5565b505092915050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0821115612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612e786022913960400191505060405180910390fd5b8360ff16601b1480612a2957508360ff16601c145b612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526022815260200180612ec86022913960400191505060405180910390fd5b600060018686868660405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015612ada573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b8757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015290519081900360640190fd5b95945050505050565b600054610100900460ff1680612ba95750612ba9611ccf565b80612bb7575060005460ff16155b612c0c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015611dcc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680612cbb5750612cbb611ccf565b80612cc9575060005460ff16155b612d1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180612e9a602e913960400191505060405180910390fd5b600054610100900460ff16158015612d8457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000612d8e611a1c565b60b880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015610e2457600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b604051806104000160405280602090602082028036833750919291505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345434453413a20696e76616c6964207369676e6174757265202773272076616c7565496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445434453413a20696e76616c6964207369676e6174757265202776272076616c7565a164736f6c6343000706000a",
    "sourceMap": "959:13898:63:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;885:81:64;;;:::i;:::-;;;;;;;;;;;;;;;;10420:521:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10420:521:63;;-1:-1:-1;10420:521:63;-1:-1:-1;10420:521:63;:::i;:::-;;1150:112:66;;;;;;;;;;;;;;;;-1:-1:-1;1150:112:66;;:::i;:::-;;;;;;;;;;;;;;;;;;9562:247:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11076:117;;;:::i;1287:58::-;;;:::i;1537:28:65:-;;;:::i;4488:84::-;;;:::i;1266:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1335:85:7;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12679:756:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12679:756:63;;-1:-1:-1;12679:756:63;;-1:-1:-1;;;;;12679:756:63:i;5800:205::-;;;;;;;;;;;;;;;;-1:-1:-1;5800:205:63;;;;:::i;5161:220::-;;;;;;;;;;;;;;;;-1:-1:-1;5161:220:63;;;;:::i;1580:37::-;;;:::i;979:93:66:-;;;:::i;8470:734:63:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8470:734:63;;-1:-1:-1;8470:734:63;;-1:-1:-1;;;;;8470:734:63:i;1464:39::-;;;;;;;;;;;;;;;;-1:-1:-1;1464:39:63;;;;:::i;1453:19:65:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4177:284:63;;;;;;;;;;;;;;;;-1:-1:-1;4177:284:63;;;;:::i;1392:22:65:-;;;:::i;701:81:64:-;;;:::i;2261:240:7:-;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;1339:92:66:-;;;:::i;6511:1287:63:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6511:1287:63;;-1:-1:-1;6511:1287:63;;-1:-1:-1;;;;;6511:1287:63:i;435:26:64:-;;;:::i;171:33:68:-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;885:81:64;949:10;;885:81;:::o;10420:521:63:-;4879:13;4870:5;;;;;;;:22;;;;;;;;;;4862:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10629:64:::1;::::0;;10669:11:::1;10629:64;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;;::::1;::::0;10659:8;;10669:11;::::1;::::0;10682:10;;;;;;10629:64;::::1;10682:10:::0;;;;10629:64;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;10629:29:63::1;::::0;-1:-1:-1;;;10629:64:63:i:1;:::-;:145;;;;-1:-1:-1::0;10709:65:63::1;10739:8:::0;10749;10758:1:::1;10749:11;;;;10762;;10709:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;10709:29:63::1;::::0;-1:-1:-1;;;10709:65:63:i:1;:::-;10629:187;;;;-1:-1:-1::0;10790:11:63;::::1;10805;::::0;::::1;;10790:26;;10629:187;10612:323;;;10841:7;:5;:7::i;:::-;10867:57;10880:8;10890;10900:10;;10912:11;;10867:57;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;::::1;;::::0;::::1;::::0;;::::1;::::0;;;;;;;;;;;;;;;-1:-1:-1;10867:57:63::1;::::0;::::1;::::0;;;;;;;;::::1;;::::0;;::::1;::::0;::::1;;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;;::::0;-1:-1:-1;10867:57:63;;;;;::::1;;::::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;10867:57:63;;-1:-1:-1;;;;;;;;;10867:57:63::1;10612:323;10420:521:::0;;;;;;:::o;1150:112:66:-;1211:4;1234:21;:5;1249;1234:14;:21::i;:::-;1227:28;1150:112;-1:-1:-1;;1150:112:66:o;9562:247:63:-;9634:22;9658:12;9690:14;:5;:12;:14::i;:::-;:19;9686:117;;9742:13;;9725:30;;9776:16;:5;:14;:16::i;:::-;9769:23;;9686:117;9562:247;;:::o;11076:117::-;11132:7;11158:28;11174:11;11158:15;:28::i;:::-;11151:35;;11076:117;:::o;1287:58::-;1336:9;1287:58;:::o;1537:28:65:-;;;;:::o;4488:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4488:84:65:o;1266:35::-;;;:::o;1335:85:7:-;1407:6;;;;1335:85;:::o;12679:756:63:-;12820:4;4879:13;4870:5;;;;;;;:22;;;;;;;;;;4862:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12857:51:::1;12877:8;12887;12897:10;12857:19;:51::i;:::-;12836:110;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12976:13;;12964:8;:25;12956:58;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;13163:24;:5;13178:8:::0;13163:14:::1;:24::i;:::-;13158:153;;13203:7;:5;:7::i;:::-;13229:46;13244:8;13254;13264:10;13229:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;13296:4:63::1;13289:11;;13158:153;-1:-1:-1::0;13423:5:63::1;4919:1;12679:756:::0;;;;;:::o;5800:205::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5881:52:63::1;5916:15;5881:18;:52::i;:::-;5943:55;5971:15;5955:40;;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;5955:42:63;5943:11:::1;:55::i;:::-;5800:205:::0;:::o;5161:220::-;4675:14;;;;4653:10;:37;4645:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5237:21:::1;5249:8;5237:11;:21::i;:::-;-1:-1:-1::0;5353:5:63::1;:21:::0;;;::::1;::::0;::::1;::::0;;5161:220::o;1580:37::-;;;;;;:::o;979:93:66:-;1025:7;1051:14;:5;:12;:14::i;8470:734:63:-;4879:13;4870:5;;;;;;;:22;;;;;;;;;;4862:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8750:52:::1;8765:14;8781:8;8791:10;8750:14;:52::i;:::-;8746:65;;;8804:7;;8746:65;8934:13;8950:15;:5;:13;:15::i;:::-;8934:31;;8992:8;8983:5;:17;8979:28;;;9002:5;;;8979:28;8907:111;;;;9117:8;9101:13;:24;;;;9176:8;9160:14;9147:11;9140:57;;;9186:10;9140:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4919:1;8470:734:::0;;;:::o;1464:39::-;;;;;;;;;;;;;;;:::o;1453:19:65:-;;;;;;;;;:::o;4177:284:63:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;4324:27:63::1;:25;:27::i;:::-;4361:35;4380:15;4361:18;:35::i;:::-;4429:14;::::0;:24:::1;::::0;;;;;;;4406:48:::1;::::0;4429:14:::1;;::::0;:22:::1;::::0;:24:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;:14;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4429:24:63;4406:22:::1;:48::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;4177:284:63;;:::o;1392:22:65:-;;;;;;:::o;701:81:64:-;738:7;764:11;:4;:9;:11::i;2261:240:7:-;1558:12;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2349:22:::1;::::0;::::1;2341:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2450:6;::::0;2429:38:::1;::::0;::::1;::::0;;::::1;::::0;2450:6:::1;::::0;2429:38:::1;::::0;2450:6:::1;::::0;2429:38:::1;2477:6;:17:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2261:240::o;1339:92:66:-;1382:7;1408:16;:5;:14;:16::i;6511:1287:63:-;4879:13;4870:5;;;;;;;:22;;;;;;;;;;4862:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1336:9:::1;6677:12;:19;:45;;6669:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;6841:26;::::0;;::::1;6825:13;6841:26:::0;;;:6:::1;:26;::::0;;;;;;;;::::1;::::0;6906:10;::::1;6877:39:::0;;::::1;::::0;;;::::1;;::::0;;6998:216:::1;7033:11;7082:10;6841:26:::0;6848:18;7161:17;7192:12;6998:21:::1;:216::i;:::-;7305:19:::0;;::::1;::::0;::::1;::::0;6974:240;;-1:-1:-1;7334:25:63::1;:4;7305:19:::0;7334:11:::1;:25::i;:::-;7436:21;7450:6;:4;:6::i;:::-;7436:5;::::0;:13:::1;:21::i;:::-;;7684:48;7705:18;7725:6;7684:20;:48::i;:::-;7611:180;;7669:1;7659:7;:5;:7::i;:::-;:11;7633:12;7611:180;7746:13;;7773:8;7611:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4919:1;;;6511:1287:::0;;;:::o;435:26:64:-;;;;:::o;171:33:68:-;203:1;171:33;:::o;3903:392:65:-;4046:4;4062:15;4120:16;:14;:16::i;:::-;4138:8;4148;4103:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4080:87;;;;;;4062:105;;4187:37;4216:7;4187:28;:37::i;:::-;4280:7;;4177:47;;-1:-1:-1;4280:7:65;;4242:34;4177:47;4265:10;4242:13;:34::i;:::-;:45;;;;3903:392;-1:-1:-1;;;;;3903:392:65:o;14091:222:63:-;14161:5;:21;;;;;;;;14217:14;;:39;;;;;;14245:10;14217:39;;;;;;:14;;;;;:27;;:39;;;;;-1:-1:-1;;14217:39:63;;;;;;;;-1:-1:-1;14217:14:63;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14286:7:63;;14271:35;;14295:10;;-1:-1:-1;14271:35:63;14286:7;;;;-1:-1:-1;14271:35:63;;14286:7;;14271:35;14091:222::o;3510:286:74:-;3645:8;;3608:4;;3645:8;;3628:140;3660:7;;;;;;;3655:12;;3628:140;;3692:11;;;;:8;;;:11;;;;;;:20;;3688:70;;;3739:4;3732:11;;;;;3688:70;3669:3;;3628:140;;4514:234;4606:7;;4571;;4606;;;;;;;4640:8;4719:22;4606:7;4640:8;4719:7;:22::i;:::-;4712:29;4514:234;-1:-1:-1;;;;4514:234:74:o;3892:109::-;3986:7;;;;;;;3951;3977:17;;;:8;;;;:17;;;;;;;3892:109::o;3155:178:65:-;3287:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3277:49;;;;;;3155:178::o;828:104:18:-;915:10;828:104;:::o;13609:319:63:-;13710:44;13737:15;13710:18;:44::i;:::-;13689:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13814:14;:49;;;;;;;;;;;;;;13878:43;;;;;;;;;;;;;;;;13609:319;:::o;3439:179:65:-;3522:7;;;;3539:21;;;;;;;;;;;3575:36;;;3522:7;;;;3575:36;;;;;;;;;;;;;;;;;;;;;;;3439:179;;:::o;1458:391:74:-;1552:7;;1511:13;;1552:7;;;;;;;1586:8;1612:22;1552:7;1586:8;1612:7;:22::i;:::-;1604:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1667:16;;;;;;;:8;;;:16;;;;;;;-1:-1:-1;1697:19:74;;1693:119;;1785:16;;;;;;;:8;;;:16;;;;;1778:23;1693:119;1821:21;;;;1841:1;1832:10;;;;1821:21;;;;;;1458:391;;-1:-1:-1;1458:391:74:o;1952:123:11:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;762:93:66:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;830:18:66::1;:5;:16;:18::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;762:93:66;:::o;2605:166:65:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;2686:16:65::1;:14;:16::i;:::-;2712:21;2724:8;2712:11;:21::i;:::-;2743:5;:21:::0;;;::::1;::::0;::::1;::::0;;1790:66:11;;;;1840:5;1824:21;;;;;;2605:166:65;;:::o;2293:122:72:-;2350:7;2376:32;2388:5;2395:12;:10;:12::i;:::-;2376:11;:32::i;979:482:73:-;1207:12;1284:13;1315:7;1340:6;1364:18;1400:10;1428:12;1250:204;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1231:223;;979:482;;;;;;;;:::o;799:648:72:-;340:2;877:11;;;387:17;-1:-1:-1;869:53:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;933:11;;;:16;;948:1;933:16;;;;;:11;995:262;340:2;1015:1;:14;995:262;;;1055:4;1062:1;1055:8;1068:1;1054:15;1050:101;;;1107:5;1089;1102:1;1089:15;;;;;;;;:23;-1:-1:-1;1130:7:72;;-1:-1:-1;1130:7:72;1050:101;1199:5;1212:1;1199:15;;;;;;;;;1216:5;1182:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1172:51;;;;;;1164:59;;1245:1;1237:9;;;;;;;;-1:-1:-1;1031:3:72;;995:262;;;-1:-1:-1;1427:13:72;1006:291:74;1127:7;;;1148:15;;;1127:7;;;;;;;1137:1;1127:11;1148:15;;;;;;;;;;;;1177:19;;1173:118;;1257:15;;;;;;;:8;;;;;:15;;;;;;:23;:15;1006:291::o;14669:186:63:-;14811:37;;14836:2;14812:26;;;;;;14811:37;;14669:186::o;3638:265:23:-;3837:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3827:69;;;;;;3638:265::o;1072:740::-;1150:7;1211:9;:16;1231:2;1211:22;1207:94;;1249:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1207:94;1651:4;1636:20;;1630:27;1696:4;1681:20;;1675:27;1749:4;1734:20;;1728:27;1367:9;1720:36;1783:22;1791:4;1720:36;1630:27;1675;1783:7;:22::i;:::-;1776:29;1072:740;-1:-1:-1;;;;;;1072:740:23:o;4844:159:74:-;4985:1;4977:18;;;4969:27;;;4844:159::o;726:413:29:-;1086:20;1124:8;;;726:413::o;719:119:74:-;780:8;;;;776:56;;809:12;;;;820:1;809:12;;;719:119;:::o;935:126:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;992:26:7::1;:24;:26::i;:::-;1028;:24;:26::i;2533:992:72:-:0;2602:34;;:::i;:::-;2665:3;2652:16;;2691:3;2652:10;2678;;:16;2717:3;2704:10;;;:16;2743:3;2730:10;;;:16;2769:3;2756:10;;;:16;2795:3;2782:10;;;:16;2821:3;2808:10;;;:16;2847:3;2834:10;;;:16;2873:3;2860:10;;;:16;2899:3;2886:10;;;:16;2926:4;2912:11;;;:18;2954:4;2940:11;;;:18;2982:4;2968:11;;;:18;3010:4;2996:11;;;:18;3038:4;3024:11;;;:18;3066:4;3052:11;;;:18;3094:4;3080:11;;;:18;3122:4;3108:11;;;:18;3150:4;3136:11;;;:18;3178:4;3164:11;;;:18;3206:4;3192:11;;;:18;3234:4;3220:11;;;:18;3262:4;3248:11;;;:18;3290:4;3276:11;;;:18;3318:4;3304:11;;;:18;3346:4;3332:11;;;:18;3374:4;3360:11;;;:18;3402:4;3388:11;;;:18;3430:4;3416:11;;;:18;3458:4;3444:11;;;:18;3486:4;3472:11;;;:18;3514:4;3500:11;;;:18;2652:7;2533:992::o;1658:568::-;1831:11;;;;1782:16;;;1853:367;340:2;1873:1;:14;1853:367;;;1942:4;1927:11;;;1926:20;1908:15;1976:5;1937:1;1976:15;;;;;;;;;1960:31;;2009:7;2020:1;2009:12;2005:205;;;2079:5;2086:8;2062:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2052:44;;;;;;2041:55;;2005:205;;;2173:8;2183:7;2191:1;2183:10;;;;;;;;;;;2156:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2146:49;;;;;;2135:60;;2005:205;-1:-1:-1;;1889:3:72;;1853:367;;;;1658:568;;;;;:::o;1960:1414:23:-;2045:7;2960:66;2946:80;;;2938:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3083:1;:7;;3088:2;3083:7;:18;;;;3094:1;:7;;3099:2;3094:7;3083:18;3075:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3235:14;3252:24;3262:4;3268:1;3271;3274;3252:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3252:24:23;;;;;;-1:-1:-1;;3294:20:23;;;3286:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3361:6;1960:1414;-1:-1:-1;;;;;1960:1414:23:o;759:64:18:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1794:14;1790:66;;;1840:5;1824:21;;;;;;759:64:18;:::o;1067:192:7:-;1512:13:11;;;;;;;;:33;;;1529:16;:14;:16::i;:::-;1512:50;;;-1:-1:-1;1550:12:11;;;;1549:13;1512:50;1504:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1624:19;1647:13;;;;;;1646:14;1670:98;;;;1704:13;:20;;1738:19;1704:20;;;;;;1738:19;1720:4;1738:19;;;1670:98;1134:17:7::1;1154:12;:10;:12::i;:::-;1176:6;:18:::0;;;::::1;;::::0;::::1;::::0;;::::1;::::0;;;1209:43:::1;::::0;1176:18;;-1:-1:-1;1176:18:7;-1:-1:-1;;1209:43:7::1;::::0;-1:-1:-1;;1209:43:7::1;1778:1:11;1794:14:::0;1790:66;;;1840:5;1824:21;;;;;;1067:192:7;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o",
    "linkReferences": {},
    "immutableReferences": {
      "43847": [
        {
          "start": 2439,
          "length": 32
        },
        {
          "start": 2664,
          "length": 32
        },
        {
          "start": 4092,
          "length": 32
        },
        {
          "start": 5613,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "MAX_MESSAGE_BODY_BYTES()": "522ae002",
    "VERSION()": "ffa1ad74",
    "committedRoot()": "67a6771d",
    "count()": "06661abd",
    "dispatch(uint32,bytes32,bytes)": "fa31de01",
    "doubleUpdate(bytes32,bytes32[2],bytes,bytes)": "19d9d21a",
    "homeDomainHash()": "45630b1a",
    "improperUpdate(bytes32,bytes32,bytes)": "8e4e30e0",
    "initialize(address)": "c4d66de8",
    "localDomain()": "8d3638f4",
    "nonces(uint32)": "b95a2001",
    "owner()": "8da5cb5b",
    "queueContains(bytes32)": "2bef2892",
    "queueEnd()": "f6d16102",
    "queueLength()": "ab91c7b0",
    "renounceOwnership()": "715018a6",
    "root()": "ebf0c717",
    "setUpdater(address)": "9d54f419",
    "setUpdaterManager(address)": "9776120e",
    "state()": "c19d93fb",
    "suggestUpdate()": "36e104de",
    "transferOwnership(address)": "f2fde38b",
    "tree()": "fd54b228",
    "update(bytes32,bytes32,bytes)": "b31c01fb",
    "updater()": "df034cd0",
    "updaterManager()": "9df6c8e1"
  },
  "ast": {
    "absolutePath": "packages/contracts-core/contracts/Home.sol",
    "id": 43791,
    "exportedSymbols": {
      "Address": [
        28026
      ],
      "Home": [
        43790
      ],
      "IUpdaterManager": [
        45047
      ],
      "MerkleLib": [
        45604
      ],
      "MerkleTreeManager": [
        43826
      ],
      "Message": [
        45831
      ],
      "NomadBase": [
        43998
      ],
      "QueueLib": [
        46241
      ],
      "QueueManager": [
        44064
      ],
      "Version0": [
        44622
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:14812:63",
    "nodes": [
      {
        "id": 43239,
        "nodeType": "PragmaDirective",
        "src": "46:22:63",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 43241,
        "nodeType": "ImportDirective",
        "src": "116:40:63",
        "absolutePath": "packages/contracts-core/contracts/Version0.sol",
        "file": "./Version0.sol",
        "scope": 43791,
        "sourceUnit": 44623,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43240,
              "name": "Version0",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "124:8:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43243,
        "nodeType": "ImportDirective",
        "src": "157:42:63",
        "absolutePath": "packages/contracts-core/contracts/NomadBase.sol",
        "file": "./NomadBase.sol",
        "scope": 43791,
        "sourceUnit": 43999,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43242,
              "name": "NomadBase",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "165:9:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43245,
        "nodeType": "ImportDirective",
        "src": "200:42:63",
        "absolutePath": "packages/contracts-core/contracts/libs/Queue.sol",
        "file": "./libs/Queue.sol",
        "scope": 43791,
        "sourceUnit": 46242,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43244,
              "name": "QueueLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "208:8:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43247,
        "nodeType": "ImportDirective",
        "src": "243:44:63",
        "absolutePath": "packages/contracts-core/contracts/libs/Merkle.sol",
        "file": "./libs/Merkle.sol",
        "scope": 43791,
        "sourceUnit": 45605,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43246,
              "name": "MerkleLib",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "251:9:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43249,
        "nodeType": "ImportDirective",
        "src": "288:43:63",
        "absolutePath": "packages/contracts-core/contracts/libs/Message.sol",
        "file": "./libs/Message.sol",
        "scope": 43791,
        "sourceUnit": 45832,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43248,
              "name": "Message",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "296:7:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43251,
        "nodeType": "ImportDirective",
        "src": "332:47:63",
        "absolutePath": "packages/contracts-core/contracts/Merkle.sol",
        "file": "./Merkle.sol",
        "scope": 43791,
        "sourceUnit": 43827,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43250,
              "name": "MerkleTreeManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "340:17:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43253,
        "nodeType": "ImportDirective",
        "src": "380:41:63",
        "absolutePath": "packages/contracts-core/contracts/Queue.sol",
        "file": "./Queue.sol",
        "scope": 43791,
        "sourceUnit": 44065,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43252,
              "name": "QueueManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "388:12:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43255,
        "nodeType": "ImportDirective",
        "src": "422:65:63",
        "absolutePath": "packages/contracts-core/contracts/interfaces/IUpdaterManager.sol",
        "file": "./interfaces/IUpdaterManager.sol",
        "scope": 43791,
        "sourceUnit": 45048,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43254,
              "name": "IUpdaterManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "430:15:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43257,
        "nodeType": "ImportDirective",
        "src": "534:66:63",
        "absolutePath": "node_modules/@openzeppelin/contracts/utils/Address.sol",
        "file": "@openzeppelin/contracts/utils/Address.sol",
        "scope": 43791,
        "sourceUnit": 28027,
        "symbolAliases": [
          {
            "foreign": {
              "id": 43256,
              "name": "Address",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "542:7:63",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 43790,
        "nodeType": "ContractDefinition",
        "src": "959:13898:63",
        "nodes": [
          {
            "id": 43269,
            "nodeType": "UsingForDirective",
            "src": "1079:34:63",
            "libraryName": {
              "id": 43267,
              "name": "QueueLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 46241,
              "src": "1085:8:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_QueueLib_$46241",
                "typeString": "library QueueLib"
              }
            },
            "typeName": {
              "id": 43268,
              "name": "QueueLib.Queue",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45843,
              "src": "1098:14:63",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Queue_$45843_storage_ptr",
                "typeString": "struct QueueLib.Queue"
              }
            }
          },
          {
            "id": 43272,
            "nodeType": "UsingForDirective",
            "src": "1118:35:63",
            "libraryName": {
              "id": 43270,
              "name": "MerkleLib",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45604,
              "src": "1124:9:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MerkleLib_$45604",
                "typeString": "library MerkleLib"
              }
            },
            "typeName": {
              "id": 43271,
              "name": "MerkleLib.Tree",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45067,
              "src": "1138:14:63",
              "typeDescriptions": {
                "typeIdentifier": "t_struct$_Tree_$45067_storage_ptr",
                "typeString": "struct MerkleLib.Tree"
              }
            }
          },
          {
            "id": 43279,
            "nodeType": "VariableDeclaration",
            "src": "1287:58:63",
            "constant": true,
            "functionSelector": "522ae002",
            "mutability": "constant",
            "name": "MAX_MESSAGE_BODY_BYTES",
            "scope": 43790,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 43273,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1287:7:63",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "value": {
              "commonType": {
                "typeIdentifier": "t_rational_2048_by_1",
                "typeString": "int_const 2048"
              },
              "id": 43278,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "lValueRequested": false,
              "leftExpression": {
                "hexValue": "32",
                "id": 43274,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1336:1:63",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_2_by_1",
                  "typeString": "int_const 2"
                },
                "value": "2"
              },
              "nodeType": "BinaryOperation",
              "operator": "*",
              "rightExpression": {
                "commonType": {
                  "typeIdentifier": "t_rational_1024_by_1",
                  "typeString": "int_const 1024"
                },
                "id": 43277,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "lValueRequested": false,
                "leftExpression": {
                  "hexValue": "32",
                  "id": 43275,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1340:1:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_2_by_1",
                    "typeString": "int_const 2"
                  },
                  "value": "2"
                },
                "nodeType": "BinaryOperation",
                "operator": "**",
                "rightExpression": {
                  "hexValue": "3130",
                  "id": 43276,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1343:2:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_rational_10_by_1",
                    "typeString": "int_const 10"
                  },
                  "value": "10"
                },
                "src": "1340:5:63",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_1024_by_1",
                  "typeString": "int_const 1024"
                }
              },
              "src": "1336:9:63",
              "typeDescriptions": {
                "typeIdentifier": "t_rational_2048_by_1",
                "typeString": "int_const 2048"
              }
            },
            "visibility": "public"
          },
          {
            "id": 43283,
            "nodeType": "VariableDeclaration",
            "src": "1464:39:63",
            "constant": false,
            "functionSelector": "b95a2001",
            "mutability": "mutable",
            "name": "nonces",
            "scope": 43790,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
              "typeString": "mapping(uint32 => uint32)"
            },
            "typeName": {
              "id": 43282,
              "keyType": {
                "id": 43280,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "1472:6:63",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              },
              "nodeType": "Mapping",
              "src": "1464:25:63",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                "typeString": "mapping(uint32 => uint32)"
              },
              "valueType": {
                "id": 43281,
                "name": "uint32",
                "nodeType": "ElementaryTypeName",
                "src": "1482:6:63",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint32",
                  "typeString": "uint32"
                }
              }
            },
            "visibility": "public"
          },
          {
            "id": 43285,
            "nodeType": "VariableDeclaration",
            "src": "1580:37:63",
            "constant": false,
            "functionSelector": "9df6c8e1",
            "mutability": "mutable",
            "name": "updaterManager",
            "scope": 43790,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
              "typeString": "contract IUpdaterManager"
            },
            "typeName": {
              "id": 43284,
              "name": "IUpdaterManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 45047,
              "src": "1580:15:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                "typeString": "contract IUpdaterManager"
              }
            },
            "visibility": "public"
          },
          {
            "id": 43289,
            "nodeType": "VariableDeclaration",
            "src": "1700:25:63",
            "constant": false,
            "mutability": "mutable",
            "name": "__GAP",
            "scope": 43790,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_uint256_$48_storage",
              "typeString": "uint256[48]"
            },
            "typeName": {
              "baseType": {
                "id": 43286,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1700:7:63",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              },
              "id": 43288,
              "length": {
                "hexValue": "3438",
                "id": 43287,
                "isConstant": false,
                "isLValue": false,
                "isPure": true,
                "kind": "number",
                "lValueRequested": false,
                "nodeType": "Literal",
                "src": "1708:2:63",
                "typeDescriptions": {
                  "typeIdentifier": "t_rational_48_by_1",
                  "typeString": "int_const 48"
                },
                "value": "48"
              },
              "nodeType": "ArrayTypeName",
              "src": "1700:11:63",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_uint256_$48_storage_ptr",
                "typeString": "uint256[48]"
              }
            },
            "visibility": "private"
          },
          {
            "id": 43302,
            "nodeType": "EventDefinition",
            "src": "2321:191:63",
            "anonymous": false,
            "documentation": {
              "id": 43290,
              "nodeType": "StructuredDocumentation",
              "src": "1773:543:63",
              "text": " @notice Emitted when a new message is dispatched via Nomad\n @param messageHash Hash of message; the leaf inserted to the Merkle tree\n        for the message\n @param leafIndex Index of message's leaf in merkle tree\n @param destinationAndNonce Destination and destination-specific\n        nonce combined in single field ((destination << 32) & nonce)\n @param committedRoot the latest notarized root submitted in the last\n        signed Update\n @param message Raw bytes of message"
            },
            "name": "Dispatch",
            "parameters": {
              "id": 43301,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43292,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "messageHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 43302,
                  "src": "2345:27:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43291,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2345:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43294,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "leafIndex",
                  "nodeType": "VariableDeclaration",
                  "scope": 43302,
                  "src": "2382:25:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 43293,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2382:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43296,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "destinationAndNonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 43302,
                  "src": "2417:34:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 43295,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2417:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43298,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43302,
                  "src": "2461:21:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43297,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2461:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43300,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "scope": 43302,
                  "src": "2492:13:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43299,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2492:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2335:176:63"
            }
          },
          {
            "id": 43311,
            "nodeType": "EventDefinition",
            "src": "2819:72:63",
            "anonymous": false,
            "documentation": {
              "id": 43303,
              "nodeType": "StructuredDocumentation",
              "src": "2518:296:63",
              "text": " @notice Emitted when proof of an improper update is submitted,\n which sets the contract to FAILED state\n @param oldRoot Old root of the improper update\n @param newRoot New root of the improper update\n @param signature Signature on `oldRoot` and `newRoot"
            },
            "name": "ImproperUpdate",
            "parameters": {
              "id": 43310,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43305,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43311,
                  "src": "2840:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43304,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2840:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43307,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43311,
                  "src": "2857:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43306,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "2857:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43309,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 43311,
                  "src": "2874:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43308,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "2874:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2839:51:63"
            }
          },
          {
            "id": 43324,
            "nodeType": "EventDefinition",
            "src": "3291:129:63",
            "anonymous": false,
            "documentation": {
              "id": 43312,
              "nodeType": "StructuredDocumentation",
              "src": "2897:389:63",
              "text": " @notice Emitted when proof of a double update is submitted,\n which sets the contract to FAILED state\n @param oldRoot Old root shared between two conflicting updates\n @param newRoot Array containing two conflicting new roots\n @param signature Signature on `oldRoot` and `newRoot`[0]\n @param signature2 Signature on `oldRoot` and `newRoot`[1]"
            },
            "name": "DoubleUpdate",
            "parameters": {
              "id": 43323,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43314,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43324,
                  "src": "3319:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43313,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3319:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43318,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43324,
                  "src": "3344:18:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$2_memory_ptr",
                    "typeString": "bytes32[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 43315,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3344:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 43317,
                    "length": {
                      "hexValue": "32",
                      "id": 43316,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3352:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "3344:10:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
                      "typeString": "bytes32[2]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43320,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 43324,
                  "src": "3372:15:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43319,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3372:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43322,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "signature2",
                  "nodeType": "VariableDeclaration",
                  "scope": 43324,
                  "src": "3397:16:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43321,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "3397:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3309:110:63"
            }
          },
          {
            "id": 43331,
            "nodeType": "EventDefinition",
            "src": "3698:72:63",
            "anonymous": false,
            "documentation": {
              "id": 43325,
              "nodeType": "StructuredDocumentation",
              "src": "3426:267:63",
              "text": " @notice Emitted when the Updater is slashed\n (should be paired with ImproperUpdater or DoubleUpdate event)\n @param updater The address of the updater\n @param reporter The address of the entity that reported the updater misbehavior"
            },
            "name": "UpdaterSlashed",
            "parameters": {
              "id": 43330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43327,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 43331,
                  "src": "3719:23:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43326,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3719:7:63",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43329,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "reporter",
                  "nodeType": "VariableDeclaration",
                  "scope": 43331,
                  "src": "3744:24:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43328,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3744:7:63",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3718:51:63"
            }
          },
          {
            "id": 43336,
            "nodeType": "EventDefinition",
            "src": "3926:48:63",
            "anonymous": false,
            "documentation": {
              "id": 43332,
              "nodeType": "StructuredDocumentation",
              "src": "3776:145:63",
              "text": " @notice Emitted when the UpdaterManager contract is changed\n @param updaterManager The address of the new updaterManager"
            },
            "name": "NewUpdaterManager",
            "parameters": {
              "id": 43335,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43334,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "updaterManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 43336,
                  "src": "3950:22:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43333,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3950:7:63",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3949:24:63"
            }
          },
          {
            "id": 43345,
            "nodeType": "FunctionDefinition",
            "src": "4026:59:63",
            "body": {
              "id": 43344,
              "nodeType": "Block",
              "src": "4083:2:63",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 43341,
                    "name": "_localDomain",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 43338,
                    "src": "4069:12:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  }
                ],
                "id": 43342,
                "modifierName": {
                  "id": 43340,
                  "name": "NomadBase",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43998,
                  "src": "4059:9:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_NomadBase_$43998_$",
                    "typeString": "type(contract NomadBase)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4059:23:63"
              }
            ],
            "name": "",
            "parameters": {
              "id": 43339,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43338,
                  "mutability": "mutable",
                  "name": "_localDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 43345,
                  "src": "4038:19:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 43337,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4038:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4037:21:63"
            },
            "returnParameters": {
              "id": 43343,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4083:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 43366,
            "nodeType": "FunctionDefinition",
            "src": "4177:284:63",
            "body": {
              "id": 43365,
              "nodeType": "Block",
              "src": "4249:212:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 43352,
                      "name": "__QueueManager_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44027,
                      "src": "4324:25:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 43353,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4324:27:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43354,
                  "nodeType": "ExpressionStatement",
                  "src": "4324:27:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 43356,
                        "name": "_updaterManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43347,
                        "src": "4380:15:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                          "typeString": "contract IUpdaterManager"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                          "typeString": "contract IUpdaterManager"
                        }
                      ],
                      "id": 43355,
                      "name": "_setUpdaterManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43745,
                      "src": "4361:18:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IUpdaterManager_$45047_$returns$__$",
                        "typeString": "function (contract IUpdaterManager)"
                      }
                    },
                    "id": 43357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4361:35:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43358,
                  "nodeType": "ExpressionStatement",
                  "src": "4361:35:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "id": 43360,
                            "name": "updaterManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43285,
                            "src": "4429:14:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                              "typeString": "contract IUpdaterManager"
                            }
                          },
                          "id": 43361,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "updater",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45046,
                          "src": "4429:22:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 43362,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4429:24:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 43359,
                      "name": "__NomadBase_initialize",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43905,
                      "src": "4406:22:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 43363,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4406:48:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43364,
                  "nodeType": "ExpressionStatement",
                  "src": "4406:48:63"
                }
              ]
            },
            "functionSelector": "c4d66de8",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43350,
                "modifierName": {
                  "id": 43349,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23659,
                  "src": "4237:11:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4237:11:63"
              }
            ],
            "name": "initialize",
            "parameters": {
              "id": 43348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43347,
                  "mutability": "mutable",
                  "name": "_updaterManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 43366,
                  "src": "4197:31:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                    "typeString": "contract IUpdaterManager"
                  },
                  "typeName": {
                    "id": 43346,
                    "name": "IUpdaterManager",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 45047,
                    "src": "4197:15:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                      "typeString": "contract IUpdaterManager"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4196:33:63"
            },
            "returnParameters": {
              "id": 43351,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4249:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 43382,
            "nodeType": "ModifierDefinition",
            "src": "4605:123:63",
            "body": {
              "id": 43381,
              "nodeType": "Block",
              "src": "4635:93:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 43376,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 43370,
                            "name": "msg",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -15,
                            "src": "4653:3:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_message",
                              "typeString": "msg"
                            }
                          },
                          "id": 43371,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sender",
                          "nodeType": "MemberAccess",
                          "src": "4653:10:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address_payable",
                            "typeString": "address payable"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "arguments": [
                            {
                              "id": 43374,
                              "name": "updaterManager",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43285,
                              "src": "4675:14:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                                "typeString": "contract IUpdaterManager"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                                "typeString": "contract IUpdaterManager"
                              }
                            ],
                            "id": 43373,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "4667:7:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 43372,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "4667:7:63",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 43375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "4667:23:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "4653:37:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21757064617465724d616e61676572",
                        "id": 43377,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4692:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_b5d14fabfe363d6fdb7137821583ec04f453f7521c6af70ec7c2fb050c5e8ca8",
                          "typeString": "literal_string \"!updaterManager\""
                        },
                        "value": "!updaterManager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_b5d14fabfe363d6fdb7137821583ec04f453f7521c6af70ec7c2fb050c5e8ca8",
                          "typeString": "literal_string \"!updaterManager\""
                        }
                      ],
                      "id": 43369,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4645:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 43378,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4645:65:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43379,
                  "nodeType": "ExpressionStatement",
                  "src": "4645:65:63"
                },
                {
                  "id": 43380,
                  "nodeType": "PlaceholderStatement",
                  "src": "4720:1:63"
                }
              ]
            },
            "documentation": {
              "id": 43367,
              "nodeType": "StructuredDocumentation",
              "src": "4511:89:63",
              "text": " @notice Ensures that function is called by the UpdaterManager contract"
            },
            "name": "onlyUpdaterManager",
            "parameters": {
              "id": 43368,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4632:2:63"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43395,
            "nodeType": "ModifierDefinition",
            "src": "4831:96:63",
            "body": {
              "id": 43394,
              "nodeType": "Block",
              "src": "4852:75:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_enum$_States_$43845",
                          "typeString": "enum NomadBase.States"
                        },
                        "id": 43389,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 43386,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43851,
                          "src": "4870:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_States_$43845",
                            "typeString": "enum NomadBase.States"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "expression": {
                            "id": 43387,
                            "name": "States",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43845,
                            "src": "4879:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_enum$_States_$43845_$",
                              "typeString": "type(enum NomadBase.States)"
                            }
                          },
                          "id": 43388,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "Failed",
                          "nodeType": "MemberAccess",
                          "src": "4879:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_enum$_States_$43845",
                            "typeString": "enum NomadBase.States"
                          }
                        },
                        "src": "4870:22:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6661696c6564207374617465",
                        "id": 43390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4894:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_a33e56fa88946bb07ff3937a1f7bcc7324c2830576aaa78d719bb4f533bc46d7",
                          "typeString": "literal_string \"failed state\""
                        },
                        "value": "failed state"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_a33e56fa88946bb07ff3937a1f7bcc7324c2830576aaa78d719bb4f533bc46d7",
                          "typeString": "literal_string \"failed state\""
                        }
                      ],
                      "id": 43385,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "4862:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 43391,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4862:47:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43392,
                  "nodeType": "ExpressionStatement",
                  "src": "4862:47:63"
                },
                {
                  "id": 43393,
                  "nodeType": "PlaceholderStatement",
                  "src": "4919:1:63"
                }
              ]
            },
            "documentation": {
              "id": 43383,
              "nodeType": "StructuredDocumentation",
              "src": "4734:92:63",
              "text": " @notice Ensures that contract state != FAILED when the function is called"
            },
            "name": "notFailed",
            "parameters": {
              "id": 43384,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4849:2:63"
            },
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43413,
            "nodeType": "FunctionDefinition",
            "src": "5161:220:63",
            "body": {
              "id": 43412,
              "nodeType": "Block",
              "src": "5227:154:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 43404,
                        "name": "_updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43398,
                        "src": "5249:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 43403,
                      "name": "_setUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43948,
                      "src": "5237:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 43405,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5237:21:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43406,
                  "nodeType": "ExpressionStatement",
                  "src": "5237:21:63"
                },
                {
                  "expression": {
                    "id": 43410,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 43407,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43851,
                      "src": "5353:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$43845",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 43408,
                        "name": "States",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43845,
                        "src": "5361:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_States_$43845_$",
                          "typeString": "type(enum NomadBase.States)"
                        }
                      },
                      "id": 43409,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Active",
                      "nodeType": "MemberAccess",
                      "src": "5361:13:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$43845",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "src": "5353:21:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_States_$43845",
                      "typeString": "enum NomadBase.States"
                    }
                  },
                  "id": 43411,
                  "nodeType": "ExpressionStatement",
                  "src": "5353:21:63"
                }
              ]
            },
            "documentation": {
              "id": 43396,
              "nodeType": "StructuredDocumentation",
              "src": "5017:139:63",
              "text": " @notice Set a new Updater\n @dev To be set when rotating Updater after Fraud\n @param _updater the new Updater"
            },
            "functionSelector": "9d54f419",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43401,
                "modifierName": {
                  "id": 43400,
                  "name": "onlyUpdaterManager",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43382,
                  "src": "5208:18:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5208:18:63"
              }
            ],
            "name": "setUpdater",
            "parameters": {
              "id": 43399,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43398,
                  "mutability": "mutable",
                  "name": "_updater",
                  "nodeType": "VariableDeclaration",
                  "scope": 43413,
                  "src": "5181:16:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43397,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5181:7:63",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5180:18:63"
            },
            "returnParameters": {
              "id": 43402,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5227:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 43436,
            "nodeType": "FunctionDefinition",
            "src": "5800:205:63",
            "body": {
              "id": 43435,
              "nodeType": "Block",
              "src": "5871:134:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 43423,
                            "name": "_updaterManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43416,
                            "src": "5916:15:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 43422,
                          "name": "IUpdaterManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 45047,
                          "src": "5900:15:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_contract$_IUpdaterManager_$45047_$",
                            "typeString": "type(contract IUpdaterManager)"
                          }
                        },
                        "id": 43424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5900:32:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                          "typeString": "contract IUpdaterManager"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                          "typeString": "contract IUpdaterManager"
                        }
                      ],
                      "id": 43421,
                      "name": "_setUpdaterManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43745,
                      "src": "5881:18:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IUpdaterManager_$45047_$returns$__$",
                        "typeString": "function (contract IUpdaterManager)"
                      }
                    },
                    "id": 43425,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5881:52:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43426,
                  "nodeType": "ExpressionStatement",
                  "src": "5881:52:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "expression": {
                            "arguments": [
                              {
                                "id": 43429,
                                "name": "_updaterManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 43416,
                                "src": "5971:15:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              ],
                              "id": 43428,
                              "name": "IUpdaterManager",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 45047,
                              "src": "5955:15:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_IUpdaterManager_$45047_$",
                                "typeString": "type(contract IUpdaterManager)"
                              }
                            },
                            "id": 43430,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "5955:32:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                              "typeString": "contract IUpdaterManager"
                            }
                          },
                          "id": 43431,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "updater",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 45046,
                          "src": "5955:40:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_external_view$__$returns$_t_address_$",
                            "typeString": "function () view external returns (address)"
                          }
                        },
                        "id": 43432,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5955:42:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 43427,
                      "name": "_setUpdater",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43948,
                      "src": "5943:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 43433,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5943:55:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43434,
                  "nodeType": "ExpressionStatement",
                  "src": "5943:55:63"
                }
              ]
            },
            "documentation": {
              "id": 43414,
              "nodeType": "StructuredDocumentation",
              "src": "5387:408:63",
              "text": " @notice Set a new UpdaterManager contract\n @dev Home(s) will initially be initialized using a trusted UpdaterManager contract;\n we will progressively decentralize by swapping the trusted contract with a new implementation\n that implements Updater bonding & slashing, and rules for Updater selection & rotation\n @param _updaterManager the new UpdaterManager contract"
            },
            "functionSelector": "9776120e",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43419,
                "modifierName": {
                  "id": 43418,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 23113,
                  "src": "5861:9:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "5861:9:63"
              }
            ],
            "name": "setUpdaterManager",
            "parameters": {
              "id": 43417,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43416,
                  "mutability": "mutable",
                  "name": "_updaterManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 43436,
                  "src": "5827:23:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 43415,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5827:7:63",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5826:25:63"
            },
            "returnParameters": {
              "id": 43420,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5871:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 43526,
            "nodeType": "FunctionDefinition",
            "src": "6511:1287:63",
            "body": {
              "id": 43525,
              "nodeType": "Block",
              "src": "6659:1139:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 43452,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 43449,
                            "name": "_messageBody",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43443,
                            "src": "6677:12:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          },
                          "id": 43450,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "length",
                          "nodeType": "MemberAccess",
                          "src": "6677:19:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "id": 43451,
                          "name": "MAX_MESSAGE_BODY_BYTES",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43279,
                          "src": "6700:22:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "6677:45:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6d736720746f6f206c6f6e67",
                        "id": 43453,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6724:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_93c2a0d343c23d45eece2e90501aea90bce8ebac49296b5b7f0fa68afe6e7d03",
                          "typeString": "literal_string \"msg too long\""
                        },
                        "value": "msg too long"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_93c2a0d343c23d45eece2e90501aea90bce8ebac49296b5b7f0fa68afe6e7d03",
                          "typeString": "literal_string \"msg too long\""
                        }
                      ],
                      "id": 43448,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6669:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 43454,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6669:70:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43455,
                  "nodeType": "ExpressionStatement",
                  "src": "6669:70:63"
                },
                {
                  "assignments": [
                    43457
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 43457,
                      "mutability": "mutable",
                      "name": "_nonce",
                      "nodeType": "VariableDeclaration",
                      "scope": 43525,
                      "src": "6825:13:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "typeName": {
                        "id": 43456,
                        "name": "uint32",
                        "nodeType": "ElementaryTypeName",
                        "src": "6825:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 43461,
                  "initialValue": {
                    "baseExpression": {
                      "id": 43458,
                      "name": "nonces",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43283,
                      "src": "6841:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                        "typeString": "mapping(uint32 => uint32)"
                      }
                    },
                    "id": 43460,
                    "indexExpression": {
                      "id": 43459,
                      "name": "_destinationDomain",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43439,
                      "src": "6848:18:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6841:26:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6825:42:63"
                },
                {
                  "expression": {
                    "id": 43468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 43462,
                        "name": "nonces",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43283,
                        "src": "6877:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint32_$_t_uint32_$",
                          "typeString": "mapping(uint32 => uint32)"
                        }
                      },
                      "id": 43464,
                      "indexExpression": {
                        "id": 43463,
                        "name": "_destinationDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43439,
                        "src": "6884:18:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "6877:26:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      },
                      "id": 43467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 43465,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43457,
                        "src": "6906:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "hexValue": "31",
                        "id": 43466,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6915:1:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_1_by_1",
                          "typeString": "int_const 1"
                        },
                        "value": "1"
                      },
                      "src": "6906:10:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "6877:39:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "id": 43469,
                  "nodeType": "ExpressionStatement",
                  "src": "6877:39:63"
                },
                {
                  "assignments": [
                    43471
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 43471,
                      "mutability": "mutable",
                      "name": "_message",
                      "nodeType": "VariableDeclaration",
                      "scope": 43525,
                      "src": "6974:21:63",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes_memory_ptr",
                        "typeString": "bytes"
                      },
                      "typeName": {
                        "id": 43470,
                        "name": "bytes",
                        "nodeType": "ElementaryTypeName",
                        "src": "6974:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_storage_ptr",
                          "typeString": "bytes"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 43491,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 43474,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43847,
                        "src": "7033:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "arguments": [
                                  {
                                    "expression": {
                                      "id": 43481,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "7082:3:63",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 43482,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "src": "7082:10:63",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  ],
                                  "id": 43480,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7074:7:63",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint160_$",
                                    "typeString": "type(uint160)"
                                  },
                                  "typeName": {
                                    "id": 43479,
                                    "name": "uint160",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7074:7:63",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 43483,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7074:19:63",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint160",
                                  "typeString": "uint160"
                                }
                              ],
                              "id": 43478,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "7066:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint256_$",
                                "typeString": "type(uint256)"
                              },
                              "typeName": {
                                "id": 43477,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "7066:7:63",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 43484,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7066:28:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          ],
                          "id": 43476,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "7058:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_bytes32_$",
                            "typeString": "type(bytes32)"
                          },
                          "typeName": {
                            "id": 43475,
                            "name": "bytes32",
                            "nodeType": "ElementaryTypeName",
                            "src": "7058:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 43485,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7058:37:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 43486,
                        "name": "_nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43457,
                        "src": "7109:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 43487,
                        "name": "_destinationDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43439,
                        "src": "7129:18:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 43488,
                        "name": "_recipientAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43441,
                        "src": "7161:17:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 43489,
                        "name": "_messageBody",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43443,
                        "src": "7192:12:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "expression": {
                        "id": 43472,
                        "name": "Message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45831,
                        "src": "6998:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_Message_$45831_$",
                          "typeString": "type(library Message)"
                        }
                      },
                      "id": 43473,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "formatMessage",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45648,
                      "src": "6998:21:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_bytes32_$_t_uint32_$_t_uint32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bytes_memory_ptr_$",
                        "typeString": "function (uint32,bytes32,uint32,uint32,bytes32,bytes memory) pure returns (bytes memory)"
                      }
                    },
                    "id": 43490,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6998:216:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_memory_ptr",
                      "typeString": "bytes memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6974:240:63"
                },
                {
                  "assignments": [
                    43493
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 43493,
                      "mutability": "mutable",
                      "name": "_messageHash",
                      "nodeType": "VariableDeclaration",
                      "scope": 43525,
                      "src": "7282:20:63",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 43492,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "7282:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 43497,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 43495,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43471,
                        "src": "7315:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 43494,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "7305:9:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 43496,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7305:19:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7282:42:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 43501,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43493,
                        "src": "7346:12:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 43498,
                        "name": "tree",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43800,
                        "src": "7334:4:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Tree_$45067_storage",
                          "typeString": "struct MerkleLib.Tree storage ref"
                        }
                      },
                      "id": 43500,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "insert",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45145,
                      "src": "7334:11:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Tree_$45067_storage_ptr_$_t_bytes32_$returns$__$bound_to$_t_struct$_Tree_$45067_storage_ptr_$",
                        "typeString": "function (struct MerkleLib.Tree storage pointer,bytes32)"
                      }
                    },
                    "id": 43502,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7334:25:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43503,
                  "nodeType": "ExpressionStatement",
                  "src": "7334:25:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 43507,
                          "name": "root",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43815,
                          "src": "7450:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
                            "typeString": "function () view returns (bytes32)"
                          }
                        },
                        "id": 43508,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7450:6:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 43504,
                        "name": "queue",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 44012,
                        "src": "7436:5:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Queue_$45843_storage",
                          "typeString": "struct QueueLib.Queue storage ref"
                        }
                      },
                      "id": 43506,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "enqueue",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45902,
                      "src": "7436:13:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Queue_$45843_storage_ptr_$_t_bytes32_$returns$_t_uint128_$bound_to$_t_struct$_Queue_$45843_storage_ptr_$",
                        "typeString": "function (struct QueueLib.Queue storage pointer,bytes32) returns (uint128)"
                      }
                    },
                    "id": 43509,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7436:21:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 43510,
                  "nodeType": "ExpressionStatement",
                  "src": "7436:21:63"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 43512,
                        "name": "_messageHash",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43493,
                        "src": "7633:12:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 43516,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 43513,
                            "name": "count",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43825,
                            "src": "7659:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 43514,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "7659:7:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "-",
                        "rightExpression": {
                          "hexValue": "31",
                          "id": 43515,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7669:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "src": "7659:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 43518,
                            "name": "_destinationDomain",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43439,
                            "src": "7705:18:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          },
                          {
                            "id": 43519,
                            "name": "_nonce",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43457,
                            "src": "7725:6:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            },
                            {
                              "typeIdentifier": "t_uint32",
                              "typeString": "uint32"
                            }
                          ],
                          "id": 43517,
                          "name": "_destinationAndNonce",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43789,
                          "src": "7684:20:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint32_$_t_uint32_$returns$_t_uint64_$",
                            "typeString": "function (uint32,uint32) pure returns (uint64)"
                          }
                        },
                        "id": 43520,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7684:48:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "id": 43521,
                        "name": "committedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43853,
                        "src": "7746:13:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 43522,
                        "name": "_message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43471,
                        "src": "7773:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 43511,
                      "name": "Dispatch",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43302,
                      "src": "7611:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_uint64_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32,uint256,uint64,bytes32,bytes memory)"
                      }
                    },
                    "id": 43523,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7611:180:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43524,
                  "nodeType": "EmitStatement",
                  "src": "7606:185:63"
                }
              ]
            },
            "documentation": {
              "id": 43437,
              "nodeType": "StructuredDocumentation",
              "src": "6065:441:63",
              "text": " @notice Dispatch the message to the destination domain & recipient\n @dev Format the message, insert its hash into Merkle tree,\n enqueue the new Merkle root, and emit `Dispatch` event with message information.\n @param _destinationDomain Domain of destination chain\n @param _recipientAddress Address of recipient on destination chain as bytes32\n @param _messageBody Raw bytes content of message"
            },
            "functionSelector": "fa31de01",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43446,
                "modifierName": {
                  "id": 43445,
                  "name": "notFailed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43395,
                  "src": "6649:9:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6649:9:63"
              }
            ],
            "name": "dispatch",
            "parameters": {
              "id": 43444,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43439,
                  "mutability": "mutable",
                  "name": "_destinationDomain",
                  "nodeType": "VariableDeclaration",
                  "scope": 43526,
                  "src": "6538:25:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 43438,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6538:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43441,
                  "mutability": "mutable",
                  "name": "_recipientAddress",
                  "nodeType": "VariableDeclaration",
                  "scope": 43526,
                  "src": "6573:25:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43440,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6573:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43443,
                  "mutability": "mutable",
                  "name": "_messageBody",
                  "nodeType": "VariableDeclaration",
                  "scope": 43526,
                  "src": "6608:25:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43442,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6608:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6528:111:63"
            },
            "returnParameters": {
              "id": 43447,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6659:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 43571,
            "nodeType": "FunctionDefinition",
            "src": "8470:734:63",
            "body": {
              "id": 43570,
              "nodeType": "Block",
              "src": "8602:602:63",
              "statements": [
                {
                  "condition": {
                    "arguments": [
                      {
                        "id": 43539,
                        "name": "_committedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43529,
                        "src": "8765:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 43540,
                        "name": "_newRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43531,
                        "src": "8781:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 43541,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43533,
                        "src": "8791:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 43538,
                      "name": "improperUpdate",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43714,
                      "src": "8750:14:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                        "typeString": "function (bytes32,bytes32,bytes memory) returns (bool)"
                      }
                    },
                    "id": 43542,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8750:52:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 43544,
                  "nodeType": "IfStatement",
                  "src": "8746:65:63",
                  "trueBody": {
                    "functionReturnParameters": 43537,
                    "id": 43543,
                    "nodeType": "Return",
                    "src": "8804:7:63"
                  }
                },
                {
                  "body": {
                    "id": 43557,
                    "nodeType": "Block",
                    "src": "8920:98:63",
                    "statements": [
                      {
                        "assignments": [
                          43547
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 43547,
                            "mutability": "mutable",
                            "name": "_next",
                            "nodeType": "VariableDeclaration",
                            "scope": 43557,
                            "src": "8934:13:63",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 43546,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "8934:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 43551,
                        "initialValue": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "expression": {
                              "id": 43548,
                              "name": "queue",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 44012,
                              "src": "8950:5:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Queue_$45843_storage",
                                "typeString": "struct QueueLib.Queue storage ref"
                              }
                            },
                            "id": 43549,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "dequeue",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 45960,
                            "src": "8950:13:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Queue_$45843_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Queue_$45843_storage_ptr_$",
                              "typeString": "function (struct QueueLib.Queue storage pointer) returns (bytes32)"
                            }
                          },
                          "id": 43550,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "8950:15:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "8934:31:63"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          },
                          "id": 43554,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 43552,
                            "name": "_next",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43547,
                            "src": "8983:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "id": 43553,
                            "name": "_newRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43531,
                            "src": "8992:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "8983:17:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 43556,
                        "nodeType": "IfStatement",
                        "src": "8979:28:63",
                        "trueBody": {
                          "id": 43555,
                          "nodeType": "Break",
                          "src": "9002:5:63"
                        }
                      }
                    ]
                  },
                  "condition": {
                    "hexValue": "74727565",
                    "id": 43545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8914:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "id": 43558,
                  "nodeType": "WhileStatement",
                  "src": "8907:111:63"
                },
                {
                  "expression": {
                    "id": 43561,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 43559,
                      "name": "committedRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43853,
                      "src": "9101:13:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 43560,
                      "name": "_newRoot",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43531,
                      "src": "9117:8:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "src": "9101:24:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "id": 43562,
                  "nodeType": "ExpressionStatement",
                  "src": "9101:24:63"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 43564,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43847,
                        "src": "9147:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 43565,
                        "name": "_committedRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43529,
                        "src": "9160:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 43566,
                        "name": "_newRoot",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43531,
                        "src": "9176:8:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 43567,
                        "name": "_signature",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43533,
                        "src": "9186:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 43563,
                      "name": "Update",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43868,
                      "src": "9140:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_uint32_$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (uint32,bytes32,bytes32,bytes memory)"
                      }
                    },
                    "id": 43568,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9140:57:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43569,
                  "nodeType": "EmitStatement",
                  "src": "9135:62:63"
                }
              ]
            },
            "documentation": {
              "id": 43527,
              "nodeType": "StructuredDocumentation",
              "src": "7804:661:63",
              "text": " @notice Submit a signature from the Updater \"notarizing\" a root,\n which updates the Home contract's `committedRoot`,\n and publishes the signature which will be relayed to Replica contracts\n @dev emits Update event\n @dev If _newRoot is not contained in the queue,\n the Update is a fraudulent Improper Update, so\n the Updater is slashed & Home is set to FAILED state\n @param _committedRoot Current updated merkle root which the update is building off of\n @param _newRoot New merkle root to update the contract state to\n @param _signature Updater signature on `_committedRoot` and `_newRoot`"
            },
            "functionSelector": "b31c01fb",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43536,
                "modifierName": {
                  "id": 43535,
                  "name": "notFailed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43395,
                  "src": "8592:9:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "8592:9:63"
              }
            ],
            "name": "update",
            "parameters": {
              "id": 43534,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43529,
                  "mutability": "mutable",
                  "name": "_committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43571,
                  "src": "8495:22:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43528,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8495:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43531,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43571,
                  "src": "8527:16:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43530,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8527:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43533,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 43571,
                  "src": "8553:23:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43532,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "8553:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8485:97:63"
            },
            "returnParameters": {
              "id": 43537,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "8602:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 43597,
            "nodeType": "FunctionDefinition",
            "src": "9562:247:63",
            "body": {
              "id": 43596,
              "nodeType": "Block",
              "src": "9676:133:63",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 43583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [],
                      "expression": {
                        "argumentTypes": [],
                        "expression": {
                          "id": 43579,
                          "name": "queue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44012,
                          "src": "9690:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Queue_$45843_storage",
                            "typeString": "struct QueueLib.Queue storage ref"
                          }
                        },
                        "id": 43580,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46220,
                        "src": "9690:12:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Queue_$45843_storage_ptr_$returns$_t_uint256_$bound_to$_t_struct$_Queue_$45843_storage_ptr_$",
                          "typeString": "function (struct QueueLib.Queue storage pointer) view returns (uint256)"
                        }
                      },
                      "id": 43581,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "9690:14:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 43582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9708:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9690:19:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 43595,
                  "nodeType": "IfStatement",
                  "src": "9686:117:63",
                  "trueBody": {
                    "id": 43594,
                    "nodeType": "Block",
                    "src": "9711:92:63",
                    "statements": [
                      {
                        "expression": {
                          "id": 43586,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 43584,
                            "name": "_committedRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43575,
                            "src": "9725:14:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 43585,
                            "name": "committedRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43853,
                            "src": "9742:13:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "9725:30:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 43587,
                        "nodeType": "ExpressionStatement",
                        "src": "9725:30:63"
                      },
                      {
                        "expression": {
                          "id": 43592,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 43588,
                            "name": "_new",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43577,
                            "src": "9769:4:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "expression": {
                                "id": 43589,
                                "name": "queue",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 44012,
                                "src": "9776:5:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Queue_$45843_storage",
                                  "typeString": "struct QueueLib.Queue storage ref"
                                }
                              },
                              "id": 43590,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "lastItem",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 46156,
                              "src": "9776:14:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$_t_struct$_Queue_$45843_storage_ptr_$returns$_t_bytes32_$bound_to$_t_struct$_Queue_$45843_storage_ptr_$",
                                "typeString": "function (struct QueueLib.Queue storage pointer) view returns (bytes32)"
                              }
                            },
                            "id": 43591,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "9776:16:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "9769:23:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 43593,
                        "nodeType": "ExpressionStatement",
                        "src": "9769:23:63"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 43572,
              "nodeType": "StructuredDocumentation",
              "src": "9210:347:63",
              "text": " @notice Suggest an update for the Updater to sign and submit.\n @dev If queue is empty, null bytes returned for both\n (No update is necessary because no messages have been dispatched since the last update)\n @return _committedRoot Latest root signed by the Updater\n @return _new Latest enqueued Merkle root"
            },
            "functionSelector": "36e104de",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "suggestUpdate",
            "parameters": {
              "id": 43573,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9584:2:63"
            },
            "returnParameters": {
              "id": 43578,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43575,
                  "mutability": "mutable",
                  "name": "_committedRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43597,
                  "src": "9634:22:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43574,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9634:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43577,
                  "mutability": "mutable",
                  "name": "_new",
                  "nodeType": "VariableDeclaration",
                  "scope": 43597,
                  "src": "9658:12:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43576,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "9658:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9633:38:63"
            },
            "scope": 43790,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 43651,
            "nodeType": "FunctionDefinition",
            "src": "10420:521:63",
            "body": {
              "id": 43650,
              "nodeType": "Block",
              "src": "10602:339:63",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 43637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 43629,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 43615,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43600,
                            "src": "10659:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "baseExpression": {
                              "id": 43616,
                              "name": "_newRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43604,
                              "src": "10669:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                "typeString": "bytes32[2] calldata"
                              }
                            },
                            "id": 43618,
                            "indexExpression": {
                              "hexValue": "30",
                              "id": 43617,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10678:1:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10669:11:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 43619,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43606,
                            "src": "10682:10:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 43613,
                            "name": "NomadBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43998,
                            "src": "10629:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_NomadBase_$43998_$",
                              "typeString": "type(contract NomadBase)"
                            }
                          },
                          "id": 43614,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_isUpdaterSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 43989,
                          "src": "10629:29:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 43620,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10629:64:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&&",
                      "rightExpression": {
                        "arguments": [
                          {
                            "id": 43623,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43600,
                            "src": "10739:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "baseExpression": {
                              "id": 43624,
                              "name": "_newRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43604,
                              "src": "10749:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                "typeString": "bytes32[2] calldata"
                              }
                            },
                            "id": 43626,
                            "indexExpression": {
                              "hexValue": "31",
                              "id": 43625,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10758:1:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "10749:11:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 43627,
                            "name": "_signature2",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43608,
                            "src": "10762:11:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_calldata_ptr",
                              "typeString": "bytes calldata"
                            }
                          ],
                          "expression": {
                            "id": 43621,
                            "name": "NomadBase",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43998,
                            "src": "10709:9:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_NomadBase_$43998_$",
                              "typeString": "type(contract NomadBase)"
                            }
                          },
                          "id": 43622,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_isUpdaterSignature",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 43989,
                          "src": "10709:29:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 43628,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "10709:65:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "10629:145:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "id": 43636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "baseExpression": {
                          "id": 43630,
                          "name": "_newRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43604,
                          "src": "10790:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                            "typeString": "bytes32[2] calldata"
                          }
                        },
                        "id": 43632,
                        "indexExpression": {
                          "hexValue": "30",
                          "id": 43631,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10799:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10790:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "!=",
                      "rightExpression": {
                        "baseExpression": {
                          "id": 43633,
                          "name": "_newRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43604,
                          "src": "10805:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                            "typeString": "bytes32[2] calldata"
                          }
                        },
                        "id": 43635,
                        "indexExpression": {
                          "hexValue": "31",
                          "id": 43634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10814:1:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_1_by_1",
                            "typeString": "int_const 1"
                          },
                          "value": "1"
                        },
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "10805:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "src": "10790:26:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "10629:187:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 43649,
                  "nodeType": "IfStatement",
                  "src": "10612:323:63",
                  "trueBody": {
                    "id": 43648,
                    "nodeType": "Block",
                    "src": "10827:108:63",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 43638,
                            "name": "_fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43768,
                            "src": "10841:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 43639,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10841:7:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 43640,
                        "nodeType": "ExpressionStatement",
                        "src": "10841:7:63"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 43642,
                              "name": "_oldRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43600,
                              "src": "10880:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 43643,
                              "name": "_newRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43604,
                              "src": "10890:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                "typeString": "bytes32[2] calldata"
                              }
                            },
                            {
                              "id": 43644,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43606,
                              "src": "10900:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            },
                            {
                              "id": 43645,
                              "name": "_signature2",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43608,
                              "src": "10912:11:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                                "typeString": "bytes32[2] calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              },
                              {
                                "typeIdentifier": "t_bytes_calldata_ptr",
                                "typeString": "bytes calldata"
                              }
                            ],
                            "id": 43641,
                            "name": "DoubleUpdate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43324,
                            "src": "10867:12:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_array$_t_bytes32_$2_memory_ptr_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (bytes32,bytes32[2] memory,bytes memory,bytes memory)"
                            }
                          },
                          "id": 43646,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10867:57:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 43647,
                        "nodeType": "EmitStatement",
                        "src": "10862:62:63"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 43598,
              "nodeType": "StructuredDocumentation",
              "src": "9815:600:63",
              "text": " @notice Called by external agent. Checks that signatures on two sets of\n roots are valid and that the new roots conflict with each other. If both\n cases hold true, the contract is failed and a `DoubleUpdate` event is\n emitted.\n @dev When `fail()` is called on Home, updater is slashed.\n @param _oldRoot Old root shared between two conflicting updates\n @param _newRoot Array containing two conflicting new roots\n @param _signature Signature on `_oldRoot` and `_newRoot`[0]\n @param _signature2 Signature on `_oldRoot` and `_newRoot`[1]"
            },
            "functionSelector": "19d9d21a",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43611,
                "modifierName": {
                  "id": 43610,
                  "name": "notFailed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43395,
                  "src": "10592:9:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "10592:9:63"
              }
            ],
            "name": "doubleUpdate",
            "parameters": {
              "id": 43609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43600,
                  "mutability": "mutable",
                  "name": "_oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43651,
                  "src": "10451:16:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43599,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "10451:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43604,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43651,
                  "src": "10477:28:63",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$2_calldata_ptr",
                    "typeString": "bytes32[2]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 43601,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "10477:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 43603,
                    "length": {
                      "hexValue": "32",
                      "id": 43602,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10485:1:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "ArrayTypeName",
                    "src": "10477:10:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$2_storage_ptr",
                      "typeString": "bytes32[2]"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43606,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 43651,
                  "src": "10515:25:63",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43605,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10515:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43608,
                  "mutability": "mutable",
                  "name": "_signature2",
                  "nodeType": "VariableDeclaration",
                  "scope": 43651,
                  "src": "10550:26:63",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_calldata_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43607,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10550:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10441:141:63"
            },
            "returnParameters": {
              "id": 43612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10602:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 43663,
            "nodeType": "FunctionDefinition",
            "src": "11076:117:63",
            "body": {
              "id": 43662,
              "nodeType": "Block",
              "src": "11141:52:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 43659,
                        "name": "localDomain",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43847,
                        "src": "11174:11:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      ],
                      "id": 43658,
                      "name": "_homeDomainHash",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43928,
                      "src": "11158:15:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint32_$returns$_t_bytes32_$",
                        "typeString": "function (uint32) pure returns (bytes32)"
                      }
                    },
                    "id": 43660,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11158:28:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 43657,
                  "id": 43661,
                  "nodeType": "Return",
                  "src": "11151:35:63"
                }
              ]
            },
            "baseFunctions": [
              43911
            ],
            "documentation": {
              "id": 43652,
              "nodeType": "StructuredDocumentation",
              "src": "10999:72:63",
              "text": " @notice Hash of Home domain concatenated with \"NOMAD\""
            },
            "functionSelector": "45630b1a",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "homeDomainHash",
            "overrides": {
              "id": 43654,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "11114:8:63"
            },
            "parameters": {
              "id": 43653,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "11099:2:63"
            },
            "returnParameters": {
              "id": 43657,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43656,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 43663,
                  "src": "11132:7:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43655,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11132:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11131:9:63"
            },
            "scope": 43790,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 43714,
            "nodeType": "FunctionDefinition",
            "src": "12679:756:63",
            "body": {
              "id": 43713,
              "nodeType": "Block",
              "src": "12826:609:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 43679,
                            "name": "_oldRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43666,
                            "src": "12877:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 43680,
                            "name": "_newRoot",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43668,
                            "src": "12887:8:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          {
                            "id": 43681,
                            "name": "_signature",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43670,
                            "src": "12897:10:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            {
                              "typeIdentifier": "t_bytes_memory_ptr",
                              "typeString": "bytes memory"
                            }
                          ],
                          "id": 43678,
                          "name": "_isUpdaterSignature",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43989,
                          "src": "12857:19:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$_t_bool_$",
                            "typeString": "function (bytes32,bytes32,bytes memory) view returns (bool)"
                          }
                        },
                        "id": 43682,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "12857:51:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "217570646174657220736967",
                        "id": 43683,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12922:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4e7e168bab312464134fb925b8ced66606c725ce7a1f4fc8bf3ba8ee2869cb5a",
                          "typeString": "literal_string \"!updater sig\""
                        },
                        "value": "!updater sig"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4e7e168bab312464134fb925b8ced66606c725ce7a1f4fc8bf3ba8ee2869cb5a",
                          "typeString": "literal_string \"!updater sig\""
                        }
                      ],
                      "id": 43677,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12836:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 43684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12836:110:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43685,
                  "nodeType": "ExpressionStatement",
                  "src": "12836:110:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "id": 43689,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 43687,
                          "name": "_oldRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43666,
                          "src": "12964:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 43688,
                          "name": "committedRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43853,
                          "src": "12976:13:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "src": "12964:25:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "6e6f7420612063757272656e7420757064617465",
                        "id": 43690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12991:22:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ec62e52e468c335a4f006213f26d62ade37fad98fff957b7a5971753815e71bb",
                          "typeString": "literal_string \"not a current update\""
                        },
                        "value": "not a current update"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ec62e52e468c335a4f006213f26d62ade37fad98fff957b7a5971753815e71bb",
                          "typeString": "literal_string \"not a current update\""
                        }
                      ],
                      "id": 43686,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12956:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 43691,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12956:58:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43692,
                  "nodeType": "ExpressionStatement",
                  "src": "12956:58:63"
                },
                {
                  "condition": {
                    "id": 43697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "13162:25:63",
                    "subExpression": {
                      "arguments": [
                        {
                          "id": 43695,
                          "name": "_newRoot",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43668,
                          "src": "13178:8:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "expression": {
                          "id": 43693,
                          "name": "queue",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 44012,
                          "src": "13163:5:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Queue_$45843_storage",
                            "typeString": "struct QueueLib.Queue storage ref"
                          }
                        },
                        "id": 43694,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "contains",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 46141,
                        "src": "13163:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_view$_t_struct$_Queue_$45843_storage_ptr_$_t_bytes32_$returns$_t_bool_$bound_to$_t_struct$_Queue_$45843_storage_ptr_$",
                          "typeString": "function (struct QueueLib.Queue storage pointer,bytes32) view returns (bool)"
                        }
                      },
                      "id": 43696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13163:24:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 43710,
                  "nodeType": "IfStatement",
                  "src": "13158:153:63",
                  "trueBody": {
                    "id": 43709,
                    "nodeType": "Block",
                    "src": "13189:122:63",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 43698,
                            "name": "_fail",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43768,
                            "src": "13203:5:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                              "typeString": "function ()"
                            }
                          },
                          "id": 43699,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13203:7:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 43700,
                        "nodeType": "ExpressionStatement",
                        "src": "13203:7:63"
                      },
                      {
                        "eventCall": {
                          "arguments": [
                            {
                              "id": 43702,
                              "name": "_oldRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43666,
                              "src": "13244:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 43703,
                              "name": "_newRoot",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43668,
                              "src": "13254:8:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "id": 43704,
                              "name": "_signature",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 43670,
                              "src": "13264:10:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "id": 43701,
                            "name": "ImproperUpdate",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43311,
                            "src": "13229:14:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (bytes32,bytes32,bytes memory)"
                            }
                          },
                          "id": 43705,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13229:46:63",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 43706,
                        "nodeType": "EmitStatement",
                        "src": "13224:51:63"
                      },
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 43707,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13296:4:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 43676,
                        "id": 43708,
                        "nodeType": "Return",
                        "src": "13289:11:63"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "hexValue": "66616c7365",
                    "id": 43711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13423:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "false"
                  },
                  "functionReturnParameters": 43676,
                  "id": 43712,
                  "nodeType": "Return",
                  "src": "13416:12:63"
                }
              ]
            },
            "documentation": {
              "id": 43664,
              "nodeType": "StructuredDocumentation",
              "src": "11199:1475:63",
              "text": " @notice Check if an Update is an Improper Update;\n if so, slash the Updater and set the contract to FAILED state.\n An Improper Update is an update building off of the Home's `committedRoot`\n for which the `_newRoot` does not currently exist in the Home's queue.\n This would mean that message(s) that were not truly\n dispatched on Home were falsely included in the signed root.\n An Improper Update will only be accepted as valid by the Replica\n If an Improper Update is attempted on Home,\n the Updater will be slashed immediately.\n If an Improper Update is submitted to the Replica,\n it should be relayed to the Home contract using this function\n in order to slash the Updater with an Improper Update.\n An Improper Update submitted to the Replica is only valid\n while the `_oldRoot` is still equal to the `committedRoot` on Home;\n if the `committedRoot` on Home has already been updated with a valid Update,\n then the Updater should be slashed with a Double Update.\n @dev Reverts (and doesn't slash updater) if signature is invalid or\n update not current\n @param _oldRoot Old merkle tree root (should equal home's committedRoot)\n @param _newRoot New merkle tree root\n @param _signature Updater signature on `_oldRoot` and `_newRoot`\n @return TRUE if update was an Improper Update (implying Updater was slashed)"
            },
            "functionSelector": "8e4e30e0",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 43673,
                "modifierName": {
                  "id": 43672,
                  "name": "notFailed",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 43395,
                  "src": "12801:9:63",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12801:9:63"
              }
            ],
            "name": "improperUpdate",
            "parameters": {
              "id": 43671,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43666,
                  "mutability": "mutable",
                  "name": "_oldRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43714,
                  "src": "12712:16:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43665,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12712:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43668,
                  "mutability": "mutable",
                  "name": "_newRoot",
                  "nodeType": "VariableDeclaration",
                  "scope": 43714,
                  "src": "12738:16:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 43667,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "12738:7:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43670,
                  "mutability": "mutable",
                  "name": "_signature",
                  "nodeType": "VariableDeclaration",
                  "scope": 43714,
                  "src": "12764:23:63",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 43669,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12764:5:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12702:91:63"
            },
            "returnParameters": {
              "id": 43676,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43675,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 43714,
                  "src": "12820:4:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 43674,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12820:4:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12819:6:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 43745,
            "nodeType": "FunctionDefinition",
            "src": "13609:319:63",
            "body": {
              "id": 43744,
              "nodeType": "Block",
              "src": "13679:249:63",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [
                              {
                                "id": 43725,
                                "name": "_updaterManager",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 43717,
                                "src": "13737:15:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                                  "typeString": "contract IUpdaterManager"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                                  "typeString": "contract IUpdaterManager"
                                }
                              ],
                              "id": 43724,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "13729:7:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_address_$",
                                "typeString": "type(address)"
                              },
                              "typeName": {
                                "id": 43723,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "13729:7:63",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 43726,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "13729:24:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "id": 43721,
                            "name": "Address",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28026,
                            "src": "13710:7:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_contract$_Address_$28026_$",
                              "typeString": "type(library Address)"
                            }
                          },
                          "id": 43722,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "isContract",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 27750,
                          "src": "13710:18:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address) view returns (bool)"
                          }
                        },
                        "id": 43727,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13710:44:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "21636f6e747261637420757064617465724d616e61676572",
                        "id": 43728,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13768:26:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_2030918762add9f615cabfd744df052ce2c85852f89710301f341b4c81931185",
                          "typeString": "literal_string \"!contract updaterManager\""
                        },
                        "value": "!contract updaterManager"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_2030918762add9f615cabfd744df052ce2c85852f89710301f341b4c81931185",
                          "typeString": "literal_string \"!contract updaterManager\""
                        }
                      ],
                      "id": 43720,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13689:7:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 43729,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13689:115:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43730,
                  "nodeType": "ExpressionStatement",
                  "src": "13689:115:63"
                },
                {
                  "expression": {
                    "id": 43735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 43731,
                      "name": "updaterManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43285,
                      "src": "13814:14:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                        "typeString": "contract IUpdaterManager"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 43733,
                          "name": "_updaterManager",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 43717,
                          "src": "13847:15:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                            "typeString": "contract IUpdaterManager"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                            "typeString": "contract IUpdaterManager"
                          }
                        ],
                        "id": 43732,
                        "name": "IUpdaterManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 45047,
                        "src": "13831:15:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_contract$_IUpdaterManager_$45047_$",
                          "typeString": "type(contract IUpdaterManager)"
                        }
                      },
                      "id": 43734,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "13831:32:63",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                        "typeString": "contract IUpdaterManager"
                      }
                    },
                    "src": "13814:49:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                      "typeString": "contract IUpdaterManager"
                    }
                  },
                  "id": 43736,
                  "nodeType": "ExpressionStatement",
                  "src": "13814:49:63"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 43740,
                            "name": "_updaterManager",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 43717,
                            "src": "13904:15:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                              "typeString": "contract IUpdaterManager"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                              "typeString": "contract IUpdaterManager"
                            }
                          ],
                          "id": 43739,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13896:7:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 43738,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13896:7:63",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 43741,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13896:24:63",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 43737,
                      "name": "NewUpdaterManager",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43336,
                      "src": "13878:17:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 43742,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13878:43:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43743,
                  "nodeType": "EmitStatement",
                  "src": "13873:48:63"
                }
              ]
            },
            "documentation": {
              "id": 43715,
              "nodeType": "StructuredDocumentation",
              "src": "13495:109:63",
              "text": " @notice Set the UpdaterManager\n @param _updaterManager Address of the UpdaterManager"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setUpdaterManager",
            "parameters": {
              "id": 43718,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43717,
                  "mutability": "mutable",
                  "name": "_updaterManager",
                  "nodeType": "VariableDeclaration",
                  "scope": 43745,
                  "src": "13637:31:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                    "typeString": "contract IUpdaterManager"
                  },
                  "typeName": {
                    "id": 43716,
                    "name": "IUpdaterManager",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 45047,
                    "src": "13637:15:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                      "typeString": "contract IUpdaterManager"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13636:33:63"
            },
            "returnParameters": {
              "id": 43719,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13679:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43768,
            "nodeType": "FunctionDefinition",
            "src": "14091:222:63",
            "body": {
              "id": 43767,
              "nodeType": "Block",
              "src": "14117:196:63",
              "statements": [
                {
                  "expression": {
                    "id": 43752,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 43749,
                      "name": "state",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43851,
                      "src": "14161:5:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$43845",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 43750,
                        "name": "States",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43845,
                        "src": "14169:6:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_States_$43845_$",
                          "typeString": "type(enum NomadBase.States)"
                        }
                      },
                      "id": 43751,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "Failed",
                      "nodeType": "MemberAccess",
                      "src": "14169:13:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_States_$43845",
                        "typeString": "enum NomadBase.States"
                      }
                    },
                    "src": "14161:21:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_States_$43845",
                      "typeString": "enum NomadBase.States"
                    }
                  },
                  "id": 43753,
                  "nodeType": "ExpressionStatement",
                  "src": "14161:21:63"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 43757,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "14245:3:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 43758,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "14245:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "expression": {
                        "id": 43754,
                        "name": "updaterManager",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43285,
                        "src": "14217:14:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IUpdaterManager_$45047",
                          "typeString": "contract IUpdaterManager"
                        }
                      },
                      "id": 43756,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "slashUpdater",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 45041,
                      "src": "14217:27:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_payable_$returns$__$",
                        "typeString": "function (address payable) external"
                      }
                    },
                    "id": 43759,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14217:39:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43760,
                  "nodeType": "ExpressionStatement",
                  "src": "14217:39:63"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 43762,
                        "name": "updater",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43849,
                        "src": "14286:7:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "expression": {
                          "id": 43763,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "14295:3:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 43764,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "14295:10:63",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 43761,
                      "name": "UpdaterSlashed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43331,
                      "src": "14271:14:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 43765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14271:35:63",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 43766,
                  "nodeType": "EmitStatement",
                  "src": "14266:40:63"
                }
              ]
            },
            "documentation": {
              "id": 43746,
              "nodeType": "StructuredDocumentation",
              "src": "13934:152:63",
              "text": " @notice Slash the Updater and set contract state to FAILED\n @dev Called when fraud is proven (Improper Update or Double Update)"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_fail",
            "parameters": {
              "id": 43747,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14105:2:63"
            },
            "returnParameters": {
              "id": 43748,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14117:0:63"
            },
            "scope": 43790,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "id": 43789,
            "nodeType": "FunctionDefinition",
            "src": "14669:186:63",
            "body": {
              "id": 43788,
              "nodeType": "Block",
              "src": "14794:61:63",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    },
                    "id": 43786,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          },
                          "id": 43783,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "arguments": [
                              {
                                "id": 43780,
                                "name": "_destination",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 43771,
                                "src": "14819:12:63",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint32",
                                  "typeString": "uint32"
                                }
                              ],
                              "id": 43779,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "14812:6:63",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_uint64_$",
                                "typeString": "type(uint64)"
                              },
                              "typeName": {
                                "id": 43778,
                                "name": "uint64",
                                "nodeType": "ElementaryTypeName",
                                "src": "14812:6:63",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 43781,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "14812:20:63",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<<",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 43782,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "14836:2:63",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "14812:26:63",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        }
                      ],
                      "id": 43784,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "14811:28:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "|",
                    "rightExpression": {
                      "id": 43785,
                      "name": "_nonce",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43773,
                      "src": "14842:6:63",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint32",
                        "typeString": "uint32"
                      }
                    },
                    "src": "14811:37:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "functionReturnParameters": 43777,
                  "id": 43787,
                  "nodeType": "Return",
                  "src": "14804:44:63"
                }
              ]
            },
            "documentation": {
              "id": 43769,
              "nodeType": "StructuredDocumentation",
              "src": "14319:345:63",
              "text": " @notice Internal utility function that combines\n `_destination` and `_nonce`.\n @dev Both destination and nonce should be less than 2^32 - 1\n @param _destination Domain of destination chain\n @param _nonce Current nonce for given destination chain\n @return Returns (`_destination` << 32) & `_nonce`"
            },
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_destinationAndNonce",
            "parameters": {
              "id": 43774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43771,
                  "mutability": "mutable",
                  "name": "_destination",
                  "nodeType": "VariableDeclaration",
                  "scope": 43789,
                  "src": "14699:19:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 43770,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14699:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 43773,
                  "mutability": "mutable",
                  "name": "_nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 43789,
                  "src": "14720:13:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 43772,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "14720:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14698:36:63"
            },
            "returnParameters": {
              "id": 43777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 43776,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 43789,
                  "src": "14782:6:63",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 43775,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "14782:6:63",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14781:8:63"
            },
            "scope": 43790,
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 43259,
              "name": "Version0",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 44622,
              "src": "976:8:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Version0_$44622",
                "typeString": "contract Version0"
              }
            },
            "id": 43260,
            "nodeType": "InheritanceSpecifier",
            "src": "976:8:63"
          },
          {
            "baseName": {
              "id": 43261,
              "name": "QueueManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 44064,
              "src": "986:12:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_QueueManager_$44064",
                "typeString": "contract QueueManager"
              }
            },
            "id": 43262,
            "nodeType": "InheritanceSpecifier",
            "src": "986:12:63"
          },
          {
            "baseName": {
              "id": 43263,
              "name": "MerkleTreeManager",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 43826,
              "src": "1000:17:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_MerkleTreeManager_$43826",
                "typeString": "contract MerkleTreeManager"
              }
            },
            "id": 43264,
            "nodeType": "InheritanceSpecifier",
            "src": "1000:17:63"
          },
          {
            "baseName": {
              "id": 43265,
              "name": "NomadBase",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 43998,
              "src": "1019:9:63",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_NomadBase_$43998",
                "typeString": "contract NomadBase"
              }
            },
            "id": 43266,
            "nodeType": "InheritanceSpecifier",
            "src": "1019:9:63"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          43826,
          43998,
          44064,
          44622
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 43258,
          "nodeType": "StructuredDocumentation",
          "src": "602:356:63",
          "text": " @title Home\n @author Illusory Systems Inc.\n @notice Accepts messages to be dispatched to remote chains,\n constructs a Merkle tree of the messages,\n and accepts signatures from a bonded Updater\n which notarize the Merkle tree roots.\n Accepts submissions of fraudulent signatures\n by the Updater and slashes the Updater in this case."
        },
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          43790,
          43998,
          23168,
          25131,
          43826,
          44064,
          23676,
          44622
        ],
        "name": "Home",
        "scope": 43791
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 63
}