@layerzerolabs/lz-evm-protocol-v2 2.0.13 → 2.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/artifacts/contracts/EndpointV2.sol/EndpointV2.json +82 -92
  2. package/artifacts/contracts/EndpointV2Alt.sol/EndpointV2Alt.json +84 -94
  3. package/artifacts/contracts/EndpointV2View.sol/EndpointV2View.json +209 -0
  4. package/artifacts/contracts/EndpointV2ViewUpgradeable.sol/EndpointV2ViewUpgradeable.json +196 -0
  5. package/artifacts/contracts/MessageLibManager.sol/MessageLibManager.json +12 -12
  6. package/artifacts/contracts/MessagingChannel.sol/MessagingChannel.json +2 -2
  7. package/artifacts/contracts/MessagingComposer.sol/MessagingComposer.json +2 -2
  8. package/artifacts/contracts/interfaces/ILayerZeroEndpointV2.sol/ILayerZeroEndpointV2.json +99 -51
  9. package/artifacts/contracts/interfaces/IMessageLibManager.sol/IMessageLibManager.json +29 -0
  10. package/artifacts/contracts/interfaces/IMessagingChannel.sol/IMessagingChannel.json +29 -0
  11. package/artifacts/contracts/libs/AddressCast.sol/AddressCast.json +14 -3
  12. package/artifacts/contracts/libs/Errors.sol/Errors.json +30 -45
  13. package/artifacts/contracts/libs/GUID.sol/GUID.json +2 -2
  14. package/artifacts/contracts/libs/Transfer.sol/Transfer.json +8 -8
  15. package/artifacts/contracts/messagelib/BlockedMessageLib.sol/BlockedMessageLib.json +3 -3
  16. package/artifacts/contracts/messagelib/SimpleMessageLib.sol/SimpleMessageLib.json +10 -10
  17. package/artifacts/contracts/messagelib/libs/ExecutorOptions.sol/ExecutorOptions.json +5 -5
  18. package/artifacts/contracts/messagelib/libs/PacketV1Codec.sol/PacketV1Codec.json +2 -2
  19. package/contracts/EndpointV2.sol +13 -49
  20. package/contracts/EndpointV2Alt.sol +4 -2
  21. package/contracts/EndpointV2View.sol +12 -0
  22. package/contracts/EndpointV2ViewUpgradeable.sol +86 -0
  23. package/contracts/MessageLibManager.sol +17 -17
  24. package/contracts/MessagingChannel.sol +8 -8
  25. package/contracts/MessagingComposer.sol +2 -2
  26. package/contracts/MessagingContext.sol +1 -1
  27. package/contracts/interfaces/ILayerZeroEndpointV2.sol +2 -13
  28. package/contracts/interfaces/ILayerZeroReceiver.sol +0 -1
  29. package/contracts/interfaces/IMessageLibManager.sol +2 -0
  30. package/contracts/interfaces/IMessagingChannel.sol +2 -0
  31. package/contracts/libs/AddressCast.sol +6 -5
  32. package/contracts/libs/Errors.sol +28 -31
  33. package/contracts/libs/Transfer.sol +5 -5
  34. package/contracts/messagelib/BlockedMessageLib.sol +1 -1
  35. package/contracts/messagelib/SimpleMessageLib.sol +1 -1
  36. package/contracts/messagelib/libs/ExecutorOptions.sol +6 -6
  37. package/package.json +3 -1
@@ -37,12 +37,12 @@
37
37
  },
38
38
  {
39
39
  "inputs": [],
40
- "name": "LzTokenIsAddressZero",
40
+ "name": "LZ_NotImplemented",
41
41
  "type": "error"
42
42
  },
43
43
  {
44
44
  "inputs": [],
45
- "name": "NotImplemented",
45
+ "name": "LzTokenIsAddressZero",
46
46
  "type": "error"
47
47
  },
48
48
  {
@@ -55,11 +55,6 @@
55
55
  "name": "OnlyWhitelistCaller",
56
56
  "type": "error"
57
57
  },
58
- {
59
- "inputs": [],
60
- "name": "ToAddressIsZero",
61
- "type": "error"
62
- },
63
58
  {
64
59
  "inputs": [],
65
60
  "name": "ToIsAddressZero",
@@ -83,7 +78,12 @@
83
78
  "type": "uint256"
84
79
  }
85
80
  ],
86
- "name": "TransferNativeFailed",
81
+ "name": "Transfer_NativeFailed",
82
+ "type": "error"
83
+ },
84
+ {
85
+ "inputs": [],
86
+ "name": "Transfer_ToAddressIsZero",
87
87
  "type": "error"
88
88
  },
89
89
  {
@@ -584,8 +584,8 @@
584
584
  "type": "receive"
585
585
  }
586
586
  ],
