{
  "abi": [
    {
      "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": "uint64",
          "name": "originAndNonce",
          "type": "uint64"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "liquidityProvider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "Receive",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint32",
          "name": "toDomain",
          "type": "uint32"
        },
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "toId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bool",
          "name": "toHook",
          "type": "bool"
        }
      ],
      "name": "Send",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "DUST_AMOUNT",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "VERSION",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_id",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "_custom",
          "type": "address"
        }
      ],
      "name": "enrollCustom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_domain",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_router",
          "type": "bytes32"
        }
      ],
      "name": "enrollRemoteRouter",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        }
      ],
      "name": "giveLocal",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "_origin",
          "type": "uint32"
        },
        {
          "internalType": "uint32",
          "name": "_nonce",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_sender",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_message",
          "type": "bytes"
        }
      ],
      "name": "handle",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_tokenRegistry",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "liquidityProvider",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_oldRepr",
          "type": "address"
        }
      ],
      "name": "migrate",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "",
          "type": "uint32"
        }
      ],
      "name": "remotes",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_destination",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_recipient",
          "type": "bytes32"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "_amount",
          "type": "uint256"
        },
        {
          "internalType": "uint32",
          "name": "_destination",
          "type": "uint32"
        },
        {
          "internalType": "bytes32",
          "name": "_remoteHook",
          "type": "bytes32"
        },
        {
          "internalType": "bytes",
          "name": "_extraData",
          "type": "bytes"
        }
      ],
      "name": "sendToHook",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint32",
          "name": "dest",
          "type": "uint32"
        },
        {
          "internalType": "bytes29",
          "name": "tokenId",
          "type": "bytes29"
        },
        {
          "internalType": "bytes29",
          "name": "action",
          "type": "bytes29"
        }
      ],
      "name": "sendTransferMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "_xAppConnectionManager",
          "type": "address"
        }
      ],
      "name": "setXAppConnectionManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "takeTokens",
      "outputs": [
        {
          "internalType": "bytes29",
          "name": "_tokenId",
          "type": "bytes29"
        },
        {
          "internalType": "bytes32",
          "name": "_detailsHash",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenRegistry",
      "outputs": [
        {
          "internalType": "contract ITokenRegistry",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "xAppConnectionManager",
      "outputs": [
        {
          "internalType": "contract XAppConnectionManager",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "stateMutability": "payable",
      "type": "receive"
    }
  ],
  "bytecode": {
    "object": "0x608060405234801561001057600080fd5b50614b47806100206000396000f3fe6080604052600436106101635760003560e01c806397f641ab116100c0578063bc7dbab311610074578063e4ad9a1811610059578063e4ad9a1814610650578063f2fde38b146106d2578063ffa1ad74146107125761016a565b8063bc7dbab31461055f578063ce5494bb146106105761016a565b8063a9bd1226116100a5578063a9bd1226146103f9578063ab2dc3f514610459578063b49c53a7146105295761016a565b806397f641ab146103cf5780639d23c4c7146103e45761016a565b8063546d573d1161011757806383bbb806116100fc57806383bbb8061461031857806386e532d41461035a5780638da5cb5b146103ba5761016a565b8063546d573d146102d9578063715018a6146103035761016a565b80633339df96116101485780633339df961461021357806341bdc8b514610251578063485cc955146102915761016a565b8063044dc0d71461016f57806328b1aea0146101c15761016a565b3661016a57005b600080fd5b34801561017b57600080fd5b506101bf6004803603606081101561019257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040909101351661073d565b005b3480156101cd57600080fd5b506101bf600480360360608110156101e457600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1661074d565b34801561021f57600080fd5b506102286109b1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561025d57600080fd5b506101bf6004803603602081101561027457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109cd565b34801561029d57600080fd5b506101bf600480360360408110156102b457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610abc565b3480156102e557600080fd5b50610228600480360360208110156102fc57600080fd5b5035610c1a565b34801561030f57600080fd5b506101bf610c42565b34801561032457600080fd5b506103486004803603602081101561033b57600080fd5b503563ffffffff16610cec565b60408051918252519081900360200190f35b34801561036657600080fd5b506101bf6004803603606081101561037d57600080fd5b5063ffffffff813516907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060208201358116916040013516610cfe565b3480156103c657600080fd5b50610228610d09565b3480156103db57600080fd5b50610348610d25565b3480156103f057600080fd5b50610228610d30565b34801561040557600080fd5b506101bf600480360360a081101561041c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff60408201351690606081013590608001351515610d4c565b34801561046557600080fd5b506101bf6004803603608081101561047c57600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104b457600080fd5b8201836020820111156104c657600080fd5b803590602001918460018302840111640100000000831117156104e857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ed8945050505050565b34801561053557600080fd5b506101bf6004803603604081101561054c57600080fd5b5063ffffffff8135169060200135611148565b34801561056b57600080fd5b506101bf600480360360a081101561058257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a0810160808201356401000000008111156105d157600080fd5b8201836020820111156105e357600080fd5b8035906020019184600183028401116401000000008311171561060557600080fd5b50909250905061129c565b34801561061c57600080fd5b506101bf6004803603602081101561063357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611486565b34801561065c57600080fd5b506106966004803603604081101561067357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611772565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909316835260208301919091528051918290030190f35b3480156106de57600080fd5b506101bf600480360360208110156106f557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661178a565b34801561071e57600080fd5b5061072761192c565b6040805160ff9092168252519081900360200190f35b610748838383611931565b505050565b610755611952565b73ffffffffffffffffffffffffffffffffffffffff16610773610d09565b73ffffffffffffffffffffffffffffffffffffffff16146107f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b15801561086957600080fd5b505af115801561087d573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b1580156108f557600080fd5b505af1158015610909573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b6109d5611952565b73ffffffffffffffffffffffffffffffffffffffff166109f3610d09565b73ffffffffffffffffffffffffffffffffffffffff1614610a7557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff1680610ad55750610ad5611956565b80610ae3575060005460ff16155b610b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015610b9e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055610be782611967565b801561074857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b610c4a611952565b73ffffffffffffffffffffffffffffffffffffffff16610c68610d09565b73ffffffffffffffffffffffffffffffffffffffff1614610cea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b610748838383611ac4565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b81610db857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080610dc58787611c38565b91509150610dd88262ffffff191661225a565b63ffffffff168563ffffffff1614610e5157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b6000610e5e8588846122c5565b9050610e6b868483611ac4565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b610ee13361232a565b610f4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8382610f5882826123d5565b610fc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b6000610ff9610fd28583612401565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612425565b905060006110287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661245a565b905060006110577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841661249e565b90506110847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612536565b1561109a5761109589898484612543565b61113d565b6110c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612590565b156110d6576110958989848461259d565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b611150611952565b73ffffffffffffffffffffffffffffffffffffffff1661116e610d09565b73ffffffffffffffffffffffffffffffffffffffff16146111f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6111f8612902565b63ffffffff168263ffffffff1614158015611218575063ffffffff821615155b61128357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b6000806112a98888611c38565b90925090508461131a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6113457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661225a565b63ffffffff168663ffffffff16146113be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061140b8689846113cf3361299e565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129b792505050565b9050611418878483611ac4565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b1580156114fd57600080fd5b505afa158015611511573d6000803e3d6000fd5b505050506040513d602081101561152757600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff80821690831614156115b357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b15801561162457600080fd5b505afa158015611638573d6000803e3d6000fd5b505050506040513d602081101561164e57600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b15801561175457600080fd5b505af1158015611768573d6000803e3d6000fd5b5050505050505050565b60008061177f8484611c38565b915091509250929050565b611792611952565b73ffffffffffffffffffffffffffffffffffffffff166117b0610d09565b73ffffffffffffffffffffffffffffffffffffffff161461183257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661189e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806149b46026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b61074873ffffffffffffffffffffffffffffffffffffffff84168284612a87565b3390565b600061196130612b14565b15905090565b600054610100900460ff16806119805750611980611956565b8061198e575060005460ff16155b6119e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015611a4957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055611a91612b1a565b8015611ac057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b6000611acf84612c3e565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3957600080fd5b505afa158015611b4d573d6000803e3d6000fd5b505050506040513d6020811015611b6357600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de018583611b8c8787612cc0565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611bea578181015183820152602001611bd2565b50505050905090810190601f168015611c175780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561175457600080fd5b60008060008311611caa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b158015611d2057600080fd5b505afa158015611d34573d6000803e3d6000fd5b505050506040513d6020811015611d4a57600080fd5b50511561209857611d7373ffffffffffffffffffffffffffffffffffffffff8616333087612dd4565b6120918173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015611e1957600080fd5b8101908080516040519392919084640100000000821115611e3957600080fd5b908301906020820185811115611e4e57600080fd5b8251640100000000811182820188101715611e6857600080fd5b82525081516020918201929091019080838360005b83811015611e95578181015183820152602001611e7d565b50505050905090810190601f168015611ec25780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611f0f57600080fd5b505afa158015611f23573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015611f6a57600080fd5b8101908080516040519392919084640100000000821115611f8a57600080fd5b908301906020820185811115611f9f57600080fd5b8251640100000000811182820188101715611fb957600080fd5b82525081516020918201929091019080838360005b83811015611fe6578181015183820152602001611fce565b50505050905090810190601f1680156120135780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561206057600080fd5b505afa158015612074573d6000803e3d6000fd5b505050506040513d602081101561208a57600080fd5b5051612e6f565b9150612199565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b15801561216a57600080fd5b505afa15801561217e573d6000803e3d6000fd5b505050506040513d602081101561219457600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b15801561220c57600080fd5b505afa158015612220573d6000803e3d6000fd5b505050506040513d604081101561223657600080fd5b508051602090910151909250905061224e8282612faa565b94505050509250929050565b600081600161228d815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690613001565b506122bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004613181565b949350505050565b6000612320600380868686604051602001808560068111156122e357fe5b60f81b815260010184815260200183815260200182815260200194505050505060405160208183030381529060405261240190919063ffffffff16565b90505b9392505050565b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b1580156123a157600080fd5b505afa1580156123b5573d6000803e3d6000fd5b505050506040513d60208110156123cb57600080fd5b505190505b919050565b63ffffffff8216600090815260976020526040812054821480156123f857508115155b90505b92915050565b81516000906020840161241c64ffffffffff851682846131a2565b95945050505050565b60006123fb612433836131f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613244565b600081600261246881612264565b506122bd6000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088169291906132be565b60008160026124ac81612264565b50600060246124dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613344565b6bffffffffffffffffffffffff1603905060006124f886613358565b60ff16905061252c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716602484846132be565b9695505050505050565b60006123fb826003613389565b60006125707fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166133d6565b905061257f8585858585613412565b50612589816136b5565b5050505050565b60006123fb826005613389565b60006125ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613725565b905060006125db8686868686613412565b905060007f048494fe000000000000000000000000000000000000000000000000000000008761262c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613733565b6126577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000891661225a565b6126827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a16613771565b866126ae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b166137af565b6127036126dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d166137e0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613836565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612789578181015183820152602001612771565b50505050905090810190601f1680156127b65780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b6020831061288757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161284a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146128e9576040519150601f19603f3d011682016040523d82523d6000602084013e6128ee565b606091505b5050905080611768573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561296d57600080fd5b505afa158015612981573d6000803e3d6000fd5b505050506040513d602081101561299757600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b600061252c6005808888888888604051602001808760068111156129d757fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b60208310612a4057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a03565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405261240190919063ffffffff16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261074890849061387a565b3b151590565b600054610100900460ff1680612b335750612b33611956565b80612b41575060005460ff16155b612b96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015612bfc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b612c04613952565b612c0c613a64565b8015612c3b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b63ffffffff8116600090815260976020526040902054806123d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060826001612cce81612264565b50612cd884613bf4565b612d4357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040805160028082526060820183526000926020830190803683370190505090508581600081518110612d7257fe5b602002602001019062ffffff1916908162ffffff1916815250508481600181518110612d9a57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092166020928302919091019091015261252c81613c0e565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612e6990859061387a565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310612ece57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612e91565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310612f5657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f19565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b60006123f86001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b166020820152602480820187905282518083039091018152604490910190915290612401565b600061300d8383613c5e565b61317a57600061302b61301f85613c80565b64ffffffffff16613c86565b91505060006130408464ffffffffff16613c86565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b8381101561313f578181015183820152602001613127565b50505050905090810190601f16801561316c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff16613198858585613d5a565b901c949350505050565b6000806131af8484613ec8565b90506040518111156131bf575060005b806131ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050612323565b61241c858585613f3a565b600061320382613f4d565b1561323c576132357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166002613f9f565b90506123d0565b6123fb613fc5565b600061324f82613fe9565b6132ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b6000806132ca86614026565b6bffffffffffffffffffffffff1690506132e38661403a565b6132f7856132f18489613ec8565b90613ec8565b1115613326577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506122bd565b6133308186613ec8565b905061252c8364ffffffffff1682866131a2565b60181c6bffffffffffffffffffffffff1690565b60006123fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001613181565b600081600681111561339757fe5b60ff166133a384614064565b60ff161480156123f857508160068111156133ba57fe5b6133c384614094565b60068111156133ce57fe5b149392505050565b60008160036133e481612264565b506122bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d6140cf565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a61345e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000871661225a565b6134897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613771565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b1580156134cc57600080fd5b505af11580156134e0573d6000803e3d6000fd5b505050506040513d60208110156134f657600080fd5b5051905060006135277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166137af565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b15801561359c57600080fd5b505afa1580156135b0573d6000803e3d6000fd5b505050506040513d60208110156135c657600080fd5b5051156135dd576135d8828285611931565b613613565b61361382828561360e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166140dd565b61410e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1661364b89896141ea565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff16311080156136e9575066d529ae9e8600004710155b15612c3b5760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b60008160056133e481612264565b600081600561374181612264565b506122bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660616020613d5a565b600081600161377f81612264565b506122bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660046020613d5a565b60006123fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020613181565b60008160056137ee81612264565b506122bd6081806138207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613344565b6bffffffffffffffffffffffff16036006612473565b606060008061384484613344565b6bffffffffffffffffffffffff16905060405191508192506138698483602001614204565b508181016020016040529052919050565b60006138dc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143309092919063ffffffff16565b805190915015610748578080602001905160208110156138fb57600080fd5b5051610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614a89602a913960400191505060405180910390fd5b600054610100900460ff168061396b575061396b611956565b80613979575060005460ff16155b6139ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015612c0c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015612c3b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680613a7d5750613a7d611956565b80613a8b575060005460ff16155b613ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015613b4657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000613b50611952565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612c3b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b6000613bff82612536565b806123fb57506123fb82612590565b6040516060906000613c23846020840161433f565b90506000613c3082613344565b6bffffffffffffffffffffffff1690506000613c4b836143b7565b9184525082016020016040525092915050565b60008164ffffffffff16613c7184613c80565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff161115613cee5760ff600882021684901c613cab816143cb565b61ffff16841793508160ff16601014613cc657601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613c8c565b50600f5b60ff8160ff161015613d545760ff600882021684901c613d11816143cb565b61ffff16831792508160ff16600014613d2c57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613cf2565b50915091565b600060ff8216613d6c57506000612323565b613d7584613344565b6bffffffffffffffffffffffff16613d908460ff8516613ec8565b1115613e3257613dd1613da285614026565b6bffffffffffffffffffffffff16613db986613344565b6bffffffffffffffffffffffff16858560ff166143fb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561313f578181015183820152602001613127565b60208260ff161115613e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614a4f603a913960400191505060405180910390fd5b600882026000613e9e86614026565b6bffffffffffffffffffffffff1690506000613eb983614556565b91909501511695945050505050565b818101828110156123fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b600080613f7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416613344565b6bffffffffffffffffffffffff1690506085811480612323575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b6000613ff482613c80565b64ffffffffff1664ffffffffff141561400f575060006123d0565b600061401a8361403a565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b600061404582613344565b61404e83614026565b016bffffffffffffffffffffffff169050919050565b60006123fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001613181565b60006140c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613c80565b60ff1660068111156123fb57fe5b60006123f883836014613181565b60006123fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660416020613d5a565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561417f57600080fd5b505af1158015614193573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561175457600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b600061420f8361459f565b614264576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614ab36028913960400191505060405180910390fd5b61426d83613fe9565b6142c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614adb602b913960400191505060405180910390fd5b60006142cd84613344565b6bffffffffffffffffffffffff16905060006142e885614026565b6bffffffffffffffffffffffff169050600060405190508481111561430d5760206060fd5b8285848460045afa5061252c61432287613c80565b64ffffffffff168685613f3a565b606061232084846000856145b1565b6000604051828111156143525760206060fd5b506000805b84518110156143aa57600085828151811061436e57fe5b6020026020010151905061438481848701614204565b5061438e81613344565b6bffffffffffffffffffffffff16929092019150600101614357565b506122bd60008483613f3a565b60006143c28261476b565b60200292915050565b60006143dd60048360ff16901c61479f565b60ff161760081b62ffff00166143f28261479f565b60ff1617919050565b6060600061440886613c86565b915050600061441686613c86565b915050600061442486613c86565b915050600061443286613c86565b915050838383836040516020018080614b06603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a8201526050016021614a0082397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b60006145aa8261490b565b1592915050565b60608247101561460c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806149da6026913960400191505060405180910390fd5b61461585612b14565b61468057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106146e957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016146ac565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b5091509150614760828286614933565b979650505050505050565b60006020614791602061477d85613344565b6bffffffffffffffffffffffff1690613ec8565b8161479857fe5b0492915050565b600060f08083179060ff821614156147bb5760309150506123d0565b8060ff1660f114156147d15760319150506123d0565b8060ff1660f214156147e75760329150506123d0565b8060ff1660f314156147fd5760339150506123d0565b8060ff1660f414156148135760349150506123d0565b8060ff1660f514156148295760359150506123d0565b8060ff1660f6141561483f5760369150506123d0565b8060ff1660f714156148555760379150506123d0565b8060ff1660f8141561486b5760389150506123d0565b8060ff1660f914156148815760399150506123d0565b8060ff1660fa14156148975760619150506123d0565b8060ff1660fb14156148ad5760629150506123d0565b8060ff1660fc14156148c35760639150506123d0565b8060ff1660fd14156148d95760649150506123d0565b8060ff1660fe14156148ef5760659150506123d0565b8060ff1660ff14156149055760669150506123d0565b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315614942575081612323565b8251156149525782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561313f57818101518382015260200161312756fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "280:579:54:-:0;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x6080604052600436106101635760003560e01c806397f641ab116100c0578063bc7dbab311610074578063e4ad9a1811610059578063e4ad9a1814610650578063f2fde38b146106d2578063ffa1ad74146107125761016a565b8063bc7dbab31461055f578063ce5494bb146106105761016a565b8063a9bd1226116100a5578063a9bd1226146103f9578063ab2dc3f514610459578063b49c53a7146105295761016a565b806397f641ab146103cf5780639d23c4c7146103e45761016a565b8063546d573d1161011757806383bbb806116100fc57806383bbb8061461031857806386e532d41461035a5780638da5cb5b146103ba5761016a565b8063546d573d146102d9578063715018a6146103035761016a565b80633339df96116101485780633339df961461021357806341bdc8b514610251578063485cc955146102915761016a565b8063044dc0d71461016f57806328b1aea0146101c15761016a565b3661016a57005b600080fd5b34801561017b57600080fd5b506101bf6004803603606081101561019257600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040909101351661073d565b005b3480156101cd57600080fd5b506101bf600480360360608110156101e457600080fd5b50803563ffffffff16906020810135906040013573ffffffffffffffffffffffffffffffffffffffff1661074d565b34801561021f57600080fd5b506102286109b1565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561025d57600080fd5b506101bf6004803603602081101561027457600080fd5b503573ffffffffffffffffffffffffffffffffffffffff166109cd565b34801561029d57600080fd5b506101bf600480360360408110156102b457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020013516610abc565b3480156102e557600080fd5b50610228600480360360208110156102fc57600080fd5b5035610c1a565b34801561030f57600080fd5b506101bf610c42565b34801561032457600080fd5b506103486004803603602081101561033b57600080fd5b503563ffffffff16610cec565b60408051918252519081900360200190f35b34801561036657600080fd5b506101bf6004803603606081101561037d57600080fd5b5063ffffffff813516907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000060208201358116916040013516610cfe565b3480156103c657600080fd5b50610228610d09565b3480156103db57600080fd5b50610348610d25565b3480156103f057600080fd5b50610228610d30565b34801561040557600080fd5b506101bf600480360360a081101561041c57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060208101359063ffffffff60408201351690606081013590608001351515610d4c565b34801561046557600080fd5b506101bf6004803603608081101561047c57600080fd5b63ffffffff8235811692602081013590911691604082013591908101906080810160608201356401000000008111156104b457600080fd5b8201836020820111156104c657600080fd5b803590602001918460018302840111640100000000831117156104e857600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550610ed8945050505050565b34801561053557600080fd5b506101bf6004803603604081101561054c57600080fd5b5063ffffffff8135169060200135611148565b34801561056b57600080fd5b506101bf600480360360a081101561058257600080fd5b73ffffffffffffffffffffffffffffffffffffffff8235169160208101359163ffffffff6040830135169160608101359181019060a0810160808201356401000000008111156105d157600080fd5b8201836020820111156105e357600080fd5b8035906020019184600183028401116401000000008311171561060557600080fd5b50909250905061129c565b34801561061c57600080fd5b506101bf6004803603602081101561063357600080fd5b503573ffffffffffffffffffffffffffffffffffffffff16611486565b34801561065c57600080fd5b506106966004803603604081101561067357600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135169060200135611772565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000909316835260208301919091528051918290030190f35b3480156106de57600080fd5b506101bf600480360360208110156106f557600080fd5b503573ffffffffffffffffffffffffffffffffffffffff1661178a565b34801561071e57600080fd5b5061072761192c565b6040805160ff9092168252519081900360200190f35b610748838383611931565b505050565b610755611952565b73ffffffffffffffffffffffffffffffffffffffff16610773610d09565b73ffffffffffffffffffffffffffffffffffffffff16146107f557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b604080517f40c10f1900000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff8316916340c10f1991604480830192600092919082900301818387803b15801561086957600080fd5b505af115801561087d573d6000803e3d6000fd5b5050604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815230600482015260016024820152905173ffffffffffffffffffffffffffffffffffffffff85169350639dc29fac9250604480830192600092919082900301818387803b1580156108f557600080fd5b505af1158015610909573d6000803e3d6000fd5b505060c954604080517f28b1aea000000000000000000000000000000000000000000000000000000000815263ffffffff881660048201526024810187905273ffffffffffffffffffffffffffffffffffffffff868116604483015291519190921693506328b1aea09250606480830192600092919082900301818387803b15801561099457600080fd5b505af11580156109a8573d6000803e3d6000fd5b50505050505050565b60655473ffffffffffffffffffffffffffffffffffffffff1681565b6109d5611952565b73ffffffffffffffffffffffffffffffffffffffff166109f3610d09565b73ffffffffffffffffffffffffffffffffffffffff1614610a7557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600054610100900460ff1680610ad55750610ad5611956565b80610ae3575060005460ff16155b610b38576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015610b9e57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b60c980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8516179055610be782611967565b801561074857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055505050565b60ca6020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b610c4a611952565b73ffffffffffffffffffffffffffffffffffffffff16610c68610d09565b73ffffffffffffffffffffffffffffffffffffffff1614610cea57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b565b60976020526000908152604090205481565b610748838383611ac4565b60335473ffffffffffffffffffffffffffffffffffffffff1690565b66d529ae9e86000081565b60c95473ffffffffffffffffffffffffffffffffffffffff1681565b81610db857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600660248201527f2172656369700000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b600080610dc58787611c38565b91509150610dd88262ffffff191661225a565b63ffffffff168563ffffffff1614610e5157604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b6000610e5e8588846122c5565b9050610e6b868483611ac4565b6040805186815260208101899052600081830152905163ffffffff881691339173ffffffffffffffffffffffffffffffffffffffff8c16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a45050505050505050565b610ee13361232a565b610f4c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600860248201527f217265706c696361000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b8382610f5882826123d5565b610fc357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f2172656d6f746520726f75746572000000000000000000000000000000000000604482015290519081900360640190fd5b6000610ff9610fd28583612401565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016612425565b905060006110287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661245a565b905060006110577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841661249e565b90506110847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612536565b1561109a5761109589898484612543565b61113d565b6110c57fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008216612590565b156110d6576110958989848461259d565b604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f2176616c696420616374696f6e00000000000000000000000000000000000000604482015290519081900360640190fd5b505050505050505050565b611150611952565b73ffffffffffffffffffffffffffffffffffffffff1661116e610d09565b73ffffffffffffffffffffffffffffffffffffffff16146111f057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b6111f8612902565b63ffffffff168263ffffffff1614158015611218575063ffffffff821615155b61128357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21646f6d61696e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b63ffffffff909116600090815260976020526040902055565b6000806112a98888611c38565b90925090508461131a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21686f6f6b000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6113457fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831661225a565b63ffffffff168663ffffffff16146113be57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f73656e64732074656d706f726172696c792064697361626c6564000000000000604482015290519081900360640190fd5b600061140b8689846113cf3361299e565b89898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129b792505050565b9050611418878483611ac4565b60408051878152602081018a9052600181830152905163ffffffff891691339173ffffffffffffffffffffffffffffffffffffffff8d16917fa3d219cf126a12be40d7ad1ceef46231c987988dd4e686457b610e1b6b80a4bf919081900360600190a4505050505050505050565b60c954604080517f0e71e25100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691630e71e25191602480820192602092909190829003018186803b1580156114fd57600080fd5b505afa158015611511573d6000803e3d6000fd5b505050506040513d602081101561152757600080fd5b5051905073ffffffffffffffffffffffffffffffffffffffff80821690831614156115b357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f21646966666572656e7400000000000000000000000000000000000000000000604482015290519081900360640190fd5b604080517f70a082310000000000000000000000000000000000000000000000000000000081523360048201529051839160009173ffffffffffffffffffffffffffffffffffffffff8416916370a08231916024808301926020929190829003018186803b15801561162457600080fd5b505afa158015611638573d6000803e3d6000fd5b505050506040513d602081101561164e57600080fd5b5051604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101839052905191925073ffffffffffffffffffffffffffffffffffffffff841691639dc29fac9160448082019260009290919082900301818387803b1580156116c857600080fd5b505af11580156116dc573d6000803e3d6000fd5b5050604080517f40c10f1900000000000000000000000000000000000000000000000000000000815233600482015260248101859052905173ffffffffffffffffffffffffffffffffffffffff871693506340c10f199250604480830192600092919082900301818387803b15801561175457600080fd5b505af1158015611768573d6000803e3d6000fd5b5050505050505050565b60008061177f8484611c38565b915091509250929050565b611792611952565b73ffffffffffffffffffffffffffffffffffffffff166117b0610d09565b73ffffffffffffffffffffffffffffffffffffffff161461183257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff811661189e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806149b46026913960400191505060405180910390fd5b60335460405173ffffffffffffffffffffffffffffffffffffffff8084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600081565b61074873ffffffffffffffffffffffffffffffffffffffff84168284612a87565b3390565b600061196130612b14565b15905090565b600054610100900460ff16806119805750611980611956565b8061198e575060005460ff16155b6119e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015611a4957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b606580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8416179055611a91612b1a565b8015611ac057600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b5050565b6000611acf84612c3e565b9050606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639fa92f9d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b3957600080fd5b505afa158015611b4d573d6000803e3d6000fd5b505050506040513d6020811015611b6357600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1663fa31de018583611b8c8787612cc0565b6040518463ffffffff1660e01b8152600401808463ffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015611bea578181015183820152602001611bd2565b50505050905090810190601f168015611c175780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b15801561175457600080fd5b60008060008311611caa57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600560248201527f21616d6e74000000000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015291518793929092169163c86415cb91602480820192602092909190829003018186803b158015611d2057600080fd5b505afa158015611d34573d6000803e3d6000fd5b505050506040513d6020811015611d4a57600080fd5b50511561209857611d7373ffffffffffffffffffffffffffffffffffffffff8616333087612dd4565b6120918173ffffffffffffffffffffffffffffffffffffffff166306fdde036040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611dbe57600080fd5b505af1158015611dd2573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015611e1957600080fd5b8101908080516040519392919084640100000000821115611e3957600080fd5b908301906020820185811115611e4e57600080fd5b8251640100000000811182820188101715611e6857600080fd5b82525081516020918201929091019080838360005b83811015611e95578181015183820152602001611e7d565b50505050905090810190601f168015611ec25780820380516001836020036101000a031916815260200191505b506040525050508273ffffffffffffffffffffffffffffffffffffffff166395d89b416040518163ffffffff1660e01b815260040160006040518083038186803b158015611f0f57600080fd5b505afa158015611f23573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526020811015611f6a57600080fd5b8101908080516040519392919084640100000000821115611f8a57600080fd5b908301906020820185811115611f9f57600080fd5b8251640100000000811182820188101715611fb957600080fd5b82525081516020918201929091019080838360005b83811015611fe6578181015183820152602001611fce565b50505050905090810190601f1680156120135780820380516001836020036101000a031916815260200191505b506040525050508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561206057600080fd5b505afa158015612074573d6000803e3d6000fd5b505050506040513d602081101561208a57600080fd5b5051612e6f565b9150612199565b604080517f9dc29fac00000000000000000000000000000000000000000000000000000000815233600482015260248101869052905173ffffffffffffffffffffffffffffffffffffffff831691639dc29fac91604480830192600092919082900301818387803b15801561210c57600080fd5b505af1158015612120573d6000803e3d6000fd5b505050508073ffffffffffffffffffffffffffffffffffffffff16634815fcb16040518163ffffffff1660e01b815260040160206040518083038186803b15801561216a57600080fd5b505afa15801561217e573d6000803e3d6000fd5b505050506040513d602081101561219457600080fd5b505191505b60c954604080517ff153768600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88811660048301528251600094859492169263f1537686926024808301939192829003018186803b15801561220c57600080fd5b505afa158015612220573d6000803e3d6000fd5b505050506040513d604081101561223657600080fd5b508051602090910151909250905061224e8282612faa565b94505050509250929050565b600081600161228d815b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000841690613001565b506122bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660006004613181565b949350505050565b6000612320600380868686604051602001808560068111156122e357fe5b60f81b815260010184815260200183815260200182815260200194505050505060405160208183030381529060405261240190919063ffffffff16565b90505b9392505050565b606554604080517f5190bc5300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015291516000939290921691635190bc5391602480820192602092909190829003018186803b1580156123a157600080fd5b505afa1580156123b5573d6000803e3d6000fd5b505050506040513d60208110156123cb57600080fd5b505190505b919050565b63ffffffff8216600090815260976020526040812054821480156123f857508115155b90505b92915050565b81516000906020840161241c64ffffffffff851682846131a2565b95945050505050565b60006123fb612433836131f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613244565b600081600261246881612264565b506122bd6000602460015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000088169291906132be565b60008160026124ac81612264565b50600060246124dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613344565b6bffffffffffffffffffffffff1603905060006124f886613358565b60ff16905061252c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716602484846132be565b9695505050505050565b60006123fb826003613389565b60006125707fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166133d6565b905061257f8585858585613412565b50612589816136b5565b5050505050565b60006123fb826005613389565b60006125ca7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613725565b905060006125db8686868686613412565b905060007f048494fe000000000000000000000000000000000000000000000000000000008761262c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008716613733565b6126577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000891661225a565b6126827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008a16613771565b866126ae7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008b166137af565b6127036126dc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008d166137e0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000016613836565b604051602401808863ffffffff1681526020018781526020018663ffffffff1681526020018581526020018473ffffffffffffffffffffffffffffffffffffffff16815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b83811015612789578181015183820152602001612771565b50505050905090810190601f1680156127b65780820380516001836020036101000a031916815260200191505b5098505050505050505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008373ffffffffffffffffffffffffffffffffffffffff16826040518082805190602001908083835b6020831061288757805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0909201916020918201910161284a565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146128e9576040519150601f19603f3d011682016040523d82523d6000602084013e6128ee565b606091505b5050905080611768573d806000803e806000fd5b606554604080517f8d3638f4000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff1691638d3638f4916004808301926020929190829003018186803b15801561296d57600080fd5b505afa158015612981573d6000803e3d6000fd5b505050506040513d602081101561299757600080fd5b5051905090565b73ffffffffffffffffffffffffffffffffffffffff1690565b600061252c6005808888888888604051602001808760068111156129d757fe5b60f81b815260010186815260200185815260200184815260200183815260200182805190602001908083835b60208310612a4057805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612a03565b6001836020036101000a038019825116818451168082178552505050505050905001965050505050505060405160208183030381529060405261240190919063ffffffff16565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261074890849061387a565b3b151590565b600054610100900460ff1680612b335750612b33611956565b80612b41575060005460ff16155b612b96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015612bfc57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b612c04613952565b612c0c613a64565b8015612c3b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1690555b50565b63ffffffff8116600090815260976020526040902054806123d057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f2172656d6f746500000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6060826001612cce81612264565b50612cd884613bf4565b612d4357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600760248201527f21616374696f6e00000000000000000000000000000000000000000000000000604482015290519081900360640190fd5b6040805160028082526060820183526000926020830190803683370190505090508581600081518110612d7257fe5b602002602001019062ffffff1916908162ffffff1916815250508481600181518110612d9a57fe5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009092166020928302919091019091015261252c81613c0e565b6040805173ffffffffffffffffffffffffffffffffffffffff80861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052612e6990859061387a565b50505050565b6000835184845185856040516020018086815260200185805190602001908083835b60208310612ece57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612e91565b51815160209384036101000a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01801990921691161790529201868152855190830192860191508083835b60208310612f5657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101612f19565b6001836020036101000a0380198251168184511680821785525050505050509050018260ff1660f81b8152600101955050505050506040516020818303038152906040528051906020012090509392505050565b60006123f86001604080517fffffffff0000000000000000000000000000000000000000000000000000000060e088901b166020820152602480820187905282518083039091018152604490910190915290612401565b600061300d8383613c5e565b61317a57600061302b61301f85613c80565b64ffffffffff16613c86565b91505060006130408464ffffffffff16613c86565b604080517f5479706520617373657274696f6e206661696c65642e20476f742030780000006020808301919091527fffffffffffffffffffff0000000000000000000000000000000000000000000060b088811b8216603d8501527f2e20457870656374656420307800000000000000000000000000000000000000604785015285901b1660548301528251603e818403018152605e8301938490527f08c379a000000000000000000000000000000000000000000000000000000000909352606282018181528351608284015283519496509294508493839260a2019185019080838360005b8381101561313f578181015183820152602001613127565b50505050905090810190601f16801561316c5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5090919050565b60008160200360080260ff16613198858585613d5a565b901c949350505050565b6000806131af8484613ec8565b90506040518111156131bf575060005b806131ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000915050612323565b61241c858585613f3a565b600061320382613f4d565b1561323c576132357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000083166002613f9f565b90506123d0565b6123fb613fc5565b600061324f82613fe9565b6132ba57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f56616c696469747920617373657274696f6e206661696c656400000000000000604482015290519081900360640190fd5b5090565b6000806132ca86614026565b6bffffffffffffffffffffffff1690506132e38661403a565b6132f7856132f18489613ec8565b90613ec8565b1115613326577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009150506122bd565b6133308186613ec8565b905061252c8364ffffffffff1682866131a2565b60181c6bffffffffffffffffffffffff1690565b60006123fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660246001613181565b600081600681111561339757fe5b60ff166133a384614064565b60ff161480156123f857508160068111156133ba57fe5b6133c384614094565b60068111156133ce57fe5b149392505050565b60008160036133e481612264565b506122bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008516600d6140cf565b60c95460009073ffffffffffffffffffffffffffffffffffffffff1663b869d89a61345e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000871661225a565b6134897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613771565b6040518363ffffffff1660e01b8152600401808363ffffffff16815260200182815260200192505050602060405180830381600087803b1580156134cc57600080fd5b505af11580156134e0573d6000803e3d6000fd5b505050506040513d60208110156134f657600080fd5b5051905060006135277fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000085166137af565b60c954604080517fc86415cb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8681166004830152915193945091169163c86415cb91602480820192602092909190829003018186803b15801561359c57600080fd5b505afa1580156135b0573d6000803e3d6000fd5b505050506040513d60208110156135c657600080fd5b5051156135dd576135d8828285611931565b613613565b61361382828561360e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000089166140dd565b61410e565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1661364b89896141ea565b67ffffffffffffffff167f9f9a97db84f39202ca3b409b63f7ccf7d3fd810e176573c7483088b6f181bbbb600085604051808373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019250505060405180910390a45095945050505050565b66d529ae9e8600008173ffffffffffffffffffffffffffffffffffffffff16311080156136e9575066d529ae9e8600004710155b15612c3b5760405173ffffffffffffffffffffffffffffffffffffffff82169060009066d529ae9e8600009082818181858883f1505050505050565b60008160056133e481612264565b600081600561374181612264565b506122bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660616020613d5a565b600081600161377f81612264565b506122bd7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000851660046020613d5a565b60006123fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660216020613181565b60008160056137ee81612264565b506122bd6081806138207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008816613344565b6bffffffffffffffffffffffff16036006612473565b606060008061384484613344565b6bffffffffffffffffffffffff16905060405191508192506138698483602001614204565b508181016020016040529052919050565b60006138dc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166143309092919063ffffffff16565b805190915015610748578080602001905160208110156138fb57600080fd5b5051610748576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614a89602a913960400191505060405180910390fd5b600054610100900460ff168061396b575061396b611956565b80613979575060005460ff16155b6139ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015612c0c57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790558015612c3b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b600054610100900460ff1680613a7d5750613a7d611956565b80613a8b575060005460ff16155b613ae0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602e815260200180614a21602e913960400191505060405180910390fd5b600054610100900460ff16158015613b4657600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909116610100171660011790555b6000613b50611952565b603380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3508015612c3b57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905550565b6000613bff82612536565b806123fb57506123fb82612590565b6040516060906000613c23846020840161433f565b90506000613c3082613344565b6bffffffffffffffffffffffff1690506000613c4b836143b7565b9184525082016020016040525092915050565b60008164ffffffffff16613c7184613c80565b64ffffffffff16149392505050565b60d81c90565b600080601f5b600f8160ff161115613cee5760ff600882021684901c613cab816143cb565b61ffff16841793508160ff16601014613cc657601084901b93505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613c8c565b50600f5b60ff8160ff161015613d545760ff600882021684901c613d11816143cb565b61ffff16831792508160ff16600014613d2c57601083901b92505b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01613cf2565b50915091565b600060ff8216613d6c57506000612323565b613d7584613344565b6bffffffffffffffffffffffff16613d908460ff8516613ec8565b1115613e3257613dd1613da285614026565b6bffffffffffffffffffffffff16613db986613344565b6bffffffffffffffffffffffff16858560ff166143fb565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815283516024840152835190928392604490910191908501908083836000831561313f578181015183820152602001613127565b60208260ff161115613e8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252603a815260200180614a4f603a913960400191505060405180910390fd5b600882026000613e9e86614026565b6bffffffffffffffffffffffff1690506000613eb983614556565b91909501511695945050505050565b818101828110156123fb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e00000000000000604482015290519081900360640190fd5b606092831b9190911790911b1760181b90565b600080613f7b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008416613344565b6bffffffffffffffffffffffff1690506085811480612323575060a5111592915050565b60d81b7affffffffffffffffffffffffffffffffffffffffffffffffffffff9091161790565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000090565b6000613ff482613c80565b64ffffffffff1664ffffffffff141561400f575060006123d0565b600061401a8361403a565b60405110199392505050565b60781c6bffffffffffffffffffffffff1690565b600061404582613344565b61404e83614026565b016bffffffffffffffffffffffff169050919050565b60006123fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316826001613181565b60006140c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000008316613c80565b60ff1660068111156123fb57fe5b60006123f883836014613181565b60006123fb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000831660416020613d5a565b8373ffffffffffffffffffffffffffffffffffffffff166340c10f1983856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050600060405180830381600087803b15801561417f57600080fd5b505af1158015614193573d6000803e3d6000fd5b505050508373ffffffffffffffffffffffffffffffffffffffff1663cc2ab7c7826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561175457600080fd5b63ffffffff1660209190911b67ffffffff00000000161790565b600061420f8361459f565b614264576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180614ab36028913960400191505060405180910390fd5b61426d83613fe9565b6142c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b815260200180614adb602b913960400191505060405180910390fd5b60006142cd84613344565b6bffffffffffffffffffffffff16905060006142e885614026565b6bffffffffffffffffffffffff169050600060405190508481111561430d5760206060fd5b8285848460045afa5061252c61432287613c80565b64ffffffffff168685613f3a565b606061232084846000856145b1565b6000604051828111156143525760206060fd5b506000805b84518110156143aa57600085828151811061436e57fe5b6020026020010151905061438481848701614204565b5061438e81613344565b6bffffffffffffffffffffffff16929092019150600101614357565b506122bd60008483613f3a565b60006143c28261476b565b60200292915050565b60006143dd60048360ff16901c61479f565b60ff161760081b62ffff00166143f28261479f565b60ff1617919050565b6060600061440886613c86565b915050600061441686613c86565b915050600061442486613c86565b915050600061443286613c86565b915050838383836040516020018080614b06603591397fffffffffffff000000000000000000000000000000000000000000000000000060d087811b821660358401527f2077697468206c656e6774682030780000000000000000000000000000000000603b84015286901b16604a8201526050016021614a0082397fffffffffffff000000000000000000000000000000000000000000000000000060d094851b811660218301527f2077697468206c656e677468203078000000000000000000000000000000000060278301529290931b9091166036830152507f2e00000000000000000000000000000000000000000000000000000000000000603c82015260408051601d818403018152603d90920190529b9a5050505050505050505050565b7f80000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091011d90565b60006145aa8261490b565b1592915050565b60608247101561460c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806149da6026913960400191505060405180910390fd5b61461585612b14565b61468057604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040518082805190602001908083835b602083106146e957805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe090920191602091820191016146ac565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d806000811461474b576040519150601f19603f3d011682016040523d82523d6000602084013e614750565b606091505b5091509150614760828286614933565b979650505050505050565b60006020614791602061477d85613344565b6bffffffffffffffffffffffff1690613ec8565b8161479857fe5b0492915050565b600060f08083179060ff821614156147bb5760309150506123d0565b8060ff1660f114156147d15760319150506123d0565b8060ff1660f214156147e75760329150506123d0565b8060ff1660f314156147fd5760339150506123d0565b8060ff1660f414156148135760349150506123d0565b8060ff1660f514156148295760359150506123d0565b8060ff1660f6141561483f5760369150506123d0565b8060ff1660f714156148555760379150506123d0565b8060ff1660f8141561486b5760389150506123d0565b8060ff1660f914156148815760399150506123d0565b8060ff1660fa14156148975760619150506123d0565b8060ff1660fb14156148ad5760629150506123d0565b8060ff1660fc14156148c35760639150506123d0565b8060ff1660fd14156148d95760649150506123d0565b8060ff1660fe14156148ef5760659150506123d0565b8060ff1660ff14156149055760669150506123d0565b50919050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000009081161490565b60608315614942575081612323565b8251156149525782518084602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181815284516024840152845185939192839260440191908501908083836000831561313f57818101518382015260200161312756fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373416464726573733a20696e73756666696369656e742062616c616e636520666f722063616c6c2e20417474656d7074656420746f20696e646578206174206f6666736574203078496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656454797065644d656d566965772f696e646578202d20417474656d7074656420746f20696e646578206d6f7265207468616e2033322062797465735361666545524332303a204552433230206f7065726174696f6e20646964206e6f74207375636365656454797065644d656d566965772f636f7079546f202d204e756c6c20706f696e74657220646572656654797065644d656d566965772f636f7079546f202d20496e76616c696420706f696e74657220646572656654797065644d656d566965772f696e646578202d204f76657272616e2074686520766965772e20536c696365206973206174203078a164736f6c6343000706000a",
    "sourceMap": "280:579:54:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;696:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;696:161:54;;;;;;;;;;;;;;;;;;:::i;:::-;;7988:409:34;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7988:409:34;;;;;;;;;;;;;;;;:::i;504:50:80:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1353:191;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1353:191:80;;;;:::i;3631:245:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3631:245:34;;;;;;;;;;;:::i;1838:52::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1838:52:34;;:::i;19469:84::-;;;;;;;;;;;;;:::i;456:41:79:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;456:41:79;;;;:::i;:::-;;;;;;;;;;;;;;;;516:174:54;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;516:174:54;;;;;;;;;;;;;;;;;;:::i;1335:85:7:-;;;;;;;;;;;;;:::i;1474:48:34:-;;;;;;;;;;;;;:::i;1638:35::-;;;;;;;;;;;;;:::i;5240:977::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5240:977:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4201:734::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4201:734:34;;-1:-1:-1;4201:734:34;;-1:-1:-1;;;;;4201:734:34:i;1242:214:79:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1242:214:79;;;;;;;;;:::i;6584:987:34:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6584:987:34;;-1:-1:-1;6584:987:34;-1:-1:-1;6584:987:34;:::i;8830:452::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8830:452:34;;;;:::i;331:179:54:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;331:179:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;2261:240:7;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2261:240:7;;;;:::i;171:33:68:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;696:161:54;814:36;825:5;832:6;840:9;814:10;:36::i;:::-;696:161;;;:::o;7988:409:34:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8233:44:34::1;::::0;;;;;8268:4:::1;8233:44;::::0;::::1;::::0;8275:1:::1;8233:44:::0;;;;;;:26:::1;::::0;::::1;::::0;::::1;::::0;:44;;;;;-1:-1:-1;;8233:44:34;;;;;;;-1:-1:-1;8233:26:34;:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8287:44:34::1;::::0;;;;;8322:4:::1;8287:44;::::0;::::1;::::0;8329:1:::1;8287:44:::0;;;;;;:26:::1;::::0;::::1;::::0;-1:-1:-1;8287:26:34::1;::::0;-1:-1:-1;8287:44:34;;;;;-1:-1:-1;;8287:44:34;;;;;;;-1:-1:-1;8287:26:34;:44;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;8341:13:34::1;::::0;:49:::1;::::0;;;;;::::1;::::0;::::1;;::::0;::::1;::::0;;;;;;;:13:::1;:49:::0;;::::1;::::0;;;;;;:13;;;::::1;::::0;-1:-1:-1;8341:26:34::1;::::0;-1:-1:-1;8341:49:34;;;;;:13:::1;::::0;:49;;;;;;;:13;;:49;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;7988:409:::0;;;:::o;504:50:80:-;;;;;;:::o;1353:191::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1468:21:80::1;:69:::0;;;::::1;;::::0;;;::::1;::::0;;;::::1;::::0;;1353:191::o;3631:245:34:-;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;3756:13:34::1;:46:::0;;;::::1;;::::0;::::1;;::::0;;3812:57:::1;3846:22:::0;3812:33:::1;:57::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;3631:245:34;;;:::o;1838:52::-;;;;;;;;;;;;;;;:::o;19469:84::-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19469:84:34:o;456:41:79:-;;;;;;;;;;;;;:::o;516:174:54:-;640:43;661:4;667:7;676:6;640:20;:43::i;1335:85:7:-;1407:6;;;;1335:85;:::o;1474:48:34:-;1512:10;1474:48;:::o;1638:35::-;;;;;;:::o;5240:977::-;5513:24;5505:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5599:16;5617:20;5641:28;5653:6;5661:7;5641:11;:28::i;:::-;5598:71;;;;5716:17;:8;:15;;;;:17::i;:::-;5700:33;;:12;:33;;;5679:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5830:15;5848:109;5890:10;5914:7;5935:12;5848:28;:109::i;:::-;5830:127;;6026:53;6047:12;6061:8;6071:7;6026:20;:53::i;:::-;6144:66;;;;;;;;;;;;6204:5;6144:66;;;;;;;;;;6157:10;;6144:66;;;;;;;;;;;;;;5240:977;;;;;;;;:::o;4201:734::-;786:22:80;797:10;786;:22::i;:::-;778:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4373:7:34::1;4382;885:33:79;901:7;910;885:15;:33::i;:::-;877:60;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;4450:12:34::2;4465:31;:15;:8:::0;4450:12;4465::::2;:15::i;:::-;:29:::0;::::2;;:31::i;:::-;4450:46:::0;-1:-1:-1;4506:16:34::2;4525:14;:12:::0;;::::2;;:14::i;:::-;4506:33:::0;-1:-1:-1;4549:15:34::2;4567:13;:11:::0;;::::2;;:13::i;:::-;4549:31:::0;-1:-1:-1;4649:20:34::2;:18:::0;;::::2;;:20::i;:::-;4645:284;;;4685:51;4701:7;4710:6;4718:8;4728:7;4685:15;:51::i;:::-;4645:284;;;4757:26;:24:::0;;::::2;;:26::i;:::-;4753:176;;;4799:57;4821:7;4830:6;4838:8;4848:7;4799:21;:57::i;4753:176::-;4887:31;::::0;;::::2;::::0;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;::::2;::::0;;;;;;;;;;;;;::::2;;947:1:79;;;831::80::1;;4201:734:34::0;;;;:::o;1242:214:79:-;1558:12:7;:10;:12::i;:::-;1547:23;;:7;:5;:7::i;:::-;:23;;;1539:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1371:14:79::1;:12;:14::i;:::-;1360:25;;:7;:25;;;;:41;;;;-1:-1:-1::0;1389:12:79::1;::::0;::::1;::::0;::::1;1360:41;1352:61;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;1423:16;::::0;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:26;1242:214::o;6584:987:34:-;6812:16;6830:20;6854:28;6866:6;6874:7;6854:11;:28::i;:::-;6811:71;;-1:-1:-1;6811:71:34;-1:-1:-1;6900:25:34;6892:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6982:17;:15;;;;:17::i;:::-;6966:33;;:12;:33;;;6945:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7101:15;7119:192;7167:11;7192:7;7213:12;7239:38;7266:10;7239:26;:38::i;:::-;7291:10;;7119:192;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7119:34:34;;-1:-1:-1;;;7119:192:34:i;:::-;7101:210;;7380:53;7401:12;7415:8;7425:7;7380:20;:53::i;:::-;7498:66;;;;;;;;;;;;7559:4;7498:66;;;;;;;;;;7511:10;;7498:66;;;;;;;;;;;;;;6584:987;;;;;;;;;:::o;8830:452::-;8907:13;;:44;;;;;;:13;:44;;;;;;;;;8884:20;;8907:13;;;;;:34;;:44;;;;;;;;;;;;;;;:13;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8907:44:34;;-1:-1:-1;8969:24:34;;;;;;;;;8961:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9153:26;;;;;;9168:10;9153:26;;;;;;9119:8;;9086:17;;9153:14;;;;;;:26;;;;;;;;;;;;;;:14;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9153:26:34;9189:27;;;;;;9199:10;9189:27;;;;;;;;;;;;9153:26;;-1:-1:-1;9189:9:34;;;;;;:27;;;;;-1:-1:-1;;9189:27:34;;;;;;;;-1:-1:-1;9189:9:34;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9226:49:34;;;;;;9258:10;9226:49;;;;;;;;;;;;:31;;;;-1:-1:-1;9226:31:34;;-1:-1:-1;9226:49:34;;;;;-1:-1:-1;;9226:49:34;;;;;;;-1:-1:-1;9226:31:34;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8830:452;;;;:::o;331:179:54:-;416:16;434:20;477:26;489:5;496:6;477:11;:26::i;:::-;470:33;;;;331:179;;;;;:::o;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;171:33:68:-;203:1;171:33;:::o;16672:185:34:-;16802:48;:27;;;16830:10;16842:7;16802:27;:48::i;828:104:18:-;915:10;828:104;:::o;1952:123:11:-;2000:4;2024:44;2062:4;2024:29;:44::i;:::-;2023:45;2016:52;;1952:123;:::o;884:228:80:-;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;1010:21:80::1;:69:::0;;;::::1;;::::0;::::1;;::::0;;1089:16:::1;:14;:16::i;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;884:228:80;;:::o;11542:473:34:-;11741:15;11759:29;11775:12;11759:15;:29::i;:::-;11741:47;;11853:21;;;;;;;;;;;:26;;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11853:28:34;11848:43;;;11905:12;11931:7;11952:46;11980:8;11990:7;11952:27;:46::i;:::-;11848:160;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9813:1239;9901:16;9919:20;10015:1;10005:7;:11;9997:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10191:13;;:35;;;;;;:13;:35;;;;;;;;;10114:6;;10191:13;;;;;:27;;:35;;;;;;;;;;;;;;;:13;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10191:35:34;10187:696;;;10351:67;:31;;;10383:10;10403:4;10410:7;10351:31;:67::i;:::-;10521:129;10567:2;:7;;;:9;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10567:9:34;;;;;;;;;;-1:-1:-1;10567:9:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10594:2;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10594:11:34;;;;;;;;;;-1:-1:-1;10594:11:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10623:2;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10623:13:34;10521:28;:129::i;:::-;10506:144;;10187:696;;;10799:28;;;;;;10807:10;10799:28;;;;;;;;;;;;:7;;;;;;:28;;;;;-1:-1:-1;;10799:28:34;;;;;;;-1:-1:-1;10799:7:34;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10856:2;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10856:16:34;;-1:-1:-1;10187:696:34;10951:13;;:32;;;;;;:13;:32;;;;;;;;;10920:14;;;;10951:13;;;:24;;:32;;;;;;;;;;;;:13;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10951:32:34;;;;;;;;;-1:-1:-1;10951:32:34;-1:-1:-1;11004:41:34;10951:32;;11004:27;:41::i;:::-;10993:52;;9813:1239;;;;;;;;:::o;8465:193:33:-;8590:6;8548:8;8558:13;2754:28;8558:13;2771:10;2754:16;;;;;:28::i;:::-;-1:-1:-1;8626:24:33::1;:18:::0;;::::1;8645:1;8648;8626:18;:24::i;:::-;8612:39:::0;8465:193;-1:-1:-1;;;;8465:193:33:o;5595:288::-;5722:7;5760:116;5847:14;5777;5793:3;5798:5;5805:12;5760:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:62;;:116;;;;:::i;:::-;5741:135;;5595:288;;;;;;:::o;2092:178:80:-;2213:21;;:50;;;;;;:21;:50;;;;;;;;;2186:4;;2213:21;;;;;:31;;:50;;;;;;;;;;;;;;;:21;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2213:50:80;;-1:-1:-1;2092:178:80;;;;:::o;1973:191:79:-;2105:16;;;2078:4;2105:16;;;:7;:16;;;;;;:27;;:52;;;;-1:-1:-1;2136:21:79;;;2105:52;2098:59;;1973:191;;;;;:::o;13237:368:32:-;13341:10;;13307:7;;13496:4;13487:14;;13572:26;;;;13487:14;13341:10;13572:5;:26::i;:::-;13565:33;13237:368;-1:-1:-1;;;;;13237:368:32:o;14300:127:33:-;14361:7;14387:33;:19;14400:5;14387:12;:19::i;:::-;:31;;;:33::i;11640:217::-;11766:7;11724:8;11734:13;2754:28;11734:13;2771:10;;2754:28;-1:-1:-1;11796:54:33::1;11811:1;2120:2;11835:13;11828:21;11796:14:::0;;::::1;::::0;:54;;:14:::1;:54::i;13474:319::-:0;13599:7;13557:8;13567:13;2754:28;13567:13;2771:10;;2754:28;-1:-1:-1;13622:18:33::1;2120:2;13643:14;:12:::0;;::::1;;:14::i;:::-;:29;;;13622:50;;13682:12;13704:17;13712:8;13704:7;:17::i;:::-;13697:25;;::::0;-1:-1:-1;13739:47:33::1;:14:::0;;::::1;2120:2;13768:10:::0;13697:25;13739:14:::1;:47::i;:::-;13732:54:::0;13474:319;-1:-1:-1;;;;;;13474:319:33:o;4923:121::-;4983:4;5006:31;5013:7;5022:14;5006:6;:31::i;12529:421:34:-;12735:18;12756:22;:20;;;;:22::i;:::-;12735:43;;12811:59;12823:7;12832:6;12840:8;12850:7;12859:10;12811:11;:59::i;:::-;;12926:17;12932:10;12926:5;:17::i;:::-;12529:421;;;;;:::o;5226:133:33:-;5292:4;5315:37;5322:7;5331:20;5315:6;:37::i;13426:1292:34:-;13634:13;13650:17;:15;;;;:17::i;:::-;13634:33;;13700:14;13717:54;13729:7;13738:6;13746:8;13756:7;13765:5;13717:11;:54::i;:::-;13700:71;-1:-1:-1;13844:18:34;13901:30;13945:7;13966:16;:14;;;;:16::i;:::-;13996:17;:15;;;;:17::i;:::-;14027:13;:11;;;;:13::i;:::-;14054:6;14074:14;:12;;;;:14::i;:::-;14102:27;:19;:17;;;;:19::i;:::-;:25;;;:27::i;:::-;13865:274;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13844:295;;14435:13;14454:5;:10;;14465:5;14454:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14434:37;;;14534:8;14529:183;;14597:16;14651:4;14648:1;;14630:26;14683:4;14648:1;14673:15;2391:122:80;2471:21;;:35;;;;;;;;2446:6;;2471:21;;;:33;;:35;;;;;;;;;;;;;;:21;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2471:35:80;;-1:-1:-1;2391:122:80;:::o;999:129:75:-;1097:23;;;999:129::o;6215:531:33:-;6408:7;6446:293;6717:20;6501;6543:5;6570;6597:12;6631:7;6660:10;6446:242;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:263;;:293;;;;:::i;704:175:28:-;813:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;836:23;813:58;;;786:86;;806:5;;786:19;:86::i;737:413:17:-;1097:20;1135:8;;;737:413::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;:::-;1794:14:11::0;1790:66;;;1840:5;1824:21;;;;;;1790:66;935:126:7;:::o;2433:203:79:-;2562:16;;;2521:15;2562:16;;;:7;:16;;;;;;2596:21;2588:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3703:379:33;3852:12;3810:8;3820:13;2754:28;3820:13;2771:10;;2754:28;;3888:22:::1;3902:7;3888:13;:22::i;:::-;3880:42;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;3958:16;::::0;;3972:1:::1;3958:16:::0;;;;;::::1;::::0;;3932:23:::1;::::0;3958:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;3958:16:33::1;3932:42;;3996:8;3984:6;3991:1;3984:9;;;;;;;;;;;;;:20;;;;;;;;;;;::::0;::::1;4026:7;4014:6;4021:1;4014:9;;;;;;;;:19:::0;;;::::1;:9;::::0;;::::1;::::0;;;;;;;:19;4050:25:::1;4068:6:::0;4050:17:::1;:25::i;885:203:28:-:0;1012:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1035:27;1012:68;;;985:96;;1005:5;;985:19;:96::i;:::-;885:203;;;;:::o;7902:429:33:-;8040:7;8149:5;8143:19;8184:5;8217:7;8211:21;8254:7;8283:9;8105:205;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8105:205:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8078:246;;;;;;8059:265;;7902:429;;;;;:::o;7247:193::-;7346:7;7376:57;7418:13;7376:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:34;:57::i;9686:578:32:-;9764:7;9788:26;9795:7;9804:9;9788:6;:26::i;:::-;9783:451;;9833:9;9846:35;9864:15;9871:7;9864:6;:15::i;:::-;9856:24;;9846:9;:35::i;:::-;9830:51;;;9898:9;9911:29;9929:9;9921:18;;9911:9;:29::i;:::-;9998:186;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10212:11;;;;;;;;;;;;;;;;;;9895:45;;-1:-1:-1;9998:186:32;;-1:-1:-1;9998:186:32;;10212:11;;;;;;;;;;;9954:17;10212:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9783:451;-1:-1:-1;10250:7:32;;9686:578;-1:-1:-1;9686:578:32:o;20525:191::-;20614:14;20697:6;20692:2;:11;20707:1;20691:17;20647:62;;20655:30;20661:7;20670:6;20678;20655:5;:30::i;:::-;20647:62;;;20525:191;-1:-1:-1;;;;20525:191:32:o;12397:443::-;12478:15;;12520:14;:4;12529;12520:8;:14::i;:::-;12505:29;;12657:4;12651:11;12645:4;12642:21;12639:2;;;-1:-1:-1;12690:1:32;12639:2;12728:9;12724:51;;12760:4;12753:11;;;;;12724:51;12794:39;12815:5;12822:4;12828;12794:20;:39::i;13926:234:33:-;13989:7;14012:30;14033:8;14012:20;:30::i;:::-;14008:106;;;14065:38;:15;;;14088:13;14065:15;:38::i;:::-;14058:45;;;;14008:106;14130:23;:21;:23::i;8826:165:32:-;8887:7;8914:16;8922:7;8914;:16::i;:::-;8906:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8977:7:32;8826:165::o;16713:370::-;16814:7;16833:12;16848;16852:7;16848:3;:12::i;:::-;16833:27;;;;16950:12;16954:7;16950:3;:12::i;:::-;16921:26;16942:4;16921:16;:4;16930:6;16921:8;:16::i;:::-;:20;;:26::i;:::-;:41;16917:83;;;16985:4;16978:11;;;;;16917:83;17017:16;:4;17026:6;17017:8;:16::i;:::-;17010:23;;17050:26;17056:7;17050:26;;17065:4;17071;17050:5;:26::i;15855:291::-;16110:2;16106:16;2800:26;16102:28;;16008:132::o;9523:131:33:-;9581:5;9611:35;:18;;;2120:2;9644:1;9611:18;:35::i;4562:191::-;4631:4;4695:5;4689:12;;;;;;;;4666:35;;:19;4677:7;4666:10;:19::i;:::-;:35;;;:80;;;;;4741:5;4717:29;;;;;;;;:20;4729:7;4717:11;:20::i;:::-;:29;;;;;;;;;;4562:191;-1:-1:-1;;;4562:191:33:o;10482:301::-;10628:7;10578:15;10595:14;2754:28;10595:14;2771:10;;2754:28;-1:-1:-1;10744:32:33::1;:28:::0;;::::1;10773:2;10744:28;:32::i;15331:1077:34:-:0;15772:13;;15502:14;;15772:13;;:30;15816:17;:15;;;;:17::i;:::-;15847:13;:11;;;;:13::i;:::-;15772:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15772:98:34;;-1:-1:-1;15908:15:34;15926:14;:12;;;;:14::i;:::-;16012:13;;:35;;;;;;:13;:35;;;;;;;;;15908:32;;-1:-1:-1;16012:13:34;;;:27;;:35;;;;;;;;;;;;;;;:13;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16012:35:34;16008:197;;;16063:39;16074:6;16082:7;16091:10;16063;:39::i;:::-;16008:197;;;16133:61;16143:6;16151:7;16160:10;16172:21;:19;;;;:21::i;:::-;16133:9;:61::i;:::-;16336:10;16249:152;;16316:6;16249:152;;16270:32;16286:7;16295:6;16270:15;:32::i;:::-;16249:152;;;16368:1;16384:7;16249:152;;;;;;;;;;;;;;;;;;;;;;;;;;15331:1077;;;;;;;;:::o;17954:692::-;1512:10;18025;:18;;;:32;:84;;;;;1512:10;18073:21;:36;;18025:84;18008:632;;;18592:37;;:24;;;;:37;;1512:10;;18592:37;;;;1512:10;18592:24;:37;;-1:-1:-1;;;;;17954:692:34;:::o;12041:216:33:-;12188:7;12132:15;12149:20;2754:28;12149:20;2771:10;;12418:320;12564:7;12508:15;12525:20;2754:28;12525:20;2771:10;;2754:28;-1:-1:-1;12702:29:33::1;:21:::0;;::::1;12724:2;12728;12702:21;:29::i;8784:214::-:0;8905:7;8863:8;8873:13;2754:28;8873:13;2771:10;;2754:28;-1:-1:-1;8970:21:33::1;:14:::0;;::::1;8985:1;8988:2;8970:14;:21::i;10925:191::-:0;10987:7;11076:33;:25;;;11102:2;11106;11076:25;:33::i;12909:426::-;13058:7;13002:15;13019:20;2754:28;13019:20;2771:10;;2754:28;-1:-1:-1;13150:178:33::1;2389:3;::::0;13228:21:::1;:19:::0;;::::1;;:21::i;:::-;:45;;;13298:15;13291:23;::::0;27680:614:32;27735:16;27763:11;27784:12;27799;27803:7;27799:3;:12::i;:::-;27784:27;;;;27929:4;27923:11;27916:18;;27984:3;27977:10;;28006:33;28019:7;28028:3;28034:4;28028:10;28006:12;:33::i;:::-;-1:-1:-1;28161:14:32;;;28177:4;28157:25;28151:4;28144:39;28224:17;;28058:230;;-1:-1:-1;28058:230:32:o;2967:751:28:-;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;3412:27;;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:28;3491:221;;3635:10;3624:30;;;;;;;;;;;;;;;-1:-1:-1;3624:30:28;3616:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;2995:141:33:-;3058:4;3081:19;3092:7;3081:10;:19::i;:::-;:48;;;;3104:25;3121:7;3104:16;:25::i;30791:744:32:-;31012:4;31006:11;30855:16;;30883:11;31086:32;31097:8;31113:4;31107:10;;31086;:32::i;:::-;31067:51;;31128:16;31147:13;31151:8;31147:3;:13::i;:::-;31128:32;;;;31170:18;31191:19;31201:8;31191:9;:19::i;:::-;31348:21;;;-1:-1:-1;31468:20:32;;31490:4;31464:31;31458:4;31451:45;-1:-1:-1;31355:3:32;31230:299;-1:-1:-1;;31230:299:32:o;9256:132::-;9330:4;9372:9;9353:28;;:15;9360:7;9353:6;:15::i;:::-;:28;;;;9256:132;-1:-1:-1;;;9256:132:32:o;13797:276::-;14016:3;14012:17;;13886:181::o;4809:556::-;4863:13;;4919:2;4904:202;4927:2;4923:1;:6;;;4904:202;;;4973:13;4984:1;4980:5;;4973:13;;;;5010:14;4973:13;5010:7;:14::i;:::-;5001:23;;;;;;5042:1;:7;;5047:2;5042:7;5038:58;;5079:2;5069:12;;;;;5038:58;-1:-1:-1;4931:6:32;;4904:202;;;-1:-1:-1;5169:2:32;5154:205;5177:3;5173:1;:7;;;5154:205;;;5225:13;5236:1;5232:5;;5225:13;;;;5263:14;5225:13;5263:7;:14::i;:::-;5253:24;;;;;;5295:1;:6;;5300:1;5295:6;5291:58;;5332:2;5321:13;;;;;5291:58;-1:-1:-1;5183:6:32;;5154:205;;;;4809:556;;;:::o;19502:677::-;19587:14;19617:11;;;19613:37;;-1:-1:-1;19646:1:32;19631:17;;19613:37;19684:12;19688:7;19684:3;:12::i;:::-;19663:33;;:18;:6;:18;;;:10;:18::i;:::-;:33;19659:140;;;19719:68;19735:12;19739:7;19735:3;:12::i;:::-;19719:68;;19749:12;19753:7;19749:3;:12::i;:::-;19719:68;;19763:6;19779;19771:15;;19719;:68::i;:::-;19712:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19659:140;19826:2;19816:6;:12;;;;19808:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19929:1;19920:10;;19902:15;19955:12;19959:7;19955:3;:12::i;:::-;19940:27;;;;19977:13;19993:19;20002:9;19993:8;:19::i;:::-;20137:17;;;;20131:24;20127:36;;;-1:-1:-1;;;;;20031:142:32:o;2553:172:31:-;2638:7;;;2663;;;;2655:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11432:426:32;11664:2;11660:27;;;11734:17;;;;11726:26;;;11799:17;11795:2;11791:26;;11563:289::o;3293:241:33:-;3361:4;;3392:11;:9;;;;:11::i;:::-;3377:26;;;-1:-1:-1;3440:27:33;3432:35;;;:95;;-1:-1:-1;3491:36:33;-1:-1:-1;3483:44:33;;3413:114;-1:-1:-1;;3293:241:33:o;10499:390:32:-;10858:3;10854:18;10792:25;;;;10842:31;;10642:241::o;7319:80::-;7388:4;7319:80;:::o;8272:319::-;8329:8;8353:15;8360:7;8353:6;:15::i;:::-;:31;;8372:12;8353:31;8349:52;;;-1:-1:-1;8394:5:32;8387:12;;8349:52;8410:12;8425;8429:7;8425:3;:12::i;:::-;8568:4;8562:11;-1:-1:-1;8549:26:32;;8456:129;-1:-1:-1;;;8456:129:32:o;14658:373::-;14994:3;14990:17;2800:26;14986:29;;14811:214::o;16320:113::-;16373:7;16414:12;16418:7;16414:3;:12::i;:::-;16399;16403:7;16399:3;:12::i;:::-;:27;16392:34;;;;16320:113;;;:::o;9792:121:33:-;9852:5;9882:23;:17;;;9852:5;9903:1;9882:17;:23::i;4222:118::-;4281:5;4317:14;:12;;;;:14::i;:::-;4305:28;;;;;;;;;21433:159:32;21511:7;21553:30;21563:7;21572:6;21580:2;21553:9;:30::i;11268:240:33:-;11361:7;11472:29;:21;;;11494:2;11498;11472:21;:29::i;17153:416:34:-;17420:6;17407:25;;;17433:10;17445:7;17407:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17526:6;17513:35;;;17549:12;17513:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19095:171;19227:32;;19247:2;19228:21;;;;;;19227:32;;19095:171::o;26400:910:32:-;26478:15;26513:16;26521:7;26513;:16::i;:::-;26505:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26592:16;26600:7;26592;:16::i;:::-;26584:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26666:12;26681;26685:7;26681:3;:12::i;:::-;26666:27;;;;26703:15;26721:12;26725:7;26721:3;:12::i;:::-;26703:30;;;;26744:11;26873:4;26867:11;26860:18;;26960:7;26955:3;26952:16;26949:2;;;27000:4;26994;26987:18;26949:2;27215:4;27206:7;27200:4;27191:7;27188:1;27181:5;27170:50;27166:55;27251:52;27272:15;27279:7;27272:6;:15::i;:::-;27251:52;;27289:7;27298:4;27251:20;:52::i;3581:193:29:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3715:21;:52::i;28842:717:32:-;28930:18;29072:4;29066:11;29159:9;29154:3;29151:18;29148:2;;;29201:4;29195;29188:18;29148:2;;29264:15;29298:9;29293:194;29317:8;:15;29313:1;:19;29293:194;;;29354:15;29372:8;29381:1;29372:11;;;;;;;;;;;;;;29354:29;;29397:42;29410:7;29431;29419:9;:19;29397:12;:42::i;:::-;;29464:12;29468:7;29464:3;:12::i;:::-;29453:23;;;;;;;-1:-1:-1;29334:4:32;;29293:194;;;;29509:43;29530:1;29533:9;29544:7;29509:20;:43::i;15578:111::-;15637:7;15663:14;15669:7;15663:5;:14::i;:::-;15680:2;15663:19;;15578:111;-1:-1:-1;;15578:111:32:o;4286:199::-;4336:14;4373:18;4389:1;4383:2;:7;;;;4373:9;:18::i;:::-;4362:29;;;4427:1;4415:13;;;4449;4459:2;4449:9;:13::i;:::-;4438:24;;;;4286:199;-1:-1:-1;4286:199:32:o;18259:741::-;18405:17;18437:9;18450:15;18460:4;18450:9;:15::i;:::-;18434:31;;;18478:9;18491:15;18501:4;18491:9;:15::i;:::-;18475:31;;;18519:9;18532:17;18542:6;18532:9;:17::i;:::-;18516:33;;;18562:9;18575:17;18585:6;18575:9;:17::i;:::-;18559:33;;;18742:1;18804;18884;18946;18628:355;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18628:355:32;;;;;;;;;;;;;;;;;;;;;;18259:741;-1:-1:-1;;;;;;;;;;;18259:741:32:o;6845:366::-;7115:66;7085:12;;;;7064:131;;6970:235::o;7750:103::-;7807:4;7831:15;7838:7;7831:6;:15::i;:::-;7830:16;;7750:103;-1:-1:-1;;7750:103:32:o;4608:523:29:-;4735:12;4792:5;4767:21;:30;;4759:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4981:12;4995:23;5022:6;:11;;5042:5;5050:4;5022:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:29:o;15237:122:32:-;15292:7;15350:2;15318:29;15344:2;15326:12;15330:7;15326:3;:12::i;:::-;15318:21;;;:25;:29::i;:::-;:34;;;;;;;15237:122;-1:-1:-1;;15237:122:32:o;3073:1041::-;3125:10;3291:4;3286:9;;;;3337:15;;;;3333:35;;;3362:4;3355:11;;;;;3333:35;3386:7;:15;;3397:4;3386:15;3382:35;;;3411:4;3404:11;;;;;3382:35;3435:7;:15;;3446:4;3435:15;3431:35;;;3460:4;3453:11;;;;;3431:35;3484:7;:15;;3495:4;3484:15;3480:35;;;3509:4;3502:11;;;;;3480:35;3533:7;:15;;3544:4;3533:15;3529:35;;;3558:4;3551:11;;;;;3529:35;3582:7;:15;;3593:4;3582:15;3578:35;;;3607:4;3600:11;;;;;3578:35;3631:7;:15;;3642:4;3631:15;3627:35;;;3656:4;3649:11;;;;;3627:35;3680:7;:15;;3691:4;3680:15;3676:35;;;3705:4;3698:11;;;;;3676:35;3729:7;:15;;3740:4;3729:15;3725:35;;;3754:4;3747:11;;;;;3725:35;3778:7;:15;;3789:4;3778:15;3774:35;;;3803:4;3796:11;;;;;3774:35;3827:7;:15;;3838:4;3827:15;3823:35;;;3852:4;3845:11;;;;;3823:35;3876:7;:15;;3887:4;3876:15;3872:35;;;3901:4;3894:11;;;;;3872:35;3925:7;:15;;3936:4;3925:15;3921:35;;;3950:4;3943:11;;;;;3921:35;3974:7;:15;;3985:4;3974:15;3970:35;;;3999:4;3992:11;;;;;3970:35;4023:7;:15;;4034:4;4023:15;4019:35;;;4048:4;4041:11;;;;;4019:35;4072:7;:15;;4083:4;4072:15;4068:35;;;4097:4;4090:11;;;;;4068:35;3073:1041;;;;:::o;7520:101::-;7610:4;7599:15;;;;;7520:101::o;7091:725:29:-;7206:12;7234:7;7230:580;;;-1:-1:-1;7264:10:29;7257:17;;7230:580;7375:17;;:21;7371:429;;7633:10;7627:17;7693:15;7680:10;7676:2;7672:19;7665:44;7582:145;7765:20;;;;;;;;;;;;;;;;;;;;7772:12;;7765:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "methodIdentifiers": {
    "DUST_AMOUNT()": "97f641ab",
    "VERSION()": "ffa1ad74",
    "enrollCustom(uint32,bytes32,address)": "28b1aea0",
    "enrollRemoteRouter(uint32,bytes32)": "b49c53a7",
    "giveLocal(address,uint256,address)": "044dc0d7",
    "handle(uint32,uint32,bytes32,bytes)": "ab2dc3f5",
    "initialize(address,address)": "485cc955",
    "liquidityProvider(bytes32)": "546d573d",
    "migrate(address)": "ce5494bb",
    "owner()": "8da5cb5b",
    "remotes(uint32)": "83bbb806",
    "renounceOwnership()": "715018a6",
    "send(address,uint256,uint32,bytes32,bool)": "a9bd1226",
    "sendToHook(address,uint256,uint32,bytes32,bytes)": "bc7dbab3",
    "sendTransferMessage(uint32,bytes29,bytes29)": "86e532d4",
    "setXAppConnectionManager(address)": "41bdc8b5",
    "takeTokens(address,uint256)": "e4ad9a18",
    "tokenRegistry()": "9d23c4c7",
    "transferOwnership(address)": "f2fde38b",
    "xAppConnectionManager()": "3339df96"
  },
  "ast": {
    "absolutePath": "packages/contracts-bridge/contracts/test/harness/BridgeRouterHarness.sol",
    "id": 42034,
    "exportedSymbols": {
      "BridgeMessage": [
        30301
      ],
      "BridgeRouter": [
        31124
      ],
      "BridgeRouterHarness": [
        41923
      ],
      "EthereumBridgeRouter": [
        31250
      ],
      "EthereumBridgeRouterHarness": [
        42033
      ],
      "TypedMemView": [
        29602
      ]
    },
    "nodeType": "SourceUnit",
    "src": "46:1985:54",
    "nodes": [
      {
        "id": 41864,
        "nodeType": "PragmaDirective",
        "src": "46:22:54",
        "literals": [
          "solidity",
          "0.7",
          ".6"
        ]
      },
      {
        "id": 41867,
        "nodeType": "ImportDirective",
        "src": "70:74:54",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeRouter.sol",
        "file": "../../BridgeRouter.sol",
        "scope": 42034,
        "sourceUnit": 31251,
        "symbolAliases": [
          {
            "foreign": {
              "id": 41865,
              "name": "BridgeRouter",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "78:12:54",
              "typeDescriptions": {}
            }
          },
          {
            "foreign": {
              "id": 41866,
              "name": "EthereumBridgeRouter",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "92:20:54",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 41869,
        "nodeType": "ImportDirective",
        "src": "145:54:54",
        "absolutePath": "packages/contracts-bridge/contracts/BridgeMessage.sol",
        "file": "../../BridgeMessage.sol",
        "scope": 42034,
        "sourceUnit": 30302,
        "symbolAliases": [
          {
            "foreign": {
              "id": 41868,
              "name": "BridgeMessage",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "153:13:54",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 41871,
        "nodeType": "ImportDirective",
        "src": "200:78:54",
        "absolutePath": "node_modules/@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "file": "@summa-tx/memview-sol/contracts/TypedMemView.sol",
        "scope": 42034,
        "sourceUnit": 29603,
        "symbolAliases": [
          {
            "foreign": {
              "id": 41870,
              "name": "TypedMemView",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "208:12:54",
              "typeDescriptions": {}
            }
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 41923,
        "nodeType": "ContractDefinition",
        "src": "280:579:54",
        "nodes": [
          {
            "id": 41890,
            "nodeType": "FunctionDefinition",
            "src": "331:179:54",
            "body": {
              "id": 41889,
              "nodeType": "Block",
              "src": "460:50:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41885,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41875,
                        "src": "489:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 41886,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41877,
                        "src": "496:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 41884,
                      "name": "_takeTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30811,
                      "src": "477:11:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) returns (bytes29,bytes32)"
                      }
                    },
                    "id": 41887,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "477:26:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "functionReturnParameters": 41883,
                  "id": 41888,
                  "nodeType": "Return",
                  "src": "470:33:54"
                }
              ]
            },
            "functionSelector": "e4ad9a18",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "takeTokens",
            "parameters": {
              "id": 41878,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41875,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 41890,
                  "src": "351:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "351:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41877,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 41890,
                  "src": "366:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 41876,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "366:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "350:31:54"
            },
            "returnParameters": {
              "id": 41883,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41880,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 41890,
                  "src": "416:16:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41879,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "416:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41882,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 41890,
                  "src": "434:20:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 41881,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "434:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "415:40:54"
            },
            "scope": 41923,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 41906,
            "nodeType": "FunctionDefinition",
            "src": "516:174:54",
            "body": {
              "id": 41905,
              "nodeType": "Block",
              "src": "630:60:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41900,
                        "name": "dest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41892,
                        "src": "661:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 41901,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41894,
                        "src": "667:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 41902,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41896,
                        "src": "676:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 41899,
                      "name": "_sendTransferMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30843,
                      "src": "640:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                        "typeString": "function (uint32,bytes29,bytes29)"
                      }
                    },
                    "id": 41903,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "640:43:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 41904,
                  "nodeType": "ExpressionStatement",
                  "src": "640:43:54"
                }
              ]
            },
            "functionSelector": "86e532d4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sendTransferMessage",
            "parameters": {
              "id": 41897,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41892,
                  "mutability": "mutable",
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 41906,
                  "src": "554:11:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 41891,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "554:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41894,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 41906,
                  "src": "575:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41893,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "575:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41896,
                  "mutability": "mutable",
                  "name": "action",
                  "nodeType": "VariableDeclaration",
                  "scope": 41906,
                  "src": "600:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41895,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "600:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "544:76:54"
            },
            "returnParameters": {
              "id": 41898,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "630:0:54"
            },
            "scope": 41923,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 41922,
            "nodeType": "FunctionDefinition",
            "src": "696:161:54",
            "body": {
              "id": 41921,
              "nodeType": "Block",
              "src": "804:53:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41916,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41908,
                        "src": "825:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 41917,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41910,
                        "src": "832:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 41918,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41912,
                        "src": "840:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 41915,
                      "name": "_giveLocal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 31033,
                      "src": "814:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,uint256,address)"
                      }
                    },
                    "id": 41919,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "814:36:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 41920,
                  "nodeType": "ExpressionStatement",
                  "src": "814:36:54"
                }
              ]
            },
            "functionSelector": "044dc0d7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "giveLocal",
            "parameters": {
              "id": 41913,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41908,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 41922,
                  "src": "724:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41907,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "724:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41910,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 41922,
                  "src": "747:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 41909,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "747:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41912,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 41922,
                  "src": "771:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41911,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "771:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "714:80:54"
            },
            "returnParameters": {
              "id": 41914,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "804:0:54"
            },
            "scope": 41923,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 41872,
              "name": "BridgeRouter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31124,
              "src": "312:12:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_BridgeRouter_$31124",
                "typeString": "contract BridgeRouter"
              }
            },
            "id": 41873,
            "nodeType": "InheritanceSpecifier",
            "src": "312:12:54"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          31120,
          31124,
          44622,
          45034,
          46768,
          46866
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          41923,
          31124,
          31120,
          46768,
          45034,
          46866,
          23168,
          25131,
          23676,
          44622
        ],
        "name": "BridgeRouterHarness",
        "scope": 42034
      },
      {
        "id": 42033,
        "nodeType": "ContractDefinition",
        "src": "861:1169:54",
        "nodes": [
          {
            "id": 41928,
            "nodeType": "UsingForDirective",
            "src": "928:29:54",
            "libraryName": {
              "id": 41926,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "934:12:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 41927,
              "name": "bytes",
              "nodeType": "ElementaryTypeName",
              "src": "951:5:54",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes_storage_ptr",
                "typeString": "bytes"
              }
            }
          },
          {
            "id": 41931,
            "nodeType": "UsingForDirective",
            "src": "962:31:54",
            "libraryName": {
              "id": 41929,
              "name": "TypedMemView",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29602,
              "src": "968:12:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_TypedMemView_$29602",
                "typeString": "library TypedMemView"
              }
            },
            "typeName": {
              "id": 41930,
              "name": "bytes29",
              "nodeType": "ElementaryTypeName",
              "src": "985:7:54",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes29",
                "typeString": "bytes29"
              }
            }
          },
          {
            "id": 41940,
            "nodeType": "FunctionDefinition",
            "src": "999:69:54",
            "body": {
              "id": 41939,
              "nodeType": "Block",
              "src": "1066:2:54",
              "statements": []
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 41936,
                    "name": "_accountant",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 41933,
                    "src": "1053:11:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 41937,
                "modifierName": {
                  "id": 41935,
                  "name": "EthereumBridgeRouter",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 31250,
                  "src": "1032:20:54",
                  "typeDescriptions": {
                    "typeIdentifier": "t_type$_t_contract$_EthereumBridgeRouter_$31250_$",
                    "typeString": "type(contract EthereumBridgeRouter)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "1032:33:54"
              }
            ],
            "name": "",
            "parameters": {
              "id": 41934,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41933,
                  "mutability": "mutable",
                  "name": "_accountant",
                  "nodeType": "VariableDeclaration",
                  "scope": 41940,
                  "src": "1011:19:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41932,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1011:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1010:21:54"
            },
            "returnParameters": {
              "id": 41938,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1066:0:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 41957,
            "nodeType": "FunctionDefinition",
            "src": "1074:179:54",
            "body": {
              "id": 41956,
              "nodeType": "Block",
              "src": "1203:50:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41952,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41942,
                        "src": "1232:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 41953,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41944,
                        "src": "1239:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 41951,
                      "name": "_takeTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30811,
                      "src": "1220:11:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$_t_bytes29_$_t_bytes32_$",
                        "typeString": "function (address,uint256) returns (bytes29,bytes32)"
                      }
                    },
                    "id": 41954,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1220:26:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_bytes29_$_t_bytes32_$",
                      "typeString": "tuple(bytes29,bytes32)"
                    }
                  },
                  "functionReturnParameters": 41950,
                  "id": 41955,
                  "nodeType": "Return",
                  "src": "1213:33:54"
                }
              ]
            },
            "functionSelector": "e4ad9a18",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "takeTokens",
            "parameters": {
              "id": 41945,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41942,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 41957,
                  "src": "1094:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41941,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1094:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41944,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 41957,
                  "src": "1109:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 41943,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1109:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1093:31:54"
            },
            "returnParameters": {
              "id": 41950,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41947,
                  "mutability": "mutable",
                  "name": "_tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 41957,
                  "src": "1159:16:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41946,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "1159:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41949,
                  "mutability": "mutable",
                  "name": "_detailsHash",
                  "nodeType": "VariableDeclaration",
                  "scope": 41957,
                  "src": "1177:20:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 41948,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1177:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1158:40:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 41973,
            "nodeType": "FunctionDefinition",
            "src": "1259:174:54",
            "body": {
              "id": 41972,
              "nodeType": "Block",
              "src": "1373:60:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41967,
                        "name": "dest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41959,
                        "src": "1404:4:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 41968,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41961,
                        "src": "1410:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 41969,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41963,
                        "src": "1419:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 41966,
                      "name": "_sendTransferMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30843,
                      "src": "1383:20:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                        "typeString": "function (uint32,bytes29,bytes29)"
                      }
                    },
                    "id": 41970,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1383:43:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 41971,
                  "nodeType": "ExpressionStatement",
                  "src": "1383:43:54"
                }
              ]
            },
            "functionSelector": "86e532d4",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "sendTransferMessage",
            "parameters": {
              "id": 41964,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41959,
                  "mutability": "mutable",
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 41973,
                  "src": "1297:11:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 41958,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1297:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41961,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 41973,
                  "src": "1318:15:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41960,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "1318:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41963,
                  "mutability": "mutable",
                  "name": "action",
                  "nodeType": "VariableDeclaration",
                  "scope": 41973,
                  "src": "1343:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes29",
                    "typeString": "bytes29"
                  },
                  "typeName": {
                    "id": 41962,
                    "name": "bytes29",
                    "nodeType": "ElementaryTypeName",
                    "src": "1343:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1287:76:54"
            },
            "returnParameters": {
              "id": 41965,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1373:0:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 41989,
            "nodeType": "FunctionDefinition",
            "src": "1439:161:54",
            "body": {
              "id": 41988,
              "nodeType": "Block",
              "src": "1547:53:54",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 41983,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41975,
                        "src": "1568:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 41984,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41977,
                        "src": "1575:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 41985,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41979,
                        "src": "1583:9:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 41982,
                      "name": "_giveLocal",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        31249
                      ],
                      "referencedDeclaration": 31249,
                      "src": "1557:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (address,uint256,address)"
                      }
                    },
                    "id": 41986,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1557:36:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 41987,
                  "nodeType": "ExpressionStatement",
                  "src": "1557:36:54"
                }
              ]
            },
            "functionSelector": "044dc0d7",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "giveLocal",
            "parameters": {
              "id": 41980,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41975,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 41989,
                  "src": "1467:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41974,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1467:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41977,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "scope": 41989,
                  "src": "1490:14:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 41976,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1490:7:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41979,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nodeType": "VariableDeclaration",
                  "scope": 41989,
                  "src": "1514:17:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 41978,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1514:7:54",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1457:80:54"
            },
            "returnParameters": {
              "id": 41981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1547:0:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 42032,
            "nodeType": "FunctionDefinition",
            "src": "1606:422:54",
            "body": {
              "id": 42031,
              "nodeType": "Block",
              "src": "1763:265:54",
              "statements": [
                {
                  "assignments": [
                    42001
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42001,
                      "mutability": "mutable",
                      "name": "tokenIdView",
                      "nodeType": "VariableDeclaration",
                      "scope": 42031,
                      "src": "1773:19:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 42000,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "1773:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42011,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "expression": {
                                "id": 42006,
                                "name": "BridgeMessage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30301,
                                "src": "1814:13:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                                  "typeString": "type(library BridgeMessage)"
                                }
                              },
                              "id": 42007,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "Types",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 29620,
                              "src": "1814:19:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 42008,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "TokenId",
                            "nodeType": "MemberAccess",
                            "src": "1814:27:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 42005,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1807:6:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 42004,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "1807:6:54",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42009,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1807:35:54",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 42002,
                        "name": "tokenId",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41995,
                        "src": "1795:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 42003,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28766,
                      "src": "1795:11:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 42010,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1795:48:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1773:70:54"
                },
                {
                  "assignments": [
                    42013
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 42013,
                      "mutability": "mutable",
                      "name": "actionView",
                      "nodeType": "VariableDeclaration",
                      "scope": 42031,
                      "src": "1853:18:54",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes29",
                        "typeString": "bytes29"
                      },
                      "typeName": {
                        "id": 42012,
                        "name": "bytes29",
                        "nodeType": "ElementaryTypeName",
                        "src": "1853:7:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 42023,
                  "initialValue": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "expression": {
                              "expression": {
                                "id": 42018,
                                "name": "BridgeMessage",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 30301,
                                "src": "1905:13:54",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_BridgeMessage_$30301_$",
                                  "typeString": "type(library BridgeMessage)"
                                }
                              },
                              "id": 42019,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "Types",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 29620,
                              "src": "1905:19:54",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_enum$_Types_$29620_$",
                                "typeString": "type(enum BridgeMessage.Types)"
                              }
                            },
                            "id": 42020,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "memberName": "TransferToHook",
                            "nodeType": "MemberAccess",
                            "src": "1905:34:54",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_Types_$29620",
                              "typeString": "enum BridgeMessage.Types"
                            }
                          ],
                          "id": 42017,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "1898:6:54",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint40_$",
                            "typeString": "type(uint40)"
                          },
                          "typeName": {
                            "id": 42016,
                            "name": "uint40",
                            "nodeType": "ElementaryTypeName",
                            "src": "1898:6:54",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 42021,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "1898:42:54",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint40",
                          "typeString": "uint40"
                        }
                      ],
                      "expression": {
                        "id": 42014,
                        "name": "action",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41997,
                        "src": "1874:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      "id": 42015,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "ref",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 28766,
                      "src": "1874:10:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes_memory_ptr_$_t_uint40_$returns$_t_bytes29_$bound_to$_t_bytes_memory_ptr_$",
                        "typeString": "function (bytes memory,uint40) pure returns (bytes29)"
                      }
                    },
                    "id": 42022,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1874:76:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes29",
                      "typeString": "bytes29"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "1853:97:54"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 42025,
                        "name": "origin",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41991,
                        "src": "1982:6:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 42026,
                        "name": "nonce",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 41993,
                        "src": "1990:5:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        }
                      },
                      {
                        "id": 42027,
                        "name": "tokenIdView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42001,
                        "src": "1997:11:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      },
                      {
                        "id": 42028,
                        "name": "actionView",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 42013,
                        "src": "2010:10:54",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_uint32",
                          "typeString": "uint32"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        },
                        {
                          "typeIdentifier": "t_bytes29",
                          "typeString": "bytes29"
                        }
                      ],
                      "id": 42024,
                      "name": "_handleTransferToHook",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 30943,
                      "src": "1960:21:54",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint32_$_t_uint32_$_t_bytes29_$_t_bytes29_$returns$__$",
                        "typeString": "function (uint32,uint32,bytes29,bytes29)"
                      }
                    },
                    "id": 42029,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1960:61:54",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 42030,
                  "nodeType": "ExpressionStatement",
                  "src": "1960:61:54"
                }
              ]
            },
            "functionSelector": "e280bc7e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "exposed_handleTransferToHook",
            "parameters": {
              "id": 41998,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 41991,
                  "mutability": "mutable",
                  "name": "origin",
                  "nodeType": "VariableDeclaration",
                  "scope": 42032,
                  "src": "1653:13:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 41990,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1653:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41993,
                  "mutability": "mutable",
                  "name": "nonce",
                  "nodeType": "VariableDeclaration",
                  "scope": 42032,
                  "src": "1676:12:54",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint32",
                    "typeString": "uint32"
                  },
                  "typeName": {
                    "id": 41992,
                    "name": "uint32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1676:6:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint32",
                      "typeString": "uint32"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41995,
                  "mutability": "mutable",
                  "name": "tokenId",
                  "nodeType": "VariableDeclaration",
                  "scope": 42032,
                  "src": "1698:20:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 41994,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1698:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 41997,
                  "mutability": "mutable",
                  "name": "action",
                  "nodeType": "VariableDeclaration",
                  "scope": 42032,
                  "src": "1728:19:54",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 41996,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "1728:5:54",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1643:110:54"
            },
            "returnParameters": {
              "id": 41999,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1763:0:54"
            },
            "scope": 42033,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 41924,
              "name": "EthereumBridgeRouter",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 31250,
              "src": "901:20:54",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_EthereumBridgeRouter_$31250",
                "typeString": "contract EthereumBridgeRouter"
              }
            },
            "id": 41925,
            "nodeType": "InheritanceSpecifier",
            "src": "901:20:54"
          }
        ],
        "contractDependencies": [
          23168,
          23676,
          25131,
          31120,
          31250,
          44622,
          45034,
          46768,
          46866
        ],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          42033,
          31250,
          31120,
          46768,
          45034,
          46866,
          23168,
          25131,
          23676,
          44622
        ],
        "name": "EthereumBridgeRouterHarness",
        "scope": 42034
      }
    ],
    "license": "MIT OR Apache-2.0"
  },
  "id": 54
}