587
- "bytecode": "0x60e06040523480156200001157600080fd5b50604051620020033803806200200383398101604081905262000034916200013f565b6200003f33620000d2565b6001600160a01b03808316608081905290821660a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa15801562000091573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b7919062000177565b63ffffffff1660c052505060636002556064600355620001a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200013a57600080fd5b919050565b600080604083850312156200015357600080fd5b6200015e8362000122565b91506200016e6020840162000122565b90509250929050565b6000602082840312156200018a57600080fd5b815163ffffffff811681146200019f57600080fd5b9392505050565b60805160a05160c051611e11620001f260003960006103d40152600061034301526000818161030f015281816106ce015281816107fd01528181610a450152610d070152611e116000f3fe6080604052600436106101845760003560e01c8063715018a6116100d6578063996f79c01161007f578063dabca06311610059578063dabca063146104ff578063f2fde38b1461051f578063fd9be5221461053f5761018b565b8063996f79c01461049c578063aec336e6146104b2578063d80e9bd9146104d25761018b565b80638da5cb5b116100b05780638da5cb5b1461042d5780638f58aa7a1461045857806390953238146104785761018b565b8063715018a6146103ad57806372607537146103c257806372d713221461040b5761018b565b80634389e58f1161013857806361d027b31161011257806361d027b3146103315780636251b637146103655780636750cd4c1461038c5761018b565b80634389e58f146102a257806354fd4d50146102d15780635e280f11146102fd5761018b565b80631881d94d116101695780631881d94d146102145780631c7c294e14610230578063334993ff146102825761018b565b806301ffc9a7146101bd57806312cc947f146101f25761018b565b3661018b57005b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101c957600080fd5b506101dd6101d8366004611451565b61055f565b60405190151581526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046114d5565b6105f8565b005b34801561022057600080fd5b5060026040516101e99190611517565b34801561023c57600080fd5b5060015461025d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b34801561028e57600080fd5b5061021261029d366004611558565b6107d1565b3480156102ae57600080fd5b506102c26102bd3660046116a3565b6107e4565b6040516101e993929190611789565b3480156102dd57600080fd5b5060408051600080825260208201526002918101919091526060016101e9565b34801561030957600080fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033d57600080fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037157600080fd5b5061037a600181565b60405160ff90911681526020016101e9565b34801561039857600080fd5b506101dd6103a73660046117e2565b50600190565b3480156103b957600080fd5b5061021261094a565b3480156103ce57600080fd5b506103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101e9565b34801561041757600080fd5b5061042061095e565b6040516101e991906117fd565b34801561043957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661025d565b34801561046457600080fd5b5061021261047336600461183d565b6109ec565b34801561048457600080fd5b5061048e60025481565b6040519081526020016101e9565b3480156104a857600080fd5b5061048e60035481565b3480156104be57600080fd5b506102126104cd366004611869565b610b47565b3480156104de57600080fd5b506104f26104ed366004611886565b610b96565b6040516101e99190611902565b34801561050b57600080fd5b5061021261051a366004611919565b610bda565b34801561052b57600080fd5b5061021261053a366004611869565b610bf2565b34801561054b57600080fd5b5061021261055a36600461183d565b610cae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f97f025840000000000000000000000000000000000000000000000000000000014806105f257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff1615801590610637575060015473ffffffffffffffffffffffffffffffffffffffff163314155b1561066e576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060405180606001604052806106858585610da1565b63ffffffff16815260200161069a8585610dc4565b81526020016106a98585610de4565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106fe8686610e07565b6107088787610e19565b60405161071692919061194e565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a401600060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b50505050505050565b6107d9610e35565b600391909155600255565b60408051808201909152600080825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461086a576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b61087687611976565b610eb6565b9150845160001461088c5784610918565b6004805461089990611a14565b80601f01602080910402602001604051908101604052809291908181526020018280546108c590611a14565b80156109125780601f106108e757610100808354040283529160200191610912565b820191906000526020600020905b8154815290600101906020018083116108f557829003601f168201915b50505050505b9050604051806040016040528060035481526020018561093957600061093d565b6002545b9052969195509350915050565b610952610e35565b61095c6000610f1b565b565b6004805461096b90611a14565b80601f016020809104026020016040519081016040528092919081815260200182805461099790611a14565b80156109e45780601f106109b9576101008083540402835291602001916109e4565b820191906000526020600020905b8154815290600101906020018083116109c757829003601f168201915b505050505081565b6109f4610e35565b73ffffffffffffffffffffffffffffffffffffffff8216610a41576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611a61565b905073ffffffffffffffffffffffffffffffffffffffff8116610b21576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4273ffffffffffffffffffffffffffffffffffffffff82168484610f90565b505050565b610b4f610e35565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600354815260200183610bc9576000610bcd565b6002545b905290505b949350505050565b610be2610e35565b6004610bee8282611ace565b5050565b610bfa610e35565b73ffffffffffffffffffffffffffffffffffffffff8116610ca2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610cab81610f1b565b50565b610cb6610e35565b73ffffffffffffffffffffffffffffffffffffffff8216610d03576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190611a61565b9050610b4281848461101d565b6000610db1600d60098486611be8565b610dba91611c12565b60e01c9392505050565b6000610dd4602d600d8486611be8565b610ddd91611c5a565b9392505050565b6000610df4600960018486611be8565b610dfd91611c96565b60c01c9392505050565b6000610ddd610e16848461104d565b90565b366000610e298360518187611be8565b915091505b9250929050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c99565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610f05986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611cdc565b6040516020818303038152906040529050919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b4290849061105d565b73ffffffffffffffffffffffffffffffffffffffff831661104257610b42828261116c565b610b42838383611272565b6000610dd4605160318486611be8565b60006110bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112e09092919063ffffffff16565b90508051600014806110e05750808060200190518101906110e09190611da2565b610b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c99565b73ffffffffffffffffffffffffffffffffffffffff82166111b9576040517f32fa6a1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611213576040519150601f19603f3d011682016040523d82523d6000602084013e611218565b606091505b5050905080610b42576040517f2c024f9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c99565b73ffffffffffffffffffffffffffffffffffffffff82166112bf576040517f32fa6a1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4273ffffffffffffffffffffffffffffffffffffffff84168383610f90565b6060610bd28484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113149190611dbf565b60006040518083038185875af1925050503d8060008114611351576040519150601f19603f3d011682016040523d82523d6000602084013e611356565b606091505b509150915061136787838387611372565b979650505050505050565b606083156114085782516000036114015773ffffffffffffffffffffffffffffffffffffffff85163b611401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c99565b5081610bd2565b610bd2838381511561141d5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9991906117fd565b60006020828403121561146357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ddd57600080fd5b60008083601f8401126114a557600080fd5b50813567ffffffffffffffff8111156114bd57600080fd5b602083019150836020828501011115610e2e57600080fd5b600080602083850312156114e857600080fd5b823567ffffffffffffffff8111156114ff57600080fd5b61150b85828601611493565b90969095509350505050565b6020810160038310611552577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561156b57600080fd5b50508035926020909101359150565b600060e0828403121561158c57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156115e4576115e4611592565b60405290565b600082601f8301126115fb57600080fd5b813567ffffffffffffffff8082111561161657611616611592565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561165c5761165c611592565b8160405283815286602085880101111561167557600080fd5b836020870160208301376000602085830101528094505050505092915050565b8015158114610cab57600080fd5b6000806000606084860312156116b857600080fd5b833567ffffffffffffffff808211156116d057600080fd5b6116dc8783880161157a565b945060208601359150808211156116f257600080fd5b506116ff868287016115ea565b925050604084013561171081611695565b809150509250925092565b60005b8381101561173657818101518382015260200161171e565b50506000910152565b6000815180845261175781602086016020860161171b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201526080604082015260006117ad608083018561173f565b82810360608401526117bf818561173f565b9695505050505050565b803563ffffffff811681146117dd57600080fd5b919050565b6000602082840312156117f457600080fd5b610ddd826117c9565b602081526000610ddd602083018461173f565b73ffffffffffffffffffffffffffffffffffffffff81168114610cab57600080fd5b80356117dd81611810565b6000806040838503121561185057600080fd5b823561185b81611810565b946020939093013593505050565b60006020828403121561187b57600080fd5b8135610ddd81611810565b6000806000806060858703121561189c57600080fd5b843567ffffffffffffffff808211156118b457600080fd5b6118c08883890161157a565b955060208701359150808211156118d657600080fd5b506118e387828801611493565b90945092505060408501356118f781611695565b939692955090935050565b8151815260208083015190820152604081016105f2565b60006020828403121561192b57600080fd5b813567ffffffffffffffff81111561194257600080fd5b610bd2848285016115ea565b8183823760009101908152919050565b803567ffffffffffffffff811681146117dd57600080fd5b600060e0823603121561198857600080fd5b6119906115c1565b6119998361195e565b81526119a7602084016117c9565b60208201526119b860408401611832565b60408201526119c9606084016117c9565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156119fc57600080fd5b611a08368286016115ea565b60c08301525092915050565b600181811c90821680611a2857607f821691505b60208210810361158c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215611a7357600080fd5b8151610ddd81611810565b601f821115610b42576000816000526020600020601f850160051c81016020861015611aa75750805b601f850160051c820191505b81811015611ac657828155600101611ab3565b505050505050565b815167ffffffffffffffff811115611ae857611ae8611592565b611afc81611af68454611a14565b84611a7e565b602080601f831160018114611b4f5760008415611b195750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611ac6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611b9c57888601518255948401946001909101908401611b7d565b5085821015611bd857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008085851115611bf857600080fd5b83861115611c0557600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611c525780818660040360031b1b83161692505b505092915050565b803560208310156105f2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611c525760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b16600182015260007fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611d8e81607185016020870161171b565b919091016071019998505050505050505050565b600060208284031215611db457600080fd5b8151610ddd81611695565b60008251611dd181846020870161171b565b919091019291505056fea2646970667358221220d42394ded1cc993f25399ee65cd1f1bdebc165739a074470df0d865221bc676364736f6c63430008160033",
588
- "deployedBytecode": "0x6080604052600436106101845760003560e01c8063715018a6116100d6578063996f79c01161007f578063dabca06311610059578063dabca063146104ff578063f2fde38b1461051f578063fd9be5221461053f5761018b565b8063996f79c01461049c578063aec336e6146104b2578063d80e9bd9146104d25761018b565b80638da5cb5b116100b05780638da5cb5b1461042d5780638f58aa7a1461045857806390953238146104785761018b565b8063715018a6146103ad57806372607537146103c257806372d713221461040b5761018b565b80634389e58f1161013857806361d027b31161011257806361d027b3146103315780636251b637146103655780636750cd4c1461038c5761018b565b80634389e58f146102a257806354fd4d50146102d15780635e280f11146102fd5761018b565b80631881d94d116101695780631881d94d146102145780631c7c294e14610230578063334993ff146102825761018b565b806301ffc9a7146101bd57806312cc947f146101f25761018b565b3661018b57005b6040517fd623472500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101c957600080fd5b506101dd6101d8366004611451565b61055f565b60405190151581526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046114d5565b6105f8565b005b34801561022057600080fd5b5060026040516101e99190611517565b34801561023c57600080fd5b5060015461025d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b34801561028e57600080fd5b5061021261029d366004611558565b6107d1565b3480156102ae57600080fd5b506102c26102bd3660046116a3565b6107e4565b6040516101e993929190611789565b3480156102dd57600080fd5b5060408051600080825260208201526002918101919091526060016101e9565b34801561030957600080fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033d57600080fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037157600080fd5b5061037a600181565b60405160ff90911681526020016101e9565b34801561039857600080fd5b506101dd6103a73660046117e2565b50600190565b3480156103b957600080fd5b5061021261094a565b3480156103ce57600080fd5b506103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101e9565b34801561041757600080fd5b5061042061095e565b6040516101e991906117fd565b34801561043957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661025d565b34801561046457600080fd5b5061021261047336600461183d565b6109ec565b34801561048457600080fd5b5061048e60025481565b6040519081526020016101e9565b3480156104a857600080fd5b5061048e60035481565b3480156104be57600080fd5b506102126104cd366004611869565b610b47565b3480156104de57600080fd5b506104f26104ed366004611886565b610b96565b6040516101e99190611902565b34801561050b57600080fd5b5061021261051a366004611919565b610bda565b34801561052b57600080fd5b5061021261053a366004611869565b610bf2565b34801561054b57600080fd5b5061021261055a36600461183d565b610cae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f97f025840000000000000000000000000000000000000000000000000000000014806105f257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff1615801590610637575060015473ffffffffffffffffffffffffffffffffffffffff163314155b1561066e576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060405180606001604052806106858585610da1565b63ffffffff16815260200161069a8585610dc4565b81526020016106a98585610de4565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106fe8686610e07565b6107088787610e19565b60405161071692919061194e565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a401600060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b50505050505050565b6107d9610e35565b600391909155600255565b60408051808201909152600080825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461086a576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b61087687611976565b610eb6565b9150845160001461088c5784610918565b6004805461089990611a14565b80601f01602080910402602001604051908101604052809291908181526020018280546108c590611a14565b80156109125780601f106108e757610100808354040283529160200191610912565b820191906000526020600020905b8154815290600101906020018083116108f557829003601f168201915b50505050505b9050604051806040016040528060035481526020018561093957600061093d565b6002545b9052969195509350915050565b610952610e35565b61095c6000610f1b565b565b6004805461096b90611a14565b80601f016020809104026020016040519081016040528092919081815260200182805461099790611a14565b80156109e45780601f106109b9576101008083540402835291602001916109e4565b820191906000526020600020905b8154815290600101906020018083116109c757829003601f168201915b505050505081565b6109f4610e35565b73ffffffffffffffffffffffffffffffffffffffff8216610a41576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611a61565b905073ffffffffffffffffffffffffffffffffffffffff8116610b21576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4273ffffffffffffffffffffffffffffffffffffffff82168484610f90565b505050565b610b4f610e35565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600354815260200183610bc9576000610bcd565b6002545b905290505b949350505050565b610be2610e35565b6004610bee8282611ace565b5050565b610bfa610e35565b73ffffffffffffffffffffffffffffffffffffffff8116610ca2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610cab81610f1b565b50565b610cb6610e35565b73ffffffffffffffffffffffffffffffffffffffff8216610d03576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190611a61565b9050610b4281848461101d565b6000610db1600d60098486611be8565b610dba91611c12565b60e01c9392505050565b6000610dd4602d600d8486611be8565b610ddd91611c5a565b9392505050565b6000610df4600960018486611be8565b610dfd91611c96565b60c01c9392505050565b6000610ddd610e16848461104d565b90565b366000610e298360518187611be8565b915091505b9250929050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c99565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610f05986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611cdc565b6040516020818303038152906040529050919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b4290849061105d565b73ffffffffffffffffffffffffffffffffffffffff831661104257610b42828261116c565b610b42838383611272565b6000610dd4605160318486611be8565b60006110bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112e09092919063ffffffff16565b90508051600014806110e05750808060200190518101906110e09190611da2565b610b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c99565b73ffffffffffffffffffffffffffffffffffffffff82166111b9576040517f32fa6a1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611213576040519150601f19603f3d011682016040523d82523d6000602084013e611218565b606091505b5050905080610b42576040517f2c024f9200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c99565b73ffffffffffffffffffffffffffffffffffffffff82166112bf576040517f32fa6a1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4273ffffffffffffffffffffffffffffffffffffffff84168383610f90565b6060610bd28484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113149190611dbf565b60006040518083038185875af1925050503d8060008114611351576040519150601f19603f3d011682016040523d82523d6000602084013e611356565b606091505b509150915061136787838387611372565b979650505050505050565b606083156114085782516000036114015773ffffffffffffffffffffffffffffffffffffffff85163b611401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c99565b5081610bd2565b610bd2838381511561141d5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9991906117fd565b60006020828403121561146357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ddd57600080fd5b60008083601f8401126114a557600080fd5b50813567ffffffffffffffff8111156114bd57600080fd5b602083019150836020828501011115610e2e57600080fd5b600080602083850312156114e857600080fd5b823567ffffffffffffffff8111156114ff57600080fd5b61150b85828601611493565b90969095509350505050565b6020810160038310611552577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561156b57600080fd5b50508035926020909101359150565b600060e0828403121561158c57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156115e4576115e4611592565b60405290565b600082601f8301126115fb57600080fd5b813567ffffffffffffffff8082111561161657611616611592565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561165c5761165c611592565b8160405283815286602085880101111561167557600080fd5b836020870160208301376000602085830101528094505050505092915050565b8015158114610cab57600080fd5b6000806000606084860312156116b857600080fd5b833567ffffffffffffffff808211156116d057600080fd5b6116dc8783880161157a565b945060208601359150808211156116f257600080fd5b506116ff868287016115ea565b925050604084013561171081611695565b809150509250925092565b60005b8381101561173657818101518382015260200161171e565b50506000910152565b6000815180845261175781602086016020860161171b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201526080604082015260006117ad608083018561173f565b82810360608401526117bf818561173f565b9695505050505050565b803563ffffffff811681146117dd57600080fd5b919050565b6000602082840312156117f457600080fd5b610ddd826117c9565b602081526000610ddd602083018461173f565b73ffffffffffffffffffffffffffffffffffffffff81168114610cab57600080fd5b80356117dd81611810565b6000806040838503121561185057600080fd5b823561185b81611810565b946020939093013593505050565b60006020828403121561187b57600080fd5b8135610ddd81611810565b6000806000806060858703121561189c57600080fd5b843567ffffffffffffffff808211156118b457600080fd5b6118c08883890161157a565b955060208701359150808211156118d657600080fd5b506118e387828801611493565b90945092505060408501356118f781611695565b939692955090935050565b8151815260208083015190820152604081016105f2565b60006020828403121561192b57600080fd5b813567ffffffffffffffff81111561194257600080fd5b610bd2848285016115ea565b8183823760009101908152919050565b803567ffffffffffffffff811681146117dd57600080fd5b600060e0823603121561198857600080fd5b6119906115c1565b6119998361195e565b81526119a7602084016117c9565b60208201526119b860408401611832565b60408201526119c9606084016117c9565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156119fc57600080fd5b611a08368286016115ea565b60c08301525092915050565b600181811c90821680611a2857607f821691505b60208210810361158c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215611a7357600080fd5b8151610ddd81611810565b601f821115610b42576000816000526020600020601f850160051c81016020861015611aa75750805b601f850160051c820191505b81811015611ac657828155600101611ab3565b505050505050565b815167ffffffffffffffff811115611ae857611ae8611592565b611afc81611af68454611a14565b84611a7e565b602080601f831160018114611b4f5760008415611b195750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611ac6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611b9c57888601518255948401946001909101908401611b7d565b5085821015611bd857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008085851115611bf857600080fd5b83861115611c0557600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611c525780818660040360031b1b83161692505b505092915050565b803560208310156105f2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611c525760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b16600182015260007fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611d8e81607185016020870161171b565b919091016071019998505050505050505050565b600060208284031215611db457600080fd5b8151610ddd81611695565b60008251611dd181846020870161171b565b919091019291505056fea2646970667358221220d42394ded1cc993f25399ee65cd1f1bdebc165739a074470df0d865221bc676364736f6c63430008160033",
587
+ "bytecode": "0x60e06040523480156200001157600080fd5b50604051620020033803806200200383398101604081905262000034916200013f565b6200003f33620000d2565b6001600160a01b03808316608081905290821660a0526040805163416ecebf60e01b8152905163416ecebf916004808201926020929091908290030181865afa15801562000091573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000b7919062000177565b63ffffffff1660c052505060636002556064600355620001a6565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b03811681146200013a57600080fd5b919050565b600080604083850312156200015357600080fd5b6200015e8362000122565b91506200016e6020840162000122565b90509250929050565b6000602082840312156200018a57600080fd5b815163ffffffff811681146200019f57600080fd5b9392505050565b60805160a05160c051611e11620001f260003960006103d40152600061034301526000818161030f015281816106ce015281816107fd01528181610a450152610d070152611e116000f3fe6080604052600436106101845760003560e01c8063715018a6116100d6578063996f79c01161007f578063dabca06311610059578063dabca063146104ff578063f2fde38b1461051f578063fd9be5221461053f5761018b565b8063996f79c01461049c578063aec336e6146104b2578063d80e9bd9146104d25761018b565b80638da5cb5b116100b05780638da5cb5b1461042d5780638f58aa7a1461045857806390953238146104785761018b565b8063715018a6146103ad57806372607537146103c257806372d713221461040b5761018b565b80634389e58f1161013857806361d027b31161011257806361d027b3146103315780636251b637146103655780636750cd4c1461038c5761018b565b80634389e58f146102a257806354fd4d50146102d15780635e280f11146102fd5761018b565b80631881d94d116101695780631881d94d146102145780631c7c294e14610230578063334993ff146102825761018b565b806301ffc9a7146101bd57806312cc947f146101f25761018b565b3661018b57005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101c957600080fd5b506101dd6101d8366004611451565b61055f565b60405190151581526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046114d5565b6105f8565b005b34801561022057600080fd5b5060026040516101e99190611517565b34801561023c57600080fd5b5060015461025d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b34801561028e57600080fd5b5061021261029d366004611558565b6107d1565b3480156102ae57600080fd5b506102c26102bd3660046116a3565b6107e4565b6040516101e993929190611789565b3480156102dd57600080fd5b5060408051600080825260208201526002918101919091526060016101e9565b34801561030957600080fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033d57600080fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037157600080fd5b5061037a600181565b60405160ff90911681526020016101e9565b34801561039857600080fd5b506101dd6103a73660046117e2565b50600190565b3480156103b957600080fd5b5061021261094a565b3480156103ce57600080fd5b506103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101e9565b34801561041757600080fd5b5061042061095e565b6040516101e991906117fd565b34801561043957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661025d565b34801561046457600080fd5b5061021261047336600461183d565b6109ec565b34801561048457600080fd5b5061048e60025481565b6040519081526020016101e9565b3480156104a857600080fd5b5061048e60035481565b3480156104be57600080fd5b506102126104cd366004611869565b610b47565b3480156104de57600080fd5b506104f26104ed366004611886565b610b96565b6040516101e99190611902565b34801561050b57600080fd5b5061021261051a366004611919565b610bda565b34801561052b57600080fd5b5061021261053a366004611869565b610bf2565b34801561054b57600080fd5b5061021261055a36600461183d565b610cae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f97f025840000000000000000000000000000000000000000000000000000000014806105f257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff1615801590610637575060015473ffffffffffffffffffffffffffffffffffffffff163314155b1561066e576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060405180606001604052806106858585610da1565b63ffffffff16815260200161069a8585610dc4565b81526020016106a98585610de4565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106fe8686610e07565b6107088787610e19565b60405161071692919061194e565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a401600060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b50505050505050565b6107d9610e35565b600391909155600255565b60408051808201909152600080825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461086a576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b61087687611976565b610eb6565b9150845160001461088c5784610918565b6004805461089990611a14565b80601f01602080910402602001604051908101604052809291908181526020018280546108c590611a14565b80156109125780601f106108e757610100808354040283529160200191610912565b820191906000526020600020905b8154815290600101906020018083116108f557829003601f168201915b50505050505b9050604051806040016040528060035481526020018561093957600061093d565b6002545b9052969195509350915050565b610952610e35565b61095c6000610f1b565b565b6004805461096b90611a14565b80601f016020809104026020016040519081016040528092919081815260200182805461099790611a14565b80156109e45780601f106109b9576101008083540402835291602001916109e4565b820191906000526020600020905b8154815290600101906020018083116109c757829003601f168201915b505050505081565b6109f4610e35565b73ffffffffffffffffffffffffffffffffffffffff8216610a41576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611a61565b905073ffffffffffffffffffffffffffffffffffffffff8116610b21576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4273ffffffffffffffffffffffffffffffffffffffff82168484610f90565b505050565b610b4f610e35565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600354815260200183610bc9576000610bcd565b6002545b905290505b949350505050565b610be2610e35565b6004610bee8282611ace565b5050565b610bfa610e35565b73ffffffffffffffffffffffffffffffffffffffff8116610ca2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610cab81610f1b565b50565b610cb6610e35565b73ffffffffffffffffffffffffffffffffffffffff8216610d03576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190611a61565b9050610b4281848461101d565b6000610db1600d60098486611be8565b610dba91611c12565b60e01c9392505050565b6000610dd4602d600d8486611be8565b610ddd91611c5a565b9392505050565b6000610df4600960018486611be8565b610dfd91611c96565b60c01c9392505050565b6000610ddd610e16848461104d565b90565b366000610e298360518187611be8565b915091505b9250929050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c99565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610f05986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611cdc565b6040516020818303038152906040529050919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b4290849061105d565b73ffffffffffffffffffffffffffffffffffffffff831661104257610b42828261116c565b610b42838383611272565b6000610dd4605160318486611be8565b60006110bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112e09092919063ffffffff16565b90508051600014806110e05750808060200190518101906110e09190611da2565b610b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c99565b73ffffffffffffffffffffffffffffffffffffffff82166111b9576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611213576040519150601f19603f3d011682016040523d82523d6000602084013e611218565b606091505b5050905080610b42576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c99565b73ffffffffffffffffffffffffffffffffffffffff82166112bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4273ffffffffffffffffffffffffffffffffffffffff84168383610f90565b6060610bd28484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113149190611dbf565b60006040518083038185875af1925050503d8060008114611351576040519150601f19603f3d011682016040523d82523d6000602084013e611356565b606091505b509150915061136787838387611372565b979650505050505050565b606083156114085782516000036114015773ffffffffffffffffffffffffffffffffffffffff85163b611401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c99565b5081610bd2565b610bd2838381511561141d5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9991906117fd565b60006020828403121561146357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ddd57600080fd5b60008083601f8401126114a557600080fd5b50813567ffffffffffffffff8111156114bd57600080fd5b602083019150836020828501011115610e2e57600080fd5b600080602083850312156114e857600080fd5b823567ffffffffffffffff8111156114ff57600080fd5b61150b85828601611493565b90969095509350505050565b6020810160038310611552577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561156b57600080fd5b50508035926020909101359150565b600060e0828403121561158c57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156115e4576115e4611592565b60405290565b600082601f8301126115fb57600080fd5b813567ffffffffffffffff8082111561161657611616611592565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561165c5761165c611592565b8160405283815286602085880101111561167557600080fd5b836020870160208301376000602085830101528094505050505092915050565b8015158114610cab57600080fd5b6000806000606084860312156116b857600080fd5b833567ffffffffffffffff808211156116d057600080fd5b6116dc8783880161157a565b945060208601359150808211156116f257600080fd5b506116ff868287016115ea565b925050604084013561171081611695565b809150509250925092565b60005b8381101561173657818101518382015260200161171e565b50506000910152565b6000815180845261175781602086016020860161171b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201526080604082015260006117ad608083018561173f565b82810360608401526117bf818561173f565b9695505050505050565b803563ffffffff811681146117dd57600080fd5b919050565b6000602082840312156117f457600080fd5b610ddd826117c9565b602081526000610ddd602083018461173f565b73ffffffffffffffffffffffffffffffffffffffff81168114610cab57600080fd5b80356117dd81611810565b6000806040838503121561185057600080fd5b823561185b81611810565b946020939093013593505050565b60006020828403121561187b57600080fd5b8135610ddd81611810565b6000806000806060858703121561189c57600080fd5b843567ffffffffffffffff808211156118b457600080fd5b6118c08883890161157a565b955060208701359150808211156118d657600080fd5b506118e387828801611493565b90945092505060408501356118f781611695565b939692955090935050565b8151815260208083015190820152604081016105f2565b60006020828403121561192b57600080fd5b813567ffffffffffffffff81111561194257600080fd5b610bd2848285016115ea565b8183823760009101908152919050565b803567ffffffffffffffff811681146117dd57600080fd5b600060e0823603121561198857600080fd5b6119906115c1565b6119998361195e565b81526119a7602084016117c9565b60208201526119b860408401611832565b60408201526119c9606084016117c9565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156119fc57600080fd5b611a08368286016115ea565b60c08301525092915050565b600181811c90821680611a2857607f821691505b60208210810361158c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215611a7357600080fd5b8151610ddd81611810565b601f821115610b42576000816000526020600020601f850160051c81016020861015611aa75750805b601f850160051c820191505b81811015611ac657828155600101611ab3565b505050505050565b815167ffffffffffffffff811115611ae857611ae8611592565b611afc81611af68454611a14565b84611a7e565b602080601f831160018114611b4f5760008415611b195750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611ac6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611b9c57888601518255948401946001909101908401611b7d565b5085821015611bd857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008085851115611bf857600080fd5b83861115611c0557600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611c525780818660040360031b1b83161692505b505092915050565b803560208310156105f2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611c525760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b16600182015260007fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611d8e81607185016020870161171b565b919091016071019998505050505050505050565b600060208284031215611db457600080fd5b8151610ddd81611695565b60008251611dd181846020870161171b565b919091019291505056fea264697066735822122094b5d0ed838fa5020c414183b57de7ccf607dba20c918e10b74020e69974479964736f6c63430008160033",
588
+ "deployedBytecode": "0x6080604052600436106101845760003560e01c8063715018a6116100d6578063996f79c01161007f578063dabca06311610059578063dabca063146104ff578063f2fde38b1461051f578063fd9be5221461053f5761018b565b8063996f79c01461049c578063aec336e6146104b2578063d80e9bd9146104d25761018b565b80638da5cb5b116100b05780638da5cb5b1461042d5780638f58aa7a1461045857806390953238146104785761018b565b8063715018a6146103ad57806372607537146103c257806372d713221461040b5761018b565b80634389e58f1161013857806361d027b31161011257806361d027b3146103315780636251b637146103655780636750cd4c1461038c5761018b565b80634389e58f146102a257806354fd4d50146102d15780635e280f11146102fd5761018b565b80631881d94d116101695780631881d94d146102145780631c7c294e14610230578063334993ff146102825761018b565b806301ffc9a7146101bd57806312cc947f146101f25761018b565b3661018b57005b6040517f2657b6c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3480156101c957600080fd5b506101dd6101d8366004611451565b61055f565b60405190151581526020015b60405180910390f35b3480156101fe57600080fd5b5061021261020d3660046114d5565b6105f8565b005b34801561022057600080fd5b5060026040516101e99190611517565b34801561023c57600080fd5b5060015461025d9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101e9565b34801561028e57600080fd5b5061021261029d366004611558565b6107d1565b3480156102ae57600080fd5b506102c26102bd3660046116a3565b6107e4565b6040516101e993929190611789565b3480156102dd57600080fd5b5060408051600080825260208201526002918101919091526060016101e9565b34801561030957600080fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561033d57600080fd5b5061025d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561037157600080fd5b5061037a600181565b60405160ff90911681526020016101e9565b34801561039857600080fd5b506101dd6103a73660046117e2565b50600190565b3480156103b957600080fd5b5061021261094a565b3480156103ce57600080fd5b506103f67f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016101e9565b34801561041757600080fd5b5061042061095e565b6040516101e991906117fd565b34801561043957600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661025d565b34801561046457600080fd5b5061021261047336600461183d565b6109ec565b34801561048457600080fd5b5061048e60025481565b6040519081526020016101e9565b3480156104a857600080fd5b5061048e60035481565b3480156104be57600080fd5b506102126104cd366004611869565b610b47565b3480156104de57600080fd5b506104f26104ed366004611886565b610b96565b6040516101e99190611902565b34801561050b57600080fd5b5061021261051a366004611919565b610bda565b34801561052b57600080fd5b5061021261053a366004611869565b610bf2565b34801561054b57600080fd5b5061021261055a36600461183d565b610cae565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f97f025840000000000000000000000000000000000000000000000000000000014806105f257507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60015473ffffffffffffffffffffffffffffffffffffffff1615801590610637575060015473ffffffffffffffffffffffffffffffffffffffff163314155b1561066e576040517f70b216ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060405180606001604052806106858585610da1565b63ffffffff16815260200161069a8585610dc4565b81526020016106a98585610de4565b67ffffffffffffffff169052905073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663a825d747826106fe8686610e07565b6107088787610e19565b60405161071692919061194e565b6040805191829003822060e086901b7fffffffff00000000000000000000000000000000000000000000000000000000168352845163ffffffff1660048401526020850151602484015293015167ffffffffffffffff16604482015273ffffffffffffffffffffffffffffffffffffffff9091166064820152608481019190915260a401600060405180830381600087803b1580156107b457600080fd5b505af11580156107c8573d6000803e3d6000fd5b50505050505050565b6107d9610e35565b600391909155600255565b60408051808201909152600080825260208201526060807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461086a576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087b61087687611976565b610eb6565b9150845160001461088c5784610918565b6004805461089990611a14565b80601f01602080910402602001604051908101604052809291908181526020018280546108c590611a14565b80156109125780601f106108e757610100808354040283529160200191610912565b820191906000526020600020905b8154815290600101906020018083116108f557829003601f168201915b50505050505b9050604051806040016040528060035481526020018561093957600061093d565b6002545b9052969195509350915050565b610952610e35565b61095c6000610f1b565b565b6004805461096b90611a14565b80601f016020809104026020016040519081016040528092919081815260200182805461099790611a14565b80156109e45780601f106109b9576101008083540402835291602001916109e4565b820191906000526020600020905b8154815290600101906020018083116109c757829003601f168201915b505050505081565b6109f4610e35565b73ffffffffffffffffffffffffffffffffffffffff8216610a41576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad29190611a61565b905073ffffffffffffffffffffffffffffffffffffffff8116610b21576040517f54c1781b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4273ffffffffffffffffffffffffffffffffffffffff82168484610f90565b505050565b610b4f610e35565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60408051808201909152600080825260208201526040518060400160405280600354815260200183610bc9576000610bcd565b6002545b905290505b949350505050565b610be2610e35565b6004610bee8282611ace565b5050565b610bfa610e35565b73ffffffffffffffffffffffffffffffffffffffff8116610ca2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b610cab81610f1b565b50565b610cb6610e35565b73ffffffffffffffffffffffffffffffffffffffff8216610d03576040517f3d3496e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d949190611a61565b9050610b4281848461101d565b6000610db1600d60098486611be8565b610dba91611c12565b60e01c9392505050565b6000610dd4602d600d8486611be8565b610ddd91611c5a565b9392505050565b6000610df4600960018486611be8565b610dfd91611c96565b60c01c9392505050565b6000610ddd610e16848461104d565b90565b366000610e298360518187611be8565b915091505b9250929050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461095c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c99565b8051602080830151604080850151606080870151608088015160a089015160c08a015195519398610f05986001989197919673ffffffffffffffffffffffffffffffffffffffff169501611cdc565b6040516020818303038152906040529050919050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052610b4290849061105d565b73ffffffffffffffffffffffffffffffffffffffff831661104257610b42828261116c565b610b42838383611272565b6000610dd4605160318486611be8565b60006110bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166112e09092919063ffffffff16565b90508051600014806110e05750808060200190518101906110e09190611da2565b610b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610c99565b73ffffffffffffffffffffffffffffffffffffffff82166111b9576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff168260405160006040518083038185875af1925050503d8060008114611213576040519150601f19603f3d011682016040523d82523d6000602084013e611218565b606091505b5050905080610b42576040517f465bc83400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8416600482015260248101839052604401610c99565b73ffffffffffffffffffffffffffffffffffffffff82166112bf576040517f6b7a931000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b4273ffffffffffffffffffffffffffffffffffffffff84168383610f90565b6060610bd28484600085856000808673ffffffffffffffffffffffffffffffffffffffff1685876040516113149190611dbf565b60006040518083038185875af1925050503d8060008114611351576040519150601f19603f3d011682016040523d82523d6000602084013e611356565b606091505b509150915061136787838387611372565b979650505050505050565b606083156114085782516000036114015773ffffffffffffffffffffffffffffffffffffffff85163b611401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c99565b5081610bd2565b610bd2838381511561141d5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9991906117fd565b60006020828403121561146357600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610ddd57600080fd5b60008083601f8401126114a557600080fd5b50813567ffffffffffffffff8111156114bd57600080fd5b602083019150836020828501011115610e2e57600080fd5b600080602083850312156114e857600080fd5b823567ffffffffffffffff8111156114ff57600080fd5b61150b85828601611493565b90969095509350505050565b6020810160038310611552577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91905290565b6000806040838503121561156b57600080fd5b50508035926020909101359150565b600060e0828403121561158c57600080fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160e0810167ffffffffffffffff811182821017156115e4576115e4611592565b60405290565b600082601f8301126115fb57600080fd5b813567ffffffffffffffff8082111561161657611616611592565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190828211818310171561165c5761165c611592565b8160405283815286602085880101111561167557600080fd5b836020870160208301376000602085830101528094505050505092915050565b8015158114610cab57600080fd5b6000806000606084860312156116b857600080fd5b833567ffffffffffffffff808211156116d057600080fd5b6116dc8783880161157a565b945060208601359150808211156116f257600080fd5b506116ff868287016115ea565b925050604084013561171081611695565b809150509250925092565b60005b8381101561173657818101518382015260200161171e565b50506000910152565b6000815180845261175781602086016020860161171b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b83518152602080850151908201526080604082015260006117ad608083018561173f565b82810360608401526117bf818561173f565b9695505050505050565b803563ffffffff811681146117dd57600080fd5b919050565b6000602082840312156117f457600080fd5b610ddd826117c9565b602081526000610ddd602083018461173f565b73ffffffffffffffffffffffffffffffffffffffff81168114610cab57600080fd5b80356117dd81611810565b6000806040838503121561185057600080fd5b823561185b81611810565b946020939093013593505050565b60006020828403121561187b57600080fd5b8135610ddd81611810565b6000806000806060858703121561189c57600080fd5b843567ffffffffffffffff808211156118b457600080fd5b6118c08883890161157a565b955060208701359150808211156118d657600080fd5b506118e387828801611493565b90945092505060408501356118f781611695565b939692955090935050565b8151815260208083015190820152604081016105f2565b60006020828403121561192b57600080fd5b813567ffffffffffffffff81111561194257600080fd5b610bd2848285016115ea565b8183823760009101908152919050565b803567ffffffffffffffff811681146117dd57600080fd5b600060e0823603121561198857600080fd5b6119906115c1565b6119998361195e565b81526119a7602084016117c9565b60208201526119b860408401611832565b60408201526119c9606084016117c9565b60608201526080830135608082015260a083013560a082015260c083013567ffffffffffffffff8111156119fc57600080fd5b611a08368286016115ea565b60c08301525092915050565b600181811c90821680611a2857607f821691505b60208210810361158c577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060208284031215611a7357600080fd5b8151610ddd81611810565b601f821115610b42576000816000526020600020601f850160051c81016020861015611aa75750805b601f850160051c820191505b81811015611ac657828155600101611ab3565b505050505050565b815167ffffffffffffffff811115611ae857611ae8611592565b611afc81611af68454611a14565b84611a7e565b602080601f831160018114611b4f5760008415611b195750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555611ac6565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015611b9c57888601518255948401946001909101908401611b7d565b5085821015611bd857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b60008085851115611bf857600080fd5b83861115611c0557600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015611c525780818660040360031b1b83161692505b505092915050565b803560208310156105f2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015611c525760089490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008960f81b1681527fffffffffffffffff0000000000000000000000000000000000000000000000008860c01b16600182015260007fffffffff00000000000000000000000000000000000000000000000000000000808960e01b16600984015287600d840152808760e01b16602d840152508460318301528360518301528251611d8e81607185016020870161171b565b919091016071019998505050505050505050565b600060208284031215611db457600080fd5b8151610ddd81611695565b60008251611dd181846020870161171b565b919091019291505056fea264697066735822122094b5d0ed838fa5020c414183b57de7ccf607dba20c918e10b74020e69974479964736f6c63430008160033",
589
589
  "linkReferences": {},
590
590
  "deployedLinkReferences": {}
591
591
  }
@@ -5,22 +5,22 @@
5
5
  "abi": [
6
6
  {
7
7
  "inputs": [],
8
- "name": "InvalidLzComposeOption",
8
+ "name": "Executor_InvalidLzComposeOption",
9
9
  "type": "error"
10
10
  },
11
11
  {
12
12
  "inputs": [],
13
- "name": "InvalidLzReceiveOption",
13
+ "name": "Executor_InvalidLzReceiveOption",
14
14
  "type": "error"
15
15
  },
16
16
  {
17
17
  "inputs": [],
18
- "name": "InvalidNativeDropOption",
18
+ "name": "Executor_InvalidNativeDropOption",
19
19
  "type": "error"
20
20
  }
21
21
  ],
22
- "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203a5c2b1a1d2a9882d49ef568539977c5b2d8c8639a6364b5d8381ea7a3ec3ba064736f6c63430008160033",
23
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212203a5c2b1a1d2a9882d49ef568539977c5b2d8c8639a6364b5d8381ea7a3ec3ba064736f6c63430008160033",
22
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202802f6fc7b0324d6e90f6b255a6d960eb59c14b267656809c799020401b377d164736f6c63430008160033",
23
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea26469706673582212202802f6fc7b0324d6e90f6b255a6d960eb59c14b267656809c799020401b377d164736f6c63430008160033",
24
24
  "linkReferences": {},
25
25
  "deployedLinkReferences": {}
26
26
  }
@@ -3,8 +3,8 @@
3
3
  "contractName": "PacketV1Codec",
4
4
  "sourceName": "contracts/messagelib/libs/PacketV1Codec.sol",
5
5
  "abi": [],
6
- "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c127fa9733b51e41504bf441f97f318d2e9f3e1036923d9f28419e51d933f7cd64736f6c63430008160033",
7
- "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c127fa9733b51e41504bf441f97f318d2e9f3e1036923d9f28419e51d933f7cd64736f6c63430008160033",
6
+ "bytecode": "0x60566037600b82828239805160001a607314602a57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bbc85d4f3af63b5580ccb5061a6cef246f5ffa7d781a450a25d85e1a0d5e8e1a64736f6c63430008160033",
7
+ "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220bbc85d4f3af63b5580ccb5061a6cef246f5ffa7d781a450a25d85e1a0d5e8e1a64736f6c63430008160033",
8
8
  "linkReferences": {},
9
9
  "deployedLinkReferences": {}
10
10
  }
@@ -4,7 +4,7 @@ pragma solidity ^0.8.20;
4
4
 
5
5
  import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
6
6
 
7
- import { MessagingFee, MessagingParams, MessagingReceipt, Origin, ExecutionState, ILayerZeroEndpointV2 } from "./interfaces/ILayerZeroEndpointV2.sol";
7
+ import { MessagingFee, MessagingParams, MessagingReceipt, Origin, ILayerZeroEndpointV2 } from "./interfaces/ILayerZeroEndpointV2.sol";
8
8
  import { ISendLib, Packet } from "./interfaces/ISendLib.sol";
9
9
  import { ILayerZeroReceiver } from "./interfaces/ILayerZeroReceiver.sol";
10
10
  import { Errors } from "./libs/Errors.sol";
@@ -54,7 +54,7 @@ contract EndpointV2 is ILayerZeroEndpointV2, MessagingChannel, MessageLibManager
54
54
  /// @param _sender the sender of the message
55
55
  function quote(MessagingParams calldata _params, address _sender) external view returns (MessagingFee memory) {
56
56
  // lzToken must be set to support payInLzToken
57
- if (_params.payInLzToken && lzToken == address(0x0)) revert Errors.LzTokenUnavailable();
57
+ if (_params.payInLzToken && lzToken == address(0x0)) revert Errors.LZ_LzTokenUnavailable();
58
58
 
59
59
  // get the correct outbound nonce
60
60
  uint64 nonce = outboundNonce[_sender][_params.dstEid][_params.receiver] + 1;
@@ -84,7 +84,7 @@ contract EndpointV2 is ILayerZeroEndpointV2, MessagingChannel, MessageLibManager
84
84
  MessagingParams calldata _params,
85
85
  address _refundAddress
86
86
  ) external payable sendContext(_params.dstEid, msg.sender) returns (MessagingReceipt memory) {
87
- if (_params.payInLzToken && lzToken == address(0x0)) revert Errors.LzTokenUnavailable();
87
+ if (_params.payInLzToken && lzToken == address(0x0)) revert Errors.LZ_LzTokenUnavailable();
88
88
 
89
89
  // send message
90
90
  (MessagingReceipt memory receipt, address _sendLibrary) = _send(msg.sender, _params);
@@ -149,11 +149,11 @@ contract EndpointV2 is ILayerZeroEndpointV2, MessagingChannel, MessageLibManager
149
149
  /// @param _receiver the receiver of the message
150
150
  /// @param _payloadHash the payload hash of the message
151
151
  function verify(Origin calldata _origin, address _receiver, bytes32 _payloadHash) external {
152
- if (!isValidReceiveLibrary(_receiver, _origin.srcEid, msg.sender)) revert Errors.InvalidReceiveLibrary();
152
+ if (!isValidReceiveLibrary(_receiver, _origin.srcEid, msg.sender)) revert Errors.LZ_InvalidReceiveLibrary();
153
153
 
154
154
  uint64 lazyNonce = lazyInboundNonce[_receiver][_origin.srcEid][_origin.sender];
155
- if (!_initializable(_origin, _receiver, lazyNonce)) revert Errors.PathNotInitializable();
156
- if (!_verifiable(_origin, _receiver, lazyNonce)) revert Errors.PathNotVerifiable();
155
+ if (!_initializable(_origin, _receiver, lazyNonce)) revert Errors.LZ_PathNotInitializable();
156
+ if (!_verifiable(_origin, _receiver, lazyNonce)) revert Errors.LZ_PathNotVerifiable();
157
157
 
158
158
  // insert the message into the message channel
159
159
  _inbound(_receiver, _origin.srcEid, _origin.sender, _origin.nonce, _payloadHash);
@@ -292,7 +292,7 @@ contract EndpointV2 is ILayerZeroEndpointV2, MessagingChannel, MessageLibManager
292
292
  // in which an oapp sending a message with lz token and the lz token is set to a new token between the tx
293
293
  // being sent and the tx being mined. if the required lz token fee is 0 and the old lz token would be
294
294
  // locked in the contract instead of being refunded
295
- if (supplied == 0) revert Errors.ZeroLzTokenFee();
295
+ if (supplied == 0) revert Errors.LZ_ZeroLzTokenFee();
296
296
  }
297
297
  }
298
298
 
@@ -308,7 +308,7 @@ contract EndpointV2 is ILayerZeroEndpointV2, MessagingChannel, MessageLibManager
308
308
  uint256 _suppliedLzTokenFee
309
309
  ) internal pure {
310
310
  if (_required.nativeFee > _suppliedNativeFee || _required.lzTokenFee > _suppliedLzTokenFee) {
311
- revert Errors.InsufficientFee(
311
+ revert Errors.LZ_InsufficientFee(
312
312
  _required.nativeFee,
313
313
  _suppliedNativeFee,
314
314
  _required.lzTokenFee,
@@ -353,53 +353,17 @@ contract EndpointV2 is ILayerZeroEndpointV2, MessagingChannel, MessageLibManager
353
353
 
354
354
  /// @dev assert the caller to either be the oapp or the delegate
355
355
  function _assertAuthorized(address _oapp) internal view override(MessagingChannel, MessageLibManager) {
356
- if (msg.sender != _oapp && msg.sender != delegates[_oapp]) revert Errors.Unauthorized();
356
+ if (msg.sender != _oapp && msg.sender != delegates[_oapp]) revert Errors.LZ_Unauthorized();
357
357
  }
358
358
 
359
359
  // ========================= VIEW FUNCTIONS FOR OFFCHAIN ONLY =========================
360
360
  // Not involved in any state transition function.
361
361
  // ====================================================================================
362
-
363
- /// @dev check if a message is verifiable.
364
- function verifiable(
365
- Origin calldata _origin,
366
- address _receiver,
367
- address _receiveLib,
368
- bytes32 _payloadHash
369
- ) external view returns (bool) {
370
- if (!isValidReceiveLibrary(_receiver, _origin.srcEid, _receiveLib)) return false;
371
-
372
- uint64 lazyNonce = lazyInboundNonce[_receiver][_origin.srcEid][_origin.sender];
373
- if (!_initializable(_origin, _receiver, lazyNonce)) return false;
374
- if (!_verifiable(_origin, _receiver, lazyNonce)) return false;
375
-
376
- // checked in _inbound for verify
377
- if (_payloadHash == EMPTY_PAYLOAD_HASH) return false;
378
-
379
- return true;
362
+ function initializable(Origin calldata _origin, address _receiver) external view returns (bool) {
363
+ return _initializable(_origin, _receiver, lazyInboundNonce[_receiver][_origin.srcEid][_origin.sender]);
380
364
  }
381
365
 
382
- /// @dev check if a message is executable.
383
- /// @return ExecutionState of Executed, Executable, or NotExecutable
384
- function executable(Origin calldata _origin, address _receiver) external view returns (ExecutionState) {
385
- bytes32 payloadHash = inboundPayloadHash[_receiver][_origin.srcEid][_origin.sender][_origin.nonce];
386
-
387
- // executed if the payload hash has been cleared and the nonce is less than or equal to lazyInboundNonce
388
- if (
389
- payloadHash == EMPTY_PAYLOAD_HASH &&
390
- _origin.nonce <= lazyInboundNonce[_receiver][_origin.srcEid][_origin.sender]
391
- ) {
392
- return ExecutionState.Executed;
393
- }
394
-
395
- // executable if nonce has not been executed and is not nil and nonce is less than or equal to inboundNonce
396
- if (
397
- payloadHash != NIL_PAYLOAD_HASH && _origin.nonce <= inboundNonce(_receiver, _origin.srcEid, _origin.sender)
398
- ) {
399
- return ExecutionState.Executable;
400
- }
401
-
402
- // return NotExecutable as a catch-all
403
- return ExecutionState.NotExecutable;
366
+ function verifiable(Origin calldata _origin, address _receiver) external view returns (bool) {
367
+ return _verifiable(_origin, _receiver, lazyInboundNonce[_receiver][_origin.srcEid][_origin.sender]);
404
368
  }
405
369
  }
@@ -9,6 +9,8 @@ import { Errors } from "./libs/Errors.sol";
9
9
 
10
10
  /// @notice this is the endpoint contract for layerzero v2 deployed on chains using ERC20 as native tokens
11
11
  contract EndpointV2Alt is EndpointV2 {
12
+ error LZ_OnlyAltToken();
13
+
12
14
  /// @dev the altFeeToken is used for fees when the native token has no value
13
15
  /// @dev it is immutable for gas saving. only 1 endpoint for such chains
14
16
  address internal immutable nativeErc20;
@@ -29,7 +31,7 @@ contract EndpointV2Alt is EndpointV2 {
29
31
  address _receiver,
30
32
  address _refundAddress
31
33
  ) internal override {
32
- if (msg.value > 0) revert Errors.OnlyAltToken();
34
+ if (msg.value > 0) revert LZ_OnlyAltToken();
33
35
  _payToken(nativeErc20, _required, _supplied, _receiver, _refundAddress);
34
36
  }
35
37
 
@@ -40,7 +42,7 @@ contract EndpointV2Alt is EndpointV2 {
40
42
 
41
43
  /// @dev check if lzToken is set to the same address
42
44
  function setLzToken(address _lzToken) public override onlyOwner {
43
- if (_lzToken == nativeErc20) revert Errors.InvalidArgument();
45
+ if (_lzToken == nativeErc20) revert Errors.LZ_InvalidArgument();
44
46
  super.setLzToken(_lzToken);
45
47
  }
46
48
 
@@ -0,0 +1,12 @@
1
+ // SPDX-License-Identifier: LZBL-1.2
2
+
3
+ pragma solidity ^0.8.20;
4
+
5
+ import { Proxied } from "hardhat-deploy/solc_0.8/proxy/Proxied.sol";
6
+ import "./EndpointV2ViewUpgradeable.sol";
7
+
8
+ contract EndpointV2View is EndpointV2ViewUpgradeable, Proxied {
9
+ function initialize(address _endpoint) external proxied initializer {
10
+ __EndpointV2View_init(_endpoint);
11
+ }
12
+ }
@@ -0,0 +1,86 @@
1
+ // SPDX-License-Identifier: LZBL-1.2
2
+
3
+ pragma solidity ^0.8.20;
4
+
5
+ import { Initializable } from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol";
6
+
7
+ import "./interfaces/ILayerZeroEndpointV2.sol";
8
+
9
+ enum ExecutionState {
10
+ NotExecutable,
11
+ VerifiedButNotExecutable,
12
+ Executable,
13
+ Executed
14
+ }
15
+
16
+ contract EndpointV2ViewUpgradeable is Initializable {
17
+ bytes32 public constant EMPTY_PAYLOAD_HASH = bytes32(0);
18
+ bytes32 public constant NIL_PAYLOAD_HASH = bytes32(type(uint256).max);
19
+
20
+ ILayerZeroEndpointV2 public endpoint;
21
+
22
+ function __EndpointV2View_init(address _endpoint) internal onlyInitializing {
23
+ __EndpointV2View_init_unchained(_endpoint);
24
+ }
25
+
26
+ function __EndpointV2View_init_unchained(address _endpoint) internal onlyInitializing {
27
+ endpoint = ILayerZeroEndpointV2(_endpoint);
28
+ }
29
+
30
+ function initializable(Origin memory _origin, address _receiver) public view returns (bool) {
31
+ return endpoint.initializable(_origin, _receiver);
32
+ }
33
+
34
+ /// @dev check if a message is verifiable.
35
+ function verifiable(
36
+ Origin memory _origin,
37
+ address _receiver,
38
+ address _receiveLib,
39
+ bytes32 _payloadHash
40
+ ) public view returns (bool) {
41
+ if (!endpoint.isValidReceiveLibrary(_receiver, _origin.srcEid, _receiveLib)) return false;
42
+
43
+ if (!endpoint.verifiable(_origin, _receiver)) return false;
44
+
45
+ // checked in _inbound for verify
46
+ if (_payloadHash == EMPTY_PAYLOAD_HASH) return false;
47
+
48
+ return true;
49
+ }
50
+
51
+ /// @dev check if a message is executable.
52
+ /// @return ExecutionState of Executed, Executable, or NotExecutable
53
+ function executable(Origin memory _origin, address _receiver) public view returns (ExecutionState) {
54
+ bytes32 payloadHash = endpoint.inboundPayloadHash(_receiver, _origin.srcEid, _origin.sender, _origin.nonce);
55
+
56
+ // executed if the payload hash has been cleared and the nonce is less than or equal to lazyInboundNonce
57
+ if (
58
+ payloadHash == EMPTY_PAYLOAD_HASH &&
59
+ _origin.nonce <= endpoint.lazyInboundNonce(_receiver, _origin.srcEid, _origin.sender)
60
+ ) {
61
+ return ExecutionState.Executed;
62
+ }
63
+
64
+ // executable if nonce has not been executed and has not been nilified and nonce is less than or equal to inboundNonce
65
+ if (
66
+ payloadHash != NIL_PAYLOAD_HASH &&
67
+ _origin.nonce <= endpoint.inboundNonce(_receiver, _origin.srcEid, _origin.sender)
68
+ ) {
69
+ return ExecutionState.Executable;
70
+ }
71
+
72
+ if (payloadHash != EMPTY_PAYLOAD_HASH) {
73
+ return ExecutionState.VerifiedButNotExecutable;
74
+ }
75
+
76
+ // return NotExecutable as a catch-all
77
+ return ExecutionState.NotExecutable;
78
+ }
79
+
80
+ /**
81
+ * @dev This empty reserved space is put in place to allow future versions to add new
82
+ * variables without shifting down storage in the inheritance chain.
83
+ * See https://docs.openzeppelin.com/contracts/4.x/upgradeable#storage_gaps
84
+ */
85
+ uint256[49] private __gap;
86
+ }
@@ -37,26 +37,26 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
37
37
  }
38
38
 
39
39
  modifier onlyRegistered(address _lib) {
40
- if (!isRegisteredLibrary[_lib]) revert Errors.OnlyRegisteredLib();
40
+ if (!isRegisteredLibrary[_lib]) revert Errors.LZ_OnlyRegisteredLib();
41
41
  _;
42
42
  }
43
43
 
44
44
  modifier isSendLib(address _lib) {
45
45
  if (_lib != DEFAULT_LIB) {
46
- if (IMessageLib(_lib).messageLibType() == MessageLibType.Receive) revert Errors.OnlySendLib();
46
+ if (IMessageLib(_lib).messageLibType() == MessageLibType.Receive) revert Errors.LZ_OnlySendLib();
47
47
  }
48
48
  _;
49
49
  }
50
50
 
51
51
  modifier isReceiveLib(address _lib) {
52
52
  if (_lib != DEFAULT_LIB) {
53
- if (IMessageLib(_lib).messageLibType() == MessageLibType.Send) revert Errors.OnlyReceiveLib();
53
+ if (IMessageLib(_lib).messageLibType() == MessageLibType.Send) revert Errors.LZ_OnlyReceiveLib();
54
54
  }
55
55
  _;
56
56
  }
57
57
 
58
58
  modifier onlyRegisteredOrDefault(address _lib) {
59
- if (!isRegisteredLibrary[_lib] && _lib != DEFAULT_LIB) revert Errors.OnlyRegisteredOrDefaultLib();
59
+ if (!isRegisteredLibrary[_lib] && _lib != DEFAULT_LIB) revert Errors.LZ_OnlyRegisteredOrDefaultLib();
60
60
  _;
61
61
  }
62
62
 
@@ -64,7 +64,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
64
64
  modifier onlySupportedEid(address _lib, uint32 _eid) {
65
65
  /// @dev doesnt need to check for default lib, because when they are initially added they get passed through this modifier
66
66
  if (_lib != DEFAULT_LIB) {
67
- if (!IMessageLib(_lib).isSupportedEid(_eid)) revert Errors.UnsupportedEid();
67
+ if (!IMessageLib(_lib).isSupportedEid(_eid)) revert Errors.LZ_UnsupportedEid();
68
68
  }
69
69
  _;
70
70
  }
@@ -84,7 +84,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
84
84
  lib = sendLibrary[_sender][_dstEid];
85
85
  if (lib == DEFAULT_LIB) {
86
86
  lib = defaultSendLibrary[_dstEid];
87
- if (lib == address(0x0)) revert Errors.DefaultSendLibUnavailable();
87
+ if (lib == address(0x0)) revert Errors.LZ_DefaultSendLibUnavailable();
88
88
  }
89
89
  }
90
90
 
@@ -97,7 +97,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
97
97
  lib = receiveLibrary[_receiver][_srcEid];
98
98
  if (lib == DEFAULT_LIB) {
99
99
  lib = defaultReceiveLibrary[_srcEid];
100
- if (lib == address(0x0)) revert Errors.DefaultReceiveLibUnavailable();
100
+ if (lib == address(0x0)) revert Errors.LZ_DefaultReceiveLibUnavailable();
101
101
  isDefault = true;
102
102
  }
103
103
  }
@@ -139,9 +139,9 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
139
139
  /// @dev only owner
140
140
  function registerLibrary(address _lib) public onlyOwner {
141
141
  // must have the right interface
142
- if (!IERC165(_lib).supportsInterface(type(IMessageLib).interfaceId)) revert Errors.UnsupportedInterface();
142
+ if (!IERC165(_lib).supportsInterface(type(IMessageLib).interfaceId)) revert Errors.LZ_UnsupportedInterface();
143
143
  // must have not been registered
144
- if (isRegisteredLibrary[_lib]) revert Errors.AlreadyRegistered();
144
+ if (isRegisteredLibrary[_lib]) revert Errors.LZ_AlreadyRegistered();
145
145
 
146
146
  // insert into both the map and the list
147
147
  isRegisteredLibrary[_lib] = true;
@@ -159,7 +159,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
159
159
  address _newLib
160
160
  ) external onlyOwner onlyRegistered(_newLib) isSendLib(_newLib) onlySupportedEid(_newLib, _eid) {
161
161
  // must provide a different value
162
- if (defaultSendLibrary[_eid] == _newLib) revert Errors.SameValue();
162
+ if (defaultSendLibrary[_eid] == _newLib) revert Errors.LZ_SameValue();
163
163
  defaultSendLibrary[_eid] = _newLib;
164
164
  emit DefaultSendLibrarySet(_eid, _newLib);
165
165
  }
@@ -175,7 +175,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
175
175
  ) external onlyOwner onlyRegistered(_newLib) isReceiveLib(_newLib) onlySupportedEid(_newLib, _eid) {
176
176
  address oldLib = defaultReceiveLibrary[_eid];
177
177
  // must provide a different value
178
- if (oldLib == _newLib) revert Errors.SameValue();
178
+ if (oldLib == _newLib) revert Errors.LZ_SameValue();
179
179
 
180
180
  defaultReceiveLibrary[_eid] = _newLib;
181
181
  emit DefaultReceiveLibrarySet(_eid, _newLib);
@@ -207,7 +207,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
207
207
  delete defaultReceiveLibraryTimeout[_eid];
208
208
  } else {
209
209
  // override it with new configuration
210
- if (_expiry <= block.number) revert Errors.InvalidExpiry();
210
+ if (_expiry <= block.number) revert Errors.LZ_InvalidExpiry();
211
211
  Timeout storage timeout = defaultReceiveLibraryTimeout[_eid];
212
212
  timeout.lib = _lib;
213
213
  timeout.expiry = _expiry;
@@ -232,7 +232,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
232
232
  _assertAuthorized(_oapp);
233
233
 
234
234
  // must provide a different value
235
- if (sendLibrary[_oapp][_eid] == _newLib) revert Errors.SameValue();
235
+ if (sendLibrary[_oapp][_eid] == _newLib) revert Errors.LZ_SameValue();
236
236
  sendLibrary[_oapp][_eid] = _newLib;
237
237
  emit SendLibrarySet(_oapp, _eid, _newLib);
238
238
  }
@@ -252,7 +252,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
252
252
 
253
253
  address oldLib = receiveLibrary[_oapp][_eid];
254
254
  // must provide new values
255
- if (oldLib == _newLib) revert Errors.SameValue();
255
+ if (oldLib == _newLib) revert Errors.LZ_SameValue();
256
256
  receiveLibrary[_oapp][_eid] = _newLib;
257
257
  emit ReceiveLibrarySet(_oapp, _eid, _newLib);
258
258
 
@@ -260,7 +260,7 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
260
260
  // to simplify the logic, we only allow to set timeout if neither the new lib nor old lib is DEFAULT_LIB, which would should read the default timeout configurations
261
261
  // (1) if the Oapp wants to fall back to the DEFAULT, then set the newLib to DEFAULT with grace period == 0
262
262
  // (2) if the Oapp wants to change to a non DEFAULT from DEFAULT, then set the newLib to 'non-default' with _gracePeriod == 0, then use setReceiveLibraryTimeout() interface
263
- if (oldLib == DEFAULT_LIB || _newLib == DEFAULT_LIB) revert Errors.OnlyNonDefaultLib();
263
+ if (oldLib == DEFAULT_LIB || _newLib == DEFAULT_LIB) revert Errors.LZ_OnlyNonDefaultLib();
264
264
 
265
265
  // write to storage
266
266
  Timeout memory timeout = Timeout({ lib: oldLib, expiry: block.number + _gracePeriod });
@@ -286,14 +286,14 @@ abstract contract MessageLibManager is Ownable, IMessageLibManager {
286
286
 
287
287
  (, bool isDefault) = getReceiveLibrary(_oapp, _eid);
288
288
  // if current library is DEFAULT, Oapp cant set the timeout
289
- if (isDefault) revert Errors.OnlyNonDefaultLib();
289
+ if (isDefault) revert Errors.LZ_OnlyNonDefaultLib();
290
290
 
291
291
  if (_expiry == 0) {
292
292
  // force remove the current configuration
293
293
  delete receiveLibraryTimeout[_oapp][_eid];
294
294
  } else {
295
295
  // override it with new configuration
296
- if (_expiry <= block.number) revert Errors.InvalidExpiry();
296
+ if (_expiry <= block.number) revert Errors.LZ_InvalidExpiry();
297
297
  Timeout storage timeout = receiveLibraryTimeout[_oapp][_eid];
298
298
  timeout.lib = _lib;
299
299
  timeout.expiry = _expiry;