diff --git a/contracts/generated/CrossChain/CrossChain.go b/contracts/generated/CrossChain/CrossChain.go
index 0a842ed189..c83d6371ce 100644
--- a/contracts/generated/CrossChain/CrossChain.go
+++ b/contracts/generated/CrossChain/CrossChain.go
@@ -32,7 +32,7 @@ var (
// CrossChainMetaData contains all meta data concerning the CrossChain contract.
var CrossChainMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_messageBus\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"crossChainHashes\",\"type\":\"bytes[]\"}],\"name\":\"isBundleAvailable\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"bundleHash\",\"type\":\"bytes32\"}],\"name\":\"isBundleSaved\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isBundleSaved\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"}],\"name\":\"isWithdrawalSpent\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"isWithdrawalSpent\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"merkleMessageBus\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f5ffd5b50610018610025565b610020610025565b610104565b5f61002e6100c5565b805490915068010000000000000000900460ff16156100605760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100c25780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b9916100ef565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e9565b610c27806101115f395ff3fe608060405234801561000f575f5ffd5b50600436106100c4575f3560e01c80638da5cb5b1161007d578063e30c397811610058578063e30c39781461018f578063e874eb2014610197578063f2fde38b146101aa575f5ffd5b80638da5cb5b14610147578063a1a227fa1461015c578063a4ab2faa1461017c575f5ffd5b8063715018a6116100ad578063715018a61461011557806379ba50971461011d5780638415482614610125575f5ffd5b80632f0cb9e3146100c8578063485cc95514610100575b5f5ffd5b6100ea6100d6366004610798565b5f6020819052908152604090205460ff1681565b6040516100f791906107c6565b60405180910390f35b61011361010e3660046107f8565b6101bd565b005b61011361037e565b61011361039e565b6100ea610133366004610798565b60016020525f908152604090205460ff1681565b61014f6103dd565b6040516100f79190610837565b60025461016f906001600160a01b031681565b6040516100f79190610862565b6100ea61018a366004610a0f565b610411565b61014f61048d565b60035461016f906001600160a01b031681565b6101136101b8366004610a4f565b6104b5565b5f6101c6610547565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156101f25750825b90505f8267ffffffffffffffff16600114801561020e5750303b155b90508115801561021c575080155b15610253576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561028757845468ff00000000000000001916680100000000000000001785555b6001600160a01b0386166102b65760405162461bcd60e51b81526004016102ad90610aa0565b60405180910390fd5b6001600160a01b0387166102dc5760405162461bcd60e51b81526004016102ad90610ae2565b6102e587610571565b6102ed61058a565b600380546001600160a01b03881673ffffffffffffffffffffffffffffffffffffffff199182168117909255600280549091169091179055831561037557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061036c90600190610b0c565b60405180910390a15b50505050505050565b61038661059c565b60405162461bcd60e51b81526004016102ad90610b1a565b33806103a861048d565b6001600160a01b0316146103d1578060405163118cdaa760e01b81526004016102ad9190610837565b6103da816105ce565b50565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f80805b8351811015610475578184828151811061043157610431610b7b565b602002602001015161044290610b98565b604051602001610453929190610bd6565b60408051601f1981840301815291905280516020909101209150600101610415565b505f9081526001602052604090205460ff1692915050565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610401565b6104bd61059c565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825561050e6103dd565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b610579610617565b61058281610655565b6103da610666565b610592610617565b61059a61066e565b565b336105a56103dd565b6001600160a01b03161461059a573360405163118cdaa760e01b81526004016102ad9190610837565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff191681556106138261069c565b5050565b61061f610719565b61059a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61065d610617565b6103da81610737565b61059a610617565b610676610617565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f610722610547565b5468010000000000000000900460ff16919050565b61073f610617565b6001600160a01b0381166103d1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016102ad9190610837565b805b81146103da575f5ffd5b803561056b81610781565b5f602082840312156107ab576107ab5f5ffd5b6107b5838361078d565b9392505050565b8015155b82525050565b6020810161056b82846107bc565b5f6001600160a01b03821661056b565b610783816107d4565b803561056b816107e4565b5f5f6040838503121561080c5761080c5f5ffd5b61081684846107ed565b915061082584602085016107ed565b90509250929050565b6107c0816107d4565b6020810161056b828461082e565b5f61056b826107d4565b5f61056b82610845565b6107c08161084f565b6020810161056b8284610859565b634e487b7160e01b5f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff821117156108aa576108aa610870565b6040525050565b5f6108bb60405190565b90506108c78282610884565b919050565b5f67ffffffffffffffff8211156108e5576108e5610870565b5060209081020190565b5f67ffffffffffffffff82111561090857610908610870565b601f19601f83011660200192915050565b82818337505f910152565b5f610936610931846108ef565b6108b1565b905082815283838301111561094c5761094c5f5ffd5b6107b5836020830184610919565b5f82601f83011261096c5761096c5f5ffd5b6107b583833560208501610924565b5f610988610931846108cc565b838152905060208082019084028301858111156109a6576109a65f5ffd5b835b818110156109e457803567ffffffffffffffff8111156109c9576109c95f5ffd5b6109d58882880161095a565b845250602092830192016109a8565b5050509392505050565b5f82601f830112610a0057610a005f5ffd5b6107b58383356020850161097b565b5f60208284031215610a2257610a225f5ffd5b813567ffffffffffffffff811115610a3b57610a3b5f5ffd5b610a47848285016109ee565b949350505050565b5f60208284031215610a6257610a625f5ffd5b6107b583836107ed565b601b8152602081017f496e76616c6964206d6573736167652062757320616464726573730000000000815290505b60200190565b6020808252810161056b81610a6c565b60138152602081017f4f776e65722063616e6e6f74206265203078300000000000000000000000000081529050610a9a565b6020808252810161056b81610ab0565b5f67ffffffffffffffff821661056b565b6107c081610af2565b6020810161056b8284610b03565b6020808252810161056b81603481527f556e72656e6f756e6361626c654f776e61626c6532537465703a2063616e6e6f60208201527f742072656e6f756e6365206f776e657273686970000000000000000000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f61056b825190565b5f610ba1825190565b60208301610bae81610b8f565b9250506020811015610bca575f1960086020839003021b821691505b50919050565b806107c0565b60408101610be48285610bd0565b6107b56020830184610bd056fea264697066735822122012726334de3774ca8cb9874b4a5c1cf7bff9cf98ae3252005eb19b57173e37b164736f6c634300081c0033",
+ Bin: "0x608060405234801561000f575f5ffd5b50610018610025565b610020610025565b610104565b5f61002e6100c5565b805490915068010000000000000000900460ff16156100605760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100c25780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b9916100ef565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e9565b610c27806101115f395ff3fe608060405234801561000f575f5ffd5b50600436106100c4575f3560e01c80638da5cb5b1161007d578063e30c397811610058578063e30c39781461018f578063e874eb2014610197578063f2fde38b146101aa575f5ffd5b80638da5cb5b14610147578063a1a227fa1461015c578063a4ab2faa1461017c575f5ffd5b8063715018a6116100ad578063715018a61461011557806379ba50971461011d5780638415482614610125575f5ffd5b80632f0cb9e3146100c8578063485cc95514610100575b5f5ffd5b6100ea6100d6366004610798565b5f6020819052908152604090205460ff1681565b6040516100f791906107c6565b60405180910390f35b61011361010e3660046107f8565b6101bd565b005b61011361037e565b61011361039e565b6100ea610133366004610798565b60016020525f908152604090205460ff1681565b61014f6103dd565b6040516100f79190610837565b60025461016f906001600160a01b031681565b6040516100f79190610862565b6100ea61018a366004610a0f565b610411565b61014f61048d565b60035461016f906001600160a01b031681565b6101136101b8366004610a4f565b6104b5565b5f6101c6610547565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156101f25750825b90505f8267ffffffffffffffff16600114801561020e5750303b155b90508115801561021c575080155b15610253576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561028757845468ff00000000000000001916680100000000000000001785555b6001600160a01b0386166102b65760405162461bcd60e51b81526004016102ad90610aa0565b60405180910390fd5b6001600160a01b0387166102dc5760405162461bcd60e51b81526004016102ad90610ae2565b6102e587610571565b6102ed61058a565b600380546001600160a01b03881673ffffffffffffffffffffffffffffffffffffffff199182168117909255600280549091169091179055831561037557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061036c90600190610b0c565b60405180910390a15b50505050505050565b61038661059c565b60405162461bcd60e51b81526004016102ad90610b1a565b33806103a861048d565b6001600160a01b0316146103d1578060405163118cdaa760e01b81526004016102ad9190610837565b6103da816105ce565b50565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f80805b8351811015610475578184828151811061043157610431610b7b565b602002602001015161044290610b98565b604051602001610453929190610bd6565b60408051601f1981840301815291905280516020909101209150600101610415565b505f9081526001602052604090205460ff1692915050565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610401565b6104bd61059c565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825561050e6103dd565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b610579610617565b61058281610655565b6103da610666565b610592610617565b61059a61066e565b565b336105a56103dd565b6001600160a01b03161461059a573360405163118cdaa760e01b81526004016102ad9190610837565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff191681556106138261069c565b5050565b61061f610719565b61059a576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61065d610617565b6103da81610737565b61059a610617565b610676610617565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f610722610547565b5468010000000000000000900460ff16919050565b61073f610617565b6001600160a01b0381166103d1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016102ad9190610837565b805b81146103da575f5ffd5b803561056b81610781565b5f602082840312156107ab576107ab5f5ffd5b6107b5838361078d565b9392505050565b8015155b82525050565b6020810161056b82846107bc565b5f6001600160a01b03821661056b565b610783816107d4565b803561056b816107e4565b5f5f6040838503121561080c5761080c5f5ffd5b61081684846107ed565b915061082584602085016107ed565b90509250929050565b6107c0816107d4565b6020810161056b828461082e565b5f61056b826107d4565b5f61056b82610845565b6107c08161084f565b6020810161056b8284610859565b634e487b7160e01b5f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff821117156108aa576108aa610870565b6040525050565b5f6108bb60405190565b90506108c78282610884565b919050565b5f67ffffffffffffffff8211156108e5576108e5610870565b5060209081020190565b5f67ffffffffffffffff82111561090857610908610870565b601f19601f83011660200192915050565b82818337505f910152565b5f610936610931846108ef565b6108b1565b905082815283838301111561094c5761094c5f5ffd5b6107b5836020830184610919565b5f82601f83011261096c5761096c5f5ffd5b6107b583833560208501610924565b5f610988610931846108cc565b838152905060208082019084028301858111156109a6576109a65f5ffd5b835b818110156109e457803567ffffffffffffffff8111156109c9576109c95f5ffd5b6109d58882880161095a565b845250602092830192016109a8565b5050509392505050565b5f82601f830112610a0057610a005f5ffd5b6107b58383356020850161097b565b5f60208284031215610a2257610a225f5ffd5b813567ffffffffffffffff811115610a3b57610a3b5f5ffd5b610a47848285016109ee565b949350505050565b5f60208284031215610a6257610a625f5ffd5b6107b583836107ed565b601b8152602081017f496e76616c6964206d6573736167652062757320616464726573730000000000815290505b60200190565b6020808252810161056b81610a6c565b60138152602081017f4f776e65722063616e6e6f74206265203078300000000000000000000000000081529050610a9a565b6020808252810161056b81610ab0565b5f67ffffffffffffffff821661056b565b6107c081610af2565b6020810161056b8284610b03565b6020808252810161056b81603481527f556e72656e6f756e6361626c654f776e61626c6532537465703a2063616e6e6f60208201527f742072656e6f756e6365206f776e657273686970000000000000000000000000604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b5f61056b825190565b5f610ba1825190565b60208301610bae81610b8f565b9250506020811015610bca575f1960086020839003021b821691505b50919050565b806107c0565b60408101610be48285610bd0565b6107b56020830184610bd056fea26469706673582212203ebf8652687fc65693f1dfac6c2982b871a7c9caa10c693afe143212a568ec7b64736f6c634300081c0033",
}
// CrossChainABI is the input ABI used to generate the binding from.
diff --git a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go
index de822f8b74..703e375455 100644
--- a/contracts/generated/CrossChainMessenger/CrossChainMessenger.go
+++ b/contracts/generated/CrossChainMessenger/CrossChainMessenger.go
@@ -42,7 +42,7 @@ type StructsCrossChainMessage struct {
// CrossChainMessengerMetaData contains all meta data concerning the CrossChainMessenger contract.
var CrossChainMessengerMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"error\",\"type\":\"bytes\"}],\"name\":\"CallFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNPAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"crossChainSender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"crossChainTarget\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"encodeCall\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantPauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messageBusAddr\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBusContract\",\"outputs\":[{\"internalType\":\"contractIMerkleTreeMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"}],\"name\":\"messageConsumed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"messageConsumed\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"relayMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"relayMessageWithProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokePauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"multisig\",\"type\":\"address\"}],\"name\":\"transferUnpauserRoleToMultisig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
- Bin: "0x6080604052348015600e575f5ffd5b50611d198061001c5f395ff3fe608060405234801561000f575f5ffd5b50600436106101a5575f3560e01c80636c11c21c116100e8578063a217fddf11610093578063d547741f1161006e578063d547741f14610409578063e63ab1e91461041c578063f865af0814610443578063fb1bb9de14610456575f5ffd5b8063a217fddf146103dc578063b859ce83146103e3578063c4d66de8146103f6575f5ffd5b80638456cb59116100c35780638456cb591461036d57806391d1485414610375578063a1a227fa146103cc575f5ffd5b80636c11c21c14610328578063772c65521461033b5780637920c9861461035a575f5ffd5b80633f4ba83a11610153578063530c1e401161012e578063530c1e401461029c5780635b76f28b146102be5780635c975abb146102de57806363012de514610308575f5ffd5b80633f4ba83a1461026e5780634c81bd20146102765780635067627214610289575f5ffd5b80632f2ff15d116101835780632f2ff15d14610235578063329687821461024857806336568abe1461025b575f5ffd5b806301ffc9a7146101a9578063248a9ca3146101d25780632540e2da14610220575b5f5ffd5b6101bc6101b7366004611381565b61047d565b6040516101c991906113a8565b60405180910390f35b6102136101e03660046113c7565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040516101c991906113ea565b61023361022e36600461141c565b610515565b005b610233610243366004611439565b61054e565b61023361025636600461141c565b610597565b610233610269366004611439565b6105cb565b610233610617565b610233610284366004611488565b61064c565b610233610297366004611516565b610797565b6101bc6102aa3660046113c7565b60036020525f908152604090205460ff1681565b6102d16102cc3660046115e0565b6108de565b6040516101c99190611671565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bc565b60015461031b906001600160a01b031681565b6040516101c9919061168b565b61023361033636600461141c565b61095e565b5f5461034d906001600160a01b031681565b6040516101c991906116b6565b61023361036836600461141c565b610992565b610233610a17565b6101bc610383366004611439565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f546001600160a01b031661031b565b6102135f81565b60025461031b906001600160a01b031681565b61023361040436600461141c565b610a49565b610233610417366004611439565b610ba8565b6102137f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023361045136600461141c565b610beb565b6102137f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061050f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f61051f81610c1f565b6105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610c29565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461058781610c1f565b6105918383610cd6565b50505050565b5f6105a181610c1f565b6105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610cd6565b6001600160a01b038116331461060d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105498282610c29565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a61064181610c1f565b610649610d99565b50565b610654610e05565b61065c610e63565b61066581610ec6565b610672602082018261141c565b600180546001600160a01b0319166001600160a01b03929092169190911790555f6106a060808301836116c4565b8101906106ad9190611887565b8051600280546001600160a01b0319166001600160a01b0390921691821790559091505f9081905a84602001516040516106e791906118e0565b5f604051808303815f8787f1925050503d805f8114610721576040519150601f19603f3d011682016040523d82523d5f602084013e610726565b606091505b509150915081610754578060405163a5fa8d2b60e01b815260040161074b9190611671565b60405180910390fd5b5050600180546001600160a01b031990811682556002805490911690557f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00555050565b61079f610e05565b6107a7610e63565b6107b384848484611003565b6107c0602085018561141c565b600180546001600160a01b0319166001600160a01b03929092169190911790555f6107ee60808601866116c4565b8101906107fb9190611887565b8051600280546001600160a01b0319166001600160a01b0390921691821790559091505f9081905a846020015160405161083591906118e0565b5f604051808303815f8787f1925050503d805f811461086f576040519150601f19603f3d011682016040523d82523d5f602084013e610874565b606091505b509150915081610899578060405163a5fa8d2b60e01b815260040161074b9190611671565b5050600180546001600160a01b031990811682556002805490911690557f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005550610591565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250938552505050602091820152604051610945929101611932565b60405160208183030381529060405290505b9392505050565b5f61096881610c1f565b6105497f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83610cd6565b5f61099c81610c1f565b6001600160a01b0382166109c25760405162461bcd60e51b815260040161074b90611977565b6109ec7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a33610c29565b506105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610cd6565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a4181610c1f565b6106496110f4565b5f610a5261114f565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610a7e5750825b90505f8267ffffffffffffffff166001148015610a9a5750303b155b905081158015610aa8575080155b15610adf576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b1357845468ff00000000000000001916680100000000000000001785555b610b1b611177565b6001600160a01b038616610b2d575f5ffd5b610b3633611187565b5f80546001600160a01b0319166001600160a01b0388161790558315610ba057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b97906001906119a1565b60405180910390a15b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610be181610c1f565b6105918383610c29565b5f610bf581610c1f565b6105497f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83610c29565b6106498133611203565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615610ccd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061050f565b5f91505061050f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16610ccd575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610d4f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061050f565b610da1611281565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051610dfa919061168b565b60405180910390a150565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610e61576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901610ec0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b5f546040517f91643fdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906391643fdd90610f0e908490600401611b6c565b602060405180830381865afa158015610f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4d9190611b90565b610f695760405162461bcd60e51b815260040161074b90611bdf565b5f81604051602001610f7b9190611b6c565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1615610fc25760405162461bcd60e51b815260040161074b90611c21565b5f908152600360205260409020805460ff1916600117905550565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f546040517fce0d7db30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063ce0d7db390611051908790879087908790600401611c8a565b5f6040518083038186803b158015611067575f5ffd5b505afa158015611079573d5f5f3e3d5ffd5b505050505f8460405160200161108f9190611b6c565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff16156110d65760405162461bcd60e51b815260040161074b90611c21565b5f908152600360205260409020805460ff1916600117905550505050565b6110fc610e05565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ded565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061050f565b61117f6112dc565b610e6161131a565b61118f6112dc565b611197611322565b61119f611322565b6111a95f82610cd6565b506111d47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610cd6565b506111ff7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a82610cd6565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166111ff5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161074b929190611cc8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610e61576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e461132a565b610e61576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fdd6112dc565b610e616112dc565b5f61133361114f565b5468010000000000000000900460ff16919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610649575f5ffd5b803561050f81611348565b5f60208284031215611394576113945f5ffd5b6109578383611376565b8015155b82525050565b6020810161050f828461139e565b8061136c565b803561050f816113b6565b5f602082840312156113da576113da5f5ffd5b61095783836113bc565b806113a2565b6020810161050f82846113e4565b5f6001600160a01b03821661050f565b61136c816113f8565b803561050f81611408565b5f6020828403121561142f5761142f5f5ffd5b6109578383611411565b5f5f6040838503121561144d5761144d5f5ffd5b61145784846113bc565b91506114668460208501611411565b90509250929050565b5f60c08284031215611482576114825f5ffd5b50919050565b5f6020828403121561149b5761149b5f5ffd5b813567ffffffffffffffff8111156114b4576114b45f5ffd5b6114c08482850161146f565b949350505050565b5f5f83601f8401126114db576114db5f5ffd5b50813567ffffffffffffffff8111156114f5576114f55f5ffd5b60208301915083602082028301111561150f5761150f5f5ffd5b9250929050565b5f5f5f5f6060858703121561152c5761152c5f5ffd5b843567ffffffffffffffff811115611545576115455f5ffd5b6115518782880161146f565b945050602085013567ffffffffffffffff811115611570576115705f5ffd5b61157c878288016114c8565b935093505061158e86604087016113bc565b905092959194509250565b5f5f83601f8401126115ac576115ac5f5ffd5b50813567ffffffffffffffff8111156115c6576115c65f5ffd5b60208301915083600182028301111561150f5761150f5f5ffd5b5f5f5f604084860312156115f5576115f55f5ffd5b6115ff8585611411565b9250602084013567ffffffffffffffff81111561161d5761161d5f5ffd5b61162986828701611599565b92509250509250925092565b8281835e505f910152565b5f611649825190565b808452602084019350611660818560208601611635565b601f01601f19169290920192915050565b602080825281016109578184611640565b6113a2816113f8565b6020810161050f8284611682565b5f61050f826113f8565b5f61050f82611699565b6113a2816116a3565b6020810161050f82846116ad565b5f808335601e19368590030181126116dd576116dd5f5ffd5b8301915050803567ffffffffffffffff8111156116fb576116fb5f5ffd5b60208201915060018102360382131561150f5761150f5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff8211171561176857611768611715565b6040525050565b5f61177960405190565b90506117858282611742565b919050565b5f67ffffffffffffffff8211156117a3576117a3611715565b601f19601f83011660200192915050565b82818337505f910152565b5f6117d16117cc8461178a565b61176f565b90508281528383830111156117e7576117e75f5ffd5b6109578360208301846117b4565b5f82601f830112611807576118075f5ffd5b610957838335602085016117bf565b5f60608284031215611829576118295f5ffd5b611833606061176f565b905061183f8383611411565b8152602082013567ffffffffffffffff81111561185d5761185d5f5ffd5b611869848285016117f5565b60208301525061187c83604084016113bc565b604082015292915050565b5f6020828403121561189a5761189a5f5ffd5b813567ffffffffffffffff8111156118b3576118b35f5ffd5b6114c084828501611816565b5f6118c8825190565b6118d6818560208601611635565b9290920192915050565b61050f81836118bf565b80515f9060608401906118fd8582611682565b50602083015184820360208601526119158282611640565b915050604083015161192a60408601826113e4565b509392505050565b6020808252810161095781846118ea565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290505b60200190565b6020808252810161050f81611943565b5f67ffffffffffffffff821661050f565b6113a281611987565b6020810161050f8284611998565b505f61050f6020830183611411565b67ffffffffffffffff811661136c565b803561050f816119be565b505f61050f60208301836119ce565b67ffffffffffffffff81166113a2565b63ffffffff811661136c565b803561050f816119f8565b505f61050f6020830183611a04565b63ffffffff81166113a2565b5f808335601e1936859003018112611a4357611a435f5ffd5b830160208101925035905067ffffffffffffffff811115611a6557611a655f5ffd5b3681900382131561150f5761150f5f5ffd5b818352602083019250611a8b8284836117b4565b50601f01601f19160190565b60ff811661136c565b803561050f81611a97565b505f61050f6020830183611aa0565b60ff81166113a2565b5f60c08301611ad283806119af565b611adc8582611682565b50611aea60208401846119d9565b611af760208601826119e8565b50611b0560408401846119d9565b611b1260408601826119e8565b50611b206060840184611a0f565b611b2d6060860182611a1e565b50611b3b6080840184611a2a565b8583036080870152611b4e838284611a77565b92505050611b5f60a0840184611aab565b61192a60a0860182611aba565b602080825281016109578184611ac3565b80151561136c565b805161050f81611b7d565b5f60208284031215611ba357611ba35f5ffd5b6109578383611b85565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050611971565b6020808252810161050f81611bad565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e0000000000000081529050611971565b6020808252810161050f81611bef565b82818337505050565b8183526020830192505f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611c7357611c735f5ffd5b602083029250611c84838584611c31565b50500190565b60608082528101611c9b8187611ac3565b90508181036020830152611cb0818587611c3a565b9050611cbf60408301846113e4565b95945050505050565b60408101611cd68285611682565b61095760208301846113e456fea264697066735822122047308d0e8c70337b56e3d96a01781953e8101bace8d71aea621a6239740d5b7264736f6c634300081c0033",
+ Bin: "0x6080604052348015600e575f5ffd5b50611d198061001c5f395ff3fe608060405234801561000f575f5ffd5b50600436106101a5575f3560e01c80636c11c21c116100e8578063a217fddf11610093578063d547741f1161006e578063d547741f14610409578063e63ab1e91461041c578063f865af0814610443578063fb1bb9de14610456575f5ffd5b8063a217fddf146103dc578063b859ce83146103e3578063c4d66de8146103f6575f5ffd5b80638456cb59116100c35780638456cb591461036d57806391d1485414610375578063a1a227fa146103cc575f5ffd5b80636c11c21c14610328578063772c65521461033b5780637920c9861461035a575f5ffd5b80633f4ba83a11610153578063530c1e401161012e578063530c1e401461029c5780635b76f28b146102be5780635c975abb146102de57806363012de514610308575f5ffd5b80633f4ba83a1461026e5780634c81bd20146102765780635067627214610289575f5ffd5b80632f2ff15d116101835780632f2ff15d14610235578063329687821461024857806336568abe1461025b575f5ffd5b806301ffc9a7146101a9578063248a9ca3146101d25780632540e2da14610220575b5f5ffd5b6101bc6101b7366004611381565b61047d565b6040516101c991906113a8565b60405180910390f35b6102136101e03660046113c7565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040516101c991906113ea565b61023361022e36600461141c565b610515565b005b610233610243366004611439565b61054e565b61023361025636600461141c565b610597565b610233610269366004611439565b6105cb565b610233610617565b610233610284366004611488565b61064c565b610233610297366004611516565b610797565b6101bc6102aa3660046113c7565b60036020525f908152604090205460ff1681565b6102d16102cc3660046115e0565b6108de565b6040516101c99190611671565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bc565b60015461031b906001600160a01b031681565b6040516101c9919061168b565b61023361033636600461141c565b61095e565b5f5461034d906001600160a01b031681565b6040516101c991906116b6565b61023361036836600461141c565b610992565b610233610a17565b6101bc610383366004611439565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f546001600160a01b031661031b565b6102135f81565b60025461031b906001600160a01b031681565b61023361040436600461141c565b610a49565b610233610417366004611439565b610ba8565b6102137f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023361045136600461141c565b610beb565b6102137f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061050f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f61051f81610c1f565b6105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610c29565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461058781610c1f565b6105918383610cd6565b50505050565b5f6105a181610c1f565b6105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610cd6565b6001600160a01b038116331461060d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105498282610c29565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a61064181610c1f565b610649610d99565b50565b610654610e05565b61065c610e63565b61066581610ec6565b610672602082018261141c565b600180546001600160a01b0319166001600160a01b03929092169190911790555f6106a060808301836116c4565b8101906106ad9190611887565b8051600280546001600160a01b0319166001600160a01b0390921691821790559091505f9081905a84602001516040516106e791906118e0565b5f604051808303815f8787f1925050503d805f8114610721576040519150601f19603f3d011682016040523d82523d5f602084013e610726565b606091505b509150915081610754578060405163a5fa8d2b60e01b815260040161074b9190611671565b60405180910390fd5b5050600180546001600160a01b031990811682556002805490911690557f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00555050565b61079f610e05565b6107a7610e63565b6107b384848484611003565b6107c0602085018561141c565b600180546001600160a01b0319166001600160a01b03929092169190911790555f6107ee60808601866116c4565b8101906107fb9190611887565b8051600280546001600160a01b0319166001600160a01b0390921691821790559091505f9081905a846020015160405161083591906118e0565b5f604051808303815f8787f1925050503d805f811461086f576040519150601f19603f3d011682016040523d82523d5f602084013e610874565b606091505b509150915081610899578060405163a5fa8d2b60e01b815260040161074b9190611671565b5050600180546001600160a01b031990811682556002805490911690557f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005550610591565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250938552505050602091820152604051610945929101611932565b60405160208183030381529060405290505b9392505050565b5f61096881610c1f565b6105497f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83610cd6565b5f61099c81610c1f565b6001600160a01b0382166109c25760405162461bcd60e51b815260040161074b90611977565b6109ec7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a33610c29565b506105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610cd6565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a4181610c1f565b6106496110f4565b5f610a5261114f565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610a7e5750825b90505f8267ffffffffffffffff166001148015610a9a5750303b155b905081158015610aa8575080155b15610adf576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b1357845468ff00000000000000001916680100000000000000001785555b610b1b611177565b6001600160a01b038616610b2d575f5ffd5b610b3633611187565b5f80546001600160a01b0319166001600160a01b0388161790558315610ba057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b97906001906119a1565b60405180910390a15b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610be181610c1f565b6105918383610c29565b5f610bf581610c1f565b6105497f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83610c29565b6106498133611203565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615610ccd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061050f565b5f91505061050f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16610ccd575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610d4f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061050f565b610da1611281565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051610dfa919061168b565b60405180910390a150565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610e61576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901610ec0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b5f546040517f91643fdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906391643fdd90610f0e908490600401611b6c565b602060405180830381865afa158015610f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4d9190611b90565b610f695760405162461bcd60e51b815260040161074b90611bdf565b5f81604051602001610f7b9190611b6c565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1615610fc25760405162461bcd60e51b815260040161074b90611c21565b5f908152600360205260409020805460ff1916600117905550565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f546040517fce0d7db30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063ce0d7db390611051908790879087908790600401611c8a565b5f6040518083038186803b158015611067575f5ffd5b505afa158015611079573d5f5f3e3d5ffd5b505050505f8460405160200161108f9190611b6c565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff16156110d65760405162461bcd60e51b815260040161074b90611c21565b5f908152600360205260409020805460ff1916600117905550505050565b6110fc610e05565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ded565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061050f565b61117f6112dc565b610e6161131a565b61118f6112dc565b611197611322565b61119f611322565b6111a95f82610cd6565b506111d47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610cd6565b506111ff7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a82610cd6565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166111ff5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161074b929190611cc8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610e61576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e461132a565b610e61576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fdd6112dc565b610e616112dc565b5f61133361114f565b5468010000000000000000900460ff16919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610649575f5ffd5b803561050f81611348565b5f60208284031215611394576113945f5ffd5b6109578383611376565b8015155b82525050565b6020810161050f828461139e565b8061136c565b803561050f816113b6565b5f602082840312156113da576113da5f5ffd5b61095783836113bc565b806113a2565b6020810161050f82846113e4565b5f6001600160a01b03821661050f565b61136c816113f8565b803561050f81611408565b5f6020828403121561142f5761142f5f5ffd5b6109578383611411565b5f5f6040838503121561144d5761144d5f5ffd5b61145784846113bc565b91506114668460208501611411565b90509250929050565b5f60c08284031215611482576114825f5ffd5b50919050565b5f6020828403121561149b5761149b5f5ffd5b813567ffffffffffffffff8111156114b4576114b45f5ffd5b6114c08482850161146f565b949350505050565b5f5f83601f8401126114db576114db5f5ffd5b50813567ffffffffffffffff8111156114f5576114f55f5ffd5b60208301915083602082028301111561150f5761150f5f5ffd5b9250929050565b5f5f5f5f6060858703121561152c5761152c5f5ffd5b843567ffffffffffffffff811115611545576115455f5ffd5b6115518782880161146f565b945050602085013567ffffffffffffffff811115611570576115705f5ffd5b61157c878288016114c8565b935093505061158e86604087016113bc565b905092959194509250565b5f5f83601f8401126115ac576115ac5f5ffd5b50813567ffffffffffffffff8111156115c6576115c65f5ffd5b60208301915083600182028301111561150f5761150f5f5ffd5b5f5f5f604084860312156115f5576115f55f5ffd5b6115ff8585611411565b9250602084013567ffffffffffffffff81111561161d5761161d5f5ffd5b61162986828701611599565b92509250509250925092565b8281835e505f910152565b5f611649825190565b808452602084019350611660818560208601611635565b601f01601f19169290920192915050565b602080825281016109578184611640565b6113a2816113f8565b6020810161050f8284611682565b5f61050f826113f8565b5f61050f82611699565b6113a2816116a3565b6020810161050f82846116ad565b5f808335601e19368590030181126116dd576116dd5f5ffd5b8301915050803567ffffffffffffffff8111156116fb576116fb5f5ffd5b60208201915060018102360382131561150f5761150f5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff8211171561176857611768611715565b6040525050565b5f61177960405190565b90506117858282611742565b919050565b5f67ffffffffffffffff8211156117a3576117a3611715565b601f19601f83011660200192915050565b82818337505f910152565b5f6117d16117cc8461178a565b61176f565b90508281528383830111156117e7576117e75f5ffd5b6109578360208301846117b4565b5f82601f830112611807576118075f5ffd5b610957838335602085016117bf565b5f60608284031215611829576118295f5ffd5b611833606061176f565b905061183f8383611411565b8152602082013567ffffffffffffffff81111561185d5761185d5f5ffd5b611869848285016117f5565b60208301525061187c83604084016113bc565b604082015292915050565b5f6020828403121561189a5761189a5f5ffd5b813567ffffffffffffffff8111156118b3576118b35f5ffd5b6114c084828501611816565b5f6118c8825190565b6118d6818560208601611635565b9290920192915050565b61050f81836118bf565b80515f9060608401906118fd8582611682565b50602083015184820360208601526119158282611640565b915050604083015161192a60408601826113e4565b509392505050565b6020808252810161095781846118ea565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290505b60200190565b6020808252810161050f81611943565b5f67ffffffffffffffff821661050f565b6113a281611987565b6020810161050f8284611998565b505f61050f6020830183611411565b67ffffffffffffffff811661136c565b803561050f816119be565b505f61050f60208301836119ce565b67ffffffffffffffff81166113a2565b63ffffffff811661136c565b803561050f816119f8565b505f61050f6020830183611a04565b63ffffffff81166113a2565b5f808335601e1936859003018112611a4357611a435f5ffd5b830160208101925035905067ffffffffffffffff811115611a6557611a655f5ffd5b3681900382131561150f5761150f5f5ffd5b818352602083019250611a8b8284836117b4565b50601f01601f19160190565b60ff811661136c565b803561050f81611a97565b505f61050f6020830183611aa0565b60ff81166113a2565b5f60c08301611ad283806119af565b611adc8582611682565b50611aea60208401846119d9565b611af760208601826119e8565b50611b0560408401846119d9565b611b1260408601826119e8565b50611b206060840184611a0f565b611b2d6060860182611a1e565b50611b3b6080840184611a2a565b8583036080870152611b4e838284611a77565b92505050611b5f60a0840184611aab565b61192a60a0860182611aba565b602080825281016109578184611ac3565b80151561136c565b805161050f81611b7d565b5f60208284031215611ba357611ba35f5ffd5b6109578383611b85565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050611971565b6020808252810161050f81611bad565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e0000000000000081529050611971565b6020808252810161050f81611bef565b82818337505050565b8183526020830192505f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611c7357611c735f5ffd5b602083029250611c84838584611c31565b50500190565b60608082528101611c9b8187611ac3565b90508181036020830152611cb0818587611c3a565b9050611cbf60408301846113e4565b95945050505050565b60408101611cd68285611682565b61095760208301846113e456fea2646970667358221220a3c6650f1bf93b434f390b5b81c157034d3b8d9f6dbec2d55e5bad2d816081c964736f6c634300081c0033",
}
// CrossChainMessengerABI is the input ABI used to generate the binding from.
diff --git a/contracts/generated/EthereumBridge/EthereumBridge.go b/contracts/generated/EthereumBridge/EthereumBridge.go
index 9757d814d8..4528f0eff3 100644
--- a/contracts/generated/EthereumBridge/EthereumBridge.go
+++ b/contracts/generated/EthereumBridge/EthereumBridge.go
@@ -32,7 +32,7 @@ var (
// EthereumBridgeMetaData contains all meta data concerning the EthereumBridge contract.
var EthereumBridgeMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"remoteAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"localAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"CreatedWrappedToken\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNPAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20Fee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantPauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"name\":\"hasTokenMapping\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"remoteBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"localWeth\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"localToRemoteToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localWETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractICrossChainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"crossChainAddress\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"onCreateTokenCommand\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveNativeWrapped\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteBridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"remoteToken\",\"type\":\"address\"}],\"name\":\"remoteToLocalToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokePauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"multisig\",\"type\":\"address\"}],\"name\":\"transferUnpauserRoleToMultisig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"valueTransferFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"localToken\",\"type\":\"address\"}],\"name\":\"wrappedTokens\",\"outputs\":[{\"internalType\":\"contractWrappedERC20\",\"name\":\"wrappedToken\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
- Bin: "0x6080604052348015600e575f5ffd5b506142568061001c5f395ff3fe60806040526004361061021b575f3560e01c80637920c9861161011c578063a381c8e2116100af578063d5c6b5041161007e578063e63ab1e911610063578063e63ab1e914610717578063f865af081461074a578063fb1bb9de1461076957610222565b8063d5c6b504146106c4578063dfde69e5146106f857610222565b8063a381c8e2146105e8578063affed0e0146105fb578063c0c53b8b14610686578063d547741f146106a557610222565b80639813c7b2116100eb5780639813c7b2146105545780639e405b711461058d578063a1a227fa146105c1578063a217fddf146105d557610222565b80637920c9861461049f57806383bece4d146104be5780638456cb59146104dd57806391d14854146104f157610222565b806332968782116101af578063458ffd631161017e5780636a175390116101635780636a175390146102b95780636c11c21c146104615780637533087a1461048057610222565b8063458ffd631461040c5780635c975abb1461042b57610222565b8063329687821461039957806336568abe146103b85780633cb747bf146103d75780633f4ba83a146103f857610222565b80631888d712116101eb5780631888d712146102f9578063248a9ca31461030e5780632540e2da1461035b5780632f2ff15d1461037a57610222565b80628d48e31461024357806301ffc9a71461028d57806307d7fb9a146102b95780630f0a9a4b146102da57610222565b3661022257005b60405162461bcd60e51b815260040161023a90612242565b60405180910390fd5b34801561024e575f5ffd5b5061027761025d366004612280565b60026020525f90815260409020546001600160a01b031681565b60405161028491906122b3565b60405180910390f35b348015610298575f5ffd5b506102ac6102a73660046122dc565b61079c565b6040516102849190612301565b3480156102c4575f5ffd5b506102cd610804565b6040516102849190612315565b3480156102e5575f5ffd5b50600354610277906001600160a01b031681565b61030c610307366004612280565b610870565b005b348015610319575f5ffd5b506102cd610328366004612334565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b348015610366575f5ffd5b5061030c610375366004612280565b610a06565b348015610385575f5ffd5b5061030c610394366004612351565b610a3f565b3480156103a4575f5ffd5b5061030c6103b3366004612280565b610a82565b3480156103c3575f5ffd5b5061030c6103d2366004612351565b610ab6565b3480156103e2575f5ffd5b506103eb610b02565b60405161028491906123a4565b348015610403575f5ffd5b5061030c610b8d565b348015610417575f5ffd5b5061030c610426366004612400565b610bc2565b348015610436575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166102ac565b34801561046c575f5ffd5b5061030c61047b366004612280565b610d43565b34801561048b575f5ffd5b5061030c61049a366004612487565b610d77565b3480156104aa575f5ffd5b5061030c6104b9366004612280565b610f66565b3480156104c9575f5ffd5b5061030c6104d83660046124b4565b610feb565b3480156104e8575f5ffd5b5061030c61114f565b3480156104fc575f5ffd5b506102ac61050b366004612351565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055f575f5ffd5b506102ac61056e366004612280565b6001600160a01b039081165f9081526020819052604090205416151590565b348015610598575f5ffd5b506102776105a7366004612280565b60016020525f90815260409020546001600160a01b031681565b3480156105cc575f5ffd5b506103eb611181565b3480156105e0575f5ffd5b506102cd5f81565b61030c6105f63660046124b4565b611201565b348015610606575f5ffd5b5060408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd00546102cd565b348015610691575f5ffd5b5061030c6106a03660046124fa565b61141a565b3480156106b0575f5ffd5b5061030c6106bf366004612351565b6115f6565b3480156106cf575f5ffd5b506103eb6106de366004612280565b5f602081905290815260409020546001600160a01b031681565b348015610703575f5ffd5b50600454610277906001600160a01b031681565b348015610722575f5ffd5b506102cd7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b348015610755575f5ffd5b5061030c610764366004612280565b611639565b348015610774575f5ffd5b506102cd7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107fe57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b5f61080d61166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610847573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612533565b905090565b610878611676565b5f34116108975760405162461bcd60e51b815260040161023a90612582565b61089f61166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108fd9190612533565b34101561091c5760405162461bcd60e51b815260040161023a906125ec565b5f61092561166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109839190612533565b90505f6109908234612629565b90505f6383bece4d60e01b5f83866040516024016109b09392919061263c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150610a00906001600160a01b03168260025f5f886116d4565b50505050565b5f610a1081611844565b610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361184e565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7881611844565b610a0083836118fb565b5f610a8c81611844565b610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836118fb565b6001600160a01b0381163314610af8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3a828261184e565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f9081527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad02851382005b546001600160a01b0316919050565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610bb781611844565b610bbf6119be565b50565b6003546001600160a01b0316610bd6611a2a565b610bf25760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b0316610c04611a4c565b6001600160a01b031614610c2a5760405162461bcd60e51b815260040161023a9061272c565b30610c33611ab4565b6001600160a01b031614610c595760405162461bcd60e51b815260040161023a90612794565b5f85858585604051610c6a90612201565b610c7794939291906127cf565b604051809103905ff080158015610c90573d5f5f3e3d5ffd5b506001600160a01b038082165f81815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600183528184208054968f169682168717905594835260029091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610d31908a9084908b908b908b908b90612800565b60405180910390a15050505050505050565b5f610d4d81611844565b610a3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836118fb565b6003546001600160a01b0316610d8b611a2a565b610da75760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b0316610db9611a4c565b6001600160a01b031614610ddf5760405162461bcd60e51b815260040161023a9061272c565b30610de8611ab4565b6001600160a01b031614610e0e5760405162461bcd60e51b815260040161023a90612794565b610e16611676565b60048054604080519283526024830181526020830180516001600160e01b03167fd0e30db000000000000000000000000000000000000000000000000000000000179052515f926001600160a01b03909216918591610e75919061287b565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b5050905080610ed55760405162461bcd60e51b815260040161023a906128b7565b600480546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163a9059cbb91610f1f9188918891016128c7565b6020604051808303815f875af1158015610f3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5f91906128f5565b5050505050565b5f610f7081611844565b6001600160a01b038216610f965760405162461bcd60e51b815260040161023a90612944565b610fc07f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a3361184e565b50610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836118fb565b6003546001600160a01b0316610fff611a2a565b61101b5760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b031661102d611a4c565b6001600160a01b0316146110535760405162461bcd60e51b815260040161023a9061272c565b3061105c611ab4565b6001600160a01b0316146110825760405162461bcd60e51b815260040161023a90612794565b61108a611676565b6001600160a01b038085165f9081526002602090815260408083205484168084529183905290912054909116806110d35760405162461bcd60e51b815260040161023a906129ac565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad9061111a90879089906004016128c7565b5f604051808303815f87803b158015611131575f5ffd5b505af1158015611143573d5f5f3e3d5ffd5b50505050505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61117981611844565b610bbf611af8565b60408051808201909152601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020909101527f3e1bb302f668bd876eab4a48b3759a1d614a1ecbcc67ee27a10c9a116878004e5f9081527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00610b7e565b611209611676565b5f82116112285760405162461bcd60e51b815260040161023a906129ee565b6004546001600160a01b039081169084160361124857610a3a8282611b53565b6001600160a01b038084165f908152602081905260409020541661127e5760405162461bcd60e51b815260040161023a90612a30565b6001600160a01b038084165f90815260208190526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906112d990339087906004016128c7565b5f604051808303815f87803b1580156112f0575f5ffd5b505af1158015611302573d5f5f3e3d5ffd5b505050506001600160a01b038481165f908152600160205260409020541661132861166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611362573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113869190612533565b3410156113a55760405162461bcd60e51b815260040161023a90612a98565b5f6383bece4d60e01b8286866040516024016113c39392919061263c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150611412906001600160a01b0316825f5f5f346116d4565b505050505050565b5f611423611d49565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f8115801561144f5750825b90505f8267ffffffffffffffff16600114801561146b5750303b155b905081158015611479575080155b156114b0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156114e457845468ff00000000000000001916680100000000000000001785555b6001600160a01b03881661150a5760405162461bcd60e51b815260040161023a90612ada565b6001600160a01b0387166115305760405162461bcd60e51b815260040161023a90612b1c565b6001600160a01b0386166115565760405162461bcd60e51b815260040161023a90612b5e565b61155f33611d71565b61156888611ded565b600380546001600160a01b03808a1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600480549289169290911691909117905583156115ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610d3190600190612b88565b5050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461162f81611844565b610a00838361184e565b5f61164381611844565b610a3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361184e565b5f61086b611181565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116d2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0386166116fa5760405162461bcd60e51b815260040161023a90612bc8565b5f6040518060600160405280886001600160a01b031681526020018781526020018581525060405160200161172f9190612c51565b6040516020818303038152906040529050611748611181565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f6117dd83612c62565b919050558885886040518663ffffffff1660e01b81526004016118039493929190612c9f565b60206040518083038185885af115801561181f573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115ec9190612cff565b610bbf8133611fee565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118f2575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107fe565b5f9150506107fe565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118f2575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107fe565b6119c661206c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611a1f91906122b3565b60405180910390a150565b5f611a33610b02565b6001600160a01b0316336001600160a01b031614905090565b5f611a55610b02565b6001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a90573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612d27565b5f611abd610b02565b6001600160a01b031663b859ce836040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a90573d5f5f3e3d5ffd5b611b00611676565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a12565b600454611b6b906001600160a01b03163330856120c7565b600480546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691632e1a7d4d91611bb391869101612315565b5f604051808303815f87803b158015611bca575f5ffd5b505af1158015611bdc573d5f5f3e3d5ffd5b505050505f611be961166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c479190612533565b9050611c54816002612d44565b341015611c735760405162461bcd60e51b815260040161023a90612db3565b30631888d712611c838386612dc3565b6003546040516001600160e01b031960e085901b168152611cb0916001600160a01b0316906004016122b3565b5f604051808303818588803b158015611cc7575f5ffd5b505af1158015611cd9573d5f5f3e3d5ffd5b50505050505f637533087a60e01b8385604051602401611cfa9291906128c7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150610a00906001600160a01b0316825f5f5f876116d4565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006107fe565b611d79612121565b611d8161215f565b611d8961215f565b611d935f826118fb565b50611dbe7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826118fb565b50611de97f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a826118fb565b5050565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad0285138200805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055611e94610b02565b6001600160a01b031663a1a227fa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef39190612d27565b604080518082018252601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020918201527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092558051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e6365000000000000910152507f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f9081527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0055565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611de95780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161023a9291906128c7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116d2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0084856001600160a01b03166323b872dd8686866040516024016120ef93929190612dd6565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612167565b6121296121e3565b6116d2576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d2612121565b5f5f60205f8451602086015f885af180612186576040513d5f823e3d81fd5b50505f513d9150811561219d5780600114156121aa565b6001600160a01b0384163b155b15610a0057836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161023a91906122b3565b5f6121ec611d49565b5468010000000000000000900460ff16919050565b61142280612dff83390190565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b602080825281016107fe8161220e565b5f6001600160a01b0382166107fe565b61226b81612252565b8114610bbf575f5ffd5b80356107fe81612262565b5f60208284031215612293576122935f5ffd5b61229d8383612275565b9392505050565b6122ad81612252565b82525050565b602081016107fe82846122a4565b6001600160e01b0319811661226b565b80356107fe816122c1565b5f602082840312156122ef576122ef5f5ffd5b61229d83836122d1565b8015156122ad565b602081016107fe82846122f9565b806122ad565b602081016107fe828461230f565b8061226b565b80356107fe81612323565b5f60208284031215612347576123475f5ffd5b61229d8383612329565b5f5f60408385031215612365576123655f5ffd5b61236f8484612329565b915061237e8460208501612275565b90509250929050565b5f6107fe82612252565b5f6107fe82612387565b6122ad81612391565b602081016107fe828461239b565b5f5f83601f8401126123c5576123c55f5ffd5b50813567ffffffffffffffff8111156123df576123df5f5ffd5b6020830191508360018202830111156123f9576123f95f5ffd5b9250929050565b5f5f5f5f5f60608688031215612417576124175f5ffd5b6124218787612275565b9450602086013567ffffffffffffffff81111561243f5761243f5f5ffd5b61244b888289016123b2565b9450945050604086013567ffffffffffffffff81111561246c5761246c5f5ffd5b612478888289016123b2565b92509250509295509295909350565b5f5f6040838503121561249b5761249b5f5ffd5b6124a58484612275565b915061237e8460208501612329565b5f5f5f606084860312156124c9576124c95f5ffd5b6124d38585612275565b92506124e28560208601612329565b91506124f18560408601612275565b90509250925092565b5f5f5f6060848603121561250f5761250f5f5ffd5b6125198585612275565b92506124e28560208601612275565b80516107fe81612323565b5f60208284031215612546576125465f5ffd5b61229d8383612528565b600d8152602081017f4e6f7468696e672073656e742e000000000000000000000000000000000000008152905061223c565b602080825281016107fe81612550565b602c8152602081017f496e73756666696369656e742066756e647320746f207075626c69736820766181527f6c7565207472616e736665720000000000000000000000000000000000000000602082015290505b60400190565b602080825281016107fe81612592565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156107fe576107fe6125fc565b6060810161264a82866122a4565b612657602083018561230f565b61266460408301846122a4565b949350505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290506125e6565b602080825281016107fe8161266c565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506125e6565b602080825281016107fe816126d4565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742074617267657421000000000000000000000000000000602082015290506125e6565b602080825281016107fe8161273c565b82818337505f910152565b8183526020830192506127c38284836127a4565b50601f01601f19160190565b604080825281016127e18186886127af565b905081810360208301526127f68184866127af565b9695505050505050565b6080810161280e82896122a4565b61281b60208301886122a4565b818103604083015261282e8186886127af565b905081810360608301526128438184866127af565b98975050505050505050565b8281835e505f910152565b5f612863825190565b61287181856020860161284f565b9290920192915050565b6107fe818361285a565b60138152602081017f57455448206465706f736974206661696c6564000000000000000000000000008152905061223c565b602080825281016107fe81612885565b604081016128d582856122a4565b61229d602083018461230f565b80151561226b565b80516107fe816128e2565b5f60208284031215612908576129085f5ffd5b61229d83836128ea565b60188152602081017f496e76616c6964206d756c7469736967206164647265737300000000000000008152905061223c565b602080825281016107fe81612912565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e21000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612954565b601e8152602081017f416d6f756e74206d7573742062652067726561746572207468616e20302e00008152905061223c565b602080825281016107fe816129bc565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000008152905061223c565b602080825281016107fe816129fe565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612a40565b60178152602081017f4d657373656e6765722063616e6e6f74206265203078300000000000000000008152905061223c565b602080825281016107fe81612aa8565b601b8152602081017f52656d6f7465206272696467652063616e6e6f742062652030783000000000008152905061223c565b602080825281016107fe81612aea565b60188152602081017f4c6f63616c20574554482063616e6e6f742062652030783000000000000000008152905061223c565b602080825281016107fe81612b2c565b5f67ffffffffffffffff82166107fe565b6122ad81612b6e565b602081016107fe8284612b7f565b60148152602081017f5461726765742063616e6e6f74206265203078300000000000000000000000008152905061223c565b602080825281016107fe81612b96565b5f612be1825190565b808452602084019350612bf881856020860161284f565b601f01601f19169290920192915050565b80515f906060840190612c1c85826122a4565b5060208301518482036020860152612c348282612bd8565b9150506040830151612c49604086018261230f565b509392505050565b6020808252810161229d8184612c09565b5f60018201612c7357612c736125fc565b5060010190565b67ffffffffffffffff81166122ad565b63ffffffff81166122ad565b60ff81166122ad565b60808101612cad8287612c7a565b612cba6020830186612c8a565b8181036040830152612ccc8185612bd8565b9050612cdb6060830184612c96565b95945050505050565b67ffffffffffffffff811661226b565b80516107fe81612ce4565b5f60208284031215612d1257612d125f5ffd5b61229d8383612cf4565b80516107fe81612262565b5f60208284031215612d3a57612d3a5f5ffd5b61229d8383612d1c565b81810281158282048414176107fe576107fe6125fc565b60228152602081017f496e73756666696369656e742066756e647320666f72207075626c697368206681527f6565000000000000000000000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612d5b565b808201808211156107fe576107fe6125fc565b60608101612de482866122a4565b612df160208301856122a4565b612664604083018461230f56fe608060405234801561000f575f5ffd5b5060405161142238038061142283398101604081905261002e9161022b565b81818181600361003e8382610378565b50600461004b8282610378565b50505050506100807fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361008860201b60201c565b505050610433565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff1661012c575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556100e43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161012f565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681016001600160401b038111828210171561016e5761016e610135565b6040525050565b5f61017f60405190565b905061018b8282610149565b919050565b5f6001600160401b038211156101a8576101a8610135565b601f19601f83011660200192915050565b8281835e505f910152565b5f6101d66101d184610190565b610175565b90508281528383830111156101ec576101ec5f5ffd5b6101fa8360208301846101b9565b9392505050565b5f82601f830112610213576102135f5ffd5b81516102238482602086016101c4565b949350505050565b5f5f6040838503121561023f5761023f5f5ffd5b82516001600160401b03811115610257576102575f5ffd5b61026385828601610201565b602085015190935090506001600160401b03811115610283576102835f5ffd5b61028f85828601610201565b9150509250929050565b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806102c157607f821691505b6020821081036102d3576102d3610299565b50919050565b5f61012f6102e48381565b90565b6102f0836102d9565b81545f1960089490940293841b1916921b91909117905550565b5f6103168184846102e7565b505050565b818110156103355761032d5f8261030a565b60010161031b565b5050565b601f821115610316575f818152602090206020601f8501048101602085101561035f5750805b6103716020601f86010483018261031b565b5050505050565b81516001600160401b0381111561039157610391610135565b61039b82546102ad565b6103a6828285610339565b506020601f8211600181146103d9575f83156103c25750848201515b5f19600885021c1981166002850217855550610371565b5f84815260208120601f198516915b8281101561040857878501518255602094850194600190920191016103e8565b508482101561042457838701515f19601f87166008021c191681555b50505050600202600101905550565b610fe2806104405f395ff3fe608060405234801561000f575f5ffd5b5060043610610149575f3560e01c806336568abe116100c7578063979005ad1161007d578063a9059cbb11610063578063a9059cbb146102c2578063d547741f146102d5578063dd62ed3e146102e8575f5ffd5b8063979005ad146102a8578063a217fddf146102bb575f5ffd5b806375b238fc116100ad57806375b238fc1461024157806391d148541461026857806395d89b41146102a0575f5ffd5b806336568abe1461021b57806370a082311461022e575f5ffd5b80631dd319cb1161011c578063248a9ca311610102578063248a9ca3146101d75780632f2ff15d146101f9578063313ce5671461020c575f5ffd5b80631dd319cb146101af57806323b872dd146101c4575f5ffd5b806301ffc9a71461014d57806306fdde0314610176578063095ea7b31461018b57806318160ddd1461019e575b5f5ffd5b61016061015b366004610c19565b6102fb565b60405161016d9190610c40565b60405180910390f35b61017e610393565b60405161016d9190610c8a565b610160610199366004610cd0565b610423565b6002545b60405161016d9190610d0c565b6101c26101bd366004610cd0565b61043a565b005b6101606101d2366004610d1a565b6104a4565b6101a26101e5366004610d60565b5f9081526005602052604090206001015490565b6101c2610207366004610d7d565b6104c9565b601260405161016d9190610db3565b6101c2610229366004610d7d565b6104f3565b6101a261023c366004610dc1565b61053f565b6101a27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610160610276366004610d7d565b5f9182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61017e6105b2565b6101c26102b6366004610cd0565b6105c1565b6101a25f81565b6101606102d0366004610cd0565b6105f5565b6101c26102e3366004610d7d565b610602565b6101a26102f6366004610dde565b610626565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061038d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103a290610e10565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce90610e10565b80156104195780601f106103f057610100808354040283529160200191610419565b820191905f5260205f20905b8154815290600101906020018083116103fc57829003601f168201915b5050505050905090565b5f336104308185856106de565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610464816106eb565b8161046e8461053f565b10156104955760405162461bcd60e51b815260040161048c90610e70565b60405180910390fd5b61049f83836106f8565b505050565b5f336104b1858285610730565b6104bc858585610794565b60019150505b9392505050565b5f828152600560205260409020600101546104e3816106eb565b6104ed83836107f1565b50505050565b6001600160a01b0381163314610535576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61049f828261089c565b5f6001600160a01b038216320361056d576001600160a01b0382165f9081526020819052604090205461038d565b6001600160a01b038216330361059a576001600160a01b0382165f9081526020819052604090205461038d565b60405162461bcd60e51b815260040161048c90610eb2565b6060600480546103a290610e10565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105eb816106eb565b61049f8383610921565b5f33610430818585610794565b5f8281526005602052604090206001015461061c816106eb565b6104ed838361089c565b5f326001600160a01b03841614806106465750326001600160a01b038316145b15610678576001600160a01b038084165f908152600160209081526040808320938616835292905220545b905061038d565b336001600160a01b03841614806106975750336001600160a01b038316145b156106c6576001600160a01b038084165f90815260016020908152604080832093861683529290522054610671565b60405162461bcd60e51b815260040161048c90610ec2565b61049f8383836001610955565b6106f58133610a57565b50565b6001600160a01b038216610721575f604051634b637e8f60e11b815260040161048c9190610f2c565b61072c825f83610ab6565b5050565b5f61073b8484610626565b90505f198110156104ed5781811015610786578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161048c93929190610f3a565b6104ed84848484035f610955565b6001600160a01b0383166107bd575f604051634b637e8f60e11b815260040161048c9190610f2c565b6001600160a01b0382166107e6575f60405163ec442f0560e01b815260040161048c9190610f2c565b61049f838383610ab6565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff16610895575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561084d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161038d565b505f61038d565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff1615610895575f8381526005602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161038d565b6001600160a01b03821661094a575f60405163ec442f0560e01b815260040161048c9190610f2c565b61072c5f8383610ab6565b6001600160a01b038416610997575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161048c9190610f2c565b6001600160a01b0383166109d9575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161048c9190610f2c565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156104ed57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a499190610d0c565b60405180910390a350505050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff1661072c5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161048c929190610f6a565b6001600160a01b038316610ae0578060025f828254610ad59190610f99565b90915550610b569050565b6001600160a01b0383165f9081526020819052604090205481811015610b38578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161048c93929190610f3a565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610b7257600280548290039055610b90565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bd39190610d0c565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106f5575f5ffd5b803561038d81610be0565b5f60208284031215610c2c57610c2c5f5ffd5b6104c28383610c0e565b8015155b82525050565b6020810161038d8284610c36565b8281835e505f910152565b5f610c62825190565b808452602084019350610c79818560208601610c4e565b601f01601f19169290920192915050565b602080825281016104c28184610c59565b5f6001600160a01b03821661038d565b610c0481610c9b565b803561038d81610cab565b80610c04565b803561038d81610cbf565b5f5f60408385031215610ce457610ce45f5ffd5b610cee8484610cb4565b9150610cfd8460208501610cc5565b90509250929050565b80610c3a565b6020810161038d8284610d06565b5f5f5f60608486031215610d2f57610d2f5f5ffd5b610d398585610cb4565b9250610d488560208601610cb4565b9150610d578560408601610cc5565b90509250925092565b5f60208284031215610d7357610d735f5ffd5b6104c28383610cc5565b5f5f60408385031215610d9157610d915f5ffd5b610d9b8484610cc5565b9150610cfd8460208501610cb4565b60ff8116610c3a565b6020810161038d8284610daa565b5f60208284031215610dd457610dd45f5ffd5b6104c28383610cb4565b5f5f60408385031215610df257610df25f5ffd5b610d9b8484610cb4565b634e487b7160e01b5f52602260045260245ffd5b600281046001821680610e2457607f821691505b602082108103610e3657610e36610dfc565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161038d81610e3c565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610e6a565b6020808252810161038d81610e80565b6020808252810161038d81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c3a81610c9b565b6020810161038d8284610f23565b60608101610f488286610f23565b610f556020830185610d06565b610f626040830184610d06565b949350505050565b60408101610f788285610f23565b6104c26020830184610d06565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038d5761038d610f8556fea2646970667358221220c04c1f9d8d1d8bd8b82a88ea0557c0b57242bedacf19dfd5dc0df24ccc04749064736f6c634300081c0033a26469706673582212203bae0b0601fb4b55b4c9b5eaa39adfed6307653c0f09a060094b5e97e5bd16e764736f6c634300081c0033",
+ Bin: "0x6080604052348015600e575f5ffd5b506142568061001c5f395ff3fe60806040526004361061021b575f3560e01c80637920c9861161011c578063a381c8e2116100af578063d5c6b5041161007e578063e63ab1e911610063578063e63ab1e914610717578063f865af081461074a578063fb1bb9de1461076957610222565b8063d5c6b504146106c4578063dfde69e5146106f857610222565b8063a381c8e2146105e8578063affed0e0146105fb578063c0c53b8b14610686578063d547741f146106a557610222565b80639813c7b2116100eb5780639813c7b2146105545780639e405b711461058d578063a1a227fa146105c1578063a217fddf146105d557610222565b80637920c9861461049f57806383bece4d146104be5780638456cb59146104dd57806391d14854146104f157610222565b806332968782116101af578063458ffd631161017e5780636a175390116101635780636a175390146102b95780636c11c21c146104615780637533087a1461048057610222565b8063458ffd631461040c5780635c975abb1461042b57610222565b8063329687821461039957806336568abe146103b85780633cb747bf146103d75780633f4ba83a146103f857610222565b80631888d712116101eb5780631888d712146102f9578063248a9ca31461030e5780632540e2da1461035b5780632f2ff15d1461037a57610222565b80628d48e31461024357806301ffc9a71461028d57806307d7fb9a146102b95780630f0a9a4b146102da57610222565b3661022257005b60405162461bcd60e51b815260040161023a90612242565b60405180910390fd5b34801561024e575f5ffd5b5061027761025d366004612280565b60026020525f90815260409020546001600160a01b031681565b60405161028491906122b3565b60405180910390f35b348015610298575f5ffd5b506102ac6102a73660046122dc565b61079c565b6040516102849190612301565b3480156102c4575f5ffd5b506102cd610804565b6040516102849190612315565b3480156102e5575f5ffd5b50600354610277906001600160a01b031681565b61030c610307366004612280565b610870565b005b348015610319575f5ffd5b506102cd610328366004612334565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b348015610366575f5ffd5b5061030c610375366004612280565b610a06565b348015610385575f5ffd5b5061030c610394366004612351565b610a3f565b3480156103a4575f5ffd5b5061030c6103b3366004612280565b610a82565b3480156103c3575f5ffd5b5061030c6103d2366004612351565b610ab6565b3480156103e2575f5ffd5b506103eb610b02565b60405161028491906123a4565b348015610403575f5ffd5b5061030c610b8d565b348015610417575f5ffd5b5061030c610426366004612400565b610bc2565b348015610436575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166102ac565b34801561046c575f5ffd5b5061030c61047b366004612280565b610d43565b34801561048b575f5ffd5b5061030c61049a366004612487565b610d77565b3480156104aa575f5ffd5b5061030c6104b9366004612280565b610f66565b3480156104c9575f5ffd5b5061030c6104d83660046124b4565b610feb565b3480156104e8575f5ffd5b5061030c61114f565b3480156104fc575f5ffd5b506102ac61050b366004612351565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055f575f5ffd5b506102ac61056e366004612280565b6001600160a01b039081165f9081526020819052604090205416151590565b348015610598575f5ffd5b506102776105a7366004612280565b60016020525f90815260409020546001600160a01b031681565b3480156105cc575f5ffd5b506103eb611181565b3480156105e0575f5ffd5b506102cd5f81565b61030c6105f63660046124b4565b611201565b348015610606575f5ffd5b5060408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd00546102cd565b348015610691575f5ffd5b5061030c6106a03660046124fa565b61141a565b3480156106b0575f5ffd5b5061030c6106bf366004612351565b6115f6565b3480156106cf575f5ffd5b506103eb6106de366004612280565b5f602081905290815260409020546001600160a01b031681565b348015610703575f5ffd5b50600454610277906001600160a01b031681565b348015610722575f5ffd5b506102cd7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b348015610755575f5ffd5b5061030c610764366004612280565b611639565b348015610774575f5ffd5b506102cd7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107fe57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b5f61080d61166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610847573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612533565b905090565b610878611676565b5f34116108975760405162461bcd60e51b815260040161023a90612582565b61089f61166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108fd9190612533565b34101561091c5760405162461bcd60e51b815260040161023a906125ec565b5f61092561166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109839190612533565b90505f6109908234612629565b90505f6383bece4d60e01b5f83866040516024016109b09392919061263c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150610a00906001600160a01b03168260025f5f886116d4565b50505050565b5f610a1081611844565b610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361184e565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7881611844565b610a0083836118fb565b5f610a8c81611844565b610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836118fb565b6001600160a01b0381163314610af8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3a828261184e565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f9081527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad02851382005b546001600160a01b0316919050565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610bb781611844565b610bbf6119be565b50565b6003546001600160a01b0316610bd6611a2a565b610bf25760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b0316610c04611a4c565b6001600160a01b031614610c2a5760405162461bcd60e51b815260040161023a9061272c565b30610c33611ab4565b6001600160a01b031614610c595760405162461bcd60e51b815260040161023a90612794565b5f85858585604051610c6a90612201565b610c7794939291906127cf565b604051809103905ff080158015610c90573d5f5f3e3d5ffd5b506001600160a01b038082165f81815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600183528184208054968f169682168717905594835260029091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610d31908a9084908b908b908b908b90612800565b60405180910390a15050505050505050565b5f610d4d81611844565b610a3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836118fb565b6003546001600160a01b0316610d8b611a2a565b610da75760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b0316610db9611a4c565b6001600160a01b031614610ddf5760405162461bcd60e51b815260040161023a9061272c565b30610de8611ab4565b6001600160a01b031614610e0e5760405162461bcd60e51b815260040161023a90612794565b610e16611676565b60048054604080519283526024830181526020830180516001600160e01b03167fd0e30db000000000000000000000000000000000000000000000000000000000179052515f926001600160a01b03909216918591610e75919061287b565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b5050905080610ed55760405162461bcd60e51b815260040161023a906128b7565b600480546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163a9059cbb91610f1f9188918891016128c7565b6020604051808303815f875af1158015610f3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5f91906128f5565b5050505050565b5f610f7081611844565b6001600160a01b038216610f965760405162461bcd60e51b815260040161023a90612944565b610fc07f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a3361184e565b50610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836118fb565b6003546001600160a01b0316610fff611a2a565b61101b5760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b031661102d611a4c565b6001600160a01b0316146110535760405162461bcd60e51b815260040161023a9061272c565b3061105c611ab4565b6001600160a01b0316146110825760405162461bcd60e51b815260040161023a90612794565b61108a611676565b6001600160a01b038085165f9081526002602090815260408083205484168084529183905290912054909116806110d35760405162461bcd60e51b815260040161023a906129ac565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad9061111a90879089906004016128c7565b5f604051808303815f87803b158015611131575f5ffd5b505af1158015611143573d5f5f3e3d5ffd5b50505050505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61117981611844565b610bbf611af8565b60408051808201909152601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020909101527f3e1bb302f668bd876eab4a48b3759a1d614a1ecbcc67ee27a10c9a116878004e5f9081527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00610b7e565b611209611676565b5f82116112285760405162461bcd60e51b815260040161023a906129ee565b6004546001600160a01b039081169084160361124857610a3a8282611b53565b6001600160a01b038084165f908152602081905260409020541661127e5760405162461bcd60e51b815260040161023a90612a30565b6001600160a01b038084165f90815260208190526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906112d990339087906004016128c7565b5f604051808303815f87803b1580156112f0575f5ffd5b505af1158015611302573d5f5f3e3d5ffd5b505050506001600160a01b038481165f908152600160205260409020541661132861166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611362573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113869190612533565b3410156113a55760405162461bcd60e51b815260040161023a90612a98565b5f6383bece4d60e01b8286866040516024016113c39392919061263c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150611412906001600160a01b0316825f5f5f346116d4565b505050505050565b5f611423611d49565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f8115801561144f5750825b90505f8267ffffffffffffffff16600114801561146b5750303b155b905081158015611479575080155b156114b0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156114e457845468ff00000000000000001916680100000000000000001785555b6001600160a01b03881661150a5760405162461bcd60e51b815260040161023a90612ada565b6001600160a01b0387166115305760405162461bcd60e51b815260040161023a90612b1c565b6001600160a01b0386166115565760405162461bcd60e51b815260040161023a90612b5e565b61155f33611d71565b61156888611ded565b600380546001600160a01b03808a1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600480549289169290911691909117905583156115ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610d3190600190612b88565b5050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461162f81611844565b610a00838361184e565b5f61164381611844565b610a3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361184e565b5f61086b611181565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116d2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0386166116fa5760405162461bcd60e51b815260040161023a90612bc8565b5f6040518060600160405280886001600160a01b031681526020018781526020018581525060405160200161172f9190612c51565b6040516020818303038152906040529050611748611181565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f6117dd83612c62565b919050558885886040518663ffffffff1660e01b81526004016118039493929190612c9f565b60206040518083038185885af115801561181f573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115ec9190612cff565b610bbf8133611fee565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118f2575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107fe565b5f9150506107fe565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118f2575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107fe565b6119c661206c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611a1f91906122b3565b60405180910390a150565b5f611a33610b02565b6001600160a01b0316336001600160a01b031614905090565b5f611a55610b02565b6001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a90573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612d27565b5f611abd610b02565b6001600160a01b031663b859ce836040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a90573d5f5f3e3d5ffd5b611b00611676565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a12565b600454611b6b906001600160a01b03163330856120c7565b600480546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691632e1a7d4d91611bb391869101612315565b5f604051808303815f87803b158015611bca575f5ffd5b505af1158015611bdc573d5f5f3e3d5ffd5b505050505f611be961166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c479190612533565b9050611c54816002612d44565b341015611c735760405162461bcd60e51b815260040161023a90612db3565b30631888d712611c838386612dc3565b6003546040516001600160e01b031960e085901b168152611cb0916001600160a01b0316906004016122b3565b5f604051808303818588803b158015611cc7575f5ffd5b505af1158015611cd9573d5f5f3e3d5ffd5b50505050505f637533087a60e01b8385604051602401611cfa9291906128c7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150610a00906001600160a01b0316825f5f5f876116d4565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006107fe565b611d79612121565b611d8161215f565b611d8961215f565b611d935f826118fb565b50611dbe7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826118fb565b50611de97f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a826118fb565b5050565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad0285138200805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055611e94610b02565b6001600160a01b031663a1a227fa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef39190612d27565b604080518082018252601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020918201527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092558051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e6365000000000000910152507f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f9081527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0055565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611de95780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161023a9291906128c7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116d2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0084856001600160a01b03166323b872dd8686866040516024016120ef93929190612dd6565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612167565b6121296121e3565b6116d2576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d2612121565b5f5f60205f8451602086015f885af180612186576040513d5f823e3d81fd5b50505f513d9150811561219d5780600114156121aa565b6001600160a01b0384163b155b15610a0057836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161023a91906122b3565b5f6121ec611d49565b5468010000000000000000900460ff16919050565b61142280612dff83390190565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b602080825281016107fe8161220e565b5f6001600160a01b0382166107fe565b61226b81612252565b8114610bbf575f5ffd5b80356107fe81612262565b5f60208284031215612293576122935f5ffd5b61229d8383612275565b9392505050565b6122ad81612252565b82525050565b602081016107fe82846122a4565b6001600160e01b0319811661226b565b80356107fe816122c1565b5f602082840312156122ef576122ef5f5ffd5b61229d83836122d1565b8015156122ad565b602081016107fe82846122f9565b806122ad565b602081016107fe828461230f565b8061226b565b80356107fe81612323565b5f60208284031215612347576123475f5ffd5b61229d8383612329565b5f5f60408385031215612365576123655f5ffd5b61236f8484612329565b915061237e8460208501612275565b90509250929050565b5f6107fe82612252565b5f6107fe82612387565b6122ad81612391565b602081016107fe828461239b565b5f5f83601f8401126123c5576123c55f5ffd5b50813567ffffffffffffffff8111156123df576123df5f5ffd5b6020830191508360018202830111156123f9576123f95f5ffd5b9250929050565b5f5f5f5f5f60608688031215612417576124175f5ffd5b6124218787612275565b9450602086013567ffffffffffffffff81111561243f5761243f5f5ffd5b61244b888289016123b2565b9450945050604086013567ffffffffffffffff81111561246c5761246c5f5ffd5b612478888289016123b2565b92509250509295509295909350565b5f5f6040838503121561249b5761249b5f5ffd5b6124a58484612275565b915061237e8460208501612329565b5f5f5f606084860312156124c9576124c95f5ffd5b6124d38585612275565b92506124e28560208601612329565b91506124f18560408601612275565b90509250925092565b5f5f5f6060848603121561250f5761250f5f5ffd5b6125198585612275565b92506124e28560208601612275565b80516107fe81612323565b5f60208284031215612546576125465f5ffd5b61229d8383612528565b600d8152602081017f4e6f7468696e672073656e742e000000000000000000000000000000000000008152905061223c565b602080825281016107fe81612550565b602c8152602081017f496e73756666696369656e742066756e647320746f207075626c69736820766181527f6c7565207472616e736665720000000000000000000000000000000000000000602082015290505b60400190565b602080825281016107fe81612592565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156107fe576107fe6125fc565b6060810161264a82866122a4565b612657602083018561230f565b61266460408301846122a4565b949350505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290506125e6565b602080825281016107fe8161266c565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506125e6565b602080825281016107fe816126d4565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742074617267657421000000000000000000000000000000602082015290506125e6565b602080825281016107fe8161273c565b82818337505f910152565b8183526020830192506127c38284836127a4565b50601f01601f19160190565b604080825281016127e18186886127af565b905081810360208301526127f68184866127af565b9695505050505050565b6080810161280e82896122a4565b61281b60208301886122a4565b818103604083015261282e8186886127af565b905081810360608301526128438184866127af565b98975050505050505050565b8281835e505f910152565b5f612863825190565b61287181856020860161284f565b9290920192915050565b6107fe818361285a565b60138152602081017f57455448206465706f736974206661696c6564000000000000000000000000008152905061223c565b602080825281016107fe81612885565b604081016128d582856122a4565b61229d602083018461230f565b80151561226b565b80516107fe816128e2565b5f60208284031215612908576129085f5ffd5b61229d83836128ea565b60188152602081017f496e76616c6964206d756c7469736967206164647265737300000000000000008152905061223c565b602080825281016107fe81612912565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e21000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612954565b601e8152602081017f416d6f756e74206d7573742062652067726561746572207468616e20302e00008152905061223c565b602080825281016107fe816129bc565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000008152905061223c565b602080825281016107fe816129fe565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612a40565b60178152602081017f4d657373656e6765722063616e6e6f74206265203078300000000000000000008152905061223c565b602080825281016107fe81612aa8565b601b8152602081017f52656d6f7465206272696467652063616e6e6f742062652030783000000000008152905061223c565b602080825281016107fe81612aea565b60188152602081017f4c6f63616c20574554482063616e6e6f742062652030783000000000000000008152905061223c565b602080825281016107fe81612b2c565b5f67ffffffffffffffff82166107fe565b6122ad81612b6e565b602081016107fe8284612b7f565b60148152602081017f5461726765742063616e6e6f74206265203078300000000000000000000000008152905061223c565b602080825281016107fe81612b96565b5f612be1825190565b808452602084019350612bf881856020860161284f565b601f01601f19169290920192915050565b80515f906060840190612c1c85826122a4565b5060208301518482036020860152612c348282612bd8565b9150506040830151612c49604086018261230f565b509392505050565b6020808252810161229d8184612c09565b5f60018201612c7357612c736125fc565b5060010190565b67ffffffffffffffff81166122ad565b63ffffffff81166122ad565b60ff81166122ad565b60808101612cad8287612c7a565b612cba6020830186612c8a565b8181036040830152612ccc8185612bd8565b9050612cdb6060830184612c96565b95945050505050565b67ffffffffffffffff811661226b565b80516107fe81612ce4565b5f60208284031215612d1257612d125f5ffd5b61229d8383612cf4565b80516107fe81612262565b5f60208284031215612d3a57612d3a5f5ffd5b61229d8383612d1c565b81810281158282048414176107fe576107fe6125fc565b60228152602081017f496e73756666696369656e742066756e647320666f72207075626c697368206681527f6565000000000000000000000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612d5b565b808201808211156107fe576107fe6125fc565b60608101612de482866122a4565b612df160208301856122a4565b612664604083018461230f56fe608060405234801561000f575f5ffd5b5060405161142238038061142283398101604081905261002e9161022b565b81818181600361003e8382610378565b50600461004b8282610378565b50505050506100807fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361008860201b60201c565b505050610433565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff1661012c575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556100e43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161012f565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681016001600160401b038111828210171561016e5761016e610135565b6040525050565b5f61017f60405190565b905061018b8282610149565b919050565b5f6001600160401b038211156101a8576101a8610135565b601f19601f83011660200192915050565b8281835e505f910152565b5f6101d66101d184610190565b610175565b90508281528383830111156101ec576101ec5f5ffd5b6101fa8360208301846101b9565b9392505050565b5f82601f830112610213576102135f5ffd5b81516102238482602086016101c4565b949350505050565b5f5f6040838503121561023f5761023f5f5ffd5b82516001600160401b03811115610257576102575f5ffd5b61026385828601610201565b602085015190935090506001600160401b03811115610283576102835f5ffd5b61028f85828601610201565b9150509250929050565b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806102c157607f821691505b6020821081036102d3576102d3610299565b50919050565b5f61012f6102e48381565b90565b6102f0836102d9565b81545f1960089490940293841b1916921b91909117905550565b5f6103168184846102e7565b505050565b818110156103355761032d5f8261030a565b60010161031b565b5050565b601f821115610316575f818152602090206020601f8501048101602085101561035f5750805b6103716020601f86010483018261031b565b5050505050565b81516001600160401b0381111561039157610391610135565b61039b82546102ad565b6103a6828285610339565b506020601f8211600181146103d9575f83156103c25750848201515b5f19600885021c1981166002850217855550610371565b5f84815260208120601f198516915b8281101561040857878501518255602094850194600190920191016103e8565b508482101561042457838701515f19601f87166008021c191681555b50505050600202600101905550565b610fe2806104405f395ff3fe608060405234801561000f575f5ffd5b5060043610610149575f3560e01c806336568abe116100c7578063979005ad1161007d578063a9059cbb11610063578063a9059cbb146102c2578063d547741f146102d5578063dd62ed3e146102e8575f5ffd5b8063979005ad146102a8578063a217fddf146102bb575f5ffd5b806375b238fc116100ad57806375b238fc1461024157806391d148541461026857806395d89b41146102a0575f5ffd5b806336568abe1461021b57806370a082311461022e575f5ffd5b80631dd319cb1161011c578063248a9ca311610102578063248a9ca3146101d75780632f2ff15d146101f9578063313ce5671461020c575f5ffd5b80631dd319cb146101af57806323b872dd146101c4575f5ffd5b806301ffc9a71461014d57806306fdde0314610176578063095ea7b31461018b57806318160ddd1461019e575b5f5ffd5b61016061015b366004610c19565b6102fb565b60405161016d9190610c40565b60405180910390f35b61017e610393565b60405161016d9190610c8a565b610160610199366004610cd0565b610423565b6002545b60405161016d9190610d0c565b6101c26101bd366004610cd0565b61043a565b005b6101606101d2366004610d1a565b6104a4565b6101a26101e5366004610d60565b5f9081526005602052604090206001015490565b6101c2610207366004610d7d565b6104c9565b601260405161016d9190610db3565b6101c2610229366004610d7d565b6104f3565b6101a261023c366004610dc1565b61053f565b6101a27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610160610276366004610d7d565b5f9182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61017e6105b2565b6101c26102b6366004610cd0565b6105c1565b6101a25f81565b6101606102d0366004610cd0565b6105f5565b6101c26102e3366004610d7d565b610602565b6101a26102f6366004610dde565b610626565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061038d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103a290610e10565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce90610e10565b80156104195780601f106103f057610100808354040283529160200191610419565b820191905f5260205f20905b8154815290600101906020018083116103fc57829003601f168201915b5050505050905090565b5f336104308185856106de565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610464816106eb565b8161046e8461053f565b10156104955760405162461bcd60e51b815260040161048c90610e70565b60405180910390fd5b61049f83836106f8565b505050565b5f336104b1858285610730565b6104bc858585610794565b60019150505b9392505050565b5f828152600560205260409020600101546104e3816106eb565b6104ed83836107f1565b50505050565b6001600160a01b0381163314610535576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61049f828261089c565b5f6001600160a01b038216320361056d576001600160a01b0382165f9081526020819052604090205461038d565b6001600160a01b038216330361059a576001600160a01b0382165f9081526020819052604090205461038d565b60405162461bcd60e51b815260040161048c90610eb2565b6060600480546103a290610e10565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105eb816106eb565b61049f8383610921565b5f33610430818585610794565b5f8281526005602052604090206001015461061c816106eb565b6104ed838361089c565b5f326001600160a01b03841614806106465750326001600160a01b038316145b15610678576001600160a01b038084165f908152600160209081526040808320938616835292905220545b905061038d565b336001600160a01b03841614806106975750336001600160a01b038316145b156106c6576001600160a01b038084165f90815260016020908152604080832093861683529290522054610671565b60405162461bcd60e51b815260040161048c90610ec2565b61049f8383836001610955565b6106f58133610a57565b50565b6001600160a01b038216610721575f604051634b637e8f60e11b815260040161048c9190610f2c565b61072c825f83610ab6565b5050565b5f61073b8484610626565b90505f198110156104ed5781811015610786578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161048c93929190610f3a565b6104ed84848484035f610955565b6001600160a01b0383166107bd575f604051634b637e8f60e11b815260040161048c9190610f2c565b6001600160a01b0382166107e6575f60405163ec442f0560e01b815260040161048c9190610f2c565b61049f838383610ab6565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff16610895575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561084d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161038d565b505f61038d565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff1615610895575f8381526005602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161038d565b6001600160a01b03821661094a575f60405163ec442f0560e01b815260040161048c9190610f2c565b61072c5f8383610ab6565b6001600160a01b038416610997575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161048c9190610f2c565b6001600160a01b0383166109d9575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161048c9190610f2c565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156104ed57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a499190610d0c565b60405180910390a350505050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff1661072c5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161048c929190610f6a565b6001600160a01b038316610ae0578060025f828254610ad59190610f99565b90915550610b569050565b6001600160a01b0383165f9081526020819052604090205481811015610b38578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161048c93929190610f3a565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610b7257600280548290039055610b90565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bd39190610d0c565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106f5575f5ffd5b803561038d81610be0565b5f60208284031215610c2c57610c2c5f5ffd5b6104c28383610c0e565b8015155b82525050565b6020810161038d8284610c36565b8281835e505f910152565b5f610c62825190565b808452602084019350610c79818560208601610c4e565b601f01601f19169290920192915050565b602080825281016104c28184610c59565b5f6001600160a01b03821661038d565b610c0481610c9b565b803561038d81610cab565b80610c04565b803561038d81610cbf565b5f5f60408385031215610ce457610ce45f5ffd5b610cee8484610cb4565b9150610cfd8460208501610cc5565b90509250929050565b80610c3a565b6020810161038d8284610d06565b5f5f5f60608486031215610d2f57610d2f5f5ffd5b610d398585610cb4565b9250610d488560208601610cb4565b9150610d578560408601610cc5565b90509250925092565b5f60208284031215610d7357610d735f5ffd5b6104c28383610cc5565b5f5f60408385031215610d9157610d915f5ffd5b610d9b8484610cc5565b9150610cfd8460208501610cb4565b60ff8116610c3a565b6020810161038d8284610daa565b5f60208284031215610dd457610dd45f5ffd5b6104c28383610cb4565b5f5f60408385031215610df257610df25f5ffd5b610d9b8484610cb4565b634e487b7160e01b5f52602260045260245ffd5b600281046001821680610e2457607f821691505b602082108103610e3657610e36610dfc565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161038d81610e3c565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610e6a565b6020808252810161038d81610e80565b6020808252810161038d81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c3a81610c9b565b6020810161038d8284610f23565b60608101610f488286610f23565b610f556020830185610d06565b610f626040830184610d06565b949350505050565b60408101610f788285610f23565b6104c26020830184610d06565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038d5761038d610f8556fea2646970667358221220c04c1f9d8d1d8bd8b82a88ea0557c0b57242bedacf19dfd5dc0df24ccc04749064736f6c634300081c0033a2646970667358221220c01178a99afdceacf6df5a4a2e3d37b91cd0f3bb85ddef54c6d1a4cfd053388164736f6c634300081c0033",
}
// EthereumBridgeABI is the input ABI used to generate the binding from.
diff --git a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go
index cde97672fa..4885530f96 100644
--- a/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go
+++ b/contracts/generated/MerkleTreeMessageBus/MerkleTreeMessageBus.go
@@ -50,7 +50,7 @@ type StructsValueTransferMessage struct {
// MerkleTreeMessageBusMetaData contains all meta data concerning the MerkleTreeMessageBus contract.
var MerkleTreeMessageBusMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"STATE_ROOT_MANAGER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNPAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WITHDRAWAL_MANAGER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"activationTime\",\"type\":\"uint256\"}],\"name\":\"addStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"addStateRootManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"withdrawalManager\",\"type\":\"address\"}],\"name\":\"addWithdrawalManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"disableStateRoot\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPublishFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantPauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawalManager\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_fees\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"manager\",\"type\":\"address\"}],\"name\":\"removeStateRootManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"withdrawalManager\",\"type\":\"address\"}],\"name\":\"removeWithdrawalManager\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokePauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"}],\"name\":\"rootValidAfter\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"activationTime\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"multisig\",\"type\":\"address\"}],\"name\":\"transferUnpauserRoleToMultisig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyMessageInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"internalType\":\"structStructs.ValueTransferMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes32[]\",\"name\":\"proof\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"verifyValueTransferInclusion\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f5ffd5b50610018610025565b610020610025565b610104565b5f61002e6100c5565b805490915068010000000000000000900460ff16156100605760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100c25780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b9916100ef565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e9565b61314d806101115f395ff3fe60806040526004361061029e575f3560e01c80638456cb591161016d578063c0c53b8b116100ca578063ea4cf9701161007e578063f865af0811610063578063f865af08146107d2578063fb1bb9de146107f1578063fb894029146108245761029e565b8063ea4cf97014610794578063f2fde38b146107b35761029e565b8063d547741f116100af578063d547741f1461072e578063e30c39781461074d578063e63ab1e9146107615761029e565b8063c0c53b8b146106f0578063ce0d7db31461070f5761029e565b8063a405c46d11610121578063b201246f11610106578063b201246f14610693578063b6aed0cb146106b2578063bb9cdd2c146106d15761029e565b8063a405c46d14610635578063ad7805e8146106605761029e565b806391643fdd1161015257806391643fdd146105a057806391d14854146105bf578063a217fddf146106225761029e565b80638456cb591461056b5780638da5cb5b1461057f5761029e565b80632e1a0b8e1161021b5780635c975abb116101cf578063715018a6116101b4578063715018a6146105245780637920c9861461053857806379ba5097146105575761029e565b80635c975abb146104cf5780636c11c21c146105055761029e565b80633296878211610200578063329687821461047d57806336568abe1461049c5780633f4ba83a146104bb5761029e565b80632e1a0b8e1461043f5780632f2ff15d1461045e5761029e565b80630fe9188e11610272578063248a9ca311610257578063248a9ca3146103b45780632540e2da146104015780632ce8603d146104205761029e565b80630fe9188e146103745780631050afdd146103955761029e565b8062a1b815146102cb57806301ffc9a7146102f557806302b4df19146103215780630d3fd67c14610354575b3480156102a9575f5ffd5b5060405162461bcd60e51b81526004016102c290611df2565b60405180910390fd5b3480156102d6575f5ffd5b506102df610843565b6040516102ec9190611e0a565b60405180910390f35b348015610300575f5ffd5b5061031461030f366004611e51565b6108cc565b6040516102ec9190611e76565b34801561032c575f5ffd5b506102df7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e19481565b610367610362366004611f18565b610964565b6040516102ec9190611fa0565b34801561037f575f5ffd5b5061039361038e366004611fbf565b610a73565b005b3480156103a0575f5ffd5b506103936103af366004612000565b610ada565b3480156103bf575f5ffd5b506102df6103ce366004611fbf565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561040c575f5ffd5b5061039361041b366004612000565b610b40565b34801561042b575f5ffd5b5061039361043a366004612000565b610b79565b34801561044a575f5ffd5b506102df610459366004612036565b610bb5565b348015610469575f5ffd5b5061039361047836600461206e565b610c12565b348015610488575f5ffd5b50610393610497366004612000565b610c5b565b3480156104a7575f5ffd5b506103936104b636600461206e565b610c8f565b3480156104c6575f5ffd5b50610393610cdb565b3480156104da575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610314565b348015610510575f5ffd5b5061039361051f366004612000565b610d10565b34801561052f575f5ffd5b50610393610d44565b348015610543575f5ffd5b50610393610552366004612000565b610d64565b348015610562575f5ffd5b50610393610de9565b348015610576575f5ffd5b50610393610e25565b34801561058a575f5ffd5b50610593610e57565b6040516102ec91906120ad565b3480156105ab575f5ffd5b506103146105ba366004612036565b610e8b565b3480156105ca575f5ffd5b506103146105d936600461206e565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561062d575f5ffd5b506102df5f81565b348015610640575f5ffd5b506102df61064f366004611fbf565b60046020525f908152604090205481565b34801561066b575f5ffd5b506102df7fe0d563514842a8c29151c49cd2698127f54dd344a9b2c74a42fe9be3e305fe9881565b34801561069e575f5ffd5b506103936106ad366004612115565b610edb565b3480156106bd575f5ffd5b506103936106cc36600461217c565b610fd9565b3480156106dc575f5ffd5b506103936106eb366004612000565b611068565b3480156106fb575f5ffd5b5061039361070a3660046121a9565b6110a4565b34801561071a575f5ffd5b506103936107293660046121ef565b6112d5565b348015610739575f5ffd5b5061039361074836600461206e565b61141c565b348015610758575f5ffd5b5061059361145f565b34801561076c575f5ffd5b506102df7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561079f575f5ffd5b506103936107ae366004612267565b611487565b3480156107be575f5ffd5b506103936107cd366004612000565b6115d4565b3480156107dd575f5ffd5b506103936107ec366004612000565b611666565b3480156107fc575f5ffd5b506102df7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b34801561082f575f5ffd5b5061039361083e366004612000565b61169a565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691631a90a2199160048083019260209291908290030181865afa1580156108a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c791906122bb565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061095e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f61096d6116fc565b6003546001600160a01b031615610a1c575f610987610843565b9050803410156109a95760405162461bcd60e51b81526004016102c290612332565b6003546040515f916001600160a01b03169083908381818185875af1925050503d805f81146109f3576040519150601f19603f3d011682016040523d82523d5f602084013e6109f8565b606091505b5050905080610a195760405162461bcd60e51b81526004016102c29061239a565b50505b610a253361175a565b90507fd3cfd274dfddb1195699ee44f0ba7aaabf97e75965b5191c2c0bd56776ff206133828888888888604051610a6297969594939291906123ea565b60405180910390a195945050505050565b7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e194610a9d816117b7565b5f828152600460205260408120549003610ac95760405162461bcd60e51b81526004016102c29061247f565b505f90815260046020526040812055565b5f610ae4816117b7565b610aec6116fc565b6001600160a01b038216610b125760405162461bcd60e51b81526004016102c2906124c1565b610b3c7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e1948361141c565b5050565b5f610b4a816117b7565b610b747f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836117c1565b505050565b5f610b83816117b7565b610b8b6116fc565b610b3c7fe0d563514842a8c29151c49cd2698127f54dd344a9b2c74a42fe9be3e305fe988361141c565b5f5f82604051602001610bc8919061260b565b60408051601f1981840301815291815281516020928301205f8181529283905291205490915080610c0b5760405162461bcd60e51b81526004016102c290612658565b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4b816117b7565b610c55838361186e565b50505050565b5f610c65816117b7565b610b747f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361186e565b6001600160a01b0381163314610cd1576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7482826117c1565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610d05816117b7565b610d0d611931565b50565b5f610d1a816117b7565b610b747f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361186e565b610d4c61199d565b60405162461bcd60e51b81526004016102c2906126c0565b5f610d6e816117b7565b6001600160a01b038216610d945760405162461bcd60e51b81526004016102c290612702565b610dbe7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a336117c1565b50610b747f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361186e565b3380610df361145f565b6001600160a01b031614610e1c578060405163118cdaa760e01b81526004016102c291906120ad565b610d0d816119cf565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4f816117b7565b610d0d611a14565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f5f82604051602001610e9e919061260b565b60408051601f1981840301815291815281516020928301205f818152928390529120549091508015801590610ed35750428111155b949350505050565b5f818152600460205260408120549003610f075760405162461bcd60e51b81526004016102c29061276a565b5f81815260046020526040902054421015610f345760405162461bcd60e51b81526004016102c2906127b6565b5f84604051602001610f46919061283a565b60405160208183030381529060405280519060200120604051602001610f6c919061287a565b604051602081830303815290604052805190602001209050610fb684848484604051602001610f9b91906128a2565b60405160208183030381529060405280519060200120611a6f565b610fd25760405162461bcd60e51b81526004016102c29061290c565b5050505050565b7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e194611003816117b7565b61100b6116fc565b5f83815260046020526040902054156110365760405162461bcd60e51b81526004016102c290612974565b428210156110565760405162461bcd60e51b81526004016102c2906129dc565b505f9182526004602052604090912055565b5f611072816117b7565b61107a6116fc565b610b747fe0d563514842a8c29151c49cd2698127f54dd344a9b2c74a42fe9be3e305fe988361186e565b5f6110ad611a86565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156110d95750825b90505f8267ffffffffffffffff1660011480156110f55750303b155b905081158015611103575080155b1561113a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561116e57845468ff00000000000000001916680100000000000000001785555b6001600160a01b0388166111945760405162461bcd60e51b81526004016102c290612a1e565b6001600160a01b0387166111ba5760405162461bcd60e51b81526004016102c290612a5e565b6001600160a01b0386166111e05760405162461bcd60e51b81526004016102c290612aa0565b6111e988611aae565b6111f288611ac7565b6111fc5f8961186e565b506112277f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e1948961186e565b506112527fe0d563514842a8c29151c49cd2698127f54dd344a9b2c74a42fe9be3e305fe988861186e565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156112cb57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906112c290600190612acc565b60405180910390a15b5050505050505050565b5f8181526004602052604081205490036113015760405162461bcd60e51b81526004016102c29061276a565b5f8181526004602052604090205442101561132e5760405162461bcd60e51b81526004016102c2906127b6565b5f61133c6020860186612000565b61134c6040870160208801612ada565b61135c6060880160408901612ada565b61136c6080890160608a01612af7565b61137960808a018a612b14565b61138960c08c0160a08d01612b65565b60405160200161139f97969594939291906123ea565b6040516020818303038152906040528051906020012090505f816040516020016113c99190612bb4565b6040516020818303038152906040528051906020012090506113f885858584604051602001610f9b91906128a2565b6114145760405162461bcd60e51b81526004016102c290612c1c565b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611455816117b7565b610c5583836117c1565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610e7b565b5f611493600130612c40565b905061149d610e57565b6001600160a01b0316336001600160a01b031614806114c45750336001600160a01b038216145b6114e05760405162461bcd60e51b81526004016102c290612c95565b6114e86116fc565b5f6114f38342612ca5565b90505f84604051602001611507919061260b565b60408051601f1981840301815291815281516020928301205f818152928390529120549091501561154a5760405162461bcd60e51b81526004016102c290612d10565b5f8181526020818152604082208490556001919061156a90880188612000565b6001600160a01b0316815260208101919091526040015f908120906115956080880160608901612af7565b63ffffffff1681526020808201929092526040015f90812080546001810182559082529190208691600402016115cb82826130ba565b50505050505050565b6115dc61199d565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825561162d610e57565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f611670816117b7565b610b747f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836117c1565b5f6116a4816117b7565b6116ac6116fc565b6001600160a01b0382166116d25760405162461bcd60e51b81526004016102c2906124c1565b610b3c7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e19483610c12565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611758576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0381165f908152600260205260408120805467ffffffffffffffff16916001919061178c83856130c4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b610d0d8133611b3f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611865575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061095e565b5f91505061095e565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611865575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118e73390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061095e565b611939611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405161199291906120ad565b60405180910390a150565b336119a6610e57565b6001600160a01b031614611758573360405163118cdaa760e01b81526004016102c291906120ad565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19168155610b3c82611c18565b611a1c6116fc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611985565b5f82611a7c868685611c95565b1495945050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061095e565b611ab6611cd6565b611abf81611d14565b610d0d611d25565b611acf611cd6565b611ad7611d25565b611adf611d25565b611ae95f8261186e565b50611b147f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261186e565b50610b3c7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8261186e565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610b3c5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016102c29291906130e8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611758576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f81815b84811015611ccd57611cc382878784818110611cb757611cb7613103565b90506020020135611d2d565b9150600101611c99565b50949350505050565b611cde611d56565b611758576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d1c611cd6565b610d0d81611d74565b611758611cd6565b5f818310611d47575f828152602084905260409020610c0b565b505f9182526020526040902090565b5f611d5f611a86565b5468010000000000000000900460ff16919050565b611d7c611cd6565b6001600160a01b038116610e1c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016102c291906120ad565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b6020808252810161095e81611dbe565b805b82525050565b6020810161095e8284611e02565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610d0d575f5ffd5b803561095e81611e18565b5f60208284031215611e6457611e645f5ffd5b610c0b8383611e46565b801515611e04565b6020810161095e8284611e6e565b67ffffffffffffffff8116611e3c565b803561095e81611e84565b63ffffffff8116611e3c565b803561095e81611e9f565b5f5f83601f840112611ec957611ec95f5ffd5b50813567ffffffffffffffff811115611ee357611ee35f5ffd5b602083019150836001820283011115611efd57611efd5f5ffd5b9250929050565b60ff8116611e3c565b803561095e81611f04565b5f5f5f5f5f60808688031215611f2f57611f2f5f5ffd5b611f398787611e94565b9450611f488760208801611eab565b9350604086013567ffffffffffffffff811115611f6657611f665f5ffd5b611f7288828901611eb6565b9350935050611f848760608801611f0d565b90509295509295909350565b67ffffffffffffffff8116611e04565b6020810161095e8284611f90565b80611e3c565b803561095e81611fae565b5f60208284031215611fd257611fd25f5ffd5b610c0b8383611fb4565b5f6001600160a01b03821661095e565b611e3c81611fdc565b803561095e81611fec565b5f60208284031215612013576120135f5ffd5b610c0b8383611ff5565b5f60c08284031215612030576120305f5ffd5b50919050565b5f60208284031215612049576120495f5ffd5b813567ffffffffffffffff811115612062576120625f5ffd5b610ed38482850161201d565b5f5f60408385031215612082576120825f5ffd5b61208c8484611fb4565b915061209b8460208501611ff5565b90509250929050565b611e0481611fdc565b6020810161095e82846120a4565b5f60808284031215612030576120305f5ffd5b5f5f83601f8401126120e1576120e15f5ffd5b50813567ffffffffffffffff8111156120fb576120fb5f5ffd5b602083019150836020820283011115611efd57611efd5f5ffd5b5f5f5f5f60c0858703121561212b5761212b5f5ffd5b61213586866120bb565b9350608085013567ffffffffffffffff811115612153576121535f5ffd5b61215f878288016120ce565b93509350506121718660a08701611fb4565b905092959194509250565b5f5f60408385031215612190576121905f5ffd5b61219a8484611fb4565b915061209b8460208501611fb4565b5f5f5f606084860312156121be576121be5f5ffd5b6121c88585611ff5565b92506121d78560208601611ff5565b91506121e68560408601611ff5565b90509250925092565b5f5f5f5f60608587031215612205576122055f5ffd5b843567ffffffffffffffff81111561221e5761221e5f5ffd5b61222a8782880161201d565b945050602085013567ffffffffffffffff811115612249576122495f5ffd5b612255878288016120ce565b93509350506121718660408701611fb4565b5f5f6040838503121561227b5761227b5f5ffd5b823567ffffffffffffffff811115612294576122945f5ffd5b6122a08582860161201d565b92505061209b8460208501611fb4565b805161095e81611fae565b5f602082840312156122ce576122ce5f5ffd5b610c0b83836122b0565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161095e816122d8565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f72616374000000000000000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612342565b63ffffffff8116611e04565b82818337505f910152565b8183526020830192506123d58284836123b6565b50601f01601f19160190565b60ff8116611e04565b60c081016123f8828a6120a4565b6124056020830189611f90565b6124126040830188611f90565b61241f60608301876123aa565b81810360808301526124328185876123c1565b905061244160a08301846123e1565b98975050505050505050565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611dec565b6020808252810161095e8161244d565b60158152602081017f4d616e616765722063616e6e6f7420626520307830000000000000000000000081529050611dec565b6020808252810161095e8161248f565b505f61095e6020830183611ff5565b505f61095e6020830183611e94565b505f61095e6020830183611eab565b5f808335601e1936859003018112612517576125175f5ffd5b830160208101925035905067ffffffffffffffff811115612539576125395f5ffd5b36819003821315611efd57611efd5f5ffd5b505f61095e6020830183611f0d565b5f60c0830161256983806124d1565b61257385826120a4565b5061258160208401846124e0565b61258e6020860182611f90565b5061259c60408401846124e0565b6125a96040860182611f90565b506125b760608401846124ef565b6125c460608601826123aa565b506125d260808401846124fe565b85830360808701526125e58382846123c1565b925050506125f660a084018461254b565b61260360a08601826123e1565b509392505050565b60208082528101610c0b818461255a565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b6020820152905061232c565b6020808252810161095e8161261c565b60348152602081017f556e72656e6f756e6361626c654f776e61626c6532537465703a2063616e6e6f81527f742072656e6f756e6365206f776e6572736869700000000000000000000000006020820152905061232c565b6020808252810161095e81612668565b60188152602081017f496e76616c6964206d756c74697369672061646472657373000000000000000081529050611dec565b6020808252810161095e816126d0565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612712565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b6020820152905061232c565b6020808252810161095e8161277a565b505f61095e6020830183611fb4565b6127df81806124d1565b6127e983826120a4565b506127f760208201826124d1565b61280460208401826120a4565b5061281260408201826127c6565b61281f6040840182611e02565b5061282d60608201826124e0565b610b746060840182611f90565b6080810161095e82846127d5565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611dec565b6040808252810161288a81612848565b905061095e6020830184611e02565b80611e04565b90565b6128ac8183612899565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e000000000000000000000000006020820152905061232c565b6020808252810161095e816128b4565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f65206275730000000000000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e8161291c565b60258152602081017f41637469766174696f6e2074696d65206d75737420626520696e20746865206681527f75747572650000000000000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612984565b601b8152602081017f496e697469616c206f776e65722063616e6e6f7420626520307830000000000081529050611dec565b6020808252810161095e816129ec565b60208082527f5769746864726177616c206d616e616765722063616e6e6f74206265203078309101908152611dec565b6020808252810161095e81612a2e565b601a8152602081017f4665657320616464726573732063616e6e6f742062652030783000000000000081529050611dec565b6020808252810161095e81612a6e565b5f61095e825b67ffffffffffffffff1690565b611e0481612ab0565b6020810161095e8284612ac3565b5f60208284031215612aed57612aed5f5ffd5b610c0b8383611e94565b5f60208284031215612b0a57612b0a5f5ffd5b610c0b8383611eab565b5f808335601e1936859003018112612b2d57612b2d5f5ffd5b8301915050803567ffffffffffffffff811115612b4b57612b4b5f5ffd5b602082019150600181023603821315611efd57611efd5f5ffd5b5f60208284031215612b7857612b785f5ffd5b610c0b8383611f0d565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611dec565b6040808252810161288a81612b82565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612bc4565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b0391821691908116908282039081111561095e5761095e612c2c565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611dec565b6020808252810161095e81612c63565b8082018082111561095e5761095e612c2c565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f21000000000000000000000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612cb8565b5f813561095e81611fec565b5f6001600160a01b03835b81169019929092169190911792915050565b5f61095e82611fdc565b5f61095e82612d49565b612d6682612d53565b612d71818354612d2c565b8255505050565b5f813561095e81611e84565b5f7bffffffffffffffff0000000000000000000000000000000000000000612d378460a01b90565b5f61095e67ffffffffffffffff8316612ab6565b612dc982612dac565b612d71818354612d84565b5f67ffffffffffffffff83612d37565b612ded82612dac565b612d71818354612dd4565b5f813561095e81611e9f565b5f6bffffffff0000000000000000612d378460401b90565b5f63ffffffff821661095e565b612e3282612e1c565b612d71818354612e04565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b600281046001821680612e7957607f821691505b60208210810361203057612030612e51565b5f61095e61289f8381565b612e9f83612e8b565b81545f1960089490940293841b1916921b91909117905550565b5f610b74818484612e96565b81811015610b3c57612ed75f82612eb9565b600101612ec5565b601f821115610b74575f818152602090206020601f85010481016020851015612f055750805b610fd26020601f860104830182612ec5565b8267ffffffffffffffff811115612f3057612f30612e3d565b612f3a8254612e65565b612f45828285612edf565b505f601f821160018114612f77575f8315612f605750848201355b5f19600885021c1981166002850217855550611414565b5f84815260208120601f198516915b82811015612fa65787850135825560209485019460019092019101612f86565b5084821015612fc2575f196008601f8716021c19878501351681555b5050505060020260010190555050565b610b74838383612f17565b5f813561095e81611f04565b5f60ff821661095e565b612ffc82612fe9565b815460ff191660ff821617612d71565b80828061301881612d20565b90506130248184612d5d565b5050602083018061303482612d78565b90506130408184612dc0565b50505060018101604083018061305582612d78565b90506130618184612de4565b5050606083018061307182612df8565b905061307d8184612e29565b50505061308d6080830183612b14565b61309b818360028601612fd2565b505060a08201806130ab82612fdd565b9050610c558160038501612ff3565b610b3c828261300c565b67ffffffffffffffff91821691908116908282019081111561095e5761095e612c2c565b604081016130f682856120a4565b610c0b6020830184611e02565b634e487b7160e01b5f52603260045260245ffdfea2646970667358221220dfd92cf8058810c790631e47051dcec8f279912e537ae30a38fd61142e8279a564736f6c634300081c0033",
+ Bin: "0x608060405234801561000f575f5ffd5b50610018610025565b610020610025565b610104565b5f61002e6100c5565b805490915068010000000000000000900460ff16156100605760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100c25780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b9916100ef565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e9565b61314d806101115f395ff3fe60806040526004361061029e575f3560e01c80638456cb591161016d578063c0c53b8b116100ca578063ea4cf9701161007e578063f865af0811610063578063f865af08146107d2578063fb1bb9de146107f1578063fb894029146108245761029e565b8063ea4cf97014610794578063f2fde38b146107b35761029e565b8063d547741f116100af578063d547741f1461072e578063e30c39781461074d578063e63ab1e9146107615761029e565b8063c0c53b8b146106f0578063ce0d7db31461070f5761029e565b8063a405c46d11610121578063b201246f11610106578063b201246f14610693578063b6aed0cb146106b2578063bb9cdd2c146106d15761029e565b8063a405c46d14610635578063ad7805e8146106605761029e565b806391643fdd1161015257806391643fdd146105a057806391d14854146105bf578063a217fddf146106225761029e565b80638456cb591461056b5780638da5cb5b1461057f5761029e565b80632e1a0b8e1161021b5780635c975abb116101cf578063715018a6116101b4578063715018a6146105245780637920c9861461053857806379ba5097146105575761029e565b80635c975abb146104cf5780636c11c21c146105055761029e565b80633296878211610200578063329687821461047d57806336568abe1461049c5780633f4ba83a146104bb5761029e565b80632e1a0b8e1461043f5780632f2ff15d1461045e5761029e565b80630fe9188e11610272578063248a9ca311610257578063248a9ca3146103b45780632540e2da146104015780632ce8603d146104205761029e565b80630fe9188e146103745780631050afdd146103955761029e565b8062a1b815146102cb57806301ffc9a7146102f557806302b4df19146103215780630d3fd67c14610354575b3480156102a9575f5ffd5b5060405162461bcd60e51b81526004016102c290611df2565b60405180910390fd5b3480156102d6575f5ffd5b506102df610843565b6040516102ec9190611e0a565b60405180910390f35b348015610300575f5ffd5b5061031461030f366004611e51565b6108cc565b6040516102ec9190611e76565b34801561032c575f5ffd5b506102df7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e19481565b610367610362366004611f18565b610964565b6040516102ec9190611fa0565b34801561037f575f5ffd5b5061039361038e366004611fbf565b610a73565b005b3480156103a0575f5ffd5b506103936103af366004612000565b610ada565b3480156103bf575f5ffd5b506102df6103ce366004611fbf565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b34801561040c575f5ffd5b5061039361041b366004612000565b610b40565b34801561042b575f5ffd5b5061039361043a366004612000565b610b79565b34801561044a575f5ffd5b506102df610459366004612036565b610bb5565b348015610469575f5ffd5b5061039361047836600461206e565b610c12565b348015610488575f5ffd5b50610393610497366004612000565b610c5b565b3480156104a7575f5ffd5b506103936104b636600461206e565b610c8f565b3480156104c6575f5ffd5b50610393610cdb565b3480156104da575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610314565b348015610510575f5ffd5b5061039361051f366004612000565b610d10565b34801561052f575f5ffd5b50610393610d44565b348015610543575f5ffd5b50610393610552366004612000565b610d64565b348015610562575f5ffd5b50610393610de9565b348015610576575f5ffd5b50610393610e25565b34801561058a575f5ffd5b50610593610e57565b6040516102ec91906120ad565b3480156105ab575f5ffd5b506103146105ba366004612036565b610e8b565b3480156105ca575f5ffd5b506103146105d936600461206e565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561062d575f5ffd5b506102df5f81565b348015610640575f5ffd5b506102df61064f366004611fbf565b60046020525f908152604090205481565b34801561066b575f5ffd5b506102df7fe0d563514842a8c29151c49cd2698127f54dd344a9b2c74a42fe9be3e305fe9881565b34801561069e575f5ffd5b506103936106ad366004612115565b610edb565b3480156106bd575f5ffd5b506103936106cc36600461217c565b610fd9565b3480156106dc575f5ffd5b506103936106eb366004612000565b611068565b3480156106fb575f5ffd5b5061039361070a3660046121a9565b6110a4565b34801561071a575f5ffd5b506103936107293660046121ef565b6112d5565b348015610739575f5ffd5b5061039361074836600461206e565b61141c565b348015610758575f5ffd5b5061059361145f565b34801561076c575f5ffd5b506102df7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561079f575f5ffd5b506103936107ae366004612267565b611487565b3480156107be575f5ffd5b506103936107cd366004612000565b6115d4565b3480156107dd575f5ffd5b506103936107ec366004612000565b611666565b3480156107fc575f5ffd5b506102df7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b34801561082f575f5ffd5b5061039361083e366004612000565b61169a565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691631a90a2199160048083019260209291908290030181865afa1580156108a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c791906122bb565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061095e57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f61096d6116fc565b6003546001600160a01b031615610a1c575f610987610843565b9050803410156109a95760405162461bcd60e51b81526004016102c290612332565b6003546040515f916001600160a01b03169083908381818185875af1925050503d805f81146109f3576040519150601f19603f3d011682016040523d82523d5f602084013e6109f8565b606091505b5050905080610a195760405162461bcd60e51b81526004016102c29061239a565b50505b610a253361175a565b90507fd3cfd274dfddb1195699ee44f0ba7aaabf97e75965b5191c2c0bd56776ff206133828888888888604051610a6297969594939291906123ea565b60405180910390a195945050505050565b7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e194610a9d816117b7565b5f828152600460205260408120549003610ac95760405162461bcd60e51b81526004016102c29061247f565b505f90815260046020526040812055565b5f610ae4816117b7565b610aec6116fc565b6001600160a01b038216610b125760405162461bcd60e51b81526004016102c2906124c1565b610b3c7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e1948361141c565b5050565b5f610b4a816117b7565b610b747f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836117c1565b505050565b5f610b83816117b7565b610b8b6116fc565b610b3c7fe0d563514842a8c29151c49cd2698127f54dd344a9b2c74a42fe9be3e305fe988361141c565b5f5f82604051602001610bc8919061260b565b60408051601f1981840301815291815281516020928301205f8181529283905291205490915080610c0b5760405162461bcd60e51b81526004016102c290612658565b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610c4b816117b7565b610c55838361186e565b50505050565b5f610c65816117b7565b610b747f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361186e565b6001600160a01b0381163314610cd1576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b7482826117c1565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610d05816117b7565b610d0d611931565b50565b5f610d1a816117b7565b610b747f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361186e565b610d4c61199d565b60405162461bcd60e51b81526004016102c2906126c0565b5f610d6e816117b7565b6001600160a01b038216610d945760405162461bcd60e51b81526004016102c290612702565b610dbe7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a336117c1565b50610b747f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361186e565b3380610df361145f565b6001600160a01b031614610e1c578060405163118cdaa760e01b81526004016102c291906120ad565b610d0d816119cf565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610e4f816117b7565b610d0d611a14565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f5f82604051602001610e9e919061260b565b60408051601f1981840301815291815281516020928301205f818152928390529120549091508015801590610ed35750428111155b949350505050565b5f818152600460205260408120549003610f075760405162461bcd60e51b81526004016102c29061276a565b5f81815260046020526040902054421015610f345760405162461bcd60e51b81526004016102c2906127b6565b5f84604051602001610f46919061283a565b60405160208183030381529060405280519060200120604051602001610f6c919061287a565b604051602081830303815290604052805190602001209050610fb684848484604051602001610f9b91906128a2565b60405160208183030381529060405280519060200120611a6f565b610fd25760405162461bcd60e51b81526004016102c29061290c565b5050505050565b7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e194611003816117b7565b61100b6116fc565b5f83815260046020526040902054156110365760405162461bcd60e51b81526004016102c290612974565b428210156110565760405162461bcd60e51b81526004016102c2906129dc565b505f9182526004602052604090912055565b5f611072816117b7565b61107a6116fc565b610b747fe0d563514842a8c29151c49cd2698127f54dd344a9b2c74a42fe9be3e305fe988361186e565b5f6110ad611a86565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156110d95750825b90505f8267ffffffffffffffff1660011480156110f55750303b155b905081158015611103575080155b1561113a576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561116e57845468ff00000000000000001916680100000000000000001785555b6001600160a01b0388166111945760405162461bcd60e51b81526004016102c290612a1e565b6001600160a01b0387166111ba5760405162461bcd60e51b81526004016102c290612a5e565b6001600160a01b0386166111e05760405162461bcd60e51b81526004016102c290612aa0565b6111e988611aae565b6111f288611ac7565b6111fc5f8961186e565b506112277f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e1948961186e565b506112527fe0d563514842a8c29151c49cd2698127f54dd344a9b2c74a42fe9be3e305fe988861186e565b506003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03881617905583156112cb57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906112c290600190612acc565b60405180910390a15b5050505050505050565b5f8181526004602052604081205490036113015760405162461bcd60e51b81526004016102c29061276a565b5f8181526004602052604090205442101561132e5760405162461bcd60e51b81526004016102c2906127b6565b5f61133c6020860186612000565b61134c6040870160208801612ada565b61135c6060880160408901612ada565b61136c6080890160608a01612af7565b61137960808a018a612b14565b61138960c08c0160a08d01612b65565b60405160200161139f97969594939291906123ea565b6040516020818303038152906040528051906020012090505f816040516020016113c99190612bb4565b6040516020818303038152906040528051906020012090506113f885858584604051602001610f9b91906128a2565b6114145760405162461bcd60e51b81526004016102c290612c1c565b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611455816117b7565b610c5583836117c1565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610e7b565b5f611493600130612c40565b905061149d610e57565b6001600160a01b0316336001600160a01b031614806114c45750336001600160a01b038216145b6114e05760405162461bcd60e51b81526004016102c290612c95565b6114e86116fc565b5f6114f38342612ca5565b90505f84604051602001611507919061260b565b60408051601f1981840301815291815281516020928301205f818152928390529120549091501561154a5760405162461bcd60e51b81526004016102c290612d10565b5f8181526020818152604082208490556001919061156a90880188612000565b6001600160a01b0316815260208101919091526040015f908120906115956080880160608901612af7565b63ffffffff1681526020808201929092526040015f90812080546001810182559082529190208691600402016115cb82826130ba565b50505050505050565b6115dc61199d565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825561162d610e57565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f611670816117b7565b610b747f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836117c1565b5f6116a4816117b7565b6116ac6116fc565b6001600160a01b0382166116d25760405162461bcd60e51b81526004016102c2906124c1565b610b3c7f65c4b771cce18ff228842b3883a73079ee3e76bd08965f6dadb7cb56dbf6e19483610c12565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615611758576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0381165f908152600260205260408120805467ffffffffffffffff16916001919061178c83856130c4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b610d0d8133611b3f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611865575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061095e565b5f91505061095e565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611865575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118e73390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061095e565b611939611bbd565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405161199291906120ad565b60405180910390a150565b336119a6610e57565b6001600160a01b031614611758573360405163118cdaa760e01b81526004016102c291906120ad565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19168155610b3c82611c18565b611a1c6116fc565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611985565b5f82611a7c868685611c95565b1495945050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061095e565b611ab6611cd6565b611abf81611d14565b610d0d611d25565b611acf611cd6565b611ad7611d25565b611adf611d25565b611ae95f8261186e565b50611b147f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8261186e565b50610b3c7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8261186e565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610b3c5780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016102c29291906130e8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16611758576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f81815b84811015611ccd57611cc382878784818110611cb757611cb7613103565b90506020020135611d2d565b9150600101611c99565b50949350505050565b611cde611d56565b611758576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d1c611cd6565b610d0d81611d74565b611758611cd6565b5f818310611d47575f828152602084905260409020610c0b565b505f9182526020526040902090565b5f611d5f611a86565b5468010000000000000000900460ff16919050565b611d7c611cd6565b6001600160a01b038116610e1c575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016102c291906120ad565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b6020808252810161095e81611dbe565b805b82525050565b6020810161095e8284611e02565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610d0d575f5ffd5b803561095e81611e18565b5f60208284031215611e6457611e645f5ffd5b610c0b8383611e46565b801515611e04565b6020810161095e8284611e6e565b67ffffffffffffffff8116611e3c565b803561095e81611e84565b63ffffffff8116611e3c565b803561095e81611e9f565b5f5f83601f840112611ec957611ec95f5ffd5b50813567ffffffffffffffff811115611ee357611ee35f5ffd5b602083019150836001820283011115611efd57611efd5f5ffd5b9250929050565b60ff8116611e3c565b803561095e81611f04565b5f5f5f5f5f60808688031215611f2f57611f2f5f5ffd5b611f398787611e94565b9450611f488760208801611eab565b9350604086013567ffffffffffffffff811115611f6657611f665f5ffd5b611f7288828901611eb6565b9350935050611f848760608801611f0d565b90509295509295909350565b67ffffffffffffffff8116611e04565b6020810161095e8284611f90565b80611e3c565b803561095e81611fae565b5f60208284031215611fd257611fd25f5ffd5b610c0b8383611fb4565b5f6001600160a01b03821661095e565b611e3c81611fdc565b803561095e81611fec565b5f60208284031215612013576120135f5ffd5b610c0b8383611ff5565b5f60c08284031215612030576120305f5ffd5b50919050565b5f60208284031215612049576120495f5ffd5b813567ffffffffffffffff811115612062576120625f5ffd5b610ed38482850161201d565b5f5f60408385031215612082576120825f5ffd5b61208c8484611fb4565b915061209b8460208501611ff5565b90509250929050565b611e0481611fdc565b6020810161095e82846120a4565b5f60808284031215612030576120305f5ffd5b5f5f83601f8401126120e1576120e15f5ffd5b50813567ffffffffffffffff8111156120fb576120fb5f5ffd5b602083019150836020820283011115611efd57611efd5f5ffd5b5f5f5f5f60c0858703121561212b5761212b5f5ffd5b61213586866120bb565b9350608085013567ffffffffffffffff811115612153576121535f5ffd5b61215f878288016120ce565b93509350506121718660a08701611fb4565b905092959194509250565b5f5f60408385031215612190576121905f5ffd5b61219a8484611fb4565b915061209b8460208501611fb4565b5f5f5f606084860312156121be576121be5f5ffd5b6121c88585611ff5565b92506121d78560208601611ff5565b91506121e68560408601611ff5565b90509250925092565b5f5f5f5f60608587031215612205576122055f5ffd5b843567ffffffffffffffff81111561221e5761221e5f5ffd5b61222a8782880161201d565b945050602085013567ffffffffffffffff811115612249576122495f5ffd5b612255878288016120ce565b93509350506121718660408701611fb4565b5f5f6040838503121561227b5761227b5f5ffd5b823567ffffffffffffffff811115612294576122945f5ffd5b6122a08582860161201d565b92505061209b8460208501611fb4565b805161095e81611fae565b5f602082840312156122ce576122ce5f5ffd5b610c0b83836122b0565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290505b60400190565b6020808252810161095e816122d8565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f72616374000000000000000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612342565b63ffffffff8116611e04565b82818337505f910152565b8183526020830192506123d58284836123b6565b50601f01601f19160190565b60ff8116611e04565b60c081016123f8828a6120a4565b6124056020830189611f90565b6124126040830188611f90565b61241f60608301876123aa565b81810360808301526124328185876123c1565b905061244160a08301846123e1565b98975050505050505050565b601a8152602081017f537461746520726f6f7420646f6573206e6f742065786973742e00000000000081529050611dec565b6020808252810161095e8161244d565b60158152602081017f4d616e616765722063616e6e6f7420626520307830000000000000000000000081529050611dec565b6020808252810161095e8161248f565b505f61095e6020830183611ff5565b505f61095e6020830183611e94565b505f61095e6020830183611eab565b5f808335601e1936859003018112612517576125175f5ffd5b830160208101925035905067ffffffffffffffff811115612539576125395f5ffd5b36819003821315611efd57611efd5f5ffd5b505f61095e6020830183611f0d565b5f60c0830161256983806124d1565b61257385826120a4565b5061258160208401846124e0565b61258e6020860182611f90565b5061259c60408401846124e0565b6125a96040860182611f90565b506125b760608401846124ef565b6125c460608601826123aa565b506125d260808401846124fe565b85830360808701526125e58382846123c1565b925050506125f660a084018461254b565b61260360a08601826123e1565b509392505050565b60208082528101610c0b818461255a565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d69747465648152601760f91b6020820152905061232c565b6020808252810161095e8161261c565b60348152602081017f556e72656e6f756e6361626c654f776e61626c6532537465703a2063616e6e6f81527f742072656e6f756e6365206f776e6572736869700000000000000000000000006020820152905061232c565b6020808252810161095e81612668565b60188152602081017f496e76616c6964206d756c74697369672061646472657373000000000000000081529050611dec565b6020808252810161095e816126d0565b602a8152602081017f526f6f74206973206e6f74207075626c6973686564206f6e2074686973206d6581527f7373616765206275732e000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612712565b60218152602081017f526f6f74206973206e6f7420636f6e736964657265642066696e616c207965748152601760f91b6020820152905061232c565b6020808252810161095e8161277a565b505f61095e6020830183611fb4565b6127df81806124d1565b6127e983826120a4565b506127f760208201826124d1565b61280460208401826120a4565b5061281260408201826127c6565b61281f6040840182611e02565b5061282d60608201826124e0565b610b746060840182611f90565b6080810161095e82846127d5565b60018152602081017f760000000000000000000000000000000000000000000000000000000000000081529050611dec565b6040808252810161288a81612848565b905061095e6020830184611e02565b80611e04565b90565b6128ac8183612899565b602001919050565b60338152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722076616c7581527f65207472616e73666572206d6573736167652e000000000000000000000000006020820152905061232c565b6020808252810161095e816128b4565b60258152602081017f526f6f7420616c726561647920616464656420746f20746865206d657373616781527f65206275730000000000000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e8161291c565b60258152602081017f41637469766174696f6e2074696d65206d75737420626520696e20746865206681527f75747572650000000000000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612984565b601b8152602081017f496e697469616c206f776e65722063616e6e6f7420626520307830000000000081529050611dec565b6020808252810161095e816129ec565b60208082527f5769746864726177616c206d616e616765722063616e6e6f74206265203078309101908152611dec565b6020808252810161095e81612a2e565b601a8152602081017f4665657320616464726573732063616e6e6f742062652030783000000000000081529050611dec565b6020808252810161095e81612a6e565b5f61095e825b67ffffffffffffffff1690565b611e0481612ab0565b6020810161095e8284612ac3565b5f60208284031215612aed57612aed5f5ffd5b610c0b8383611e94565b5f60208284031215612b0a57612b0a5f5ffd5b610c0b8383611eab565b5f808335601e1936859003018112612b2d57612b2d5f5ffd5b8301915050803567ffffffffffffffff811115612b4b57612b4b5f5ffd5b602082019150600181023603821315611efd57611efd5f5ffd5b5f60208284031215612b7857612b785f5ffd5b610c0b8383611f0d565b60018152602081017f6d0000000000000000000000000000000000000000000000000000000000000081529050611dec565b6040808252810161288a81612b82565b60308152602081017f496e76616c696420696e636c7573696f6e2070726f6f6620666f722063726f7381527f7320636861696e206d6573736167652e000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612bc4565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b0391821691908116908282039081111561095e5761095e612c2c565b60118152602081017f4e6f74206f776e6572206f722073656c6600000000000000000000000000000081529050611dec565b6020808252810161095e81612c63565b8082018082111561095e5761095e612c2c565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f21000000000000000000000000000000000000000000000000000000000000006020820152905061232c565b6020808252810161095e81612cb8565b5f813561095e81611fec565b5f6001600160a01b03835b81169019929092169190911792915050565b5f61095e82611fdc565b5f61095e82612d49565b612d6682612d53565b612d71818354612d2c565b8255505050565b5f813561095e81611e84565b5f7bffffffffffffffff0000000000000000000000000000000000000000612d378460a01b90565b5f61095e67ffffffffffffffff8316612ab6565b612dc982612dac565b612d71818354612d84565b5f67ffffffffffffffff83612d37565b612ded82612dac565b612d71818354612dd4565b5f813561095e81611e9f565b5f6bffffffff0000000000000000612d378460401b90565b5f63ffffffff821661095e565b612e3282612e1c565b612d71818354612e04565b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b600281046001821680612e7957607f821691505b60208210810361203057612030612e51565b5f61095e61289f8381565b612e9f83612e8b565b81545f1960089490940293841b1916921b91909117905550565b5f610b74818484612e96565b81811015610b3c57612ed75f82612eb9565b600101612ec5565b601f821115610b74575f818152602090206020601f85010481016020851015612f055750805b610fd26020601f860104830182612ec5565b8267ffffffffffffffff811115612f3057612f30612e3d565b612f3a8254612e65565b612f45828285612edf565b505f601f821160018114612f77575f8315612f605750848201355b5f19600885021c1981166002850217855550611414565b5f84815260208120601f198516915b82811015612fa65787850135825560209485019460019092019101612f86565b5084821015612fc2575f196008601f8716021c19878501351681555b5050505060020260010190555050565b610b74838383612f17565b5f813561095e81611f04565b5f60ff821661095e565b612ffc82612fe9565b815460ff191660ff821617612d71565b80828061301881612d20565b90506130248184612d5d565b5050602083018061303482612d78565b90506130408184612dc0565b50505060018101604083018061305582612d78565b90506130618184612de4565b5050606083018061307182612df8565b905061307d8184612e29565b50505061308d6080830183612b14565b61309b818360028601612fd2565b505060a08201806130ab82612fdd565b9050610c558160038501612ff3565b610b3c828261300c565b67ffffffffffffffff91821691908116908282019081111561095e5761095e612c2c565b604081016130f682856120a4565b610c0b6020830184611e02565b634e487b7160e01b5f52603260045260245ffdfea264697066735822122019cbe92d8d19564cc7c6326e973eea66bc032eaf4a1f693230163dfc3221198a64736f6c634300081c0033",
}
// MerkleTreeMessageBusABI is the input ABI used to generate the binding from.
diff --git a/contracts/generated/MessageBus/MessageBus.go b/contracts/generated/MessageBus/MessageBus.go
index 3de98e900f..a241daac27 100644
--- a/contracts/generated/MessageBus/MessageBus.go
+++ b/contracts/generated/MessageBus/MessageBus.go
@@ -42,7 +42,7 @@ type StructsCrossChainMessage struct {
// MessageBusMetaData contains all meta data concerning the MessageBus contract.
var MessageBusMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"LogMessagePublished\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNPAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"getMessageTimeOfFinality\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPublishFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantPauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"withdrawal\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"name\":\"publishMessage\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokePauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"finalAfterTimestamp\",\"type\":\"uint256\"}],\"name\":\"storeCrossChainMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"multisig\",\"type\":\"address\"}],\"name\":\"transferUnpauserRoleToMultisig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sequence\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"topic\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"consistencyLevel\",\"type\":\"uint8\"}],\"internalType\":\"structStructs.CrossChainMessage\",\"name\":\"crossChainMessage\",\"type\":\"tuple\"}],\"name\":\"verifyMessageFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f5ffd5b50610018610025565b610020610025565b610104565b5f61002e6100c5565b805490915068010000000000000000900460ff16156100605760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100c25780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b9916100ef565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e9565b61238e806101115f395ff3fe6080604052600436106101b5575f3560e01c806379ba5097116100eb578063d547741f11610089578063ea4cf97011610063578063ea4cf97014610541578063f2fde38b14610560578063f865af081461057f578063fb1bb9de1461059e576101b5565b8063d547741f146104db578063e30c3978146104fa578063e63ab1e91461050e576101b5565b806391643fdd116100c557806391643fdd1461042757806391d1485414610446578063a217fddf146104a9578063c0c53b8b146104bc576101b5565b806379ba5097146103de5780638456cb59146103f25780638da5cb5b14610406576101b5565b806332968782116101585780635c975abb116101325780635c975abb146103565780636c11c21c1461038c578063715018a6146103ab5780637920c986146103bf576101b5565b8063329687821461030457806336568abe146103235780633f4ba83a14610342576101b5565b8063248a9ca311610194578063248a9ca3146102585780632540e2da146102a55780632e1a0b8e146102c65780632f2ff15d146102e5576101b5565b8062a1b815146101e257806301ffc9a71461020c5780630d3fd67c14610238575b3480156101c0575f5ffd5b5060405162461bcd60e51b81526004016101d990611601565b60405180910390fd5b3480156101ed575f5ffd5b506101f66105d1565b6040516102039190611619565b60405180910390f35b348015610217575f5ffd5b5061022b610226366004611660565b61065a565b6040516102039190611685565b61024b610246366004611727565b6106f2565b60405161020391906117af565b348015610263575f5ffd5b506101f66102723660046117ce565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156102b0575f5ffd5b506102c46102bf36600461180f565b610801565b005b3480156102d1575f5ffd5b506101f66102e0366004611845565b61083a565b3480156102f0575f5ffd5b506102c46102ff36600461187d565b610897565b34801561030f575f5ffd5b506102c461031e36600461180f565b6108e0565b34801561032e575f5ffd5b506102c461033d36600461187d565b610914565b34801561034d575f5ffd5b506102c4610960565b348015610361575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661022b565b348015610397575f5ffd5b506102c46103a636600461180f565b610995565b3480156103b6575f5ffd5b506102c46109c9565b3480156103ca575f5ffd5b506102c46103d936600461180f565b6109e9565b3480156103e9575f5ffd5b506102c4610a6e565b3480156103fd575f5ffd5b506102c4610aaa565b348015610411575f5ffd5b5061041a610adc565b60405161020391906118bc565b348015610432575f5ffd5b5061022b610441366004611845565b610b10565b348015610451575f5ffd5b5061022b61046036600461187d565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104b4575f5ffd5b506101f65f81565b3480156104c7575f5ffd5b506102c46104d63660046118ca565b610b60565b3480156104e6575f5ffd5b506102c46104f536600461187d565b610d0a565b348015610505575f5ffd5b5061041a610d4d565b348015610519575f5ffd5b506101f67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561054c575f5ffd5b506102c461055b366004611910565b610d75565b34801561056b575f5ffd5b506102c461057a36600461180f565b610ec2565b34801561058a575f5ffd5b506102c461059936600461180f565b610f54565b3480156105a9575f5ffd5b506101f67f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610631573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106559190611964565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106ec57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106fb610f88565b6003546001600160a01b0316156107aa575f6107156105d1565b9050803410156107375760405162461bcd60e51b81526004016101d9906119db565b6003546040515f916001600160a01b03169083908381818185875af1925050503d805f8114610781576040519150601f19603f3d011682016040523d82523d5f602084013e610786565b606091505b50509050806107a75760405162461bcd60e51b81526004016101d990611a43565b50505b6107b333610fe6565b90507fd3cfd274dfddb1195699ee44f0ba7aaabf97e75965b5191c2c0bd56776ff2061338288888888886040516107f09796959493929190611a93565b60405180910390a195945050505050565b5f61080b81611043565b6108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361104d565b505050565b5f5f8260405160200161084d9190611c30565b60408051601f1981840301815291815281516020928301205f81815292839052912054909150806108905760405162461bcd60e51b81526004016101d990611c99565b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108d081611043565b6108da83836110fa565b50505050565b5f6108ea81611043565b6108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836110fa565b6001600160a01b0381163314610956576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610835828261104d565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a61098a81611043565b6109926111bd565b50565b5f61099f81611043565b6108357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836110fa565b6109d1611229565b60405162461bcd60e51b81526004016101d990611d01565b5f6109f381611043565b6001600160a01b038216610a195760405162461bcd60e51b81526004016101d990611d43565b610a437f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a3361104d565b506108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836110fa565b3380610a78610d4d565b6001600160a01b031614610aa1578060405163118cdaa760e01b81526004016101d991906118bc565b6109928161125b565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ad481611043565b6109926112a4565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f5f82604051602001610b239190611c30565b60408051601f1981840301815291815281516020928301205f818152928390529120549091508015801590610b585750428111155b949350505050565b5f610b696112ff565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610b955750825b90505f8267ffffffffffffffff166001148015610bb15750303b155b905081158015610bbf575080155b15610bf6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c2a57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038616610c505760405162461bcd60e51b81526004016101d990611d85565b6001600160a01b038816610c765760405162461bcd60e51b81526004016101d990611dc7565b610c7f88611327565b610c8888611340565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388161790558315610d0057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610cf790600190611dfa565b60405180910390a15b5050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d4381611043565b6108da838361104d565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610b00565b5f610d81600130611e1c565b9050610d8b610adc565b6001600160a01b0316336001600160a01b03161480610db25750336001600160a01b038216145b610dce5760405162461bcd60e51b81526004016101d990611e71565b610dd6610f88565b5f610de18342611e81565b90505f84604051602001610df59190611c30565b60408051601f1981840301815291815281516020928301205f8181529283905291205490915015610e385760405162461bcd60e51b81526004016101d990611eec565b5f81815260208181526040822084905560019190610e589088018861180f565b6001600160a01b0316815260208101919091526040015f90812090610e836080880160608901611efc565b63ffffffff1681526020808201929092526040015f9081208054600181018255908252919020869160040201610eb9828261230f565b50505050505050565b610eca611229565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255610f1b610adc565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f610f5e81611043565b6108357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361104d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610fe4576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0381165f908152600260205260408120805467ffffffffffffffff1691600191906110188385612319565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b61099281336113b8565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f1575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106ec565b5f9150506106ec565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f1575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556111733390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106ec565b6111c5611436565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405161121e91906118bc565b60405180910390a150565b33611232610adc565b6001600160a01b031614610fe4573360405163118cdaa760e01b81526004016101d991906118bc565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff191681556112a082611491565b5050565b6112ac610f88565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611211565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006106ec565b61132f61150e565b6113388161154c565b61099261155d565b61134861150e565b61135061155d565b61135861155d565b6113625f826110fa565b5061138d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826110fa565b506112a07f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a826110fa565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166112a05780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016101d992919061233d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610fe4576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611516611565565b610fe4576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155461150e565b61099281611583565b610fe461150e565b5f61156e6112ff565b5468010000000000000000900460ff16919050565b61158b61150e565b6001600160a01b038116610aa1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101d991906118bc565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016106ec816115cd565b805b82525050565b602081016106ec8284611611565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610992575f5ffd5b80356106ec81611627565b5f60208284031215611673576116735f5ffd5b6108908383611655565b801515611613565b602081016106ec828461167d565b67ffffffffffffffff811661164b565b80356106ec81611693565b63ffffffff811661164b565b80356106ec816116ae565b5f5f83601f8401126116d8576116d85f5ffd5b50813567ffffffffffffffff8111156116f2576116f25f5ffd5b60208301915083600182028301111561170c5761170c5f5ffd5b9250929050565b60ff811661164b565b80356106ec81611713565b5f5f5f5f5f6080868803121561173e5761173e5f5ffd5b61174887876116a3565b945061175787602088016116ba565b9350604086013567ffffffffffffffff811115611775576117755f5ffd5b611781888289016116c5565b9350935050611793876060880161171c565b90509295509295909350565b67ffffffffffffffff8116611613565b602081016106ec828461179f565b8061164b565b80356106ec816117bd565b5f602082840312156117e1576117e15f5ffd5b61089083836117c3565b5f6001600160a01b0382166106ec565b61164b816117eb565b80356106ec816117fb565b5f60208284031215611822576118225f5ffd5b6108908383611804565b5f60c0828403121561183f5761183f5f5ffd5b50919050565b5f60208284031215611858576118585f5ffd5b813567ffffffffffffffff811115611871576118715f5ffd5b610b588482850161182c565b5f5f60408385031215611891576118915f5ffd5b61189b84846117c3565b91506118aa8460208501611804565b90509250929050565b611613816117eb565b602081016106ec82846118b3565b5f5f5f606084860312156118df576118df5f5ffd5b6118e98585611804565b92506118f88560208601611804565b91506119078560408601611804565b90509250925092565b5f5f60408385031215611924576119245f5ffd5b823567ffffffffffffffff81111561193d5761193d5f5ffd5b6119498582860161182c565b9250506118aa84602085016117c3565b80516106ec816117bd565b5f60208284031215611977576119775f5ffd5b6108908383611959565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016106ec81611981565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec816119eb565b63ffffffff8116611613565b82818337505f910152565b818352602083019250611a7e828483611a5f565b50601f01601f19160190565b60ff8116611613565b60c08101611aa1828a6118b3565b611aae602083018961179f565b611abb604083018861179f565b611ac86060830187611a53565b8181036080830152611adb818587611a6a565b9050611aea60a0830184611a8a565b98975050505050505050565b505f6106ec6020830183611804565b505f6106ec60208301836116a3565b505f6106ec60208301836116ba565b5f808335601e1936859003018112611b3c57611b3c5f5ffd5b830160208101925035905067ffffffffffffffff811115611b5e57611b5e5f5ffd5b3681900382131561170c5761170c5f5ffd5b505f6106ec602083018361171c565b5f60c08301611b8e8380611af6565b611b9885826118b3565b50611ba66020840184611b05565b611bb3602086018261179f565b50611bc16040840184611b05565b611bce604086018261179f565b50611bdc6060840184611b14565b611be96060860182611a53565b50611bf76080840184611b23565b8583036080870152611c0a838284611a6a565b92505050611c1b60a0840184611b70565b611c2860a0860182611a8a565b509392505050565b602080825281016108908184611b7f565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec81611c41565b60348152602081017f556e72656e6f756e6361626c654f776e61626c6532537465703a2063616e6e6f81527f742072656e6f756e6365206f776e657273686970000000000000000000000000602082015290506119d5565b602080825281016106ec81611ca9565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290506115fb565b602080825281016106ec81611d11565b601a8152602081017f4665657320616464726573732063616e6e6f7420626520307830000000000000815290506115fb565b602080825281016106ec81611d53565b60148152602081017f43616c6c65722063616e6e6f7420626520307830000000000000000000000000815290506115fb565b602080825281016106ec81611d95565b5f6106ec82611de4565b90565b67ffffffffffffffff1690565b61161381611dd7565b602081016106ec8284611df1565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b039182169190811690828203908111156106ec576106ec611e08565b60118152602081017f4e6f74206f776e6572206f722073656c66000000000000000000000000000000815290506115fb565b602080825281016106ec81611e3f565b808201808211156106ec576106ec611e08565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec81611e94565b5f60208284031215611f0f57611f0f5f5ffd5b61089083836116ba565b5f81356106ec816117fb565b5f6001600160a01b03835b81169019929092169190911792915050565b5f6106ec826117eb565b5f6106ec82611f42565b611f5f82611f4c565b611f6a818354611f25565b8255505050565b5f81356106ec81611693565b5f7bffffffffffffffff0000000000000000000000000000000000000000611f308460a01b90565b5f6106ec67ffffffffffffffff8316611de4565b611fc282611fa5565b611f6a818354611f7d565b5f67ffffffffffffffff83611f30565b611fe682611fa5565b611f6a818354611fcd565b5f81356106ec816116ae565b5f6bffffffff0000000000000000611f308460401b90565b5f63ffffffff82166106ec565b61202b82612015565b611f6a818354611ffd565b5f808335601e193685900301811261204f5761204f5f5ffd5b8301915050803567ffffffffffffffff81111561206d5761206d5f5ffd5b60208201915060018102360382131561170c5761170c5f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806120c357607f821691505b60208210810361183f5761183f61209b565b5f6106ec611de18381565b6120e9836120d5565b81545f1960089490940293841b1916921b91909117905550565b5f6108358184846120e0565b818110156112a0576121215f82612103565b60010161210f565b601f821115610835575f818152602090206020601f8501048101602085101561214f5750805b6121616020601f86010483018261210f565b5050505050565b8267ffffffffffffffff81111561218157612181612087565b61218b82546120af565b612196828285612129565b505f601f8211600181146121c8575f83156121b15750848201355b5f19600885021c198116600285021785555061221f565b5f84815260208120601f198516915b828110156121f757878501358255602094850194600190920191016121d7565b5084821015612213575f196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b610835838383612168565b5f81356106ec81611713565b5f60ff82166106ec565b6122518261223e565b815460ff191660ff821617611f6a565b80828061226d81611f19565b90506122798184611f56565b5050602083018061228982611f71565b90506122958184611fb9565b5050506001810160408301806122aa82611f71565b90506122b68184611fdd565b505060608301806122c682611ff1565b90506122d28184612022565b5050506122e26080830183612036565b6122f0818360028601612227565b505060a082018061230082612232565b90506108da8160038501612248565b6112a08282612261565b67ffffffffffffffff9182169190811690828201908111156106ec576106ec611e08565b6040810161234b82856118b3565b610890602083018461161156fea2646970667358221220ada43b7b5ee6ddf5df5c074a4bf5d5e5ef0fa081008ffacb387be3c6a0d32c0c64736f6c634300081c0033",
+ Bin: "0x608060405234801561000f575f5ffd5b50610018610025565b610020610025565b610104565b5f61002e6100c5565b805490915068010000000000000000900460ff16156100605760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100c25780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b9916100ef565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e9565b61238e806101115f395ff3fe6080604052600436106101b5575f3560e01c806379ba5097116100eb578063d547741f11610089578063ea4cf97011610063578063ea4cf97014610541578063f2fde38b14610560578063f865af081461057f578063fb1bb9de1461059e576101b5565b8063d547741f146104db578063e30c3978146104fa578063e63ab1e91461050e576101b5565b806391643fdd116100c557806391643fdd1461042757806391d1485414610446578063a217fddf146104a9578063c0c53b8b146104bc576101b5565b806379ba5097146103de5780638456cb59146103f25780638da5cb5b14610406576101b5565b806332968782116101585780635c975abb116101325780635c975abb146103565780636c11c21c1461038c578063715018a6146103ab5780637920c986146103bf576101b5565b8063329687821461030457806336568abe146103235780633f4ba83a14610342576101b5565b8063248a9ca311610194578063248a9ca3146102585780632540e2da146102a55780632e1a0b8e146102c65780632f2ff15d146102e5576101b5565b8062a1b815146101e257806301ffc9a71461020c5780630d3fd67c14610238575b3480156101c0575f5ffd5b5060405162461bcd60e51b81526004016101d990611601565b60405180910390fd5b3480156101ed575f5ffd5b506101f66105d1565b6040516102039190611619565b60405180910390f35b348015610217575f5ffd5b5061022b610226366004611660565b61065a565b6040516102039190611685565b61024b610246366004611727565b6106f2565b60405161020391906117af565b348015610263575f5ffd5b506101f66102723660046117ce565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156102b0575f5ffd5b506102c46102bf36600461180f565b610801565b005b3480156102d1575f5ffd5b506101f66102e0366004611845565b61083a565b3480156102f0575f5ffd5b506102c46102ff36600461187d565b610897565b34801561030f575f5ffd5b506102c461031e36600461180f565b6108e0565b34801561032e575f5ffd5b506102c461033d36600461187d565b610914565b34801561034d575f5ffd5b506102c4610960565b348015610361575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661022b565b348015610397575f5ffd5b506102c46103a636600461180f565b610995565b3480156103b6575f5ffd5b506102c46109c9565b3480156103ca575f5ffd5b506102c46103d936600461180f565b6109e9565b3480156103e9575f5ffd5b506102c4610a6e565b3480156103fd575f5ffd5b506102c4610aaa565b348015610411575f5ffd5b5061041a610adc565b60405161020391906118bc565b348015610432575f5ffd5b5061022b610441366004611845565b610b10565b348015610451575f5ffd5b5061022b61046036600461187d565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104b4575f5ffd5b506101f65f81565b3480156104c7575f5ffd5b506102c46104d63660046118ca565b610b60565b3480156104e6575f5ffd5b506102c46104f536600461187d565b610d0a565b348015610505575f5ffd5b5061041a610d4d565b348015610519575f5ffd5b506101f67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561054c575f5ffd5b506102c461055b366004611910565b610d75565b34801561056b575f5ffd5b506102c461057a36600461180f565b610ec2565b34801561058a575f5ffd5b506102c461059936600461180f565b610f54565b3480156105a9575f5ffd5b506101f67f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610631573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106559190611964565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106ec57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106fb610f88565b6003546001600160a01b0316156107aa575f6107156105d1565b9050803410156107375760405162461bcd60e51b81526004016101d9906119db565b6003546040515f916001600160a01b03169083908381818185875af1925050503d805f8114610781576040519150601f19603f3d011682016040523d82523d5f602084013e610786565b606091505b50509050806107a75760405162461bcd60e51b81526004016101d990611a43565b50505b6107b333610fe6565b90507fd3cfd274dfddb1195699ee44f0ba7aaabf97e75965b5191c2c0bd56776ff2061338288888888886040516107f09796959493929190611a93565b60405180910390a195945050505050565b5f61080b81611043565b6108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361104d565b505050565b5f5f8260405160200161084d9190611c30565b60408051601f1981840301815291815281516020928301205f81815292839052912054909150806108905760405162461bcd60e51b81526004016101d990611c99565b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108d081611043565b6108da83836110fa565b50505050565b5f6108ea81611043565b6108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836110fa565b6001600160a01b0381163314610956576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610835828261104d565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a61098a81611043565b6109926111bd565b50565b5f61099f81611043565b6108357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836110fa565b6109d1611229565b60405162461bcd60e51b81526004016101d990611d01565b5f6109f381611043565b6001600160a01b038216610a195760405162461bcd60e51b81526004016101d990611d43565b610a437f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a3361104d565b506108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836110fa565b3380610a78610d4d565b6001600160a01b031614610aa1578060405163118cdaa760e01b81526004016101d991906118bc565b6109928161125b565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ad481611043565b6109926112a4565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f5f82604051602001610b239190611c30565b60408051601f1981840301815291815281516020928301205f818152928390529120549091508015801590610b585750428111155b949350505050565b5f610b696112ff565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610b955750825b90505f8267ffffffffffffffff166001148015610bb15750303b155b905081158015610bbf575080155b15610bf6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c2a57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038616610c505760405162461bcd60e51b81526004016101d990611d85565b6001600160a01b038816610c765760405162461bcd60e51b81526004016101d990611dc7565b610c7f88611327565b610c8888611340565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388161790558315610d0057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610cf790600190611dfa565b60405180910390a15b5050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d4381611043565b6108da838361104d565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610b00565b5f610d81600130611e1c565b9050610d8b610adc565b6001600160a01b0316336001600160a01b03161480610db25750336001600160a01b038216145b610dce5760405162461bcd60e51b81526004016101d990611e71565b610dd6610f88565b5f610de18342611e81565b90505f84604051602001610df59190611c30565b60408051601f1981840301815291815281516020928301205f8181529283905291205490915015610e385760405162461bcd60e51b81526004016101d990611eec565b5f81815260208181526040822084905560019190610e589088018861180f565b6001600160a01b0316815260208101919091526040015f90812090610e836080880160608901611efc565b63ffffffff1681526020808201929092526040015f9081208054600181018255908252919020869160040201610eb9828261230f565b50505050505050565b610eca611229565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255610f1b610adc565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f610f5e81611043565b6108357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361104d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610fe4576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0381165f908152600260205260408120805467ffffffffffffffff1691600191906110188385612319565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b61099281336113b8565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f1575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106ec565b5f9150506106ec565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f1575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556111733390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106ec565b6111c5611436565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405161121e91906118bc565b60405180910390a150565b33611232610adc565b6001600160a01b031614610fe4573360405163118cdaa760e01b81526004016101d991906118bc565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff191681556112a082611491565b5050565b6112ac610f88565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611211565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006106ec565b61132f61150e565b6113388161154c565b61099261155d565b61134861150e565b61135061155d565b61135861155d565b6113625f826110fa565b5061138d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826110fa565b506112a07f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a826110fa565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166112a05780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016101d992919061233d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610fe4576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611516611565565b610fe4576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155461150e565b61099281611583565b610fe461150e565b5f61156e6112ff565b5468010000000000000000900460ff16919050565b61158b61150e565b6001600160a01b038116610aa1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101d991906118bc565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016106ec816115cd565b805b82525050565b602081016106ec8284611611565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610992575f5ffd5b80356106ec81611627565b5f60208284031215611673576116735f5ffd5b6108908383611655565b801515611613565b602081016106ec828461167d565b67ffffffffffffffff811661164b565b80356106ec81611693565b63ffffffff811661164b565b80356106ec816116ae565b5f5f83601f8401126116d8576116d85f5ffd5b50813567ffffffffffffffff8111156116f2576116f25f5ffd5b60208301915083600182028301111561170c5761170c5f5ffd5b9250929050565b60ff811661164b565b80356106ec81611713565b5f5f5f5f5f6080868803121561173e5761173e5f5ffd5b61174887876116a3565b945061175787602088016116ba565b9350604086013567ffffffffffffffff811115611775576117755f5ffd5b611781888289016116c5565b9350935050611793876060880161171c565b90509295509295909350565b67ffffffffffffffff8116611613565b602081016106ec828461179f565b8061164b565b80356106ec816117bd565b5f602082840312156117e1576117e15f5ffd5b61089083836117c3565b5f6001600160a01b0382166106ec565b61164b816117eb565b80356106ec816117fb565b5f60208284031215611822576118225f5ffd5b6108908383611804565b5f60c0828403121561183f5761183f5f5ffd5b50919050565b5f60208284031215611858576118585f5ffd5b813567ffffffffffffffff811115611871576118715f5ffd5b610b588482850161182c565b5f5f60408385031215611891576118915f5ffd5b61189b84846117c3565b91506118aa8460208501611804565b90509250929050565b611613816117eb565b602081016106ec82846118b3565b5f5f5f606084860312156118df576118df5f5ffd5b6118e98585611804565b92506118f88560208601611804565b91506119078560408601611804565b90509250925092565b5f5f60408385031215611924576119245f5ffd5b823567ffffffffffffffff81111561193d5761193d5f5ffd5b6119498582860161182c565b9250506118aa84602085016117c3565b80516106ec816117bd565b5f60208284031215611977576119775f5ffd5b6108908383611959565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016106ec81611981565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec816119eb565b63ffffffff8116611613565b82818337505f910152565b818352602083019250611a7e828483611a5f565b50601f01601f19160190565b60ff8116611613565b60c08101611aa1828a6118b3565b611aae602083018961179f565b611abb604083018861179f565b611ac86060830187611a53565b8181036080830152611adb818587611a6a565b9050611aea60a0830184611a8a565b98975050505050505050565b505f6106ec6020830183611804565b505f6106ec60208301836116a3565b505f6106ec60208301836116ba565b5f808335601e1936859003018112611b3c57611b3c5f5ffd5b830160208101925035905067ffffffffffffffff811115611b5e57611b5e5f5ffd5b3681900382131561170c5761170c5f5ffd5b505f6106ec602083018361171c565b5f60c08301611b8e8380611af6565b611b9885826118b3565b50611ba66020840184611b05565b611bb3602086018261179f565b50611bc16040840184611b05565b611bce604086018261179f565b50611bdc6060840184611b14565b611be96060860182611a53565b50611bf76080840184611b23565b8583036080870152611c0a838284611a6a565b92505050611c1b60a0840184611b70565b611c2860a0860182611a8a565b509392505050565b602080825281016108908184611b7f565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec81611c41565b60348152602081017f556e72656e6f756e6361626c654f776e61626c6532537465703a2063616e6e6f81527f742072656e6f756e6365206f776e657273686970000000000000000000000000602082015290506119d5565b602080825281016106ec81611ca9565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290506115fb565b602080825281016106ec81611d11565b601a8152602081017f4665657320616464726573732063616e6e6f7420626520307830000000000000815290506115fb565b602080825281016106ec81611d53565b60148152602081017f43616c6c65722063616e6e6f7420626520307830000000000000000000000000815290506115fb565b602080825281016106ec81611d95565b5f6106ec82611de4565b90565b67ffffffffffffffff1690565b61161381611dd7565b602081016106ec8284611df1565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b039182169190811690828203908111156106ec576106ec611e08565b60118152602081017f4e6f74206f776e6572206f722073656c66000000000000000000000000000000815290506115fb565b602080825281016106ec81611e3f565b808201808211156106ec576106ec611e08565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec81611e94565b5f60208284031215611f0f57611f0f5f5ffd5b61089083836116ba565b5f81356106ec816117fb565b5f6001600160a01b03835b81169019929092169190911792915050565b5f6106ec826117eb565b5f6106ec82611f42565b611f5f82611f4c565b611f6a818354611f25565b8255505050565b5f81356106ec81611693565b5f7bffffffffffffffff0000000000000000000000000000000000000000611f308460a01b90565b5f6106ec67ffffffffffffffff8316611de4565b611fc282611fa5565b611f6a818354611f7d565b5f67ffffffffffffffff83611f30565b611fe682611fa5565b611f6a818354611fcd565b5f81356106ec816116ae565b5f6bffffffff0000000000000000611f308460401b90565b5f63ffffffff82166106ec565b61202b82612015565b611f6a818354611ffd565b5f808335601e193685900301811261204f5761204f5f5ffd5b8301915050803567ffffffffffffffff81111561206d5761206d5f5ffd5b60208201915060018102360382131561170c5761170c5f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806120c357607f821691505b60208210810361183f5761183f61209b565b5f6106ec611de18381565b6120e9836120d5565b81545f1960089490940293841b1916921b91909117905550565b5f6108358184846120e0565b818110156112a0576121215f82612103565b60010161210f565b601f821115610835575f818152602090206020601f8501048101602085101561214f5750805b6121616020601f86010483018261210f565b5050505050565b8267ffffffffffffffff81111561218157612181612087565b61218b82546120af565b612196828285612129565b505f601f8211600181146121c8575f83156121b15750848201355b5f19600885021c198116600285021785555061221f565b5f84815260208120601f198516915b828110156121f757878501358255602094850194600190920191016121d7565b5084821015612213575f196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b610835838383612168565b5f81356106ec81611713565b5f60ff82166106ec565b6122518261223e565b815460ff191660ff821617611f6a565b80828061226d81611f19565b90506122798184611f56565b5050602083018061228982611f71565b90506122958184611fb9565b5050506001810160408301806122aa82611f71565b90506122b68184611fdd565b505060608301806122c682611ff1565b90506122d28184612022565b5050506122e26080830183612036565b6122f0818360028601612227565b505060a082018061230082612232565b90506108da8160038501612248565b6112a08282612261565b67ffffffffffffffff9182169190811690828201908111156106ec576106ec611e08565b6040810161234b82856118b3565b610890602083018461161156fea26469706673582212208d51b6207dd91342eb4b0b8605ca9e65484b17f0f577adbadd9fa3686a45d8dd64736f6c634300081c0033",
}
// MessageBusABI is the input ABI used to generate the binding from.
diff --git a/contracts/generated/SystemDeployerPhase2/SystemDeployerPhase2.go b/contracts/generated/SystemDeployerPhase2/SystemDeployerPhase2.go
index a39a1a18e0..95213f7729 100644
--- a/contracts/generated/SystemDeployerPhase2/SystemDeployerPhase2.go
+++ b/contracts/generated/SystemDeployerPhase2/SystemDeployerPhase2.go
@@ -32,7 +32,7 @@ var (
// SystemDeployerPhase2MetaData contains all meta data concerning the SystemDeployerPhase2 contract.
var SystemDeployerPhase2MetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"eoaAdmin\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"feesAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"remoteBridgeAddress\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"contractAddress\",\"type\":\"address\"}],\"name\":\"SystemContractDeployed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"deployedContracts\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"messageBus\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"crossChainMessenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"ethereumBridge\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tenSystemCalls\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]",
- Bin: "0x608060405234801561000f575f5ffd5b5060405161a1ff38038061a1ff83398101604081905261002e916104df565b6001600160a01b03831661005d5760405162461bcd60e51b815260040161005490610559565b60405180910390fd5b6001600160a01b0382166100835760405162461bcd60e51b81526004016100549061059b565b6001600160a01b0381166100a95760405162461bcd60e51b8152600401610054906105dd565b6100b38383610159565b5f80546001600160a01b0319166001600160a01b039290921691821790556100dc908490610219565b600180546001600160a01b0319166001600160a01b03929092169182179055610107908490836102c2565b600280546001600160a01b0319166001600160a01b039290921691909117905561013083610395565b600380546001600160a01b0319166001600160a01b039290921691909117905550610792915050565b5f5f6040516101679061046d565b604051809103905ff080158015610180573d5f5f3e3d5ffd5b5090505f63c0c53b8b60e01b8586866040516024016101a1939291906105fc565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f6101e883878461042d60201b60201c565b90505f51602061a1df5f395f51905f5281604051610206919061064b565b60405180910390a1925050505b92915050565b5f5f6040516102279061047a565b604051809103905ff080158015610240573d5f5f3e3d5ffd5b5090505f63c4d66de860e01b8460405160240161025d919061066a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f6102a483878461042d60201b60201c565b90505f51602061a1df5f395f51905f528160405161020691906106aa565b5f5f6040516102d090610487565b604051809103905ff0801580156102e9573d5f5f3e3d5ffd5b5090505f63c0c53b8b60e01b858573100000000000000000000000000000000000004260405160240161031e939291906105fc565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f61036583888461042d60201b60201c565b90505f51602061a1df5f395f51905f528160405161038391906106dd565b60405180910390a19695505050505050565b5f5f6040516103a390610494565b604051809103905ff0801580156103bc573d5f5f3e3d5ffd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250905f906103ff9084908790859061042d16565b90505f51602061a1df5f395f51905f528160405161041d9190610710565b60405180910390a1949350505050565b5f5f84848460405161043e906104a1565b61044a9392919061075c565b604051809103905ff080158015610463573d5f5f3e3d5ffd5b5095945050505050565b61249f8061087083390190565b611d3580612d0f83390190565b61427280614a4483390190565b61035580618cb683390190565b6111d48061900b83390190565b5f6001600160a01b038216610213565b6104c7816104ae565b81146104d1575f5ffd5b50565b8051610213816104be565b5f5f5f606084860312156104f4576104f45f5ffd5b6104fe85856104d4565b925061050d85602086016104d4565b915061051c85604086016104d4565b90509250925092565b60198152602081017f496e76616c696420454f412061646d696e206164647265737300000000000000815290505b60200190565b6020808252810161021381610525565b60148152602081017f496e76616c69642066656573206164647265737300000000000000000000000081529050610553565b6020808252810161021381610569565b601d8152602081017f496e76616c69642072656d6f746520627269646765206164647265737300000081529050610553565b60208082528101610213816105ab565b6105f6816104ae565b82525050565b6060810161060a82866105ed565b61061760208301856105ed565b61062460408301846105ed565b949350505050565b600a815260208101694d65737361676542757360b01b81529050610553565b6040808252810161065b8161062c565b905061021360208301846105ed565b6020810161021382846105ed565b60138152602081017f43726f7373436861696e4d657373656e6765720000000000000000000000000081529050610553565b6040808252810161065b81610678565b600e8152602081016d457468657265756d42726964676560901b81529050610553565b6040808252810161065b816106ba565b600e8152602081016d54656e53797374656d43616c6c7360901b81529050610553565b6040808252810161065b816106ed565b8281835e505f910152565b5f610734825190565b80845260208401935061074b818560208601610720565b601f01601f19169290920192915050565b6060810161076a82866105ed565b61077760208301856105ed565b8181036040830152610789818461072b565b95945050505050565b60d28061079e5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063c54a958814602a575b5f5ffd5b5f54600154600254600354605b9373ffffffffffffffffffffffffffffffffffffffff908116938116928116911684565b6040805173ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015291841683830152909216606082015290519081900360800190f3fea2646970667358221220ce88f57fcc3af048ce924a6c20a4245534f4de8a3937dae7f5ec281246c8e96264736f6c634300081c0033608060405234801561000f575f5ffd5b50610018610025565b610020610025565b610104565b5f61002e6100c5565b805490915068010000000000000000900460ff16156100605760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100c25780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b9916100ef565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e9565b61238e806101115f395ff3fe6080604052600436106101b5575f3560e01c806379ba5097116100eb578063d547741f11610089578063ea4cf97011610063578063ea4cf97014610541578063f2fde38b14610560578063f865af081461057f578063fb1bb9de1461059e576101b5565b8063d547741f146104db578063e30c3978146104fa578063e63ab1e91461050e576101b5565b806391643fdd116100c557806391643fdd1461042757806391d1485414610446578063a217fddf146104a9578063c0c53b8b146104bc576101b5565b806379ba5097146103de5780638456cb59146103f25780638da5cb5b14610406576101b5565b806332968782116101585780635c975abb116101325780635c975abb146103565780636c11c21c1461038c578063715018a6146103ab5780637920c986146103bf576101b5565b8063329687821461030457806336568abe146103235780633f4ba83a14610342576101b5565b8063248a9ca311610194578063248a9ca3146102585780632540e2da146102a55780632e1a0b8e146102c65780632f2ff15d146102e5576101b5565b8062a1b815146101e257806301ffc9a71461020c5780630d3fd67c14610238575b3480156101c0575f5ffd5b5060405162461bcd60e51b81526004016101d990611601565b60405180910390fd5b3480156101ed575f5ffd5b506101f66105d1565b6040516102039190611619565b60405180910390f35b348015610217575f5ffd5b5061022b610226366004611660565b61065a565b6040516102039190611685565b61024b610246366004611727565b6106f2565b60405161020391906117af565b348015610263575f5ffd5b506101f66102723660046117ce565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156102b0575f5ffd5b506102c46102bf36600461180f565b610801565b005b3480156102d1575f5ffd5b506101f66102e0366004611845565b61083a565b3480156102f0575f5ffd5b506102c46102ff36600461187d565b610897565b34801561030f575f5ffd5b506102c461031e36600461180f565b6108e0565b34801561032e575f5ffd5b506102c461033d36600461187d565b610914565b34801561034d575f5ffd5b506102c4610960565b348015610361575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661022b565b348015610397575f5ffd5b506102c46103a636600461180f565b610995565b3480156103b6575f5ffd5b506102c46109c9565b3480156103ca575f5ffd5b506102c46103d936600461180f565b6109e9565b3480156103e9575f5ffd5b506102c4610a6e565b3480156103fd575f5ffd5b506102c4610aaa565b348015610411575f5ffd5b5061041a610adc565b60405161020391906118bc565b348015610432575f5ffd5b5061022b610441366004611845565b610b10565b348015610451575f5ffd5b5061022b61046036600461187d565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104b4575f5ffd5b506101f65f81565b3480156104c7575f5ffd5b506102c46104d63660046118ca565b610b60565b3480156104e6575f5ffd5b506102c46104f536600461187d565b610d0a565b348015610505575f5ffd5b5061041a610d4d565b348015610519575f5ffd5b506101f67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561054c575f5ffd5b506102c461055b366004611910565b610d75565b34801561056b575f5ffd5b506102c461057a36600461180f565b610ec2565b34801561058a575f5ffd5b506102c461059936600461180f565b610f54565b3480156105a9575f5ffd5b506101f67f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610631573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106559190611964565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106ec57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106fb610f88565b6003546001600160a01b0316156107aa575f6107156105d1565b9050803410156107375760405162461bcd60e51b81526004016101d9906119db565b6003546040515f916001600160a01b03169083908381818185875af1925050503d805f8114610781576040519150601f19603f3d011682016040523d82523d5f602084013e610786565b606091505b50509050806107a75760405162461bcd60e51b81526004016101d990611a43565b50505b6107b333610fe6565b90507fd3cfd274dfddb1195699ee44f0ba7aaabf97e75965b5191c2c0bd56776ff2061338288888888886040516107f09796959493929190611a93565b60405180910390a195945050505050565b5f61080b81611043565b6108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361104d565b505050565b5f5f8260405160200161084d9190611c30565b60408051601f1981840301815291815281516020928301205f81815292839052912054909150806108905760405162461bcd60e51b81526004016101d990611c99565b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108d081611043565b6108da83836110fa565b50505050565b5f6108ea81611043565b6108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836110fa565b6001600160a01b0381163314610956576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610835828261104d565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a61098a81611043565b6109926111bd565b50565b5f61099f81611043565b6108357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836110fa565b6109d1611229565b60405162461bcd60e51b81526004016101d990611d01565b5f6109f381611043565b6001600160a01b038216610a195760405162461bcd60e51b81526004016101d990611d43565b610a437f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a3361104d565b506108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836110fa565b3380610a78610d4d565b6001600160a01b031614610aa1578060405163118cdaa760e01b81526004016101d991906118bc565b6109928161125b565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ad481611043565b6109926112a4565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f5f82604051602001610b239190611c30565b60408051601f1981840301815291815281516020928301205f818152928390529120549091508015801590610b585750428111155b949350505050565b5f610b696112ff565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610b955750825b90505f8267ffffffffffffffff166001148015610bb15750303b155b905081158015610bbf575080155b15610bf6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c2a57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038616610c505760405162461bcd60e51b81526004016101d990611d85565b6001600160a01b038816610c765760405162461bcd60e51b81526004016101d990611dc7565b610c7f88611327565b610c8888611340565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388161790558315610d0057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610cf790600190611dfa565b60405180910390a15b5050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d4381611043565b6108da838361104d565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610b00565b5f610d81600130611e1c565b9050610d8b610adc565b6001600160a01b0316336001600160a01b03161480610db25750336001600160a01b038216145b610dce5760405162461bcd60e51b81526004016101d990611e71565b610dd6610f88565b5f610de18342611e81565b90505f84604051602001610df59190611c30565b60408051601f1981840301815291815281516020928301205f8181529283905291205490915015610e385760405162461bcd60e51b81526004016101d990611eec565b5f81815260208181526040822084905560019190610e589088018861180f565b6001600160a01b0316815260208101919091526040015f90812090610e836080880160608901611efc565b63ffffffff1681526020808201929092526040015f9081208054600181018255908252919020869160040201610eb9828261230f565b50505050505050565b610eca611229565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255610f1b610adc565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f610f5e81611043565b6108357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361104d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610fe4576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0381165f908152600260205260408120805467ffffffffffffffff1691600191906110188385612319565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b61099281336113b8565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f1575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106ec565b5f9150506106ec565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f1575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556111733390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106ec565b6111c5611436565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405161121e91906118bc565b60405180910390a150565b33611232610adc565b6001600160a01b031614610fe4573360405163118cdaa760e01b81526004016101d991906118bc565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff191681556112a082611491565b5050565b6112ac610f88565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611211565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006106ec565b61132f61150e565b6113388161154c565b61099261155d565b61134861150e565b61135061155d565b61135861155d565b6113625f826110fa565b5061138d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826110fa565b506112a07f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a826110fa565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166112a05780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016101d992919061233d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610fe4576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611516611565565b610fe4576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155461150e565b61099281611583565b610fe461150e565b5f61156e6112ff565b5468010000000000000000900460ff16919050565b61158b61150e565b6001600160a01b038116610aa1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101d991906118bc565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016106ec816115cd565b805b82525050565b602081016106ec8284611611565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610992575f5ffd5b80356106ec81611627565b5f60208284031215611673576116735f5ffd5b6108908383611655565b801515611613565b602081016106ec828461167d565b67ffffffffffffffff811661164b565b80356106ec81611693565b63ffffffff811661164b565b80356106ec816116ae565b5f5f83601f8401126116d8576116d85f5ffd5b50813567ffffffffffffffff8111156116f2576116f25f5ffd5b60208301915083600182028301111561170c5761170c5f5ffd5b9250929050565b60ff811661164b565b80356106ec81611713565b5f5f5f5f5f6080868803121561173e5761173e5f5ffd5b61174887876116a3565b945061175787602088016116ba565b9350604086013567ffffffffffffffff811115611775576117755f5ffd5b611781888289016116c5565b9350935050611793876060880161171c565b90509295509295909350565b67ffffffffffffffff8116611613565b602081016106ec828461179f565b8061164b565b80356106ec816117bd565b5f602082840312156117e1576117e15f5ffd5b61089083836117c3565b5f6001600160a01b0382166106ec565b61164b816117eb565b80356106ec816117fb565b5f60208284031215611822576118225f5ffd5b6108908383611804565b5f60c0828403121561183f5761183f5f5ffd5b50919050565b5f60208284031215611858576118585f5ffd5b813567ffffffffffffffff811115611871576118715f5ffd5b610b588482850161182c565b5f5f60408385031215611891576118915f5ffd5b61189b84846117c3565b91506118aa8460208501611804565b90509250929050565b611613816117eb565b602081016106ec82846118b3565b5f5f5f606084860312156118df576118df5f5ffd5b6118e98585611804565b92506118f88560208601611804565b91506119078560408601611804565b90509250925092565b5f5f60408385031215611924576119245f5ffd5b823567ffffffffffffffff81111561193d5761193d5f5ffd5b6119498582860161182c565b9250506118aa84602085016117c3565b80516106ec816117bd565b5f60208284031215611977576119775f5ffd5b6108908383611959565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016106ec81611981565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec816119eb565b63ffffffff8116611613565b82818337505f910152565b818352602083019250611a7e828483611a5f565b50601f01601f19160190565b60ff8116611613565b60c08101611aa1828a6118b3565b611aae602083018961179f565b611abb604083018861179f565b611ac86060830187611a53565b8181036080830152611adb818587611a6a565b9050611aea60a0830184611a8a565b98975050505050505050565b505f6106ec6020830183611804565b505f6106ec60208301836116a3565b505f6106ec60208301836116ba565b5f808335601e1936859003018112611b3c57611b3c5f5ffd5b830160208101925035905067ffffffffffffffff811115611b5e57611b5e5f5ffd5b3681900382131561170c5761170c5f5ffd5b505f6106ec602083018361171c565b5f60c08301611b8e8380611af6565b611b9885826118b3565b50611ba66020840184611b05565b611bb3602086018261179f565b50611bc16040840184611b05565b611bce604086018261179f565b50611bdc6060840184611b14565b611be96060860182611a53565b50611bf76080840184611b23565b8583036080870152611c0a838284611a6a565b92505050611c1b60a0840184611b70565b611c2860a0860182611a8a565b509392505050565b602080825281016108908184611b7f565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec81611c41565b60348152602081017f556e72656e6f756e6361626c654f776e61626c6532537465703a2063616e6e6f81527f742072656e6f756e6365206f776e657273686970000000000000000000000000602082015290506119d5565b602080825281016106ec81611ca9565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290506115fb565b602080825281016106ec81611d11565b601a8152602081017f4665657320616464726573732063616e6e6f7420626520307830000000000000815290506115fb565b602080825281016106ec81611d53565b60148152602081017f43616c6c65722063616e6e6f7420626520307830000000000000000000000000815290506115fb565b602080825281016106ec81611d95565b5f6106ec82611de4565b90565b67ffffffffffffffff1690565b61161381611dd7565b602081016106ec8284611df1565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b039182169190811690828203908111156106ec576106ec611e08565b60118152602081017f4e6f74206f776e6572206f722073656c66000000000000000000000000000000815290506115fb565b602080825281016106ec81611e3f565b808201808211156106ec576106ec611e08565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec81611e94565b5f60208284031215611f0f57611f0f5f5ffd5b61089083836116ba565b5f81356106ec816117fb565b5f6001600160a01b03835b81169019929092169190911792915050565b5f6106ec826117eb565b5f6106ec82611f42565b611f5f82611f4c565b611f6a818354611f25565b8255505050565b5f81356106ec81611693565b5f7bffffffffffffffff0000000000000000000000000000000000000000611f308460a01b90565b5f6106ec67ffffffffffffffff8316611de4565b611fc282611fa5565b611f6a818354611f7d565b5f67ffffffffffffffff83611f30565b611fe682611fa5565b611f6a818354611fcd565b5f81356106ec816116ae565b5f6bffffffff0000000000000000611f308460401b90565b5f63ffffffff82166106ec565b61202b82612015565b611f6a818354611ffd565b5f808335601e193685900301811261204f5761204f5f5ffd5b8301915050803567ffffffffffffffff81111561206d5761206d5f5ffd5b60208201915060018102360382131561170c5761170c5f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806120c357607f821691505b60208210810361183f5761183f61209b565b5f6106ec611de18381565b6120e9836120d5565b81545f1960089490940293841b1916921b91909117905550565b5f6108358184846120e0565b818110156112a0576121215f82612103565b60010161210f565b601f821115610835575f818152602090206020601f8501048101602085101561214f5750805b6121616020601f86010483018261210f565b5050505050565b8267ffffffffffffffff81111561218157612181612087565b61218b82546120af565b612196828285612129565b505f601f8211600181146121c8575f83156121b15750848201355b5f19600885021c198116600285021785555061221f565b5f84815260208120601f198516915b828110156121f757878501358255602094850194600190920191016121d7565b5084821015612213575f196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b610835838383612168565b5f81356106ec81611713565b5f60ff82166106ec565b6122518261223e565b815460ff191660ff821617611f6a565b80828061226d81611f19565b90506122798184611f56565b5050602083018061228982611f71565b90506122958184611fb9565b5050506001810160408301806122aa82611f71565b90506122b68184611fdd565b505060608301806122c682611ff1565b90506122d28184612022565b5050506122e26080830183612036565b6122f0818360028601612227565b505060a082018061230082612232565b90506108da8160038501612248565b6112a08282612261565b67ffffffffffffffff9182169190811690828201908111156106ec576106ec611e08565b6040810161234b82856118b3565b610890602083018461161156fea2646970667358221220ada43b7b5ee6ddf5df5c074a4bf5d5e5ef0fa081008ffacb387be3c6a0d32c0c64736f6c634300081c00336080604052348015600e575f5ffd5b50611d198061001c5f395ff3fe608060405234801561000f575f5ffd5b50600436106101a5575f3560e01c80636c11c21c116100e8578063a217fddf11610093578063d547741f1161006e578063d547741f14610409578063e63ab1e91461041c578063f865af0814610443578063fb1bb9de14610456575f5ffd5b8063a217fddf146103dc578063b859ce83146103e3578063c4d66de8146103f6575f5ffd5b80638456cb59116100c35780638456cb591461036d57806391d1485414610375578063a1a227fa146103cc575f5ffd5b80636c11c21c14610328578063772c65521461033b5780637920c9861461035a575f5ffd5b80633f4ba83a11610153578063530c1e401161012e578063530c1e401461029c5780635b76f28b146102be5780635c975abb146102de57806363012de514610308575f5ffd5b80633f4ba83a1461026e5780634c81bd20146102765780635067627214610289575f5ffd5b80632f2ff15d116101835780632f2ff15d14610235578063329687821461024857806336568abe1461025b575f5ffd5b806301ffc9a7146101a9578063248a9ca3146101d25780632540e2da14610220575b5f5ffd5b6101bc6101b7366004611381565b61047d565b6040516101c991906113a8565b60405180910390f35b6102136101e03660046113c7565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040516101c991906113ea565b61023361022e36600461141c565b610515565b005b610233610243366004611439565b61054e565b61023361025636600461141c565b610597565b610233610269366004611439565b6105cb565b610233610617565b610233610284366004611488565b61064c565b610233610297366004611516565b610797565b6101bc6102aa3660046113c7565b60036020525f908152604090205460ff1681565b6102d16102cc3660046115e0565b6108de565b6040516101c99190611671565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bc565b60015461031b906001600160a01b031681565b6040516101c9919061168b565b61023361033636600461141c565b61095e565b5f5461034d906001600160a01b031681565b6040516101c991906116b6565b61023361036836600461141c565b610992565b610233610a17565b6101bc610383366004611439565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f546001600160a01b031661031b565b6102135f81565b60025461031b906001600160a01b031681565b61023361040436600461141c565b610a49565b610233610417366004611439565b610ba8565b6102137f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023361045136600461141c565b610beb565b6102137f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061050f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f61051f81610c1f565b6105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610c29565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461058781610c1f565b6105918383610cd6565b50505050565b5f6105a181610c1f565b6105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610cd6565b6001600160a01b038116331461060d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105498282610c29565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a61064181610c1f565b610649610d99565b50565b610654610e05565b61065c610e63565b61066581610ec6565b610672602082018261141c565b600180546001600160a01b0319166001600160a01b03929092169190911790555f6106a060808301836116c4565b8101906106ad9190611887565b8051600280546001600160a01b0319166001600160a01b0390921691821790559091505f9081905a84602001516040516106e791906118e0565b5f604051808303815f8787f1925050503d805f8114610721576040519150601f19603f3d011682016040523d82523d5f602084013e610726565b606091505b509150915081610754578060405163a5fa8d2b60e01b815260040161074b9190611671565b60405180910390fd5b5050600180546001600160a01b031990811682556002805490911690557f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00555050565b61079f610e05565b6107a7610e63565b6107b384848484611003565b6107c0602085018561141c565b600180546001600160a01b0319166001600160a01b03929092169190911790555f6107ee60808601866116c4565b8101906107fb9190611887565b8051600280546001600160a01b0319166001600160a01b0390921691821790559091505f9081905a846020015160405161083591906118e0565b5f604051808303815f8787f1925050503d805f811461086f576040519150601f19603f3d011682016040523d82523d5f602084013e610874565b606091505b509150915081610899578060405163a5fa8d2b60e01b815260040161074b9190611671565b5050600180546001600160a01b031990811682556002805490911690557f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005550610591565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250938552505050602091820152604051610945929101611932565b60405160208183030381529060405290505b9392505050565b5f61096881610c1f565b6105497f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83610cd6565b5f61099c81610c1f565b6001600160a01b0382166109c25760405162461bcd60e51b815260040161074b90611977565b6109ec7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a33610c29565b506105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610cd6565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a4181610c1f565b6106496110f4565b5f610a5261114f565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610a7e5750825b90505f8267ffffffffffffffff166001148015610a9a5750303b155b905081158015610aa8575080155b15610adf576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b1357845468ff00000000000000001916680100000000000000001785555b610b1b611177565b6001600160a01b038616610b2d575f5ffd5b610b3633611187565b5f80546001600160a01b0319166001600160a01b0388161790558315610ba057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b97906001906119a1565b60405180910390a15b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610be181610c1f565b6105918383610c29565b5f610bf581610c1f565b6105497f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83610c29565b6106498133611203565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615610ccd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061050f565b5f91505061050f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16610ccd575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610d4f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061050f565b610da1611281565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051610dfa919061168b565b60405180910390a150565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610e61576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901610ec0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b5f546040517f91643fdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906391643fdd90610f0e908490600401611b6c565b602060405180830381865afa158015610f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4d9190611b90565b610f695760405162461bcd60e51b815260040161074b90611bdf565b5f81604051602001610f7b9190611b6c565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1615610fc25760405162461bcd60e51b815260040161074b90611c21565b5f908152600360205260409020805460ff1916600117905550565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f546040517fce0d7db30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063ce0d7db390611051908790879087908790600401611c8a565b5f6040518083038186803b158015611067575f5ffd5b505afa158015611079573d5f5f3e3d5ffd5b505050505f8460405160200161108f9190611b6c565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff16156110d65760405162461bcd60e51b815260040161074b90611c21565b5f908152600360205260409020805460ff1916600117905550505050565b6110fc610e05565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ded565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061050f565b61117f6112dc565b610e6161131a565b61118f6112dc565b611197611322565b61119f611322565b6111a95f82610cd6565b506111d47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610cd6565b506111ff7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a82610cd6565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166111ff5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161074b929190611cc8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610e61576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e461132a565b610e61576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fdd6112dc565b610e616112dc565b5f61133361114f565b5468010000000000000000900460ff16919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610649575f5ffd5b803561050f81611348565b5f60208284031215611394576113945f5ffd5b6109578383611376565b8015155b82525050565b6020810161050f828461139e565b8061136c565b803561050f816113b6565b5f602082840312156113da576113da5f5ffd5b61095783836113bc565b806113a2565b6020810161050f82846113e4565b5f6001600160a01b03821661050f565b61136c816113f8565b803561050f81611408565b5f6020828403121561142f5761142f5f5ffd5b6109578383611411565b5f5f6040838503121561144d5761144d5f5ffd5b61145784846113bc565b91506114668460208501611411565b90509250929050565b5f60c08284031215611482576114825f5ffd5b50919050565b5f6020828403121561149b5761149b5f5ffd5b813567ffffffffffffffff8111156114b4576114b45f5ffd5b6114c08482850161146f565b949350505050565b5f5f83601f8401126114db576114db5f5ffd5b50813567ffffffffffffffff8111156114f5576114f55f5ffd5b60208301915083602082028301111561150f5761150f5f5ffd5b9250929050565b5f5f5f5f6060858703121561152c5761152c5f5ffd5b843567ffffffffffffffff811115611545576115455f5ffd5b6115518782880161146f565b945050602085013567ffffffffffffffff811115611570576115705f5ffd5b61157c878288016114c8565b935093505061158e86604087016113bc565b905092959194509250565b5f5f83601f8401126115ac576115ac5f5ffd5b50813567ffffffffffffffff8111156115c6576115c65f5ffd5b60208301915083600182028301111561150f5761150f5f5ffd5b5f5f5f604084860312156115f5576115f55f5ffd5b6115ff8585611411565b9250602084013567ffffffffffffffff81111561161d5761161d5f5ffd5b61162986828701611599565b92509250509250925092565b8281835e505f910152565b5f611649825190565b808452602084019350611660818560208601611635565b601f01601f19169290920192915050565b602080825281016109578184611640565b6113a2816113f8565b6020810161050f8284611682565b5f61050f826113f8565b5f61050f82611699565b6113a2816116a3565b6020810161050f82846116ad565b5f808335601e19368590030181126116dd576116dd5f5ffd5b8301915050803567ffffffffffffffff8111156116fb576116fb5f5ffd5b60208201915060018102360382131561150f5761150f5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff8211171561176857611768611715565b6040525050565b5f61177960405190565b90506117858282611742565b919050565b5f67ffffffffffffffff8211156117a3576117a3611715565b601f19601f83011660200192915050565b82818337505f910152565b5f6117d16117cc8461178a565b61176f565b90508281528383830111156117e7576117e75f5ffd5b6109578360208301846117b4565b5f82601f830112611807576118075f5ffd5b610957838335602085016117bf565b5f60608284031215611829576118295f5ffd5b611833606061176f565b905061183f8383611411565b8152602082013567ffffffffffffffff81111561185d5761185d5f5ffd5b611869848285016117f5565b60208301525061187c83604084016113bc565b604082015292915050565b5f6020828403121561189a5761189a5f5ffd5b813567ffffffffffffffff8111156118b3576118b35f5ffd5b6114c084828501611816565b5f6118c8825190565b6118d6818560208601611635565b9290920192915050565b61050f81836118bf565b80515f9060608401906118fd8582611682565b50602083015184820360208601526119158282611640565b915050604083015161192a60408601826113e4565b509392505050565b6020808252810161095781846118ea565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290505b60200190565b6020808252810161050f81611943565b5f67ffffffffffffffff821661050f565b6113a281611987565b6020810161050f8284611998565b505f61050f6020830183611411565b67ffffffffffffffff811661136c565b803561050f816119be565b505f61050f60208301836119ce565b67ffffffffffffffff81166113a2565b63ffffffff811661136c565b803561050f816119f8565b505f61050f6020830183611a04565b63ffffffff81166113a2565b5f808335601e1936859003018112611a4357611a435f5ffd5b830160208101925035905067ffffffffffffffff811115611a6557611a655f5ffd5b3681900382131561150f5761150f5f5ffd5b818352602083019250611a8b8284836117b4565b50601f01601f19160190565b60ff811661136c565b803561050f81611a97565b505f61050f6020830183611aa0565b60ff81166113a2565b5f60c08301611ad283806119af565b611adc8582611682565b50611aea60208401846119d9565b611af760208601826119e8565b50611b0560408401846119d9565b611b1260408601826119e8565b50611b206060840184611a0f565b611b2d6060860182611a1e565b50611b3b6080840184611a2a565b8583036080870152611b4e838284611a77565b92505050611b5f60a0840184611aab565b61192a60a0860182611aba565b602080825281016109578184611ac3565b80151561136c565b805161050f81611b7d565b5f60208284031215611ba357611ba35f5ffd5b6109578383611b85565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050611971565b6020808252810161050f81611bad565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e0000000000000081529050611971565b6020808252810161050f81611bef565b82818337505050565b8183526020830192505f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611c7357611c735f5ffd5b602083029250611c84838584611c31565b50500190565b60608082528101611c9b8187611ac3565b90508181036020830152611cb0818587611c3a565b9050611cbf60408301846113e4565b95945050505050565b60408101611cd68285611682565b61095760208301846113e456fea264697066735822122047308d0e8c70337b56e3d96a01781953e8101bace8d71aea621a6239740d5b7264736f6c634300081c00336080604052348015600e575f5ffd5b506142568061001c5f395ff3fe60806040526004361061021b575f3560e01c80637920c9861161011c578063a381c8e2116100af578063d5c6b5041161007e578063e63ab1e911610063578063e63ab1e914610717578063f865af081461074a578063fb1bb9de1461076957610222565b8063d5c6b504146106c4578063dfde69e5146106f857610222565b8063a381c8e2146105e8578063affed0e0146105fb578063c0c53b8b14610686578063d547741f146106a557610222565b80639813c7b2116100eb5780639813c7b2146105545780639e405b711461058d578063a1a227fa146105c1578063a217fddf146105d557610222565b80637920c9861461049f57806383bece4d146104be5780638456cb59146104dd57806391d14854146104f157610222565b806332968782116101af578063458ffd631161017e5780636a175390116101635780636a175390146102b95780636c11c21c146104615780637533087a1461048057610222565b8063458ffd631461040c5780635c975abb1461042b57610222565b8063329687821461039957806336568abe146103b85780633cb747bf146103d75780633f4ba83a146103f857610222565b80631888d712116101eb5780631888d712146102f9578063248a9ca31461030e5780632540e2da1461035b5780632f2ff15d1461037a57610222565b80628d48e31461024357806301ffc9a71461028d57806307d7fb9a146102b95780630f0a9a4b146102da57610222565b3661022257005b60405162461bcd60e51b815260040161023a90612242565b60405180910390fd5b34801561024e575f5ffd5b5061027761025d366004612280565b60026020525f90815260409020546001600160a01b031681565b60405161028491906122b3565b60405180910390f35b348015610298575f5ffd5b506102ac6102a73660046122dc565b61079c565b6040516102849190612301565b3480156102c4575f5ffd5b506102cd610804565b6040516102849190612315565b3480156102e5575f5ffd5b50600354610277906001600160a01b031681565b61030c610307366004612280565b610870565b005b348015610319575f5ffd5b506102cd610328366004612334565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b348015610366575f5ffd5b5061030c610375366004612280565b610a06565b348015610385575f5ffd5b5061030c610394366004612351565b610a3f565b3480156103a4575f5ffd5b5061030c6103b3366004612280565b610a82565b3480156103c3575f5ffd5b5061030c6103d2366004612351565b610ab6565b3480156103e2575f5ffd5b506103eb610b02565b60405161028491906123a4565b348015610403575f5ffd5b5061030c610b8d565b348015610417575f5ffd5b5061030c610426366004612400565b610bc2565b348015610436575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166102ac565b34801561046c575f5ffd5b5061030c61047b366004612280565b610d43565b34801561048b575f5ffd5b5061030c61049a366004612487565b610d77565b3480156104aa575f5ffd5b5061030c6104b9366004612280565b610f66565b3480156104c9575f5ffd5b5061030c6104d83660046124b4565b610feb565b3480156104e8575f5ffd5b5061030c61114f565b3480156104fc575f5ffd5b506102ac61050b366004612351565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055f575f5ffd5b506102ac61056e366004612280565b6001600160a01b039081165f9081526020819052604090205416151590565b348015610598575f5ffd5b506102776105a7366004612280565b60016020525f90815260409020546001600160a01b031681565b3480156105cc575f5ffd5b506103eb611181565b3480156105e0575f5ffd5b506102cd5f81565b61030c6105f63660046124b4565b611201565b348015610606575f5ffd5b5060408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd00546102cd565b348015610691575f5ffd5b5061030c6106a03660046124fa565b61141a565b3480156106b0575f5ffd5b5061030c6106bf366004612351565b6115f6565b3480156106cf575f5ffd5b506103eb6106de366004612280565b5f602081905290815260409020546001600160a01b031681565b348015610703575f5ffd5b50600454610277906001600160a01b031681565b348015610722575f5ffd5b506102cd7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b348015610755575f5ffd5b5061030c610764366004612280565b611639565b348015610774575f5ffd5b506102cd7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107fe57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b5f61080d61166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610847573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612533565b905090565b610878611676565b5f34116108975760405162461bcd60e51b815260040161023a90612582565b61089f61166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108fd9190612533565b34101561091c5760405162461bcd60e51b815260040161023a906125ec565b5f61092561166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109839190612533565b90505f6109908234612629565b90505f6383bece4d60e01b5f83866040516024016109b09392919061263c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150610a00906001600160a01b03168260025f5f886116d4565b50505050565b5f610a1081611844565b610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361184e565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7881611844565b610a0083836118fb565b5f610a8c81611844565b610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836118fb565b6001600160a01b0381163314610af8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3a828261184e565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f9081527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad02851382005b546001600160a01b0316919050565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610bb781611844565b610bbf6119be565b50565b6003546001600160a01b0316610bd6611a2a565b610bf25760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b0316610c04611a4c565b6001600160a01b031614610c2a5760405162461bcd60e51b815260040161023a9061272c565b30610c33611ab4565b6001600160a01b031614610c595760405162461bcd60e51b815260040161023a90612794565b5f85858585604051610c6a90612201565b610c7794939291906127cf565b604051809103905ff080158015610c90573d5f5f3e3d5ffd5b506001600160a01b038082165f81815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600183528184208054968f169682168717905594835260029091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610d31908a9084908b908b908b908b90612800565b60405180910390a15050505050505050565b5f610d4d81611844565b610a3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836118fb565b6003546001600160a01b0316610d8b611a2a565b610da75760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b0316610db9611a4c565b6001600160a01b031614610ddf5760405162461bcd60e51b815260040161023a9061272c565b30610de8611ab4565b6001600160a01b031614610e0e5760405162461bcd60e51b815260040161023a90612794565b610e16611676565b60048054604080519283526024830181526020830180516001600160e01b03167fd0e30db000000000000000000000000000000000000000000000000000000000179052515f926001600160a01b03909216918591610e75919061287b565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b5050905080610ed55760405162461bcd60e51b815260040161023a906128b7565b600480546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163a9059cbb91610f1f9188918891016128c7565b6020604051808303815f875af1158015610f3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5f91906128f5565b5050505050565b5f610f7081611844565b6001600160a01b038216610f965760405162461bcd60e51b815260040161023a90612944565b610fc07f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a3361184e565b50610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836118fb565b6003546001600160a01b0316610fff611a2a565b61101b5760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b031661102d611a4c565b6001600160a01b0316146110535760405162461bcd60e51b815260040161023a9061272c565b3061105c611ab4565b6001600160a01b0316146110825760405162461bcd60e51b815260040161023a90612794565b61108a611676565b6001600160a01b038085165f9081526002602090815260408083205484168084529183905290912054909116806110d35760405162461bcd60e51b815260040161023a906129ac565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad9061111a90879089906004016128c7565b5f604051808303815f87803b158015611131575f5ffd5b505af1158015611143573d5f5f3e3d5ffd5b50505050505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61117981611844565b610bbf611af8565b60408051808201909152601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020909101527f3e1bb302f668bd876eab4a48b3759a1d614a1ecbcc67ee27a10c9a116878004e5f9081527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00610b7e565b611209611676565b5f82116112285760405162461bcd60e51b815260040161023a906129ee565b6004546001600160a01b039081169084160361124857610a3a8282611b53565b6001600160a01b038084165f908152602081905260409020541661127e5760405162461bcd60e51b815260040161023a90612a30565b6001600160a01b038084165f90815260208190526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906112d990339087906004016128c7565b5f604051808303815f87803b1580156112f0575f5ffd5b505af1158015611302573d5f5f3e3d5ffd5b505050506001600160a01b038481165f908152600160205260409020541661132861166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611362573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113869190612533565b3410156113a55760405162461bcd60e51b815260040161023a90612a98565b5f6383bece4d60e01b8286866040516024016113c39392919061263c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150611412906001600160a01b0316825f5f5f346116d4565b505050505050565b5f611423611d49565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f8115801561144f5750825b90505f8267ffffffffffffffff16600114801561146b5750303b155b905081158015611479575080155b156114b0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156114e457845468ff00000000000000001916680100000000000000001785555b6001600160a01b03881661150a5760405162461bcd60e51b815260040161023a90612ada565b6001600160a01b0387166115305760405162461bcd60e51b815260040161023a90612b1c565b6001600160a01b0386166115565760405162461bcd60e51b815260040161023a90612b5e565b61155f33611d71565b61156888611ded565b600380546001600160a01b03808a1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600480549289169290911691909117905583156115ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610d3190600190612b88565b5050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461162f81611844565b610a00838361184e565b5f61164381611844565b610a3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361184e565b5f61086b611181565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116d2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0386166116fa5760405162461bcd60e51b815260040161023a90612bc8565b5f6040518060600160405280886001600160a01b031681526020018781526020018581525060405160200161172f9190612c51565b6040516020818303038152906040529050611748611181565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f6117dd83612c62565b919050558885886040518663ffffffff1660e01b81526004016118039493929190612c9f565b60206040518083038185885af115801561181f573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115ec9190612cff565b610bbf8133611fee565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118f2575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107fe565b5f9150506107fe565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118f2575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107fe565b6119c661206c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611a1f91906122b3565b60405180910390a150565b5f611a33610b02565b6001600160a01b0316336001600160a01b031614905090565b5f611a55610b02565b6001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a90573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612d27565b5f611abd610b02565b6001600160a01b031663b859ce836040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a90573d5f5f3e3d5ffd5b611b00611676565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a12565b600454611b6b906001600160a01b03163330856120c7565b600480546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691632e1a7d4d91611bb391869101612315565b5f604051808303815f87803b158015611bca575f5ffd5b505af1158015611bdc573d5f5f3e3d5ffd5b505050505f611be961166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c479190612533565b9050611c54816002612d44565b341015611c735760405162461bcd60e51b815260040161023a90612db3565b30631888d712611c838386612dc3565b6003546040516001600160e01b031960e085901b168152611cb0916001600160a01b0316906004016122b3565b5f604051808303818588803b158015611cc7575f5ffd5b505af1158015611cd9573d5f5f3e3d5ffd5b50505050505f637533087a60e01b8385604051602401611cfa9291906128c7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150610a00906001600160a01b0316825f5f5f876116d4565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006107fe565b611d79612121565b611d8161215f565b611d8961215f565b611d935f826118fb565b50611dbe7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826118fb565b50611de97f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a826118fb565b5050565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad0285138200805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055611e94610b02565b6001600160a01b031663a1a227fa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef39190612d27565b604080518082018252601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020918201527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092558051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e6365000000000000910152507f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f9081527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0055565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611de95780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161023a9291906128c7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116d2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0084856001600160a01b03166323b872dd8686866040516024016120ef93929190612dd6565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612167565b6121296121e3565b6116d2576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d2612121565b5f5f60205f8451602086015f885af180612186576040513d5f823e3d81fd5b50505f513d9150811561219d5780600114156121aa565b6001600160a01b0384163b155b15610a0057836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161023a91906122b3565b5f6121ec611d49565b5468010000000000000000900460ff16919050565b61142280612dff83390190565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b602080825281016107fe8161220e565b5f6001600160a01b0382166107fe565b61226b81612252565b8114610bbf575f5ffd5b80356107fe81612262565b5f60208284031215612293576122935f5ffd5b61229d8383612275565b9392505050565b6122ad81612252565b82525050565b602081016107fe82846122a4565b6001600160e01b0319811661226b565b80356107fe816122c1565b5f602082840312156122ef576122ef5f5ffd5b61229d83836122d1565b8015156122ad565b602081016107fe82846122f9565b806122ad565b602081016107fe828461230f565b8061226b565b80356107fe81612323565b5f60208284031215612347576123475f5ffd5b61229d8383612329565b5f5f60408385031215612365576123655f5ffd5b61236f8484612329565b915061237e8460208501612275565b90509250929050565b5f6107fe82612252565b5f6107fe82612387565b6122ad81612391565b602081016107fe828461239b565b5f5f83601f8401126123c5576123c55f5ffd5b50813567ffffffffffffffff8111156123df576123df5f5ffd5b6020830191508360018202830111156123f9576123f95f5ffd5b9250929050565b5f5f5f5f5f60608688031215612417576124175f5ffd5b6124218787612275565b9450602086013567ffffffffffffffff81111561243f5761243f5f5ffd5b61244b888289016123b2565b9450945050604086013567ffffffffffffffff81111561246c5761246c5f5ffd5b612478888289016123b2565b92509250509295509295909350565b5f5f6040838503121561249b5761249b5f5ffd5b6124a58484612275565b915061237e8460208501612329565b5f5f5f606084860312156124c9576124c95f5ffd5b6124d38585612275565b92506124e28560208601612329565b91506124f18560408601612275565b90509250925092565b5f5f5f6060848603121561250f5761250f5f5ffd5b6125198585612275565b92506124e28560208601612275565b80516107fe81612323565b5f60208284031215612546576125465f5ffd5b61229d8383612528565b600d8152602081017f4e6f7468696e672073656e742e000000000000000000000000000000000000008152905061223c565b602080825281016107fe81612550565b602c8152602081017f496e73756666696369656e742066756e647320746f207075626c69736820766181527f6c7565207472616e736665720000000000000000000000000000000000000000602082015290505b60400190565b602080825281016107fe81612592565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156107fe576107fe6125fc565b6060810161264a82866122a4565b612657602083018561230f565b61266460408301846122a4565b949350505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290506125e6565b602080825281016107fe8161266c565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506125e6565b602080825281016107fe816126d4565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742074617267657421000000000000000000000000000000602082015290506125e6565b602080825281016107fe8161273c565b82818337505f910152565b8183526020830192506127c38284836127a4565b50601f01601f19160190565b604080825281016127e18186886127af565b905081810360208301526127f68184866127af565b9695505050505050565b6080810161280e82896122a4565b61281b60208301886122a4565b818103604083015261282e8186886127af565b905081810360608301526128438184866127af565b98975050505050505050565b8281835e505f910152565b5f612863825190565b61287181856020860161284f565b9290920192915050565b6107fe818361285a565b60138152602081017f57455448206465706f736974206661696c6564000000000000000000000000008152905061223c565b602080825281016107fe81612885565b604081016128d582856122a4565b61229d602083018461230f565b80151561226b565b80516107fe816128e2565b5f60208284031215612908576129085f5ffd5b61229d83836128ea565b60188152602081017f496e76616c6964206d756c7469736967206164647265737300000000000000008152905061223c565b602080825281016107fe81612912565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e21000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612954565b601e8152602081017f416d6f756e74206d7573742062652067726561746572207468616e20302e00008152905061223c565b602080825281016107fe816129bc565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000008152905061223c565b602080825281016107fe816129fe565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612a40565b60178152602081017f4d657373656e6765722063616e6e6f74206265203078300000000000000000008152905061223c565b602080825281016107fe81612aa8565b601b8152602081017f52656d6f7465206272696467652063616e6e6f742062652030783000000000008152905061223c565b602080825281016107fe81612aea565b60188152602081017f4c6f63616c20574554482063616e6e6f742062652030783000000000000000008152905061223c565b602080825281016107fe81612b2c565b5f67ffffffffffffffff82166107fe565b6122ad81612b6e565b602081016107fe8284612b7f565b60148152602081017f5461726765742063616e6e6f74206265203078300000000000000000000000008152905061223c565b602080825281016107fe81612b96565b5f612be1825190565b808452602084019350612bf881856020860161284f565b601f01601f19169290920192915050565b80515f906060840190612c1c85826122a4565b5060208301518482036020860152612c348282612bd8565b9150506040830151612c49604086018261230f565b509392505050565b6020808252810161229d8184612c09565b5f60018201612c7357612c736125fc565b5060010190565b67ffffffffffffffff81166122ad565b63ffffffff81166122ad565b60ff81166122ad565b60808101612cad8287612c7a565b612cba6020830186612c8a565b8181036040830152612ccc8185612bd8565b9050612cdb6060830184612c96565b95945050505050565b67ffffffffffffffff811661226b565b80516107fe81612ce4565b5f60208284031215612d1257612d125f5ffd5b61229d8383612cf4565b80516107fe81612262565b5f60208284031215612d3a57612d3a5f5ffd5b61229d8383612d1c565b81810281158282048414176107fe576107fe6125fc565b60228152602081017f496e73756666696369656e742066756e647320666f72207075626c697368206681527f6565000000000000000000000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612d5b565b808201808211156107fe576107fe6125fc565b60608101612de482866122a4565b612df160208301856122a4565b612664604083018461230f56fe608060405234801561000f575f5ffd5b5060405161142238038061142283398101604081905261002e9161022b565b81818181600361003e8382610378565b50600461004b8282610378565b50505050506100807fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361008860201b60201c565b505050610433565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff1661012c575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556100e43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161012f565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681016001600160401b038111828210171561016e5761016e610135565b6040525050565b5f61017f60405190565b905061018b8282610149565b919050565b5f6001600160401b038211156101a8576101a8610135565b601f19601f83011660200192915050565b8281835e505f910152565b5f6101d66101d184610190565b610175565b90508281528383830111156101ec576101ec5f5ffd5b6101fa8360208301846101b9565b9392505050565b5f82601f830112610213576102135f5ffd5b81516102238482602086016101c4565b949350505050565b5f5f6040838503121561023f5761023f5f5ffd5b82516001600160401b03811115610257576102575f5ffd5b61026385828601610201565b602085015190935090506001600160401b03811115610283576102835f5ffd5b61028f85828601610201565b9150509250929050565b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806102c157607f821691505b6020821081036102d3576102d3610299565b50919050565b5f61012f6102e48381565b90565b6102f0836102d9565b81545f1960089490940293841b1916921b91909117905550565b5f6103168184846102e7565b505050565b818110156103355761032d5f8261030a565b60010161031b565b5050565b601f821115610316575f818152602090206020601f8501048101602085101561035f5750805b6103716020601f86010483018261031b565b5050505050565b81516001600160401b0381111561039157610391610135565b61039b82546102ad565b6103a6828285610339565b506020601f8211600181146103d9575f83156103c25750848201515b5f19600885021c1981166002850217855550610371565b5f84815260208120601f198516915b8281101561040857878501518255602094850194600190920191016103e8565b508482101561042457838701515f19601f87166008021c191681555b50505050600202600101905550565b610fe2806104405f395ff3fe608060405234801561000f575f5ffd5b5060043610610149575f3560e01c806336568abe116100c7578063979005ad1161007d578063a9059cbb11610063578063a9059cbb146102c2578063d547741f146102d5578063dd62ed3e146102e8575f5ffd5b8063979005ad146102a8578063a217fddf146102bb575f5ffd5b806375b238fc116100ad57806375b238fc1461024157806391d148541461026857806395d89b41146102a0575f5ffd5b806336568abe1461021b57806370a082311461022e575f5ffd5b80631dd319cb1161011c578063248a9ca311610102578063248a9ca3146101d75780632f2ff15d146101f9578063313ce5671461020c575f5ffd5b80631dd319cb146101af57806323b872dd146101c4575f5ffd5b806301ffc9a71461014d57806306fdde0314610176578063095ea7b31461018b57806318160ddd1461019e575b5f5ffd5b61016061015b366004610c19565b6102fb565b60405161016d9190610c40565b60405180910390f35b61017e610393565b60405161016d9190610c8a565b610160610199366004610cd0565b610423565b6002545b60405161016d9190610d0c565b6101c26101bd366004610cd0565b61043a565b005b6101606101d2366004610d1a565b6104a4565b6101a26101e5366004610d60565b5f9081526005602052604090206001015490565b6101c2610207366004610d7d565b6104c9565b601260405161016d9190610db3565b6101c2610229366004610d7d565b6104f3565b6101a261023c366004610dc1565b61053f565b6101a27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610160610276366004610d7d565b5f9182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61017e6105b2565b6101c26102b6366004610cd0565b6105c1565b6101a25f81565b6101606102d0366004610cd0565b6105f5565b6101c26102e3366004610d7d565b610602565b6101a26102f6366004610dde565b610626565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061038d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103a290610e10565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce90610e10565b80156104195780601f106103f057610100808354040283529160200191610419565b820191905f5260205f20905b8154815290600101906020018083116103fc57829003601f168201915b5050505050905090565b5f336104308185856106de565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610464816106eb565b8161046e8461053f565b10156104955760405162461bcd60e51b815260040161048c90610e70565b60405180910390fd5b61049f83836106f8565b505050565b5f336104b1858285610730565b6104bc858585610794565b60019150505b9392505050565b5f828152600560205260409020600101546104e3816106eb565b6104ed83836107f1565b50505050565b6001600160a01b0381163314610535576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61049f828261089c565b5f6001600160a01b038216320361056d576001600160a01b0382165f9081526020819052604090205461038d565b6001600160a01b038216330361059a576001600160a01b0382165f9081526020819052604090205461038d565b60405162461bcd60e51b815260040161048c90610eb2565b6060600480546103a290610e10565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105eb816106eb565b61049f8383610921565b5f33610430818585610794565b5f8281526005602052604090206001015461061c816106eb565b6104ed838361089c565b5f326001600160a01b03841614806106465750326001600160a01b038316145b15610678576001600160a01b038084165f908152600160209081526040808320938616835292905220545b905061038d565b336001600160a01b03841614806106975750336001600160a01b038316145b156106c6576001600160a01b038084165f90815260016020908152604080832093861683529290522054610671565b60405162461bcd60e51b815260040161048c90610ec2565b61049f8383836001610955565b6106f58133610a57565b50565b6001600160a01b038216610721575f604051634b637e8f60e11b815260040161048c9190610f2c565b61072c825f83610ab6565b5050565b5f61073b8484610626565b90505f198110156104ed5781811015610786578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161048c93929190610f3a565b6104ed84848484035f610955565b6001600160a01b0383166107bd575f604051634b637e8f60e11b815260040161048c9190610f2c565b6001600160a01b0382166107e6575f60405163ec442f0560e01b815260040161048c9190610f2c565b61049f838383610ab6565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff16610895575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561084d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161038d565b505f61038d565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff1615610895575f8381526005602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161038d565b6001600160a01b03821661094a575f60405163ec442f0560e01b815260040161048c9190610f2c565b61072c5f8383610ab6565b6001600160a01b038416610997575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161048c9190610f2c565b6001600160a01b0383166109d9575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161048c9190610f2c565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156104ed57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a499190610d0c565b60405180910390a350505050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff1661072c5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161048c929190610f6a565b6001600160a01b038316610ae0578060025f828254610ad59190610f99565b90915550610b569050565b6001600160a01b0383165f9081526020819052604090205481811015610b38578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161048c93929190610f3a565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610b7257600280548290039055610b90565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bd39190610d0c565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106f5575f5ffd5b803561038d81610be0565b5f60208284031215610c2c57610c2c5f5ffd5b6104c28383610c0e565b8015155b82525050565b6020810161038d8284610c36565b8281835e505f910152565b5f610c62825190565b808452602084019350610c79818560208601610c4e565b601f01601f19169290920192915050565b602080825281016104c28184610c59565b5f6001600160a01b03821661038d565b610c0481610c9b565b803561038d81610cab565b80610c04565b803561038d81610cbf565b5f5f60408385031215610ce457610ce45f5ffd5b610cee8484610cb4565b9150610cfd8460208501610cc5565b90509250929050565b80610c3a565b6020810161038d8284610d06565b5f5f5f60608486031215610d2f57610d2f5f5ffd5b610d398585610cb4565b9250610d488560208601610cb4565b9150610d578560408601610cc5565b90509250925092565b5f60208284031215610d7357610d735f5ffd5b6104c28383610cc5565b5f5f60408385031215610d9157610d915f5ffd5b610d9b8484610cc5565b9150610cfd8460208501610cb4565b60ff8116610c3a565b6020810161038d8284610daa565b5f60208284031215610dd457610dd45f5ffd5b6104c28383610cb4565b5f5f60408385031215610df257610df25f5ffd5b610d9b8484610cb4565b634e487b7160e01b5f52602260045260245ffd5b600281046001821680610e2457607f821691505b602082108103610e3657610e36610dfc565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161038d81610e3c565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610e6a565b6020808252810161038d81610e80565b6020808252810161038d81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c3a81610c9b565b6020810161038d8284610f23565b60608101610f488286610f23565b610f556020830185610d06565b610f626040830184610d06565b949350505050565b60408101610f788285610f23565b6104c26020830184610d06565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038d5761038d610f8556fea2646970667358221220c04c1f9d8d1d8bd8b82a88ea0557c0b57242bedacf19dfd5dc0df24ccc04749064736f6c634300081c0033a26469706673582212203bae0b0601fb4b55b4c9b5eaa39adfed6307653c0f09a060094b5e97e5bd16e764736f6c634300081c00336080604052348015600e575f5ffd5b506103398061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80638129fc1c1461004357806381ccf4c41461004d578063dbdff2c11461006b575b5f5ffd5b61004b610073565b005b610055610194565b604051610062919061022a565b60405180910390f35b6100556101b7565b5f61007c6101f8565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156100a85750825b90505f8267ffffffffffffffff1660011480156100c45750303b155b9050811580156100d2575080155b15610109576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561013d57845468ff00000000000000001916680100000000000000001785555b831561018d57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061018490600190610252565b60405180910390a15b5050505050565b5f44600381900b6101a7426103e861028d565b6101b191906102a4565b91505090565b5f805481806101c5836102c5565b91905055446040516020016101db9291906102e3565b604051602081830303815290604052805190602001205f1c905090565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b805b82525050565b6020810161021c8284610222565b5f67ffffffffffffffff821661021c565b61022481610238565b6020810161021c8284610249565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818102811582820484141761021c5761021c610260565b8181035f831280158383131683831291909116171561021c5761021c610260565b5f600182016102d6576102d6610260565b5060010190565b80610224565b6102ed81846102dd565b6020016102fa81836102dd565b6020019291505056fea26469706673582212209a52ae85b21153d0dd44aa51c405c92d9a70c5ad49e1c49610469538e96e1b5964736f6c634300081c003360a06040526040516111d43803806111d48339810160408190526100229161043b565b828161002e8282610086565b50508160405161003d90610311565b61004791906104ac565b604051809103905ff080158015610060573d5f5f3e3d5ffd5b506001600160a01b031660805261007e61007960805190565b6100e4565b505050610500565b61008f82610146565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156100d8576100d382826101bf565b505050565b6100e0610234565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6101235f5160206111b45f395f51905f52546001600160a01b031690565b826040516101329291906104ba565b60405180910390a161014381610255565b50565b806001600160a01b03163b5f0361017b5780604051634c9c8ce360e01b815260040161017291906104ac565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f5f846001600160a01b0316846040516101db91906104f6565b5f60405180830381855af49150503d805f8114610213576040519150601f19603f3d011682016040523d82523d5f602084013e610218565b606091505b509092509050610229858383610292565b925050505b92915050565b34156102535760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661027e575f604051633173bdd160e11b815260040161017291906104ac565b805f5160206111b45f395f51905f5261019e565b6060826102a7576102a2826102e8565b6102e1565b81511580156102be57506001600160a01b0384163b155b156102de5783604051639996b31560e01b815260040161017291906104ac565b50805b9392505050565b8051156102f85780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6106a680610b0e83390190565b5f6001600160a01b03821661022e565b6103378161031e565b8114610143575f5ffd5b805161022e8161032e565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681016001600160401b03811182821017156103855761038561034c565b6040525050565b5f61039660405190565b90506103a28282610360565b919050565b5f6001600160401b038211156103bf576103bf61034c565b601f19601f83011660200192915050565b8281835e505f910152565b5f6103ed6103e8846103a7565b61038c565b9050828152838383011115610403576104035f5ffd5b6102e18360208301846103d0565b5f82601f830112610423576104235f5ffd5b81516104338482602086016103db565b949350505050565b5f5f5f60608486031215610450576104505f5ffd5b61045a8585610341565b92506104698560208601610341565b60408501519092506001600160401b03811115610487576104875f5ffd5b61049386828701610411565b9150509250925092565b6104a68161031e565b82525050565b6020810161022e828461049d565b604081016104c8828561049d565b6102e1602083018461049d565b5f6104de825190565b6104ec8185602086016103d0565b9290920192915050565b61022e81836104d5565b6080516105f76105175f395f601001526105f75ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c4575f357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100ba576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c26100cc565b565b6100c26100fa565b5f806100db36600481846103c0565b8101906100e8919061051c565b915091506100f6828261010a565b5050565b6100c2610105610164565b61019b565b610113826101b9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561015c576101578282610260565b505050565b6100f66102d4565b5f6101967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156101b5573d5ff35b3d5ffd5b806001600160a01b03163b5f0361020757806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016101fe919061057d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161027c91906105b7565b5f60405180830381855af49150503d805f81146102b4576040519150601f19603f3d011682016040523d82523d5f602084013e6102b9565b606091505b50915091506102c985838361030c565b925050505b92915050565b34156100c2576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103215761031c8261037b565b610374565b815115801561033857506001600160a01b0384163b155b1561037157836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016101fe919061057d565b50805b9392505050565b80511561038b5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f5f858511156103d1576103d15f5ffd5b838611156103e0576103e05f5ffd5b5050820193919092039150565b5f6001600160a01b0382166102ce565b610406816103ed565b81146103bd575f5ffd5b80356102ce816103fd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff8211171561046e5761046e61041b565b6040525050565b5f61047f60405190565b905061048b8282610448565b919050565b5f67ffffffffffffffff8211156104a9576104a961041b565b601f19601f83011660200192915050565b82818337505f910152565b5f6104d76104d284610490565b610475565b90508281528383830111156104ed576104ed5f5ffd5b6103748360208301846104ba565b5f82601f83011261050d5761050d5f5ffd5b610374838335602085016104c5565b5f5f60408385031215610530576105305f5ffd5b61053a8484610410565b9150602083013567ffffffffffffffff811115610558576105585f5ffd5b610564858286016104fb565b9150509250929050565b610577816103ed565b82525050565b602081016102ce828461056e565b8281835e505f910152565b5f61059f825190565b6105ad81856020860161058b565b9290920192915050565b6102ce818361059656fea26469706673582212201cedf6524dec6aa4b1c8bfa7c9f2a82fd0ab4dd8a93113aec84110724f387fe364736f6c634300081c0033608060405234801561000f575f5ffd5b506040516106a63803806106a683398101604081905261002e916100f3565b806001600160a01b038116610061575f604051631e4fbdf760e01b81526004016100589190610126565b60405180910390fd5b61006a81610071565b5050610134565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6001600160a01b0382165b92915050565b6100db816100c0565b81146100e5575f5ffd5b50565b80516100cc816100d2565b5f60208284031215610106576101065f5ffd5b61011083836100e8565b9392505050565b610120816100c0565b82525050565b602081016100cc8284610117565b610565806101415f395ff3fe608060405260043610610058575f3560e01c80639623609d116100415780639623609d1461009f578063ad3cb1cc146100b2578063f2fde38b14610107575f5ffd5b8063715018a61461005c5780638da5cb5b14610072575b5f5ffd5b348015610067575f5ffd5b50610070610126565b005b34801561007d575f5ffd5b505f546001600160a01b031660405161009691906102e9565b60405180910390f35b6100706100ad36600461043b565b610139565b3480156100bd575f5ffd5b506100fa6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009691906104d9565b348015610112575f5ffd5b506100706101213660046104ea565b6101bd565b61012e61021c565b6101375f610261565b565b61014161021c565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061018a9086908690600401610507565b5f604051808303818588803b1580156101a1575f5ffd5b505af11580156101b3573d5f5f3e3d5ffd5b5050505050505050565b6101c561021c565b6001600160a01b038116610210575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161020791906102e9565b60405180910390fd5b61021981610261565b50565b5f546001600160a01b0316331461013757336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161020791906102e9565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6001600160a01b0382165b92915050565b6102e3816102c8565b82525050565b602081016102d482846102da565b5f6102d4826102c8565b61030a816102f7565b8114610219575f5ffd5b80356102d481610301565b61030a816102c8565b80356102d48161031f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff8211171561038657610386610333565b6040525050565b5f61039760405190565b90506103a38282610360565b919050565b5f67ffffffffffffffff8211156103c1576103c1610333565b601f19601f83011660200192915050565b82818337505f910152565b5f6103ef6103ea846103a8565b61038d565b9050828152838383011115610405576104055f5ffd5b6104138360208301846103d2565b9392505050565b5f82601f83011261042c5761042c5f5ffd5b610413838335602085016103dd565b5f5f5f60608486031215610450576104505f5ffd5b61045a8585610314565b92506104698560208601610328565b9150604084013567ffffffffffffffff811115610487576104875f5ffd5b6104938682870161041a565b9150509250925092565b8281835e505f910152565b5f6104b1825190565b8084526020840193506104c881856020860161049d565b601f01601f19169290920192915050565b6020808252810161041381846104a8565b5f602082840312156104fd576104fd5f5ffd5b6104138383610328565b6040810161051582856102da565b818103602083015261052781846104a8565b94935050505056fea2646970667358221220a75fd2ab36f24ab4aa217b7ce41624c9aa24760a040e91c069e895b5347fd5d864736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69",
+ Bin: "0x608060405234801561000f575f5ffd5b5060405161a1ff38038061a1ff83398101604081905261002e916104df565b6001600160a01b03831661005d5760405162461bcd60e51b815260040161005490610559565b60405180910390fd5b6001600160a01b0382166100835760405162461bcd60e51b81526004016100549061059b565b6001600160a01b0381166100a95760405162461bcd60e51b8152600401610054906105dd565b6100b38383610159565b5f80546001600160a01b0319166001600160a01b039290921691821790556100dc908490610219565b600180546001600160a01b0319166001600160a01b03929092169182179055610107908490836102c2565b600280546001600160a01b0319166001600160a01b039290921691909117905561013083610395565b600380546001600160a01b0319166001600160a01b039290921691909117905550610792915050565b5f5f6040516101679061046d565b604051809103905ff080158015610180573d5f5f3e3d5ffd5b5090505f63c0c53b8b60e01b8586866040516024016101a1939291906105fc565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f6101e883878461042d60201b60201c565b90505f51602061a1df5f395f51905f5281604051610206919061064b565b60405180910390a1925050505b92915050565b5f5f6040516102279061047a565b604051809103905ff080158015610240573d5f5f3e3d5ffd5b5090505f63c4d66de860e01b8460405160240161025d919061066a565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f6102a483878461042d60201b60201c565b90505f51602061a1df5f395f51905f528160405161020691906106aa565b5f5f6040516102d090610487565b604051809103905ff0801580156102e9573d5f5f3e3d5ffd5b5090505f63c0c53b8b60e01b858573100000000000000000000000000000000000004260405160240161031e939291906105fc565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090505f61036583888461042d60201b60201c565b90505f51602061a1df5f395f51905f528160405161038391906106dd565b60405180910390a19695505050505050565b5f5f6040516103a390610494565b604051809103905ff0801580156103bc573d5f5f3e3d5ffd5b506040805160048152602481019091526020810180516001600160e01b0390811663204a7f0760e21b17909152919250905f906103ff9084908790859061042d16565b90505f51602061a1df5f395f51905f528160405161041d9190610710565b60405180910390a1949350505050565b5f5f84848460405161043e906104a1565b61044a9392919061075c565b604051809103905ff080158015610463573d5f5f3e3d5ffd5b5095945050505050565b61249f8061087083390190565b611d3580612d0f83390190565b61427280614a4483390190565b61035580618cb683390190565b6111d48061900b83390190565b5f6001600160a01b038216610213565b6104c7816104ae565b81146104d1575f5ffd5b50565b8051610213816104be565b5f5f5f606084860312156104f4576104f45f5ffd5b6104fe85856104d4565b925061050d85602086016104d4565b915061051c85604086016104d4565b90509250925092565b60198152602081017f496e76616c696420454f412061646d696e206164647265737300000000000000815290505b60200190565b6020808252810161021381610525565b60148152602081017f496e76616c69642066656573206164647265737300000000000000000000000081529050610553565b6020808252810161021381610569565b601d8152602081017f496e76616c69642072656d6f746520627269646765206164647265737300000081529050610553565b60208082528101610213816105ab565b6105f6816104ae565b82525050565b6060810161060a82866105ed565b61061760208301856105ed565b61062460408301846105ed565b949350505050565b600a815260208101694d65737361676542757360b01b81529050610553565b6040808252810161065b8161062c565b905061021360208301846105ed565b6020810161021382846105ed565b60138152602081017f43726f7373436861696e4d657373656e6765720000000000000000000000000081529050610553565b6040808252810161065b81610678565b600e8152602081016d457468657265756d42726964676560901b81529050610553565b6040808252810161065b816106ba565b600e8152602081016d54656e53797374656d43616c6c7360901b81529050610553565b6040808252810161065b816106ed565b8281835e505f910152565b5f610734825190565b80845260208401935061074b818560208601610720565b601f01601f19169290920192915050565b6060810161076a82866105ed565b61077760208301856105ed565b8181036040830152610789818461072b565b95945050505050565b60d28061079e5f395ff3fe6080604052348015600e575f5ffd5b50600436106026575f3560e01c8063c54a958814602a575b5f5ffd5b5f54600154600254600354605b9373ffffffffffffffffffffffffffffffffffffffff908116938116928116911684565b6040805173ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015291841683830152909216606082015290519081900360800190f3fea264697066735822122046ee4e636b53c1789762b9239694264a606e23a1ccc4d176fa1473ffb81e393864736f6c634300081c0033608060405234801561000f575f5ffd5b50610018610025565b610020610025565b610104565b5f61002e6100c5565b805490915068010000000000000000900460ff16156100605760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100c25780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b9916100ef565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e9565b61238e806101115f395ff3fe6080604052600436106101b5575f3560e01c806379ba5097116100eb578063d547741f11610089578063ea4cf97011610063578063ea4cf97014610541578063f2fde38b14610560578063f865af081461057f578063fb1bb9de1461059e576101b5565b8063d547741f146104db578063e30c3978146104fa578063e63ab1e91461050e576101b5565b806391643fdd116100c557806391643fdd1461042757806391d1485414610446578063a217fddf146104a9578063c0c53b8b146104bc576101b5565b806379ba5097146103de5780638456cb59146103f25780638da5cb5b14610406576101b5565b806332968782116101585780635c975abb116101325780635c975abb146103565780636c11c21c1461038c578063715018a6146103ab5780637920c986146103bf576101b5565b8063329687821461030457806336568abe146103235780633f4ba83a14610342576101b5565b8063248a9ca311610194578063248a9ca3146102585780632540e2da146102a55780632e1a0b8e146102c65780632f2ff15d146102e5576101b5565b8062a1b815146101e257806301ffc9a71461020c5780630d3fd67c14610238575b3480156101c0575f5ffd5b5060405162461bcd60e51b81526004016101d990611601565b60405180910390fd5b3480156101ed575f5ffd5b506101f66105d1565b6040516102039190611619565b60405180910390f35b348015610217575f5ffd5b5061022b610226366004611660565b61065a565b6040516102039190611685565b61024b610246366004611727565b6106f2565b60405161020391906117af565b348015610263575f5ffd5b506101f66102723660046117ce565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b3480156102b0575f5ffd5b506102c46102bf36600461180f565b610801565b005b3480156102d1575f5ffd5b506101f66102e0366004611845565b61083a565b3480156102f0575f5ffd5b506102c46102ff36600461187d565b610897565b34801561030f575f5ffd5b506102c461031e36600461180f565b6108e0565b34801561032e575f5ffd5b506102c461033d36600461187d565b610914565b34801561034d575f5ffd5b506102c4610960565b348015610361575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661022b565b348015610397575f5ffd5b506102c46103a636600461180f565b610995565b3480156103b6575f5ffd5b506102c46109c9565b3480156103ca575f5ffd5b506102c46103d936600461180f565b6109e9565b3480156103e9575f5ffd5b506102c4610a6e565b3480156103fd575f5ffd5b506102c4610aaa565b348015610411575f5ffd5b5061041a610adc565b60405161020391906118bc565b348015610432575f5ffd5b5061022b610441366004611845565b610b10565b348015610451575f5ffd5b5061022b61046036600461187d565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b3480156104b4575f5ffd5b506101f65f81565b3480156104c7575f5ffd5b506102c46104d63660046118ca565b610b60565b3480156104e6575f5ffd5b506102c46104f536600461187d565b610d0a565b348015610505575f5ffd5b5061041a610d4d565b348015610519575f5ffd5b506101f67f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b34801561054c575f5ffd5b506102c461055b366004611910565b610d75565b34801561056b575f5ffd5b506102c461057a36600461180f565b610ec2565b34801561058a575f5ffd5b506102c461059936600461180f565b610f54565b3480156105a9575f5ffd5b506101f67f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b600354604080517f1a90a21900000000000000000000000000000000000000000000000000000000815290515f926001600160a01b031691631a90a2199160048083019260209291908290030181865afa158015610631573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106559190611964565b905090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806106ec57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f6106fb610f88565b6003546001600160a01b0316156107aa575f6107156105d1565b9050803410156107375760405162461bcd60e51b81526004016101d9906119db565b6003546040515f916001600160a01b03169083908381818185875af1925050503d805f8114610781576040519150601f19603f3d011682016040523d82523d5f602084013e610786565b606091505b50509050806107a75760405162461bcd60e51b81526004016101d990611a43565b50505b6107b333610fe6565b90507fd3cfd274dfddb1195699ee44f0ba7aaabf97e75965b5191c2c0bd56776ff2061338288888888886040516107f09796959493929190611a93565b60405180910390a195945050505050565b5f61080b81611043565b6108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361104d565b505050565b5f5f8260405160200161084d9190611c30565b60408051601f1981840301815291815281516020928301205f81815292839052912054909150806108905760405162461bcd60e51b81526004016101d990611c99565b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108d081611043565b6108da83836110fa565b50505050565b5f6108ea81611043565b6108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836110fa565b6001600160a01b0381163314610956576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610835828261104d565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a61098a81611043565b6109926111bd565b50565b5f61099f81611043565b6108357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836110fa565b6109d1611229565b60405162461bcd60e51b81526004016101d990611d01565b5f6109f381611043565b6001600160a01b038216610a195760405162461bcd60e51b81526004016101d990611d43565b610a437f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a3361104d565b506108357f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836110fa565b3380610a78610d4d565b6001600160a01b031614610aa1578060405163118cdaa760e01b81526004016101d991906118bc565b6109928161125b565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610ad481611043565b6109926112a4565b5f807f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005b546001600160a01b031692915050565b5f5f82604051602001610b239190611c30565b60408051601f1981840301815291815281516020928301205f818152928390529120549091508015801590610b585750428111155b949350505050565b5f610b696112ff565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610b955750825b90505f8267ffffffffffffffff166001148015610bb15750303b155b905081158015610bbf575080155b15610bf6576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c2a57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038616610c505760405162461bcd60e51b81526004016101d990611d85565b6001600160a01b038816610c765760405162461bcd60e51b81526004016101d990611dc7565b610c7f88611327565b610c8888611340565b6003805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0388161790558315610d0057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610cf790600190611dfa565b60405180910390a15b5050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610d4381611043565b6108da838361104d565b5f807f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00610b00565b5f610d81600130611e1c565b9050610d8b610adc565b6001600160a01b0316336001600160a01b03161480610db25750336001600160a01b038216145b610dce5760405162461bcd60e51b81526004016101d990611e71565b610dd6610f88565b5f610de18342611e81565b90505f84604051602001610df59190611c30565b60408051601f1981840301815291815281516020928301205f8181529283905291205490915015610e385760405162461bcd60e51b81526004016101d990611eec565b5f81815260208181526040822084905560019190610e589088018861180f565b6001600160a01b0316815260208101919091526040015f90812090610e836080880160608901611efc565b63ffffffff1681526020808201929092526040015f9081208054600181018255908252919020869160040201610eb9828261230f565b50505050505050565b610eca611229565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383169081178255610f1b610adc565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a35050565b5f610f5e81611043565b6108357f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361104d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610fe4576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0381165f908152600260205260408120805467ffffffffffffffff1691600191906110188385612319565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550919050565b61099281336113b8565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156110f1575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506106ec565b5f9150506106ec565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166110f1575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556111733390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506106ec565b6111c5611436565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405161121e91906118bc565b60405180910390a150565b33611232610adc565b6001600160a01b031614610fe4573360405163118cdaa760e01b81526004016101d991906118bc565b7f237e158222e3e6968b72b9db0d8043aacf074ad9f650f0d1606b4d82ee432c00805473ffffffffffffffffffffffffffffffffffffffff191681556112a082611491565b5050565b6112ac610f88565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611211565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006106ec565b61132f61150e565b6113388161154c565b61099261155d565b61134861150e565b61135061155d565b61135861155d565b6113625f826110fa565b5061138d7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826110fa565b506112a07f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a826110fa565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166112a05780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016101d992919061233d565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610fe4576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b611516611565565b610fe4576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61155461150e565b61099281611583565b610fe461150e565b5f61156e6112ff565b5468010000000000000000900460ff16919050565b61158b61150e565b6001600160a01b038116610aa1575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016101d991906118bc565b600b8152602081017f756e737570706f72746564000000000000000000000000000000000000000000815290505b60200190565b602080825281016106ec816115cd565b805b82525050565b602081016106ec8284611611565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610992575f5ffd5b80356106ec81611627565b5f60208284031215611673576116735f5ffd5b6108908383611655565b801515611613565b602081016106ec828461167d565b67ffffffffffffffff811661164b565b80356106ec81611693565b63ffffffff811661164b565b80356106ec816116ae565b5f5f83601f8401126116d8576116d85f5ffd5b50813567ffffffffffffffff8111156116f2576116f25f5ffd5b60208301915083600182028301111561170c5761170c5f5ffd5b9250929050565b60ff811661164b565b80356106ec81611713565b5f5f5f5f5f6080868803121561173e5761173e5f5ffd5b61174887876116a3565b945061175787602088016116ba565b9350604086013567ffffffffffffffff811115611775576117755f5ffd5b611781888289016116c5565b9350935050611793876060880161171c565b90509295509295909350565b67ffffffffffffffff8116611613565b602081016106ec828461179f565b8061164b565b80356106ec816117bd565b5f602082840312156117e1576117e15f5ffd5b61089083836117c3565b5f6001600160a01b0382166106ec565b61164b816117eb565b80356106ec816117fb565b5f60208284031215611822576118225f5ffd5b6108908383611804565b5f60c0828403121561183f5761183f5f5ffd5b50919050565b5f60208284031215611858576118585f5ffd5b813567ffffffffffffffff811115611871576118715f5ffd5b610b588482850161182c565b5f5f60408385031215611891576118915f5ffd5b61189b84846117c3565b91506118aa8460208501611804565b90509250929050565b611613816117eb565b602081016106ec82846118b3565b5f5f5f606084860312156118df576118df5f5ffd5b6118e98585611804565b92506118f88560208601611804565b91506119078560408601611804565b90509250925092565b5f5f60408385031215611924576119245f5ffd5b823567ffffffffffffffff81111561193d5761193d5f5ffd5b6119498582860161182c565b9250506118aa84602085016117c3565b80516106ec816117bd565b5f60208284031215611977576119775f5ffd5b6108908383611959565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016106ec81611981565b60248152602081017f4661696c656420746f2073656e64206665657320746f206665657320636f6e7481527f7261637400000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec816119eb565b63ffffffff8116611613565b82818337505f910152565b818352602083019250611a7e828483611a5f565b50601f01601f19160190565b60ff8116611613565b60c08101611aa1828a6118b3565b611aae602083018961179f565b611abb604083018861179f565b611ac86060830187611a53565b8181036080830152611adb818587611a6a565b9050611aea60a0830184611a8a565b98975050505050505050565b505f6106ec6020830183611804565b505f6106ec60208301836116a3565b505f6106ec60208301836116ba565b5f808335601e1936859003018112611b3c57611b3c5f5ffd5b830160208101925035905067ffffffffffffffff811115611b5e57611b5e5f5ffd5b3681900382131561170c5761170c5f5ffd5b505f6106ec602083018361171c565b5f60c08301611b8e8380611af6565b611b9885826118b3565b50611ba66020840184611b05565b611bb3602086018261179f565b50611bc16040840184611b05565b611bce604086018261179f565b50611bdc6060840184611b14565b611be96060860182611a53565b50611bf76080840184611b23565b8583036080870152611c0a838284611a6a565b92505050611c1b60a0840184611b70565b611c2860a0860182611a8a565b509392505050565b602080825281016108908184611b7f565b60218152602081017f54686973206d65737361676520776173206e65766572207375626d697474656481527f2e00000000000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec81611c41565b60348152602081017f556e72656e6f756e6361626c654f776e61626c6532537465703a2063616e6e6f81527f742072656e6f756e6365206f776e657273686970000000000000000000000000602082015290506119d5565b602080825281016106ec81611ca9565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290506115fb565b602080825281016106ec81611d11565b601a8152602081017f4665657320616464726573732063616e6e6f7420626520307830000000000000815290506115fb565b602080825281016106ec81611d53565b60148152602081017f43616c6c65722063616e6e6f7420626520307830000000000000000000000000815290506115fb565b602080825281016106ec81611d95565b5f6106ec82611de4565b90565b67ffffffffffffffff1690565b61161381611dd7565b602081016106ec8284611df1565b634e487b7160e01b5f52601160045260245ffd5b6001600160a01b039182169190811690828203908111156106ec576106ec611e08565b60118152602081017f4e6f74206f776e6572206f722073656c66000000000000000000000000000000815290506115fb565b602080825281016106ec81611e3f565b808201808211156106ec576106ec611e08565b60218152602081017f4d657373616765207375626d6974746564206d6f7265207468616e206f6e636581527f2100000000000000000000000000000000000000000000000000000000000000602082015290506119d5565b602080825281016106ec81611e94565b5f60208284031215611f0f57611f0f5f5ffd5b61089083836116ba565b5f81356106ec816117fb565b5f6001600160a01b03835b81169019929092169190911792915050565b5f6106ec826117eb565b5f6106ec82611f42565b611f5f82611f4c565b611f6a818354611f25565b8255505050565b5f81356106ec81611693565b5f7bffffffffffffffff0000000000000000000000000000000000000000611f308460a01b90565b5f6106ec67ffffffffffffffff8316611de4565b611fc282611fa5565b611f6a818354611f7d565b5f67ffffffffffffffff83611f30565b611fe682611fa5565b611f6a818354611fcd565b5f81356106ec816116ae565b5f6bffffffff0000000000000000611f308460401b90565b5f63ffffffff82166106ec565b61202b82612015565b611f6a818354611ffd565b5f808335601e193685900301811261204f5761204f5f5ffd5b8301915050803567ffffffffffffffff81111561206d5761206d5f5ffd5b60208201915060018102360382131561170c5761170c5f5ffd5b634e487b7160e01b5f52604160045260245ffd5b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806120c357607f821691505b60208210810361183f5761183f61209b565b5f6106ec611de18381565b6120e9836120d5565b81545f1960089490940293841b1916921b91909117905550565b5f6108358184846120e0565b818110156112a0576121215f82612103565b60010161210f565b601f821115610835575f818152602090206020601f8501048101602085101561214f5750805b6121616020601f86010483018261210f565b5050505050565b8267ffffffffffffffff81111561218157612181612087565b61218b82546120af565b612196828285612129565b505f601f8211600181146121c8575f83156121b15750848201355b5f19600885021c198116600285021785555061221f565b5f84815260208120601f198516915b828110156121f757878501358255602094850194600190920191016121d7565b5084821015612213575f196008601f8716021c19878501351681555b50506001600284020184555b505050505050565b610835838383612168565b5f81356106ec81611713565b5f60ff82166106ec565b6122518261223e565b815460ff191660ff821617611f6a565b80828061226d81611f19565b90506122798184611f56565b5050602083018061228982611f71565b90506122958184611fb9565b5050506001810160408301806122aa82611f71565b90506122b68184611fdd565b505060608301806122c682611ff1565b90506122d28184612022565b5050506122e26080830183612036565b6122f0818360028601612227565b505060a082018061230082612232565b90506108da8160038501612248565b6112a08282612261565b67ffffffffffffffff9182169190811690828201908111156106ec576106ec611e08565b6040810161234b82856118b3565b610890602083018461161156fea26469706673582212208d51b6207dd91342eb4b0b8605ca9e65484b17f0f577adbadd9fa3686a45d8dd64736f6c634300081c00336080604052348015600e575f5ffd5b50611d198061001c5f395ff3fe608060405234801561000f575f5ffd5b50600436106101a5575f3560e01c80636c11c21c116100e8578063a217fddf11610093578063d547741f1161006e578063d547741f14610409578063e63ab1e91461041c578063f865af0814610443578063fb1bb9de14610456575f5ffd5b8063a217fddf146103dc578063b859ce83146103e3578063c4d66de8146103f6575f5ffd5b80638456cb59116100c35780638456cb591461036d57806391d1485414610375578063a1a227fa146103cc575f5ffd5b80636c11c21c14610328578063772c65521461033b5780637920c9861461035a575f5ffd5b80633f4ba83a11610153578063530c1e401161012e578063530c1e401461029c5780635b76f28b146102be5780635c975abb146102de57806363012de514610308575f5ffd5b80633f4ba83a1461026e5780634c81bd20146102765780635067627214610289575f5ffd5b80632f2ff15d116101835780632f2ff15d14610235578063329687821461024857806336568abe1461025b575f5ffd5b806301ffc9a7146101a9578063248a9ca3146101d25780632540e2da14610220575b5f5ffd5b6101bc6101b7366004611381565b61047d565b6040516101c991906113a8565b60405180910390f35b6102136101e03660046113c7565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040516101c991906113ea565b61023361022e36600461141c565b610515565b005b610233610243366004611439565b61054e565b61023361025636600461141c565b610597565b610233610269366004611439565b6105cb565b610233610617565b610233610284366004611488565b61064c565b610233610297366004611516565b610797565b6101bc6102aa3660046113c7565b60036020525f908152604090205460ff1681565b6102d16102cc3660046115e0565b6108de565b6040516101c99190611671565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166101bc565b60015461031b906001600160a01b031681565b6040516101c9919061168b565b61023361033636600461141c565b61095e565b5f5461034d906001600160a01b031681565b6040516101c991906116b6565b61023361036836600461141c565b610992565b610233610a17565b6101bc610383366004611439565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f546001600160a01b031661031b565b6102135f81565b60025461031b906001600160a01b031681565b61023361040436600461141c565b610a49565b610233610417366004611439565b610ba8565b6102137f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b61023361045136600461141c565b610beb565b6102137f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061050f57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b5f61051f81610c1f565b6105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610c29565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461058781610c1f565b6105918383610cd6565b50505050565b5f6105a181610c1f565b6105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610cd6565b6001600160a01b038116331461060d576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105498282610c29565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a61064181610c1f565b610649610d99565b50565b610654610e05565b61065c610e63565b61066581610ec6565b610672602082018261141c565b600180546001600160a01b0319166001600160a01b03929092169190911790555f6106a060808301836116c4565b8101906106ad9190611887565b8051600280546001600160a01b0319166001600160a01b0390921691821790559091505f9081905a84602001516040516106e791906118e0565b5f604051808303815f8787f1925050503d805f8114610721576040519150601f19603f3d011682016040523d82523d5f602084013e610726565b606091505b509150915081610754578060405163a5fa8d2b60e01b815260040161074b9190611671565b60405180910390fd5b5050600180546001600160a01b031990811682556002805490911690557f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00555050565b61079f610e05565b6107a7610e63565b6107b384848484611003565b6107c0602085018561141c565b600180546001600160a01b0319166001600160a01b03929092169190911790555f6107ee60808601866116c4565b8101906107fb9190611887565b8051600280546001600160a01b0319166001600160a01b0390921691821790559091505f9081905a846020015160405161083591906118e0565b5f604051808303815f8787f1925050503d805f811461086f576040519150601f19603f3d011682016040523d82523d5f602084013e610874565b606091505b509150915081610899578060405163a5fa8d2b60e01b815260040161074b9190611671565b5050600180546001600160a01b031990811682556002805490911690557f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005550610591565b60606040518060600160405280856001600160a01b0316815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250938552505050602091820152604051610945929101611932565b60405160208183030381529060405290505b9392505050565b5f61096881610c1f565b6105497f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83610cd6565b5f61099c81610c1f565b6001600160a01b0382166109c25760405162461bcd60e51b815260040161074b90611977565b6109ec7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a33610c29565b506105497f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83610cd6565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610a4181610c1f565b6106496110f4565b5f610a5261114f565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610a7e5750825b90505f8267ffffffffffffffff166001148015610a9a5750303b155b905081158015610aa8575080155b15610adf576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610b1357845468ff00000000000000001916680100000000000000001785555b610b1b611177565b6001600160a01b038616610b2d575f5ffd5b610b3633611187565b5f80546001600160a01b0319166001600160a01b0388161790558315610ba057845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610b97906001906119a1565b60405180910390a15b505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610be181610c1f565b6105918383610c29565b5f610bf581610c1f565b6105497f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83610c29565b6106498133611203565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615610ccd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061050f565b5f91505061050f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16610ccd575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610d4f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061050f565b610da1611281565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051610dfa919061168b565b60405180910390a150565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615610e61576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00805460011901610ec0576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60029055565b5f546040517f91643fdd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906391643fdd90610f0e908490600401611b6c565b602060405180830381865afa158015610f29573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f4d9190611b90565b610f695760405162461bcd60e51b815260040161074b90611bdf565b5f81604051602001610f7b9190611b6c565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff1615610fc25760405162461bcd60e51b815260040161074b90611c21565b5f908152600360205260409020805460ff1916600117905550565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b5f546040517fce0d7db30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063ce0d7db390611051908790879087908790600401611c8a565b5f6040518083038186803b158015611067575f5ffd5b505afa158015611079573d5f5f3e3d5ffd5b505050505f8460405160200161108f9190611b6c565b60408051601f1981840301815291815281516020928301205f818152600390935291205490915060ff16156110d65760405162461bcd60e51b815260040161074b90611c21565b5f908152600360205260409020805460ff1916600117905550505050565b6110fc610e05565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833610ded565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061050f565b61117f6112dc565b610e6161131a565b61118f6112dc565b611197611322565b61119f611322565b6111a95f82610cd6565b506111d47f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82610cd6565b506111ff7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a82610cd6565b5050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166111ff5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161074b929190611cc8565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16610e61576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112e461132a565b610e61576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610fdd6112dc565b610e616112dc565b5f61133361114f565b5468010000000000000000900460ff16919050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610649575f5ffd5b803561050f81611348565b5f60208284031215611394576113945f5ffd5b6109578383611376565b8015155b82525050565b6020810161050f828461139e565b8061136c565b803561050f816113b6565b5f602082840312156113da576113da5f5ffd5b61095783836113bc565b806113a2565b6020810161050f82846113e4565b5f6001600160a01b03821661050f565b61136c816113f8565b803561050f81611408565b5f6020828403121561142f5761142f5f5ffd5b6109578383611411565b5f5f6040838503121561144d5761144d5f5ffd5b61145784846113bc565b91506114668460208501611411565b90509250929050565b5f60c08284031215611482576114825f5ffd5b50919050565b5f6020828403121561149b5761149b5f5ffd5b813567ffffffffffffffff8111156114b4576114b45f5ffd5b6114c08482850161146f565b949350505050565b5f5f83601f8401126114db576114db5f5ffd5b50813567ffffffffffffffff8111156114f5576114f55f5ffd5b60208301915083602082028301111561150f5761150f5f5ffd5b9250929050565b5f5f5f5f6060858703121561152c5761152c5f5ffd5b843567ffffffffffffffff811115611545576115455f5ffd5b6115518782880161146f565b945050602085013567ffffffffffffffff811115611570576115705f5ffd5b61157c878288016114c8565b935093505061158e86604087016113bc565b905092959194509250565b5f5f83601f8401126115ac576115ac5f5ffd5b50813567ffffffffffffffff8111156115c6576115c65f5ffd5b60208301915083600182028301111561150f5761150f5f5ffd5b5f5f5f604084860312156115f5576115f55f5ffd5b6115ff8585611411565b9250602084013567ffffffffffffffff81111561161d5761161d5f5ffd5b61162986828701611599565b92509250509250925092565b8281835e505f910152565b5f611649825190565b808452602084019350611660818560208601611635565b601f01601f19169290920192915050565b602080825281016109578184611640565b6113a2816113f8565b6020810161050f8284611682565b5f61050f826113f8565b5f61050f82611699565b6113a2816116a3565b6020810161050f82846116ad565b5f808335601e19368590030181126116dd576116dd5f5ffd5b8301915050803567ffffffffffffffff8111156116fb576116fb5f5ffd5b60208201915060018102360382131561150f5761150f5f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff8211171561176857611768611715565b6040525050565b5f61177960405190565b90506117858282611742565b919050565b5f67ffffffffffffffff8211156117a3576117a3611715565b601f19601f83011660200192915050565b82818337505f910152565b5f6117d16117cc8461178a565b61176f565b90508281528383830111156117e7576117e75f5ffd5b6109578360208301846117b4565b5f82601f830112611807576118075f5ffd5b610957838335602085016117bf565b5f60608284031215611829576118295f5ffd5b611833606061176f565b905061183f8383611411565b8152602082013567ffffffffffffffff81111561185d5761185d5f5ffd5b611869848285016117f5565b60208301525061187c83604084016113bc565b604082015292915050565b5f6020828403121561189a5761189a5f5ffd5b813567ffffffffffffffff8111156118b3576118b35f5ffd5b6114c084828501611816565b5f6118c8825190565b6118d6818560208601611635565b9290920192915050565b61050f81836118bf565b80515f9060608401906118fd8582611682565b50602083015184820360208601526119158282611640565b915050604083015161192a60408601826113e4565b509392505050565b6020808252810161095781846118ea565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290505b60200190565b6020808252810161050f81611943565b5f67ffffffffffffffff821661050f565b6113a281611987565b6020810161050f8284611998565b505f61050f6020830183611411565b67ffffffffffffffff811661136c565b803561050f816119be565b505f61050f60208301836119ce565b67ffffffffffffffff81166113a2565b63ffffffff811661136c565b803561050f816119f8565b505f61050f6020830183611a04565b63ffffffff81166113a2565b5f808335601e1936859003018112611a4357611a435f5ffd5b830160208101925035905067ffffffffffffffff811115611a6557611a655f5ffd5b3681900382131561150f5761150f5f5ffd5b818352602083019250611a8b8284836117b4565b50601f01601f19160190565b60ff811661136c565b803561050f81611a97565b505f61050f6020830183611aa0565b60ff81166113a2565b5f60c08301611ad283806119af565b611adc8582611682565b50611aea60208401846119d9565b611af760208601826119e8565b50611b0560408401846119d9565b611b1260408601826119e8565b50611b206060840184611a0f565b611b2d6060860182611a1e565b50611b3b6080840184611a2a565b8583036080870152611b4e838284611a77565b92505050611b5f60a0840184611aab565b61192a60a0860182611aba565b602080825281016109578184611ac3565b80151561136c565b805161050f81611b7d565b5f60208284031215611ba357611ba35f5ffd5b6109578383611b85565b601f8152602081017f4d657373616765206e6f7420666f756e64206f722066696e616c697a65642e0081529050611971565b6020808252810161050f81611bad565b60198152602081017f4d65737361676520616c726561647920636f6e73756d65642e0000000000000081529050611971565b6020808252810161050f81611bef565b82818337505050565b8183526020830192505f7f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115611c7357611c735f5ffd5b602083029250611c84838584611c31565b50500190565b60608082528101611c9b8187611ac3565b90508181036020830152611cb0818587611c3a565b9050611cbf60408301846113e4565b95945050505050565b60408101611cd68285611682565b61095760208301846113e456fea2646970667358221220a3c6650f1bf93b434f390b5b81c157034d3b8d9f6dbec2d55e5bad2d816081c964736f6c634300081c00336080604052348015600e575f5ffd5b506142568061001c5f395ff3fe60806040526004361061021b575f3560e01c80637920c9861161011c578063a381c8e2116100af578063d5c6b5041161007e578063e63ab1e911610063578063e63ab1e914610717578063f865af081461074a578063fb1bb9de1461076957610222565b8063d5c6b504146106c4578063dfde69e5146106f857610222565b8063a381c8e2146105e8578063affed0e0146105fb578063c0c53b8b14610686578063d547741f146106a557610222565b80639813c7b2116100eb5780639813c7b2146105545780639e405b711461058d578063a1a227fa146105c1578063a217fddf146105d557610222565b80637920c9861461049f57806383bece4d146104be5780638456cb59146104dd57806391d14854146104f157610222565b806332968782116101af578063458ffd631161017e5780636a175390116101635780636a175390146102b95780636c11c21c146104615780637533087a1461048057610222565b8063458ffd631461040c5780635c975abb1461042b57610222565b8063329687821461039957806336568abe146103b85780633cb747bf146103d75780633f4ba83a146103f857610222565b80631888d712116101eb5780631888d712146102f9578063248a9ca31461030e5780632540e2da1461035b5780632f2ff15d1461037a57610222565b80628d48e31461024357806301ffc9a71461028d57806307d7fb9a146102b95780630f0a9a4b146102da57610222565b3661022257005b60405162461bcd60e51b815260040161023a90612242565b60405180910390fd5b34801561024e575f5ffd5b5061027761025d366004612280565b60026020525f90815260409020546001600160a01b031681565b60405161028491906122b3565b60405180910390f35b348015610298575f5ffd5b506102ac6102a73660046122dc565b61079c565b6040516102849190612301565b3480156102c4575f5ffd5b506102cd610804565b6040516102849190612315565b3480156102e5575f5ffd5b50600354610277906001600160a01b031681565b61030c610307366004612280565b610870565b005b348015610319575f5ffd5b506102cd610328366004612334565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b348015610366575f5ffd5b5061030c610375366004612280565b610a06565b348015610385575f5ffd5b5061030c610394366004612351565b610a3f565b3480156103a4575f5ffd5b5061030c6103b3366004612280565b610a82565b3480156103c3575f5ffd5b5061030c6103d2366004612351565b610ab6565b3480156103e2575f5ffd5b506103eb610b02565b60405161028491906123a4565b348015610403575f5ffd5b5061030c610b8d565b348015610417575f5ffd5b5061030c610426366004612400565b610bc2565b348015610436575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166102ac565b34801561046c575f5ffd5b5061030c61047b366004612280565b610d43565b34801561048b575f5ffd5b5061030c61049a366004612487565b610d77565b3480156104aa575f5ffd5b5061030c6104b9366004612280565b610f66565b3480156104c9575f5ffd5b5061030c6104d83660046124b4565b610feb565b3480156104e8575f5ffd5b5061030c61114f565b3480156104fc575f5ffd5b506102ac61050b366004612351565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561055f575f5ffd5b506102ac61056e366004612280565b6001600160a01b039081165f9081526020819052604090205416151590565b348015610598575f5ffd5b506102776105a7366004612280565b60016020525f90815260409020546001600160a01b031681565b3480156105cc575f5ffd5b506103eb611181565b3480156105e0575f5ffd5b506102cd5f81565b61030c6105f63660046124b4565b611201565b348015610606575f5ffd5b5060408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd00546102cd565b348015610691575f5ffd5b5061030c6106a03660046124fa565b61141a565b3480156106b0575f5ffd5b5061030c6106bf366004612351565b6115f6565b3480156106cf575f5ffd5b506103eb6106de366004612280565b5f602081905290815260409020546001600160a01b031681565b348015610703575f5ffd5b50600454610277906001600160a01b031681565b348015610722575f5ffd5b506102cd7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b348015610755575f5ffd5b5061030c610764366004612280565b611639565b348015610774575f5ffd5b506102cd7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806107fe57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b5f61080d61166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015610847573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612533565b905090565b610878611676565b5f34116108975760405162461bcd60e51b815260040161023a90612582565b61089f61166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108fd9190612533565b34101561091c5760405162461bcd60e51b815260040161023a906125ec565b5f61092561166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa15801561095f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109839190612533565b90505f6109908234612629565b90505f6383bece4d60e01b5f83866040516024016109b09392919061263c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150610a00906001600160a01b03168260025f5f886116d4565b50505050565b5f610a1081611844565b610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a8361184e565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a7881611844565b610a0083836118fb565b5f610a8c81611844565b610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836118fb565b6001600160a01b0381163314610af8576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a3a828261184e565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f9081527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad02851382005b546001600160a01b0316919050565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610bb781611844565b610bbf6119be565b50565b6003546001600160a01b0316610bd6611a2a565b610bf25760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b0316610c04611a4c565b6001600160a01b031614610c2a5760405162461bcd60e51b815260040161023a9061272c565b30610c33611ab4565b6001600160a01b031614610c595760405162461bcd60e51b815260040161023a90612794565b5f85858585604051610c6a90612201565b610c7794939291906127cf565b604051809103905ff080158015610c90573d5f5f3e3d5ffd5b506001600160a01b038082165f81815260208181526040808320805473ffffffffffffffffffffffffffffffffffffffff199081168617909155600183528184208054968f169682168717905594835260029091529081902080549093169091179091555190915081907f30c05779f384e0ae9d43bbf7ec4417f28bdc53d02a35551b6eb270a9c4c71dca90610d31908a9084908b908b908b908b90612800565b60405180910390a15050505050505050565b5f610d4d81611844565b610a3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a836118fb565b6003546001600160a01b0316610d8b611a2a565b610da75760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b0316610db9611a4c565b6001600160a01b031614610ddf5760405162461bcd60e51b815260040161023a9061272c565b30610de8611ab4565b6001600160a01b031614610e0e5760405162461bcd60e51b815260040161023a90612794565b610e16611676565b60048054604080519283526024830181526020830180516001600160e01b03167fd0e30db000000000000000000000000000000000000000000000000000000000179052515f926001600160a01b03909216918591610e75919061287b565b5f6040518083038185875af1925050503d805f8114610eaf576040519150601f19603f3d011682016040523d82523d5f602084013e610eb4565b606091505b5050905080610ed55760405162461bcd60e51b815260040161023a906128b7565b600480546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169163a9059cbb91610f1f9188918891016128c7565b6020604051808303815f875af1158015610f3b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f5f91906128f5565b5050505050565b5f610f7081611844565b6001600160a01b038216610f965760405162461bcd60e51b815260040161023a90612944565b610fc07f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a3361184e565b50610a3a7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a836118fb565b6003546001600160a01b0316610fff611a2a565b61101b5760405162461bcd60e51b815260040161023a906126c4565b806001600160a01b031661102d611a4c565b6001600160a01b0316146110535760405162461bcd60e51b815260040161023a9061272c565b3061105c611ab4565b6001600160a01b0316146110825760405162461bcd60e51b815260040161023a90612794565b61108a611676565b6001600160a01b038085165f9081526002602090815260408083205484168084529183905290912054909116806110d35760405162461bcd60e51b815260040161023a906129ac565b6040517f979005ad0000000000000000000000000000000000000000000000000000000081526001600160a01b0382169063979005ad9061111a90879089906004016128c7565b5f604051808303815f87803b158015611131575f5ffd5b505af1158015611143573d5f5f3e3d5ffd5b50505050505050505050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61117981611844565b610bbf611af8565b60408051808201909152601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020909101527f3e1bb302f668bd876eab4a48b3759a1d614a1ecbcc67ee27a10c9a116878004e5f9081527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00610b7e565b611209611676565b5f82116112285760405162461bcd60e51b815260040161023a906129ee565b6004546001600160a01b039081169084160361124857610a3a8282611b53565b6001600160a01b038084165f908152602081905260409020541661127e5760405162461bcd60e51b815260040161023a90612a30565b6001600160a01b038084165f90815260208190526040908190205490517f1dd319cb0000000000000000000000000000000000000000000000000000000081529116908190631dd319cb906112d990339087906004016128c7565b5f604051808303815f87803b1580156112f0575f5ffd5b505af1158015611302573d5f5f3e3d5ffd5b505050506001600160a01b038481165f908152600160205260409020541661132861166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611362573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113869190612533565b3410156113a55760405162461bcd60e51b815260040161023a90612a98565b5f6383bece4d60e01b8286866040516024016113c39392919061263c565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150611412906001600160a01b0316825f5f5f346116d4565b505050505050565b5f611423611d49565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f8115801561144f5750825b90505f8267ffffffffffffffff16600114801561146b5750303b155b905081158015611479575080155b156114b0576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156114e457845468ff00000000000000001916680100000000000000001785555b6001600160a01b03881661150a5760405162461bcd60e51b815260040161023a90612ada565b6001600160a01b0387166115305760405162461bcd60e51b815260040161023a90612b1c565b6001600160a01b0386166115565760405162461bcd60e51b815260040161023a90612b5e565b61155f33611d71565b61156888611ded565b600380546001600160a01b03808a1673ffffffffffffffffffffffffffffffffffffffff1992831617909255600480549289169290911691909117905583156115ec57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610d3190600190612b88565b5050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015461162f81611844565b610a00838361184e565b5f61164381611844565b610a3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a8361184e565b5f61086b611181565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16156116d2576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001600160a01b0386166116fa5760405162461bcd60e51b815260040161023a90612bc8565b5f6040518060600160405280886001600160a01b031681526020018781526020018581525060405160200161172f9190612c51565b6040516020818303038152906040529050611748611181565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f6117dd83612c62565b919050558885886040518663ffffffff1660e01b81526004016118039493929190612c9f565b60206040518083038185885af115801561181f573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906115ec9190612cff565b610bbf8133611fee565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16156118f2575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506107fe565b5f9150506107fe565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff166118f2575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119743390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506107fe565b6119c661206c565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611a1f91906122b3565b60405180910390a150565b5f611a33610b02565b6001600160a01b0316336001600160a01b031614905090565b5f611a55610b02565b6001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a90573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086b9190612d27565b5f611abd610b02565b6001600160a01b031663b859ce836040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a90573d5f5f3e3d5ffd5b611b00611676565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611a12565b600454611b6b906001600160a01b03163330856120c7565b600480546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911691632e1a7d4d91611bb391869101612315565b5f604051808303815f87803b158015611bca575f5ffd5b505af1158015611bdc573d5f5f3e3d5ffd5b505050505f611be961166d565b6001600160a01b031662a1b8156040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c23573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c479190612533565b9050611c54816002612d44565b341015611c735760405162461bcd60e51b815260040161023a90612db3565b30631888d712611c838386612dc3565b6003546040516001600160e01b031960e085901b168152611cb0916001600160a01b0316906004016122b3565b5f604051808303818588803b158015611cc7575f5ffd5b505af1158015611cd9573d5f5f3e3d5ffd5b50505050505f637533087a60e01b8385604051602401611cfa9291906128c7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152600354909150610a00906001600160a01b0316825f5f5f876116d4565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006107fe565b611d79612121565b611d8161215f565b611d8961215f565b611d935f826118fb565b50611dbe7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a826118fb565b50611de97f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a826118fb565b5050565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad0285138200805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055611e94610b02565b6001600160a01b031663a1a227fa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ecf573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ef39190612d27565b604080518082018252601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020918201527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092558051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e6365000000000000910152507f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f9081527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0055565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16611de95780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161023a9291906128c7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166116d2576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0084856001600160a01b03166323b872dd8686866040516024016120ef93929190612dd6565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612167565b6121296121e3565b6116d2576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116d2612121565b5f5f60205f8451602086015f885af180612186576040513d5f823e3d81fd5b50505f513d9150811561219d5780600114156121aa565b6001600160a01b0384163b155b15610a0057836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161023a91906122b3565b5f6121ec611d49565b5468010000000000000000900460ff16919050565b61142280612dff83390190565b601d8152602081017f66616c6c6261636b2829206d6574686f6420756e737570706f72746564000000815290505b60200190565b602080825281016107fe8161220e565b5f6001600160a01b0382166107fe565b61226b81612252565b8114610bbf575f5ffd5b80356107fe81612262565b5f60208284031215612293576122935f5ffd5b61229d8383612275565b9392505050565b6122ad81612252565b82525050565b602081016107fe82846122a4565b6001600160e01b0319811661226b565b80356107fe816122c1565b5f602082840312156122ef576122ef5f5ffd5b61229d83836122d1565b8015156122ad565b602081016107fe82846122f9565b806122ad565b602081016107fe828461230f565b8061226b565b80356107fe81612323565b5f60208284031215612347576123475f5ffd5b61229d8383612329565b5f5f60408385031215612365576123655f5ffd5b61236f8484612329565b915061237e8460208501612275565b90509250929050565b5f6107fe82612252565b5f6107fe82612387565b6122ad81612391565b602081016107fe828461239b565b5f5f83601f8401126123c5576123c55f5ffd5b50813567ffffffffffffffff8111156123df576123df5f5ffd5b6020830191508360018202830111156123f9576123f95f5ffd5b9250929050565b5f5f5f5f5f60608688031215612417576124175f5ffd5b6124218787612275565b9450602086013567ffffffffffffffff81111561243f5761243f5f5ffd5b61244b888289016123b2565b9450945050604086013567ffffffffffffffff81111561246c5761246c5f5ffd5b612478888289016123b2565b92509250509295509295909350565b5f5f6040838503121561249b5761249b5f5ffd5b6124a58484612275565b915061237e8460208501612329565b5f5f5f606084860312156124c9576124c95f5ffd5b6124d38585612275565b92506124e28560208601612329565b91506124f18560408601612275565b90509250925092565b5f5f5f6060848603121561250f5761250f5f5ffd5b6125198585612275565b92506124e28560208601612275565b80516107fe81612323565b5f60208284031215612546576125465f5ffd5b61229d8383612528565b600d8152602081017f4e6f7468696e672073656e742e000000000000000000000000000000000000008152905061223c565b602080825281016107fe81612550565b602c8152602081017f496e73756666696369656e742066756e647320746f207075626c69736820766181527f6c7565207472616e736665720000000000000000000000000000000000000000602082015290505b60400190565b602080825281016107fe81612592565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818103818111156107fe576107fe6125fc565b6060810161264a82866122a4565b612657602083018561230f565b61266460408301846122a4565b949350505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e6765722100000000000000000000000000000000602082015290506125e6565b602080825281016107fe8161266c565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e64657221000000000000000000000000000000602082015290506125e6565b602080825281016107fe816126d4565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742074617267657421000000000000000000000000000000602082015290506125e6565b602080825281016107fe8161273c565b82818337505f910152565b8183526020830192506127c38284836127a4565b50601f01601f19160190565b604080825281016127e18186886127af565b905081810360208301526127f68184866127af565b9695505050505050565b6080810161280e82896122a4565b61281b60208301886122a4565b818103604083015261282e8186886127af565b905081810360608301526128438184866127af565b98975050505050505050565b8281835e505f910152565b5f612863825190565b61287181856020860161284f565b9290920192915050565b6107fe818361285a565b60138152602081017f57455448206465706f736974206661696c6564000000000000000000000000008152905061223c565b602080825281016107fe81612885565b604081016128d582856122a4565b61229d602083018461230f565b80151561226b565b80516107fe816128e2565b5f60208284031215612908576129085f5ffd5b61229d83836128ea565b60188152602081017f496e76616c6964206d756c7469736967206164647265737300000000000000008152905061223c565b602080825281016107fe81612912565b602b8152602081017f526563656976696e672061737365747320666f7220756e6b6e6f776e2077726181527f7070656420746f6b656e21000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612954565b601e8152602081017f416d6f756e74206d7573742062652067726561746572207468616e20302e00008152905061223c565b602080825281016107fe816129bc565b60158152602081017f4e6f206d617070696e6720666f7220746f6b656e2e00000000000000000000008152905061223c565b602080825281016107fe816129fe565b60258152602081017f496e73756666696369656e742066756e647320746f207075626c697368206d6581527f7373616765000000000000000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612a40565b60178152602081017f4d657373656e6765722063616e6e6f74206265203078300000000000000000008152905061223c565b602080825281016107fe81612aa8565b601b8152602081017f52656d6f7465206272696467652063616e6e6f742062652030783000000000008152905061223c565b602080825281016107fe81612aea565b60188152602081017f4c6f63616c20574554482063616e6e6f742062652030783000000000000000008152905061223c565b602080825281016107fe81612b2c565b5f67ffffffffffffffff82166107fe565b6122ad81612b6e565b602081016107fe8284612b7f565b60148152602081017f5461726765742063616e6e6f74206265203078300000000000000000000000008152905061223c565b602080825281016107fe81612b96565b5f612be1825190565b808452602084019350612bf881856020860161284f565b601f01601f19169290920192915050565b80515f906060840190612c1c85826122a4565b5060208301518482036020860152612c348282612bd8565b9150506040830151612c49604086018261230f565b509392505050565b6020808252810161229d8184612c09565b5f60018201612c7357612c736125fc565b5060010190565b67ffffffffffffffff81166122ad565b63ffffffff81166122ad565b60ff81166122ad565b60808101612cad8287612c7a565b612cba6020830186612c8a565b8181036040830152612ccc8185612bd8565b9050612cdb6060830184612c96565b95945050505050565b67ffffffffffffffff811661226b565b80516107fe81612ce4565b5f60208284031215612d1257612d125f5ffd5b61229d8383612cf4565b80516107fe81612262565b5f60208284031215612d3a57612d3a5f5ffd5b61229d8383612d1c565b81810281158282048414176107fe576107fe6125fc565b60228152602081017f496e73756666696369656e742066756e647320666f72207075626c697368206681527f6565000000000000000000000000000000000000000000000000000000000000602082015290506125e6565b602080825281016107fe81612d5b565b808201808211156107fe576107fe6125fc565b60608101612de482866122a4565b612df160208301856122a4565b612664604083018461230f56fe608060405234801561000f575f5ffd5b5060405161142238038061142283398101604081905261002e9161022b565b81818181600361003e8382610378565b50600461004b8282610378565b50505050506100807fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217753361008860201b60201c565b505050610433565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff1661012c575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff191660011790556100e43390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161012f565b505f5b92915050565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681016001600160401b038111828210171561016e5761016e610135565b6040525050565b5f61017f60405190565b905061018b8282610149565b919050565b5f6001600160401b038211156101a8576101a8610135565b601f19601f83011660200192915050565b8281835e505f910152565b5f6101d66101d184610190565b610175565b90508281528383830111156101ec576101ec5f5ffd5b6101fa8360208301846101b9565b9392505050565b5f82601f830112610213576102135f5ffd5b81516102238482602086016101c4565b949350505050565b5f5f6040838503121561023f5761023f5f5ffd5b82516001600160401b03811115610257576102575f5ffd5b61026385828601610201565b602085015190935090506001600160401b03811115610283576102835f5ffd5b61028f85828601610201565b9150509250929050565b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806102c157607f821691505b6020821081036102d3576102d3610299565b50919050565b5f61012f6102e48381565b90565b6102f0836102d9565b81545f1960089490940293841b1916921b91909117905550565b5f6103168184846102e7565b505050565b818110156103355761032d5f8261030a565b60010161031b565b5050565b601f821115610316575f818152602090206020601f8501048101602085101561035f5750805b6103716020601f86010483018261031b565b5050505050565b81516001600160401b0381111561039157610391610135565b61039b82546102ad565b6103a6828285610339565b506020601f8211600181146103d9575f83156103c25750848201515b5f19600885021c1981166002850217855550610371565b5f84815260208120601f198516915b8281101561040857878501518255602094850194600190920191016103e8565b508482101561042457838701515f19601f87166008021c191681555b50505050600202600101905550565b610fe2806104405f395ff3fe608060405234801561000f575f5ffd5b5060043610610149575f3560e01c806336568abe116100c7578063979005ad1161007d578063a9059cbb11610063578063a9059cbb146102c2578063d547741f146102d5578063dd62ed3e146102e8575f5ffd5b8063979005ad146102a8578063a217fddf146102bb575f5ffd5b806375b238fc116100ad57806375b238fc1461024157806391d148541461026857806395d89b41146102a0575f5ffd5b806336568abe1461021b57806370a082311461022e575f5ffd5b80631dd319cb1161011c578063248a9ca311610102578063248a9ca3146101d75780632f2ff15d146101f9578063313ce5671461020c575f5ffd5b80631dd319cb146101af57806323b872dd146101c4575f5ffd5b806301ffc9a71461014d57806306fdde0314610176578063095ea7b31461018b57806318160ddd1461019e575b5f5ffd5b61016061015b366004610c19565b6102fb565b60405161016d9190610c40565b60405180910390f35b61017e610393565b60405161016d9190610c8a565b610160610199366004610cd0565b610423565b6002545b60405161016d9190610d0c565b6101c26101bd366004610cd0565b61043a565b005b6101606101d2366004610d1a565b6104a4565b6101a26101e5366004610d60565b5f9081526005602052604090206001015490565b6101c2610207366004610d7d565b6104c9565b601260405161016d9190610db3565b6101c2610229366004610d7d565b6104f3565b6101a261023c366004610dc1565b61053f565b6101a27fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b610160610276366004610d7d565b5f9182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61017e6105b2565b6101c26102b6366004610cd0565b6105c1565b6101a25f81565b6101606102d0366004610cd0565b6105f5565b6101c26102e3366004610d7d565b610602565b6101a26102f6366004610dde565b610626565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061038d57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600380546103a290610e10565b80601f01602080910402602001604051908101604052809291908181526020018280546103ce90610e10565b80156104195780601f106103f057610100808354040283529160200191610419565b820191905f5260205f20905b8154815290600101906020018083116103fc57829003601f168201915b5050505050905090565b5f336104308185856106de565b5060019392505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610464816106eb565b8161046e8461053f565b10156104955760405162461bcd60e51b815260040161048c90610e70565b60405180910390fd5b61049f83836106f8565b505050565b5f336104b1858285610730565b6104bc858585610794565b60019150505b9392505050565b5f828152600560205260409020600101546104e3816106eb565b6104ed83836107f1565b50505050565b6001600160a01b0381163314610535576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61049f828261089c565b5f6001600160a01b038216320361056d576001600160a01b0382165f9081526020819052604090205461038d565b6001600160a01b038216330361059a576001600160a01b0382165f9081526020819052604090205461038d565b60405162461bcd60e51b815260040161048c90610eb2565b6060600480546103a290610e10565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756105eb816106eb565b61049f8383610921565b5f33610430818585610794565b5f8281526005602052604090206001015461061c816106eb565b6104ed838361089c565b5f326001600160a01b03841614806106465750326001600160a01b038316145b15610678576001600160a01b038084165f908152600160209081526040808320938616835292905220545b905061038d565b336001600160a01b03841614806106975750336001600160a01b038316145b156106c6576001600160a01b038084165f90815260016020908152604080832093861683529290522054610671565b60405162461bcd60e51b815260040161048c90610ec2565b61049f8383836001610955565b6106f58133610a57565b50565b6001600160a01b038216610721575f604051634b637e8f60e11b815260040161048c9190610f2c565b61072c825f83610ab6565b5050565b5f61073b8484610626565b90505f198110156104ed5781811015610786578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161048c93929190610f3a565b6104ed84848484035f610955565b6001600160a01b0383166107bd575f604051634b637e8f60e11b815260040161048c9190610f2c565b6001600160a01b0382166107e6575f60405163ec442f0560e01b815260040161048c9190610f2c565b61049f838383610ab6565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff16610895575f8381526005602090815260408083206001600160a01b03861684529091529020805460ff1916600117905561084d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161038d565b505f61038d565b5f8281526005602090815260408083206001600160a01b038516845290915281205460ff1615610895575f8381526005602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161038d565b6001600160a01b03821661094a575f60405163ec442f0560e01b815260040161048c9190610f2c565b61072c5f8383610ab6565b6001600160a01b038416610997575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161048c9190610f2c565b6001600160a01b0383166109d9575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161048c9190610f2c565b6001600160a01b038085165f90815260016020908152604080832093871683529290522082905580156104ed57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610a499190610d0c565b60405180910390a350505050565b5f8281526005602090815260408083206001600160a01b038516845290915290205460ff1661072c5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161048c929190610f6a565b6001600160a01b038316610ae0578060025f828254610ad59190610f99565b90915550610b569050565b6001600160a01b0383165f9081526020819052604090205481811015610b38578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161048c93929190610f3a565b6001600160a01b0384165f9081526020819052604090209082900390555b6001600160a01b038216610b7257600280548290039055610b90565b6001600160a01b0382165f9081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bd39190610d0c565b60405180910390a3505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146106f5575f5ffd5b803561038d81610be0565b5f60208284031215610c2c57610c2c5f5ffd5b6104c28383610c0e565b8015155b82525050565b6020810161038d8284610c36565b8281835e505f910152565b5f610c62825190565b808452602084019350610c79818560208601610c4e565b601f01601f19169290920192915050565b602080825281016104c28184610c59565b5f6001600160a01b03821661038d565b610c0481610c9b565b803561038d81610cab565b80610c04565b803561038d81610cbf565b5f5f60408385031215610ce457610ce45f5ffd5b610cee8484610cb4565b9150610cfd8460208501610cc5565b90509250929050565b80610c3a565b6020810161038d8284610d06565b5f5f5f60608486031215610d2f57610d2f5f5ffd5b610d398585610cb4565b9250610d488560208601610cb4565b9150610d578560408601610cc5565b90509250925092565b5f60208284031215610d7357610d735f5ffd5b6104c28383610cc5565b5f5f60408385031215610d9157610d915f5ffd5b610d9b8484610cc5565b9150610cfd8460208501610cb4565b60ff8116610c3a565b6020810161038d8284610daa565b5f60208284031215610dd457610dd45f5ffd5b6104c28383610cb4565b5f5f60408385031215610df257610df25f5ffd5b610d9b8484610cb4565b634e487b7160e01b5f52602260045260245ffd5b600281046001821680610e2457607f821691505b602082108103610e3657610e36610dfc565b50919050565b60158152602081017f496e73756666696369656e742062616c616e63652e0000000000000000000000815290505b60200190565b6020808252810161038d81610e3c565b601f8152602081017f4e6f7420616c6c6f77656420746f2072656164207468652062616c616e63650081529050610e6a565b6020808252810161038d81610e80565b6020808252810161038d81602181527f4e6f7420616c6c6f77656420746f20726561642074686520616c6c6f77616e6360208201527f6500000000000000000000000000000000000000000000000000000000000000604082015260600190565b610c3a81610c9b565b6020810161038d8284610f23565b60608101610f488286610f23565b610f556020830185610d06565b610f626040830184610d06565b949350505050565b60408101610f788285610f23565b6104c26020830184610d06565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561038d5761038d610f8556fea2646970667358221220c04c1f9d8d1d8bd8b82a88ea0557c0b57242bedacf19dfd5dc0df24ccc04749064736f6c634300081c0033a2646970667358221220c01178a99afdceacf6df5a4a2e3d37b91cd0f3bb85ddef54c6d1a4cfd053388164736f6c634300081c00336080604052348015600e575f5ffd5b506103398061001c5f395ff3fe608060405234801561000f575f5ffd5b506004361061003f575f3560e01c80638129fc1c1461004357806381ccf4c41461004d578063dbdff2c11461006b575b5f5ffd5b61004b610073565b005b610055610194565b604051610062919061022a565b60405180910390f35b6100556101b7565b5f61007c6101f8565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f811580156100a85750825b90505f8267ffffffffffffffff1660011480156100c45750303b155b9050811580156100d2575080155b15610109576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561013d57845468ff00000000000000001916680100000000000000001785555b831561018d57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29061018490600190610252565b60405180910390a15b5050505050565b5f44600381900b6101a7426103e861028d565b6101b191906102a4565b91505090565b5f805481806101c5836102c5565b91905055446040516020016101db9291906102e3565b604051602081830303815290604052805190602001205f1c905090565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b805b82525050565b6020810161021c8284610222565b5f67ffffffffffffffff821661021c565b61022481610238565b6020810161021c8284610249565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818102811582820484141761021c5761021c610260565b8181035f831280158383131683831291909116171561021c5761021c610260565b5f600182016102d6576102d6610260565b5060010190565b80610224565b6102ed81846102dd565b6020016102fa81836102dd565b6020019291505056fea26469706673582212209a52ae85b21153d0dd44aa51c405c92d9a70c5ad49e1c49610469538e96e1b5964736f6c634300081c003360a06040526040516111d43803806111d48339810160408190526100229161043b565b828161002e8282610086565b50508160405161003d90610311565b61004791906104ac565b604051809103905ff080158015610060573d5f5f3e3d5ffd5b506001600160a01b031660805261007e61007960805190565b6100e4565b505050610500565b61008f82610146565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156100d8576100d382826101bf565b505050565b6100e0610234565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6101235f5160206111b45f395f51905f52546001600160a01b031690565b826040516101329291906104ba565b60405180910390a161014381610255565b50565b806001600160a01b03163b5f0361017b5780604051634c9c8ce360e01b815260040161017291906104ac565b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f5f846001600160a01b0316846040516101db91906104f6565b5f60405180830381855af49150503d805f8114610213576040519150601f19603f3d011682016040523d82523d5f602084013e610218565b606091505b509092509050610229858383610292565b925050505b92915050565b34156102535760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661027e575f604051633173bdd160e11b815260040161017291906104ac565b805f5160206111b45f395f51905f5261019e565b6060826102a7576102a2826102e8565b6102e1565b81511580156102be57506001600160a01b0384163b155b156102de5783604051639996b31560e01b815260040161017291906104ac565b50805b9392505050565b8051156102f85780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b6106a680610b0e83390190565b5f6001600160a01b03821661022e565b6103378161031e565b8114610143575f5ffd5b805161022e8161032e565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681016001600160401b03811182821017156103855761038561034c565b6040525050565b5f61039660405190565b90506103a28282610360565b919050565b5f6001600160401b038211156103bf576103bf61034c565b601f19601f83011660200192915050565b8281835e505f910152565b5f6103ed6103e8846103a7565b61038c565b9050828152838383011115610403576104035f5ffd5b6102e18360208301846103d0565b5f82601f830112610423576104235f5ffd5b81516104338482602086016103db565b949350505050565b5f5f5f60608486031215610450576104505f5ffd5b61045a8585610341565b92506104698560208601610341565b60408501519092506001600160401b03811115610487576104875f5ffd5b61049386828701610411565b9150509250925092565b6104a68161031e565b82525050565b6020810161022e828461049d565b604081016104c8828561049d565b6102e1602083018461049d565b5f6104de825190565b6104ec8185602086016103d0565b9290920192915050565b61022e81836104d5565b6080516105f76105175f395f601001526105f75ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036100c4575f357fffffffff00000000000000000000000000000000000000000000000000000000167f4f1ef28600000000000000000000000000000000000000000000000000000000146100ba576040517fd2b576ec00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6100c26100cc565b565b6100c26100fa565b5f806100db36600481846103c0565b8101906100e8919061051c565b915091506100f6828261010a565b5050565b6100c2610105610164565b61019b565b610113826101b9565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561015c576101578282610260565b505050565b6100f66102d4565b5f6101967f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f5f375f5f365f845af43d5f5f3e8080156101b5573d5ff35b3d5ffd5b806001600160a01b03163b5f0361020757806040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526004016101fe919061057d565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161027c91906105b7565b5f60405180830381855af49150503d805f81146102b4576040519150601f19603f3d011682016040523d82523d5f602084013e6102b9565b606091505b50915091506102c985838361030c565b925050505b92915050565b34156100c2576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826103215761031c8261037b565b610374565b815115801561033857506001600160a01b0384163b155b1561037157836040517f9996b3150000000000000000000000000000000000000000000000000000000081526004016101fe919061057d565b50805b9392505050565b80511561038b5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50565b5f5f858511156103d1576103d15f5ffd5b838611156103e0576103e05f5ffd5b5050820193919092039150565b5f6001600160a01b0382166102ce565b610406816103ed565b81146103bd575f5ffd5b80356102ce816103fd565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff8211171561046e5761046e61041b565b6040525050565b5f61047f60405190565b905061048b8282610448565b919050565b5f67ffffffffffffffff8211156104a9576104a961041b565b601f19601f83011660200192915050565b82818337505f910152565b5f6104d76104d284610490565b610475565b90508281528383830111156104ed576104ed5f5ffd5b6103748360208301846104ba565b5f82601f83011261050d5761050d5f5ffd5b610374838335602085016104c5565b5f5f60408385031215610530576105305f5ffd5b61053a8484610410565b9150602083013567ffffffffffffffff811115610558576105585f5ffd5b610564858286016104fb565b9150509250929050565b610577816103ed565b82525050565b602081016102ce828461056e565b8281835e505f910152565b5f61059f825190565b6105ad81856020860161058b565b9290920192915050565b6102ce818361059656fea26469706673582212201cedf6524dec6aa4b1c8bfa7c9f2a82fd0ab4dd8a93113aec84110724f387fe364736f6c634300081c0033608060405234801561000f575f5ffd5b506040516106a63803806106a683398101604081905261002e916100f3565b806001600160a01b038116610061575f604051631e4fbdf760e01b81526004016100589190610126565b60405180910390fd5b61006a81610071565b5050610134565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6001600160a01b0382165b92915050565b6100db816100c0565b81146100e5575f5ffd5b50565b80516100cc816100d2565b5f60208284031215610106576101065f5ffd5b61011083836100e8565b9392505050565b610120816100c0565b82525050565b602081016100cc8284610117565b610565806101415f395ff3fe608060405260043610610058575f3560e01c80639623609d116100415780639623609d1461009f578063ad3cb1cc146100b2578063f2fde38b14610107575f5ffd5b8063715018a61461005c5780638da5cb5b14610072575b5f5ffd5b348015610067575f5ffd5b50610070610126565b005b34801561007d575f5ffd5b505f546001600160a01b031660405161009691906102e9565b60405180910390f35b6100706100ad36600461043b565b610139565b3480156100bd575f5ffd5b506100fa6040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161009691906104d9565b348015610112575f5ffd5b506100706101213660046104ea565b6101bd565b61012e61021c565b6101375f610261565b565b61014161021c565b6040517f4f1ef2860000000000000000000000000000000000000000000000000000000081526001600160a01b03841690634f1ef28690349061018a9086908690600401610507565b5f604051808303818588803b1580156101a1575f5ffd5b505af11580156101b3573d5f5f3e3d5ffd5b5050505050505050565b6101c561021c565b6001600160a01b038116610210575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161020791906102e9565b60405180910390fd5b61021981610261565b50565b5f546001600160a01b0316331461013757336040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161020791906102e9565b5f80546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f6001600160a01b0382165b92915050565b6102e3816102c8565b82525050565b602081016102d482846102da565b5f6102d4826102c8565b61030a816102f7565b8114610219575f5ffd5b80356102d481610301565b61030a816102c8565b80356102d48161031f565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff8211171561038657610386610333565b6040525050565b5f61039760405190565b90506103a38282610360565b919050565b5f67ffffffffffffffff8211156103c1576103c1610333565b601f19601f83011660200192915050565b82818337505f910152565b5f6103ef6103ea846103a8565b61038d565b9050828152838383011115610405576104055f5ffd5b6104138360208301846103d2565b9392505050565b5f82601f83011261042c5761042c5f5ffd5b610413838335602085016103dd565b5f5f5f60608486031215610450576104505f5ffd5b61045a8585610314565b92506104698560208601610328565b9150604084013567ffffffffffffffff811115610487576104875f5ffd5b6104938682870161041a565b9150509250925092565b8281835e505f910152565b5f6104b1825190565b8084526020840193506104c881856020860161049d565b601f01601f19169290920192915050565b6020808252810161041381846104a8565b5f602082840312156104fd576104fd5f5ffd5b6104138383610328565b6040810161051582856102da565b818103602083015261052781846104a8565b94935050505056fea2646970667358221220a75fd2ab36f24ab4aa217b7ce41624c9aa24760a040e91c069e895b5347fd5d864736f6c634300081c0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103bd64e14789a915ea657e42f2dbf0b973227708fa64b58766287637985d1ade69",
}
// SystemDeployerPhase2ABI is the input ABI used to generate the binding from.
diff --git a/contracts/generated/Ten/Ten.go b/contracts/generated/Ten/Ten.go
new file mode 100644
index 0000000000..0436cc8747
--- /dev/null
+++ b/contracts/generated/Ten/Ten.go
@@ -0,0 +1,2857 @@
+// Code generated - DO NOT EDIT.
+// This file is a generated binding and any manual changes will be lost.
+
+package Ten
+
+import (
+ "errors"
+ "math/big"
+ "strings"
+
+ ethereum "github.com/ethereum/go-ethereum"
+ "github.com/ethereum/go-ethereum/accounts/abi"
+ "github.com/ethereum/go-ethereum/accounts/abi/bind"
+ "github.com/ethereum/go-ethereum/common"
+ "github.com/ethereum/go-ethereum/core/types"
+ "github.com/ethereum/go-ethereum/event"
+)
+
+// Reference imports to suppress errors if they are not otherwise used.
+var (
+ _ = errors.New
+ _ = big.NewInt
+ _ = strings.NewReader
+ _ = ethereum.NotFound
+ _ = bind.Bind
+ _ = common.Big1
+ _ = types.BloomLookup
+ _ = event.NewSubscription
+ _ = abi.ConvertType
+)
+
+// CheckpointsCheckpoint208 is an auto generated low-level Go binding around an user-defined struct.
+type CheckpointsCheckpoint208 struct {
+ Key *big.Int
+ Value *big.Int
+}
+
+// Erc20WithLockInitialAllocation is an auto generated low-level Go binding around an user-defined struct.
+type Erc20WithLockInitialAllocation struct {
+ Account common.Address
+ Amount *big.Int
+ Locked bool
+}
+
+// TenMetaData contains all meta data concerning the Ten contract.
+var TenMetaData = &bind.MetaData{
+ ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckpointUnorderedInsertion\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"increasedSupply\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"cap\",\"type\":\"uint256\"}],\"name\":\"ERC20ExceededSafeSupply\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"allowance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientAllowance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"needed\",\"type\":\"uint256\"}],\"name\":\"ERC20InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"approver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidApprover\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"ERC20InvalidReceiver\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"ERC20InvalidSpender\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"}],\"name\":\"ERC2612ExpiredSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"signer\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"ERC2612InvalidSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"},{\"internalType\":\"uint48\",\"name\":\"clock\",\"type\":\"uint48\"}],\"name\":\"ERC5805FutureLookup\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC6372InconsistentClock\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"bits\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"SafeCastOverflowedUintDowncast\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"}],\"name\":\"VotesExpiredSignature\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Approval\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"fromDelegate\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"toDelegate\",\"type\":\"address\"}],\"name\":\"DelegateChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegate\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"previousVotes\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newVotes\",\"type\":\"uint256\"}],\"name\":\"DelegateVotesChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"Transfer\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"CLOCK_MODE\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VESTING_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"allowance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"approve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"pos\",\"type\":\"uint32\"}],\"name\":\"checkpoints\",\"outputs\":[{\"components\":[{\"internalType\":\"uint48\",\"name\":\"_key\",\"type\":\"uint48\"},{\"internalType\":\"uint208\",\"name\":\"_value\",\"type\":\"uint208\"}],\"internalType\":\"structCheckpoints.Checkpoint208\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"clock\",\"outputs\":[{\"internalType\":\"uint48\",\"name\":\"\",\"type\":\"uint48\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createLockedAccount\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"}],\"name\":\"delegate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"delegatee\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"expiry\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"delegateBySig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"delegates\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"name\":\"getPastTotalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"timepoint\",\"type\":\"uint256\"}],\"name\":\"getPastVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"getVotes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantVesting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"locked\",\"type\":\"bool\"}],\"internalType\":\"structErc20WithLock.InitialAllocation[]\",\"name\":\"allocations\",\"type\":\"tuple[]\"}],\"name\":\"initializeAllocations\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"locked\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"name\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"nonces\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"numCheckpoints\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"deadline\",\"type\":\"uint256\"},{\"internalType\":\"uint8\",\"name\":\"v\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"permit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeVesting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transfer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"transferFrom\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]",
+ Bin: "0x608060405234801561000f575f5ffd5b5061001861001d565b6100fc565b5f6100266100bd565b805490915068010000000000000000900460ff16156100585760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100ba5780546001600160401b0319166001600160401b0390811782556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916100b1916100e7565b60405180910390a15b50565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005b92915050565b6001600160401b0382168152602081016100e1565b613828806101095f395ff3fe608060405234801561000f575f5ffd5b50600436106102b7575f3560e01c80638129fc1c11610171578063a217fddf116100d2578063d505accf11610088578063dd62ed3e1161006e578063dd62ed3e14610659578063f1127ed8146106b0578063f2fde38b146106d0575f5ffd5b8063d505accf14610633578063d547741f14610646575f5ffd5b8063a9fb3efd116100b8578063a9fb3efd146105eb578063c3cda520146105fe578063cbf9fe5f14610611575f5ffd5b8063a217fddf146105d1578063a9059cbb146105d8575f5ffd5b806391d148541161012757806395d89b411161010d57806395d89b411461058f5780639ab24eb014610597578063a1c1418c146105aa575f5ffd5b806391d148541461052357806391ddadf41461057a575f5ffd5b80638bcf86f8116101575780638bcf86f8146104d85780638da5cb5b146104e05780638e539e8c14610510575f5ffd5b80638129fc1c146104b557806384b0196e146104bd575f5ffd5b80633a46b1a81161021b5780635c19a95c116101d157806370a08231116101b757806370a0823114610487578063715018a61461049a5780637ecebe00146104a2575f5ffd5b80635c19a95c146104545780636fcfff4514610467575f5ffd5b80634a3bbe2b116102015780634a3bbe2b146103f55780634bf5d7e914610408578063587cde1e14610410575f5ffd5b80633a46b1a8146103cf5780633b0da260146103e2575f5ffd5b8063248a9ca311610270578063313ce56711610256578063313ce567146103a55780633644e515146103b457806336568abe146103bc575f5ffd5b8063248a9ca31461034f5780632f2ff15d14610390575f5ffd5b8063095ea7b3116102a0578063095ea7b3146102f957806318160ddd1461030c57806323b872dd1461033c575f5ffd5b806301ffc9a7146102bb57806306fdde03146102e4575b5f5ffd5b6102ce6102c9366004612b2e565b6106e3565b6040516102db9190612b55565b60405180910390f35b6102ec61077b565b6040516102db9190612b9f565b6102ce610307366004612be5565b610833565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b6040516102db9190612c21565b6102ce61034a366004612c2f565b61084a565b61032f61035d366004612c75565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6103a361039e366004612c92565b610860565b005b60126040516102db9190612cc8565b61032f6108a9565b6103a36103ca366004612c92565b6108b7565b61032f6103dd366004612be5565b610908565b6103a36103f0366004612cd6565b610953565b6103a3610403366004612cd6565b610988565b6102ec6109e9565b61044761041e366004612cd6565b6001600160a01b039081165f9081525f5160206137d35f395f51905f5260205260409020541690565b6040516102db9190612cfc565b6103a3610462366004612cd6565b610a7a565b61047a610475366004612cd6565b610a89565b6040516102db9190612d16565b61032f610495366004612cd6565b610a93565b6103a3610ad6565b61032f6104b0366004612cd6565b610ae9565b6103a3610af3565b6104c5610c9c565b6040516102db9796959493929190612da8565b6102ce610d4c565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b0316610447565b61032f61051e366004612c75565b610d9b565b6102ce610531366004612c92565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610582610dd0565b6040516102db9190612e32565b6102ec610dd9565b61032f6105a5366004612cd6565b610e2a565b61032f7f6343452265350cc926492d9bfc7710ca06328d7c328cdb091fde925c1441e7a881565b61032f5f81565b6102ce6105e6366004612be5565b610e78565b6103a36105f9366004612fa6565b610e83565b6103a361060c366004612ff2565b610fb4565b6102ce61061f366004612cd6565b5f6020819052908152604090205460ff1681565b6103a361064136600461306b565b611070565b6103a3610654366004612c92565b6111c5565b61032f6106673660046130f6565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6106c36106be36600461312b565b611208565b6040516102db9190613186565b6103a36106de366004612cd6565b611225565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061077557507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60605f7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b90508060030180546107b1906131a8565b80601f01602080910402602001604051908101604052809291908181526020018280546107dd906131a8565b80156108285780601f106107ff57610100808354040283529160200191610828565b820191905f5260205f20905b81548152906001019060200180831161080b57829003601f168201915b505050505091505090565b5f33610840818585611278565b5060019392505050565b5f610856848484611285565b90505b9392505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546108998161129c565b6108a383836112a6565b50505050565b5f6108b2611372565b905090565b6001600160a01b03811633146108f9576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610903828261137b565b505050565b5f5f5160206137d35f395f51905f526109426109238461141f565b6001600160a01b0386165f908152600184016020526040902090611479565b6001600160d01b0316949350505050565b61095b61152c565b6109857f6343452265350cc926492d9bfc7710ca06328d7c328cdb091fde925c1441e7a8826111c5565b50565b61099061152c565b6001600160a01b0381166109bf5760405162461bcd60e51b81526004016109b690613206565b60405180910390fd5b6109857f6343452265350cc926492d9bfc7710ca06328d7c328cdb091fde925c1441e7a882610860565b60606109f36115a0565b65ffffffffffff16610a03610dd0565b65ffffffffffff1614610a42576040517f6ff0714000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5060408051808201909152601d81527f6d6f64653d626c6f636b6e756d6265722666726f6d3d64656661756c74000000602082015290565b33610a8581836115aa565b5050565b5f61077582611662565b5f807f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace005b6001600160a01b039093165f9081526020939093525050604090205490565b610ade61152c565b610ae75f6116b1565b565b5f6107758261172e565b5f610afc611738565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610b285750825b90505f8267ffffffffffffffff166001148015610b445750303b155b905081158015610b52575080155b15610b89576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610bbd57845468ff00000000000000001916680100000000000000001785555b610bfd604051806040016040528060038152602001622a22a760e91b815250604051806040016040528060038152602001622a22a760e91b815250611760565b610c21604051806040016040528060038152602001622a22a760e91b815250611772565b610c296117b9565b610c32336117c1565b610c3a6117b9565b610c445f336112a6565b508315610c9557845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610c8c90600190613239565b60405180910390a15b5050505050565b5f60608082808083817fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008054909150158015610cda57506001810154155b610cf65760405162461bcd60e51b81526004016109b690613279565b610cfe6117d2565b610d06611823565b604080515f808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009c939b5091995046985030975095509350915050565b335f9081526020819052604081205460ff1615610d7b5760405162461bcd60e51b81526004016109b6906132bb565b50335f908152602081905260409020805460ff1916600190811790915590565b5f5f5160206137d35f395f51905f52610dc0610db68461141f565b6002830190611479565b6001600160d01b03169392505050565b5f6108b26115a0565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060917f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00916107b1906131a8565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d01602052604081205f5160206137d35f395f51905f5290610dc09061184c565b5f6108598383611886565b610e8b61152c565b60015460ff1615610eae5760405162461bcd60e51b81526004016109b690613325565b5f5b8151811015610fa4575f828281518110610ecc57610ecc613335565b60200260200101515f015190505f838381518110610eec57610eec613335565b60200260200101516020015190505f6001600160a01b0316826001600160a01b031603610f2b5760405162461bcd60e51b81526004016109b690613206565b5f8111610f4a5760405162461bcd60e51b81526004016109b69061337b565b610f5482826118a5565b838381518110610f6657610f66613335565b60200260200101516040015115610f9a576001600160a01b0382165f908152602081905260409020805460ff191660011790555b5050600101610eb0565b50506001805460ff191681179055565b83421115610ff057836040517f4683af0e0000000000000000000000000000000000000000000000000000000081526004016109b69190612c21565b5f6110516110497fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf89898960405160200161102e949392919061338b565b604051602081830303815290604052805190602001206118d9565b858585611920565b905061105d818761194c565b61106781886115aa565b50505050505050565b834211156110ac57836040517f627913020000000000000000000000000000000000000000000000000000000081526004016109b69190612c21565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886111168c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b8960405160200161112c969594939291906133c9565b6040516020818303038152906040528051906020012090505f61114e826118d9565b90505f61115d82878787611920565b9050896001600160a01b0316816001600160a01b0316146111ae57808a6040517f4b800e460000000000000000000000000000000000000000000000000000000081526004016109b6929190613418565b6111b98a8a8a611278565b50505050505050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546111fe8161129c565b6108a3838361137b565b604080518082019091525f808252602082015261085983836119c8565b61122d61152c565b6001600160a01b03811661126f575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016109b69190612cfc565b610985816116b1565b6109038383836001611a29565b5f611291848484611b4f565b610856848484611c4b565b6109858133611c6e565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611369575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561131f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610775565b5f915050610775565b5f6108b2611cec565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611369575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610775565b5f5f611429610dd0565b90508065ffffffffffff1683106114705782816040517fecd3f81e0000000000000000000000000000000000000000000000000000000081526004016109b6929190613433565b61085983611d4f565b81545f90818160058111156114d5575f61149284611d80565b61149c9085613462565b5f8881526020902090915081015465ffffffffffff90811690871610156114c5578091506114d3565b6114d0816001613475565b92505b505b5f6114e287878585611ee5565b9050801561151f57611506876114f9600184613462565b5f91825260209091200190565b54660100000000000090046001600160d01b0316611521565b5f5b979650505050505050565b3361155e7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610ae757336040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016109b69190612cfc565b5f6108b243611d4f565b5f5160206137d35f395f51905f525f6115e6846001600160a01b039081165f9081525f5160206137d35f395f51905f5260205260409020541690565b6001600160a01b038581165f81815260208690526040808220805473ffffffffffffffffffffffffffffffffffffffff1916898616908117909155905194955093928516927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46108a3818461165d87611f44565b611f4e565b6001600160a01b0381165f9081527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d0160205260408120545f5160206137d35f395f51905f5290610859906120b2565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805473ffffffffffffffffffffffffffffffffffffffff1981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f610775826120dd565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610775565b611768612105565b610a858282612143565b61177a612105565b610985816040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506121a6565b610ae7612105565b6117c9612105565b61098581612218565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060917fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d100916107b1906131a8565b60605f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1006107a0565b80545f90801561187e57611865836114f9600184613462565b54660100000000000090046001600160d01b0316610859565b5f9392505050565b5f33611893818585611b4f565b61189d8484612220565b949350505050565b6001600160a01b0382166118ce575f60405163ec442f0560e01b81526004016109b69190612cfc565b610a855f838361222d565b5f6107756118e5611372565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b5f5f5f5f61193088888888612238565b92509250925061194082826122f2565b50909695505050505050565b6001600160a01b0382165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090208054600181019091558181146109035782816040517f752d88c00000000000000000000000000000000000000000000000000000000081526004016109b6929190613488565b6040805180820182525f80825260208083018290526001600160a01b03861682527fe8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d019052919091205f5160206137d35f395f51905f529061189d90846123f3565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b038516611a8c575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016109b69190612cfc565b6001600160a01b038416611ace575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016109b69190612cfc565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610c9557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051611b409190612c21565b60405180910390a35050505050565b6001600160a01b038381165f8181527f17362d2595b5f80a872a5bc168967525161500ca3618caf47c0af678e68e5412602090815260408083205494871683528083205491839052808320549383529091205460ff9384169391821692821691168315611bbf5750505050505050565b8215611bce5750505050505050565b8015611c285781611bf15760405162461bcd60e51b81526004016109b6906134d3565b84611bfb88610a93565b03611067576001600160a01b0387165f908152602081905260409020805460ff1916905550505050505050565b81156110675780611bf15760405162461bcd60e51b81526004016109b69061353b565b5f33611c58858285612463565b611c638585856124fe565b506001949350505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff16610a855780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016109b6929190613488565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f611d16612574565b611d1e6125ef565b4630604051602001611d3495949392919061354b565b60405160208183030381529060405280519060200120905090565b5f65ffffffffffff821115611d7c576030826040516306dfcc6560e41b81526004016109b69291906135aa565b5090565b5f60018211611d8d575090565b8160017001000000000000000000000000000000008210611db35760809190911c9060401b5b680100000000000000008210611dce5760409190911c9060201b5b6401000000008210611de55760209190911c9060101b5b620100008210611dfa5760109190911c9060081b5b6101008210611e0e5760089190911c9060041b5b60108210611e215760049190911c9060021b5b60048210611e2d5760011b5b600302600190811c90818581611e4557611e456135b8565b048201901c90506001818581611e5d57611e5d6135b8565b048201901c90506001818581611e7557611e756135b8565b048201901c90506001818581611e8d57611e8d6135b8565b048201901c90506001818581611ea557611ea56135b8565b048201901c90506001818581611ebd57611ebd6135b8565b048201901c9050611edc818581611ed657611ed66135b8565b04821190565b90039392505050565b5f5b81831015611f3c575f611efa8484612644565b5f8781526020902090915065ffffffffffff86169082015465ffffffffffff161115611f2857809250611f36565b611f33816001613475565b93505b50611ee7565b509392505050565b5f61077582610a93565b5f5160206137d35f395f51905f526001600160a01b0384811690841614801590611f7757505f82115b156108a3576001600160a01b03841615612017576001600160a01b0384165f90815260018201602052604081208190611fbb9061265e611fb687612669565b612697565b6001600160d01b031691506001600160d01b03169150856001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161200c9291906135cc565b60405180910390a250505b6001600160a01b038316156108a3576001600160a01b0383165f90815260018201602052604081208190612051906126cf611fb687612669565b6001600160d01b031691506001600160d01b03169150846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516120a29291906135cc565b60405180910390a2505050505050565b5f63ffffffff821115611d7c576020826040516306dfcc6560e41b81526004016109b69291906135aa565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610ab7565b61210d6126da565b610ae7576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61214b612105565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace007f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace036121978482613666565b50600481016108a38382613666565b6121ae612105565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1007fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1026121fa8482613666565b50600381016122098382613666565b505f8082556001909101555050565b61122d612105565b5f336108408185856124fe565b6109038383836126f8565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561227157505f915060039050826122e8565b5f6001888888886040515f81526020016040526040516122949493929190613722565b6020604051602081039080840390855afa1580156122b4573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b0381166122df57505f9250600191508290506122e8565b92505f91508190505b9450945094915050565b5f8260038111156123055761230561373d565b0361230e575050565b60018260038111156123225761232261373d565b03612359576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561236d5761236d61373d565b036123a6576040517ffce698f70000000000000000000000000000000000000000000000000000000081526109b6908290600401612c21565b60038260038111156123ba576123ba61373d565b03610a8557806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016109b69190612c21565b604080518082019091525f8082526020820152825f018263ffffffff168154811061242057612420613335565b5f9182526020918290206040805180820190915291015465ffffffffffff81168252660100000000000090046001600160d01b0316918101919091529392505050565b6001600160a01b038381165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0160209081526040808320938616835292905220545f198110156108a357818110156124f0578281836040517ffb8f41b20000000000000000000000000000000000000000000000000000000081526004016109b693929190613751565b6108a384848484035f611a29565b6001600160a01b038316612540575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016109b69190612cfc565b6001600160a01b038216612569575f60405163ec442f0560e01b81526004016109b69190612cfc565b61090383838361222d565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008161259f6117d2565b8051909150156125b757805160209091012092915050565b815480156125c6579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d1008161261a611823565b80519091501561263257805160209091012092915050565b600182015480156125c6579392505050565b5f6126526002848418613779565b61085990848416613475565b5f610859828461378c565b5f6001600160d01b03821115611d7c5760d0826040516306dfcc6560e41b81526004016109b69291906135aa565b5f5f6126c26126a4610dd0565b6126ba6126b08861184c565b868863ffffffff16565b879190612790565b915091505b935093915050565b5f61085982846137af565b5f6126e3611738565b5468010000000000000000900460ff16919050565b61270383838361279d565b6001600160a01b038316612785575f61273a7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace025490565b90506001600160d01b03808211156127825781816040517f1cb15d260000000000000000000000000000000000000000000000000000000081526004016109b69291906135cc565b50505b6109038383836128ed565b5f806126c2858585612980565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace006001600160a01b0384166127ea5781816002015f8282546127df9190613475565b909155506128609050565b6001600160a01b0384165f9081526020829052604090205482811015612842578481846040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016109b693929190613751565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b03831661287e57600281018054839003905561289c565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128df9190612c21565b60405180910390a350505050565b5f5160206137d35f395f51905f526001600160a01b03841661291f5761291c816002016126cf611fb685612669565b50505b6001600160a01b038316612943576129408160020161265e611fb685612669565b50505b6001600160a01b038481165f9081525f5160206137d35f395f51905f5260205260408082205486841683529120546108a392918216911684611f4e565b82545f9081908015612a98575f61299c876114f9600185613462565b805490915065ffffffffffff80821691660100000000000090046001600160d01b03169088168211156129fb576040517f2520601d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8765ffffffffffff168265ffffffffffff1603612a3757825465ffffffffffff1666010000000000006001600160d01b03891602178355612a8a565b6040805180820190915265ffffffffffff808a1682526001600160d01b03808a1660208085019182528d54600181018f555f8f815291909120945191519092166601000000000000029216919091179101555b94508593506126c792505050565b50506040805180820190915265ffffffffffff80851682526001600160d01b0380851660208085019182528854600181018a555f8a81529182209551925190931666010000000000000291909316179201919091559050816126c7565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b8114610985575f5ffd5b803561077581612af5565b5f60208284031215612b4157612b415f5ffd5b6108598383612b23565b8015155b82525050565b602081016107758284612b4b565b8281835e505f910152565b5f612b77825190565b808452602084019350612b8e818560208601612b63565b601f01601f19169290920192915050565b602080825281016108598184612b6e565b5f6001600160a01b038216610775565b612b1981612bb0565b803561077581612bc0565b80612b19565b803561077581612bd4565b5f5f60408385031215612bf957612bf95f5ffd5b612c038484612bc9565b9150612c128460208501612bda565b90509250929050565b80612b4f565b602081016107758284612c1b565b5f5f5f60608486031215612c4457612c445f5ffd5b612c4e8585612bc9565b9250612c5d8560208601612bc9565b9150612c6c8560408601612bda565b90509250925092565b5f60208284031215612c8857612c885f5ffd5b6108598383612bda565b5f5f60408385031215612ca657612ca65f5ffd5b612cb08484612bda565b9150612c128460208501612bc9565b60ff8116612b4f565b602081016107758284612cbf565b5f60208284031215612ce957612ce95f5ffd5b6108598383612bc9565b612b4f81612bb0565b602081016107758284612cf3565b63ffffffff8116612b4f565b602081016107758284612d0a565b7fff000000000000000000000000000000000000000000000000000000000000008116612b4f565b612d568282612c1b565b5060200190565b60200190565b5f612d6c825190565b80845260209384019383015f5b82811015612d9e578151612d8d8782612d4c565b965050602082019150600101612d79565b5093949350505050565b60e08101612db6828a612d24565b8181036020830152612dc88189612b6e565b90508181036040830152612ddc8188612b6e565b9050612deb6060830187612c1b565b612df86080830186612cf3565b612e0560a0830185612c1b565b81810360c0830152612e178184612d63565b9998505050505050505050565b65ffffffffffff8116612b4f565b602081016107758284612e24565b634e487b7160e01b5f52604160045260245ffd5b601f19601f830116810181811067ffffffffffffffff82111715612e7a57612e7a612e40565b6040525050565b5f612e8b60405190565b9050612e978282612e54565b919050565b5f67ffffffffffffffff821115612eb557612eb5612e40565b5060209081020190565b801515612b19565b803561077581612ebf565b5f60608284031215612ee557612ee55f5ffd5b612eef6060612e81565b9050612efb8383612bc9565b8152612f0a8360208401612bda565b6020820152612f1c8360408401612ec7565b604082015292915050565b5f612f39612f3484612e9c565b612e81565b83815290506020810160608402830185811115612f5757612f575f5ffd5b835b81811015612f7b57612f6b8782612ed2565b8352602090920191606001612f59565b5050509392505050565b5f82601f830112612f9757612f975f5ffd5b61085983833560208501612f27565b5f60208284031215612fb957612fb95f5ffd5b813567ffffffffffffffff811115612fd257612fd25f5ffd5b61189d84828501612f85565b60ff8116612b19565b803561077581612fde565b5f5f5f5f5f5f60c0878903121561300a5761300a5f5ffd5b6130148888612bc9565b95506130238860208901612bda565b94506130328860408901612bda565b93506130418860608901612fe7565b92506130508860808901612bda565b915061305f8860a08901612bda565b90509295509295509295565b5f5f5f5f5f5f5f60e0888a031215613084576130845f5ffd5b61308e8989612bc9565b965061309d8960208a01612bc9565b95506130ac8960408a01612bda565b94506130bb8960608a01612bda565b93506130ca8960808a01612fe7565b92506130d98960a08a01612bda565b91506130e88960c08a01612bda565b905092959891949750929550565b5f5f6040838503121561310a5761310a5f5ffd5b612cb08484612bc9565b63ffffffff8116612b19565b803561077581613114565b5f5f6040838503121561313f5761313f5f5ffd5b6131498484612bc9565b9150612c128460208501613120565b6001600160d01b038116612b4f565b80516131738382612e24565b5060208101516109036020840182613158565b604081016107758284613167565b634e487b7160e01b5f52602260045260245ffd5b6002810460018216806131bc57607f821691505b6020821081036131ce576131ce613194565b50919050565b600f8152602081017f496e76616c6964206163636f756e74000000000000000000000000000000000081529050612d5d565b60208082528101610775816131d4565b5f61077582613223565b90565b67ffffffffffffffff1690565b612b4f81613216565b602081016107758284613230565b60158152602081017f4549503731323a20556e696e697469616c697a6564000000000000000000000081529050612d5d565b6020808252810161077581613247565b600e8152602081017f416c7265616479206c6f636b656400000000000000000000000000000000000081529050612d5d565b6020808252810161077581613289565b60268152602081017f496e697469616c20616c6c6f636174696f6e7320616c726561647920636f6e6681527f6967757265640000000000000000000000000000000000000000000000000000602082015290505b60400190565b60208082528101610775816132cb565b634e487b7160e01b5f52603260045260245ffd5b60178152602081017f416d6f756e74206d75737420626520706f73697469766500000000000000000081529050612d5d565b6020808252810161077581613349565b608081016133998287612c1b565b6133a66020830186612cf3565b6133b36040830185612c1b565b6133c06060830184612c1b565b95945050505050565b60c081016133d78289612c1b565b6133e46020830188612cf3565b6133f16040830187612cf3565b6133fe6060830186612c1b565b61340b6080830185612c1b565b61152160a0830184612c1b565b604081016134268285612cf3565b6108596020830184612cf3565b604081016134418285612c1b565b6108596020830184612e24565b634e487b7160e01b5f52601160045260245ffd5b818103818111156107755761077561344e565b808201808211156107755761077561344e565b604081016134968285612cf3565b6108596020830184612c1b565b60208082527f4c6f636b65643a207472616e73666572206f6e6c7920746f2076657374696e679101908152612d5d565b60208082528101610775816134a3565b60398152602081017f43616e206f6e6c79207472616e73666572206c6f636b656420746f6b656e732081527f746f206f74686572206c6f636b6564206163636f756e74732e000000000000006020820152905061331f565b60208082528101610775816134e3565b60a081016135598288612c1b565b6135666020830187612c1b565b6135736040830186612c1b565b6135806060830185612c1b565b61358d6080830184612cf3565b9695505050505050565b5f60ff8216610775565b612b4f81613597565b6040810161349682856135a1565b634e487b7160e01b5f52601260045260245ffd5b604081016134968285612c1b565b5f6107756132208381565b6135ee836135da565b81545f1960089490940293841b1916921b91909117905550565b5f6109038184846135e5565b81811015610a85576136265f82613608565b600101613614565b601f821115610903575f818152602090206020601f850104810160208510156136545750805b610c956020601f860104830182613614565b815167ffffffffffffffff81111561368057613680612e40565b61368a82546131a8565b61369582828561362e565b506020601f8211600181146136c8575f83156136b15750848201515b5f19600885021c1981166002850217855550610c95565b5f84815260208120601f198516915b828110156136f757878501518255602094850194600190920191016136d7565b508482101561371357838701515f19601f87166008021c191681555b50505050600202600101905550565b608081016137308287612c1b565b6133a66020830186612cbf565b634e487b7160e01b5f52602160045260245ffd5b6060810161375f8286612cf3565b61376c6020830185612c1b565b61189d6040830184612c1b565b5f82613787576137876135b8565b500490565b6001600160d01b039182169190811690828203908111156107755761077561344e565b6001600160d01b039182169190811690828201908111156107755761077561344e56fee8b26c30fad74198956032a3533d903385d56dd795af560196f9c78d4af40d00a2646970667358221220251ea70af387f3d138d39ac86dee22aa167980788788b130debd77bc49a0957764736f6c634300081c0033",
+}
+
+// TenABI is the input ABI used to generate the binding from.
+// Deprecated: Use TenMetaData.ABI instead.
+var TenABI = TenMetaData.ABI
+
+// TenBin is the compiled bytecode used for deploying new contracts.
+// Deprecated: Use TenMetaData.Bin instead.
+var TenBin = TenMetaData.Bin
+
+// DeployTen deploys a new Ethereum contract, binding an instance of Ten to it.
+func DeployTen(auth *bind.TransactOpts, backend bind.ContractBackend) (common.Address, *types.Transaction, *Ten, error) {
+ parsed, err := TenMetaData.GetAbi()
+ if err != nil {
+ return common.Address{}, nil, nil, err
+ }
+ if parsed == nil {
+ return common.Address{}, nil, nil, errors.New("GetABI returned nil")
+ }
+
+ address, tx, contract, err := bind.DeployContract(auth, *parsed, common.FromHex(TenBin), backend)
+ if err != nil {
+ return common.Address{}, nil, nil, err
+ }
+ return address, tx, &Ten{TenCaller: TenCaller{contract: contract}, TenTransactor: TenTransactor{contract: contract}, TenFilterer: TenFilterer{contract: contract}}, nil
+}
+
+// Ten is an auto generated Go binding around an Ethereum contract.
+type Ten struct {
+ TenCaller // Read-only binding to the contract
+ TenTransactor // Write-only binding to the contract
+ TenFilterer // Log filterer for contract events
+}
+
+// TenCaller is an auto generated read-only Go binding around an Ethereum contract.
+type TenCaller struct {
+ contract *bind.BoundContract // Generic contract wrapper for the low level calls
+}
+
+// TenTransactor is an auto generated write-only Go binding around an Ethereum contract.
+type TenTransactor struct {
+ contract *bind.BoundContract // Generic contract wrapper for the low level calls
+}
+
+// TenFilterer is an auto generated log filtering Go binding around an Ethereum contract events.
+type TenFilterer struct {
+ contract *bind.BoundContract // Generic contract wrapper for the low level calls
+}
+
+// TenSession is an auto generated Go binding around an Ethereum contract,
+// with pre-set call and transact options.
+type TenSession struct {
+ Contract *Ten // Generic contract binding to set the session for
+ CallOpts bind.CallOpts // Call options to use throughout this session
+ TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
+}
+
+// TenCallerSession is an auto generated read-only Go binding around an Ethereum contract,
+// with pre-set call options.
+type TenCallerSession struct {
+ Contract *TenCaller // Generic contract caller binding to set the session for
+ CallOpts bind.CallOpts // Call options to use throughout this session
+}
+
+// TenTransactorSession is an auto generated write-only Go binding around an Ethereum contract,
+// with pre-set transact options.
+type TenTransactorSession struct {
+ Contract *TenTransactor // Generic contract transactor binding to set the session for
+ TransactOpts bind.TransactOpts // Transaction auth options to use throughout this session
+}
+
+// TenRaw is an auto generated low-level Go binding around an Ethereum contract.
+type TenRaw struct {
+ Contract *Ten // Generic contract binding to access the raw methods on
+}
+
+// TenCallerRaw is an auto generated low-level read-only Go binding around an Ethereum contract.
+type TenCallerRaw struct {
+ Contract *TenCaller // Generic read-only contract binding to access the raw methods on
+}
+
+// TenTransactorRaw is an auto generated low-level write-only Go binding around an Ethereum contract.
+type TenTransactorRaw struct {
+ Contract *TenTransactor // Generic write-only contract binding to access the raw methods on
+}
+
+// NewTen creates a new instance of Ten, bound to a specific deployed contract.
+func NewTen(address common.Address, backend bind.ContractBackend) (*Ten, error) {
+ contract, err := bindTen(address, backend, backend, backend)
+ if err != nil {
+ return nil, err
+ }
+ return &Ten{TenCaller: TenCaller{contract: contract}, TenTransactor: TenTransactor{contract: contract}, TenFilterer: TenFilterer{contract: contract}}, nil
+}
+
+// NewTenCaller creates a new read-only instance of Ten, bound to a specific deployed contract.
+func NewTenCaller(address common.Address, caller bind.ContractCaller) (*TenCaller, error) {
+ contract, err := bindTen(address, caller, nil, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &TenCaller{contract: contract}, nil
+}
+
+// NewTenTransactor creates a new write-only instance of Ten, bound to a specific deployed contract.
+func NewTenTransactor(address common.Address, transactor bind.ContractTransactor) (*TenTransactor, error) {
+ contract, err := bindTen(address, nil, transactor, nil)
+ if err != nil {
+ return nil, err
+ }
+ return &TenTransactor{contract: contract}, nil
+}
+
+// NewTenFilterer creates a new log filterer instance of Ten, bound to a specific deployed contract.
+func NewTenFilterer(address common.Address, filterer bind.ContractFilterer) (*TenFilterer, error) {
+ contract, err := bindTen(address, nil, nil, filterer)
+ if err != nil {
+ return nil, err
+ }
+ return &TenFilterer{contract: contract}, nil
+}
+
+// bindTen binds a generic wrapper to an already deployed contract.
+func bindTen(address common.Address, caller bind.ContractCaller, transactor bind.ContractTransactor, filterer bind.ContractFilterer) (*bind.BoundContract, error) {
+ parsed, err := TenMetaData.GetAbi()
+ if err != nil {
+ return nil, err
+ }
+ return bind.NewBoundContract(address, *parsed, caller, transactor, filterer), nil
+}
+
+// Call invokes the (constant) contract method with params as input values and
+// sets the output to result. The result type might be a single field for simple
+// returns, a slice of interfaces for anonymous returns and a struct for named
+// returns.
+func (_Ten *TenRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _Ten.Contract.TenCaller.contract.Call(opts, result, method, params...)
+}
+
+// Transfer initiates a plain transaction to move funds to the contract, calling
+// its default method if one is available.
+func (_Ten *TenRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _Ten.Contract.TenTransactor.contract.Transfer(opts)
+}
+
+// Transact invokes the (paid) contract method with params as input values.
+func (_Ten *TenRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _Ten.Contract.TenTransactor.contract.Transact(opts, method, params...)
+}
+
+// Call invokes the (constant) contract method with params as input values and
+// sets the output to result. The result type might be a single field for simple
+// returns, a slice of interfaces for anonymous returns and a struct for named
+// returns.
+func (_Ten *TenCallerRaw) Call(opts *bind.CallOpts, result *[]interface{}, method string, params ...interface{}) error {
+ return _Ten.Contract.contract.Call(opts, result, method, params...)
+}
+
+// Transfer initiates a plain transaction to move funds to the contract, calling
+// its default method if one is available.
+func (_Ten *TenTransactorRaw) Transfer(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _Ten.Contract.contract.Transfer(opts)
+}
+
+// Transact invokes the (paid) contract method with params as input values.
+func (_Ten *TenTransactorRaw) Transact(opts *bind.TransactOpts, method string, params ...interface{}) (*types.Transaction, error) {
+ return _Ten.Contract.contract.Transact(opts, method, params...)
+}
+
+// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9.
+//
+// Solidity: function CLOCK_MODE() view returns(string)
+func (_Ten *TenCaller) CLOCKMODE(opts *bind.CallOpts) (string, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "CLOCK_MODE")
+
+ if err != nil {
+ return *new(string), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(string)).(*string)
+
+ return out0, err
+
+}
+
+// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9.
+//
+// Solidity: function CLOCK_MODE() view returns(string)
+func (_Ten *TenSession) CLOCKMODE() (string, error) {
+ return _Ten.Contract.CLOCKMODE(&_Ten.CallOpts)
+}
+
+// CLOCKMODE is a free data retrieval call binding the contract method 0x4bf5d7e9.
+//
+// Solidity: function CLOCK_MODE() view returns(string)
+func (_Ten *TenCallerSession) CLOCKMODE() (string, error) {
+ return _Ten.Contract.CLOCKMODE(&_Ten.CallOpts)
+}
+
+// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf.
+//
+// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32)
+func (_Ten *TenCaller) DEFAULTADMINROLE(opts *bind.CallOpts) ([32]byte, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "DEFAULT_ADMIN_ROLE")
+
+ if err != nil {
+ return *new([32]byte), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
+
+ return out0, err
+
+}
+
+// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf.
+//
+// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32)
+func (_Ten *TenSession) DEFAULTADMINROLE() ([32]byte, error) {
+ return _Ten.Contract.DEFAULTADMINROLE(&_Ten.CallOpts)
+}
+
+// DEFAULTADMINROLE is a free data retrieval call binding the contract method 0xa217fddf.
+//
+// Solidity: function DEFAULT_ADMIN_ROLE() view returns(bytes32)
+func (_Ten *TenCallerSession) DEFAULTADMINROLE() ([32]byte, error) {
+ return _Ten.Contract.DEFAULTADMINROLE(&_Ten.CallOpts)
+}
+
+// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
+//
+// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
+func (_Ten *TenCaller) DOMAINSEPARATOR(opts *bind.CallOpts) ([32]byte, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "DOMAIN_SEPARATOR")
+
+ if err != nil {
+ return *new([32]byte), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
+
+ return out0, err
+
+}
+
+// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
+//
+// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
+func (_Ten *TenSession) DOMAINSEPARATOR() ([32]byte, error) {
+ return _Ten.Contract.DOMAINSEPARATOR(&_Ten.CallOpts)
+}
+
+// DOMAINSEPARATOR is a free data retrieval call binding the contract method 0x3644e515.
+//
+// Solidity: function DOMAIN_SEPARATOR() view returns(bytes32)
+func (_Ten *TenCallerSession) DOMAINSEPARATOR() ([32]byte, error) {
+ return _Ten.Contract.DOMAINSEPARATOR(&_Ten.CallOpts)
+}
+
+// VESTINGROLE is a free data retrieval call binding the contract method 0xa1c1418c.
+//
+// Solidity: function VESTING_ROLE() view returns(bytes32)
+func (_Ten *TenCaller) VESTINGROLE(opts *bind.CallOpts) ([32]byte, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "VESTING_ROLE")
+
+ if err != nil {
+ return *new([32]byte), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
+
+ return out0, err
+
+}
+
+// VESTINGROLE is a free data retrieval call binding the contract method 0xa1c1418c.
+//
+// Solidity: function VESTING_ROLE() view returns(bytes32)
+func (_Ten *TenSession) VESTINGROLE() ([32]byte, error) {
+ return _Ten.Contract.VESTINGROLE(&_Ten.CallOpts)
+}
+
+// VESTINGROLE is a free data retrieval call binding the contract method 0xa1c1418c.
+//
+// Solidity: function VESTING_ROLE() view returns(bytes32)
+func (_Ten *TenCallerSession) VESTINGROLE() ([32]byte, error) {
+ return _Ten.Contract.VESTINGROLE(&_Ten.CallOpts)
+}
+
+// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
+//
+// Solidity: function allowance(address owner, address spender) view returns(uint256)
+func (_Ten *TenCaller) Allowance(opts *bind.CallOpts, owner common.Address, spender common.Address) (*big.Int, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "allowance", owner, spender)
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
+//
+// Solidity: function allowance(address owner, address spender) view returns(uint256)
+func (_Ten *TenSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
+ return _Ten.Contract.Allowance(&_Ten.CallOpts, owner, spender)
+}
+
+// Allowance is a free data retrieval call binding the contract method 0xdd62ed3e.
+//
+// Solidity: function allowance(address owner, address spender) view returns(uint256)
+func (_Ten *TenCallerSession) Allowance(owner common.Address, spender common.Address) (*big.Int, error) {
+ return _Ten.Contract.Allowance(&_Ten.CallOpts, owner, spender)
+}
+
+// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
+//
+// Solidity: function balanceOf(address account) view returns(uint256)
+func (_Ten *TenCaller) BalanceOf(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "balanceOf", account)
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
+//
+// Solidity: function balanceOf(address account) view returns(uint256)
+func (_Ten *TenSession) BalanceOf(account common.Address) (*big.Int, error) {
+ return _Ten.Contract.BalanceOf(&_Ten.CallOpts, account)
+}
+
+// BalanceOf is a free data retrieval call binding the contract method 0x70a08231.
+//
+// Solidity: function balanceOf(address account) view returns(uint256)
+func (_Ten *TenCallerSession) BalanceOf(account common.Address) (*big.Int, error) {
+ return _Ten.Contract.BalanceOf(&_Ten.CallOpts, account)
+}
+
+// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8.
+//
+// Solidity: function checkpoints(address account, uint32 pos) view returns((uint48,uint208))
+func (_Ten *TenCaller) Checkpoints(opts *bind.CallOpts, account common.Address, pos uint32) (CheckpointsCheckpoint208, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "checkpoints", account, pos)
+
+ if err != nil {
+ return *new(CheckpointsCheckpoint208), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(CheckpointsCheckpoint208)).(*CheckpointsCheckpoint208)
+
+ return out0, err
+
+}
+
+// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8.
+//
+// Solidity: function checkpoints(address account, uint32 pos) view returns((uint48,uint208))
+func (_Ten *TenSession) Checkpoints(account common.Address, pos uint32) (CheckpointsCheckpoint208, error) {
+ return _Ten.Contract.Checkpoints(&_Ten.CallOpts, account, pos)
+}
+
+// Checkpoints is a free data retrieval call binding the contract method 0xf1127ed8.
+//
+// Solidity: function checkpoints(address account, uint32 pos) view returns((uint48,uint208))
+func (_Ten *TenCallerSession) Checkpoints(account common.Address, pos uint32) (CheckpointsCheckpoint208, error) {
+ return _Ten.Contract.Checkpoints(&_Ten.CallOpts, account, pos)
+}
+
+// Clock is a free data retrieval call binding the contract method 0x91ddadf4.
+//
+// Solidity: function clock() view returns(uint48)
+func (_Ten *TenCaller) Clock(opts *bind.CallOpts) (*big.Int, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "clock")
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+// Clock is a free data retrieval call binding the contract method 0x91ddadf4.
+//
+// Solidity: function clock() view returns(uint48)
+func (_Ten *TenSession) Clock() (*big.Int, error) {
+ return _Ten.Contract.Clock(&_Ten.CallOpts)
+}
+
+// Clock is a free data retrieval call binding the contract method 0x91ddadf4.
+//
+// Solidity: function clock() view returns(uint48)
+func (_Ten *TenCallerSession) Clock() (*big.Int, error) {
+ return _Ten.Contract.Clock(&_Ten.CallOpts)
+}
+
+// Decimals is a free data retrieval call binding the contract method 0x313ce567.
+//
+// Solidity: function decimals() view returns(uint8)
+func (_Ten *TenCaller) Decimals(opts *bind.CallOpts) (uint8, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "decimals")
+
+ if err != nil {
+ return *new(uint8), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(uint8)).(*uint8)
+
+ return out0, err
+
+}
+
+// Decimals is a free data retrieval call binding the contract method 0x313ce567.
+//
+// Solidity: function decimals() view returns(uint8)
+func (_Ten *TenSession) Decimals() (uint8, error) {
+ return _Ten.Contract.Decimals(&_Ten.CallOpts)
+}
+
+// Decimals is a free data retrieval call binding the contract method 0x313ce567.
+//
+// Solidity: function decimals() view returns(uint8)
+func (_Ten *TenCallerSession) Decimals() (uint8, error) {
+ return _Ten.Contract.Decimals(&_Ten.CallOpts)
+}
+
+// Delegates is a free data retrieval call binding the contract method 0x587cde1e.
+//
+// Solidity: function delegates(address account) view returns(address)
+func (_Ten *TenCaller) Delegates(opts *bind.CallOpts, account common.Address) (common.Address, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "delegates", account)
+
+ if err != nil {
+ return *new(common.Address), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+ return out0, err
+
+}
+
+// Delegates is a free data retrieval call binding the contract method 0x587cde1e.
+//
+// Solidity: function delegates(address account) view returns(address)
+func (_Ten *TenSession) Delegates(account common.Address) (common.Address, error) {
+ return _Ten.Contract.Delegates(&_Ten.CallOpts, account)
+}
+
+// Delegates is a free data retrieval call binding the contract method 0x587cde1e.
+//
+// Solidity: function delegates(address account) view returns(address)
+func (_Ten *TenCallerSession) Delegates(account common.Address) (common.Address, error) {
+ return _Ten.Contract.Delegates(&_Ten.CallOpts, account)
+}
+
+// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e.
+//
+// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
+func (_Ten *TenCaller) Eip712Domain(opts *bind.CallOpts) (struct {
+ Fields [1]byte
+ Name string
+ Version string
+ ChainId *big.Int
+ VerifyingContract common.Address
+ Salt [32]byte
+ Extensions []*big.Int
+}, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "eip712Domain")
+
+ outstruct := new(struct {
+ Fields [1]byte
+ Name string
+ Version string
+ ChainId *big.Int
+ VerifyingContract common.Address
+ Salt [32]byte
+ Extensions []*big.Int
+ })
+ if err != nil {
+ return *outstruct, err
+ }
+
+ outstruct.Fields = *abi.ConvertType(out[0], new([1]byte)).(*[1]byte)
+ outstruct.Name = *abi.ConvertType(out[1], new(string)).(*string)
+ outstruct.Version = *abi.ConvertType(out[2], new(string)).(*string)
+ outstruct.ChainId = *abi.ConvertType(out[3], new(*big.Int)).(**big.Int)
+ outstruct.VerifyingContract = *abi.ConvertType(out[4], new(common.Address)).(*common.Address)
+ outstruct.Salt = *abi.ConvertType(out[5], new([32]byte)).(*[32]byte)
+ outstruct.Extensions = *abi.ConvertType(out[6], new([]*big.Int)).(*[]*big.Int)
+
+ return *outstruct, err
+
+}
+
+// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e.
+//
+// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
+func (_Ten *TenSession) Eip712Domain() (struct {
+ Fields [1]byte
+ Name string
+ Version string
+ ChainId *big.Int
+ VerifyingContract common.Address
+ Salt [32]byte
+ Extensions []*big.Int
+}, error) {
+ return _Ten.Contract.Eip712Domain(&_Ten.CallOpts)
+}
+
+// Eip712Domain is a free data retrieval call binding the contract method 0x84b0196e.
+//
+// Solidity: function eip712Domain() view returns(bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
+func (_Ten *TenCallerSession) Eip712Domain() (struct {
+ Fields [1]byte
+ Name string
+ Version string
+ ChainId *big.Int
+ VerifyingContract common.Address
+ Salt [32]byte
+ Extensions []*big.Int
+}, error) {
+ return _Ten.Contract.Eip712Domain(&_Ten.CallOpts)
+}
+
+// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c.
+//
+// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256)
+func (_Ten *TenCaller) GetPastTotalSupply(opts *bind.CallOpts, timepoint *big.Int) (*big.Int, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "getPastTotalSupply", timepoint)
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c.
+//
+// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256)
+func (_Ten *TenSession) GetPastTotalSupply(timepoint *big.Int) (*big.Int, error) {
+ return _Ten.Contract.GetPastTotalSupply(&_Ten.CallOpts, timepoint)
+}
+
+// GetPastTotalSupply is a free data retrieval call binding the contract method 0x8e539e8c.
+//
+// Solidity: function getPastTotalSupply(uint256 timepoint) view returns(uint256)
+func (_Ten *TenCallerSession) GetPastTotalSupply(timepoint *big.Int) (*big.Int, error) {
+ return _Ten.Contract.GetPastTotalSupply(&_Ten.CallOpts, timepoint)
+}
+
+// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8.
+//
+// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256)
+func (_Ten *TenCaller) GetPastVotes(opts *bind.CallOpts, account common.Address, timepoint *big.Int) (*big.Int, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "getPastVotes", account, timepoint)
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8.
+//
+// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256)
+func (_Ten *TenSession) GetPastVotes(account common.Address, timepoint *big.Int) (*big.Int, error) {
+ return _Ten.Contract.GetPastVotes(&_Ten.CallOpts, account, timepoint)
+}
+
+// GetPastVotes is a free data retrieval call binding the contract method 0x3a46b1a8.
+//
+// Solidity: function getPastVotes(address account, uint256 timepoint) view returns(uint256)
+func (_Ten *TenCallerSession) GetPastVotes(account common.Address, timepoint *big.Int) (*big.Int, error) {
+ return _Ten.Contract.GetPastVotes(&_Ten.CallOpts, account, timepoint)
+}
+
+// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3.
+//
+// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32)
+func (_Ten *TenCaller) GetRoleAdmin(opts *bind.CallOpts, role [32]byte) ([32]byte, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "getRoleAdmin", role)
+
+ if err != nil {
+ return *new([32]byte), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new([32]byte)).(*[32]byte)
+
+ return out0, err
+
+}
+
+// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3.
+//
+// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32)
+func (_Ten *TenSession) GetRoleAdmin(role [32]byte) ([32]byte, error) {
+ return _Ten.Contract.GetRoleAdmin(&_Ten.CallOpts, role)
+}
+
+// GetRoleAdmin is a free data retrieval call binding the contract method 0x248a9ca3.
+//
+// Solidity: function getRoleAdmin(bytes32 role) view returns(bytes32)
+func (_Ten *TenCallerSession) GetRoleAdmin(role [32]byte) ([32]byte, error) {
+ return _Ten.Contract.GetRoleAdmin(&_Ten.CallOpts, role)
+}
+
+// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0.
+//
+// Solidity: function getVotes(address account) view returns(uint256)
+func (_Ten *TenCaller) GetVotes(opts *bind.CallOpts, account common.Address) (*big.Int, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "getVotes", account)
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0.
+//
+// Solidity: function getVotes(address account) view returns(uint256)
+func (_Ten *TenSession) GetVotes(account common.Address) (*big.Int, error) {
+ return _Ten.Contract.GetVotes(&_Ten.CallOpts, account)
+}
+
+// GetVotes is a free data retrieval call binding the contract method 0x9ab24eb0.
+//
+// Solidity: function getVotes(address account) view returns(uint256)
+func (_Ten *TenCallerSession) GetVotes(account common.Address) (*big.Int, error) {
+ return _Ten.Contract.GetVotes(&_Ten.CallOpts, account)
+}
+
+// HasRole is a free data retrieval call binding the contract method 0x91d14854.
+//
+// Solidity: function hasRole(bytes32 role, address account) view returns(bool)
+func (_Ten *TenCaller) HasRole(opts *bind.CallOpts, role [32]byte, account common.Address) (bool, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "hasRole", role, account)
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+// HasRole is a free data retrieval call binding the contract method 0x91d14854.
+//
+// Solidity: function hasRole(bytes32 role, address account) view returns(bool)
+func (_Ten *TenSession) HasRole(role [32]byte, account common.Address) (bool, error) {
+ return _Ten.Contract.HasRole(&_Ten.CallOpts, role, account)
+}
+
+// HasRole is a free data retrieval call binding the contract method 0x91d14854.
+//
+// Solidity: function hasRole(bytes32 role, address account) view returns(bool)
+func (_Ten *TenCallerSession) HasRole(role [32]byte, account common.Address) (bool, error) {
+ return _Ten.Contract.HasRole(&_Ten.CallOpts, role, account)
+}
+
+// Locked is a free data retrieval call binding the contract method 0xcbf9fe5f.
+//
+// Solidity: function locked(address ) view returns(bool)
+func (_Ten *TenCaller) Locked(opts *bind.CallOpts, arg0 common.Address) (bool, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "locked", arg0)
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+// Locked is a free data retrieval call binding the contract method 0xcbf9fe5f.
+//
+// Solidity: function locked(address ) view returns(bool)
+func (_Ten *TenSession) Locked(arg0 common.Address) (bool, error) {
+ return _Ten.Contract.Locked(&_Ten.CallOpts, arg0)
+}
+
+// Locked is a free data retrieval call binding the contract method 0xcbf9fe5f.
+//
+// Solidity: function locked(address ) view returns(bool)
+func (_Ten *TenCallerSession) Locked(arg0 common.Address) (bool, error) {
+ return _Ten.Contract.Locked(&_Ten.CallOpts, arg0)
+}
+
+// Name is a free data retrieval call binding the contract method 0x06fdde03.
+//
+// Solidity: function name() view returns(string)
+func (_Ten *TenCaller) Name(opts *bind.CallOpts) (string, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "name")
+
+ if err != nil {
+ return *new(string), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(string)).(*string)
+
+ return out0, err
+
+}
+
+// Name is a free data retrieval call binding the contract method 0x06fdde03.
+//
+// Solidity: function name() view returns(string)
+func (_Ten *TenSession) Name() (string, error) {
+ return _Ten.Contract.Name(&_Ten.CallOpts)
+}
+
+// Name is a free data retrieval call binding the contract method 0x06fdde03.
+//
+// Solidity: function name() view returns(string)
+func (_Ten *TenCallerSession) Name() (string, error) {
+ return _Ten.Contract.Name(&_Ten.CallOpts)
+}
+
+// Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
+//
+// Solidity: function nonces(address owner) view returns(uint256)
+func (_Ten *TenCaller) Nonces(opts *bind.CallOpts, owner common.Address) (*big.Int, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "nonces", owner)
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+// Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
+//
+// Solidity: function nonces(address owner) view returns(uint256)
+func (_Ten *TenSession) Nonces(owner common.Address) (*big.Int, error) {
+ return _Ten.Contract.Nonces(&_Ten.CallOpts, owner)
+}
+
+// Nonces is a free data retrieval call binding the contract method 0x7ecebe00.
+//
+// Solidity: function nonces(address owner) view returns(uint256)
+func (_Ten *TenCallerSession) Nonces(owner common.Address) (*big.Int, error) {
+ return _Ten.Contract.Nonces(&_Ten.CallOpts, owner)
+}
+
+// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45.
+//
+// Solidity: function numCheckpoints(address account) view returns(uint32)
+func (_Ten *TenCaller) NumCheckpoints(opts *bind.CallOpts, account common.Address) (uint32, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "numCheckpoints", account)
+
+ if err != nil {
+ return *new(uint32), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(uint32)).(*uint32)
+
+ return out0, err
+
+}
+
+// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45.
+//
+// Solidity: function numCheckpoints(address account) view returns(uint32)
+func (_Ten *TenSession) NumCheckpoints(account common.Address) (uint32, error) {
+ return _Ten.Contract.NumCheckpoints(&_Ten.CallOpts, account)
+}
+
+// NumCheckpoints is a free data retrieval call binding the contract method 0x6fcfff45.
+//
+// Solidity: function numCheckpoints(address account) view returns(uint32)
+func (_Ten *TenCallerSession) NumCheckpoints(account common.Address) (uint32, error) {
+ return _Ten.Contract.NumCheckpoints(&_Ten.CallOpts, account)
+}
+
+// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
+//
+// Solidity: function owner() view returns(address)
+func (_Ten *TenCaller) Owner(opts *bind.CallOpts) (common.Address, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "owner")
+
+ if err != nil {
+ return *new(common.Address), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address)
+
+ return out0, err
+
+}
+
+// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
+//
+// Solidity: function owner() view returns(address)
+func (_Ten *TenSession) Owner() (common.Address, error) {
+ return _Ten.Contract.Owner(&_Ten.CallOpts)
+}
+
+// Owner is a free data retrieval call binding the contract method 0x8da5cb5b.
+//
+// Solidity: function owner() view returns(address)
+func (_Ten *TenCallerSession) Owner() (common.Address, error) {
+ return _Ten.Contract.Owner(&_Ten.CallOpts)
+}
+
+// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
+//
+// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
+func (_Ten *TenCaller) SupportsInterface(opts *bind.CallOpts, interfaceId [4]byte) (bool, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "supportsInterface", interfaceId)
+
+ if err != nil {
+ return *new(bool), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(bool)).(*bool)
+
+ return out0, err
+
+}
+
+// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
+//
+// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
+func (_Ten *TenSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
+ return _Ten.Contract.SupportsInterface(&_Ten.CallOpts, interfaceId)
+}
+
+// SupportsInterface is a free data retrieval call binding the contract method 0x01ffc9a7.
+//
+// Solidity: function supportsInterface(bytes4 interfaceId) view returns(bool)
+func (_Ten *TenCallerSession) SupportsInterface(interfaceId [4]byte) (bool, error) {
+ return _Ten.Contract.SupportsInterface(&_Ten.CallOpts, interfaceId)
+}
+
+// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
+//
+// Solidity: function symbol() view returns(string)
+func (_Ten *TenCaller) Symbol(opts *bind.CallOpts) (string, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "symbol")
+
+ if err != nil {
+ return *new(string), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(string)).(*string)
+
+ return out0, err
+
+}
+
+// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
+//
+// Solidity: function symbol() view returns(string)
+func (_Ten *TenSession) Symbol() (string, error) {
+ return _Ten.Contract.Symbol(&_Ten.CallOpts)
+}
+
+// Symbol is a free data retrieval call binding the contract method 0x95d89b41.
+//
+// Solidity: function symbol() view returns(string)
+func (_Ten *TenCallerSession) Symbol() (string, error) {
+ return _Ten.Contract.Symbol(&_Ten.CallOpts)
+}
+
+// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
+//
+// Solidity: function totalSupply() view returns(uint256)
+func (_Ten *TenCaller) TotalSupply(opts *bind.CallOpts) (*big.Int, error) {
+ var out []interface{}
+ err := _Ten.contract.Call(opts, &out, "totalSupply")
+
+ if err != nil {
+ return *new(*big.Int), err
+ }
+
+ out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
+
+ return out0, err
+
+}
+
+// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
+//
+// Solidity: function totalSupply() view returns(uint256)
+func (_Ten *TenSession) TotalSupply() (*big.Int, error) {
+ return _Ten.Contract.TotalSupply(&_Ten.CallOpts)
+}
+
+// TotalSupply is a free data retrieval call binding the contract method 0x18160ddd.
+//
+// Solidity: function totalSupply() view returns(uint256)
+func (_Ten *TenCallerSession) TotalSupply() (*big.Int, error) {
+ return _Ten.Contract.TotalSupply(&_Ten.CallOpts)
+}
+
+// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
+//
+// Solidity: function approve(address spender, uint256 value) returns(bool)
+func (_Ten *TenTransactor) Approve(opts *bind.TransactOpts, spender common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "approve", spender, value)
+}
+
+// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
+//
+// Solidity: function approve(address spender, uint256 value) returns(bool)
+func (_Ten *TenSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.Contract.Approve(&_Ten.TransactOpts, spender, value)
+}
+
+// Approve is a paid mutator transaction binding the contract method 0x095ea7b3.
+//
+// Solidity: function approve(address spender, uint256 value) returns(bool)
+func (_Ten *TenTransactorSession) Approve(spender common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.Contract.Approve(&_Ten.TransactOpts, spender, value)
+}
+
+// CreateLockedAccount is a paid mutator transaction binding the contract method 0x8bcf86f8.
+//
+// Solidity: function createLockedAccount() returns(bool)
+func (_Ten *TenTransactor) CreateLockedAccount(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "createLockedAccount")
+}
+
+// CreateLockedAccount is a paid mutator transaction binding the contract method 0x8bcf86f8.
+//
+// Solidity: function createLockedAccount() returns(bool)
+func (_Ten *TenSession) CreateLockedAccount() (*types.Transaction, error) {
+ return _Ten.Contract.CreateLockedAccount(&_Ten.TransactOpts)
+}
+
+// CreateLockedAccount is a paid mutator transaction binding the contract method 0x8bcf86f8.
+//
+// Solidity: function createLockedAccount() returns(bool)
+func (_Ten *TenTransactorSession) CreateLockedAccount() (*types.Transaction, error) {
+ return _Ten.Contract.CreateLockedAccount(&_Ten.TransactOpts)
+}
+
+// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c.
+//
+// Solidity: function delegate(address delegatee) returns()
+func (_Ten *TenTransactor) Delegate(opts *bind.TransactOpts, delegatee common.Address) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "delegate", delegatee)
+}
+
+// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c.
+//
+// Solidity: function delegate(address delegatee) returns()
+func (_Ten *TenSession) Delegate(delegatee common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.Delegate(&_Ten.TransactOpts, delegatee)
+}
+
+// Delegate is a paid mutator transaction binding the contract method 0x5c19a95c.
+//
+// Solidity: function delegate(address delegatee) returns()
+func (_Ten *TenTransactorSession) Delegate(delegatee common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.Delegate(&_Ten.TransactOpts, delegatee)
+}
+
+// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520.
+//
+// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns()
+func (_Ten *TenTransactor) DelegateBySig(opts *bind.TransactOpts, delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "delegateBySig", delegatee, nonce, expiry, v, r, s)
+}
+
+// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520.
+//
+// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns()
+func (_Ten *TenSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
+ return _Ten.Contract.DelegateBySig(&_Ten.TransactOpts, delegatee, nonce, expiry, v, r, s)
+}
+
+// DelegateBySig is a paid mutator transaction binding the contract method 0xc3cda520.
+//
+// Solidity: function delegateBySig(address delegatee, uint256 nonce, uint256 expiry, uint8 v, bytes32 r, bytes32 s) returns()
+func (_Ten *TenTransactorSession) DelegateBySig(delegatee common.Address, nonce *big.Int, expiry *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
+ return _Ten.Contract.DelegateBySig(&_Ten.TransactOpts, delegatee, nonce, expiry, v, r, s)
+}
+
+// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d.
+//
+// Solidity: function grantRole(bytes32 role, address account) returns()
+func (_Ten *TenTransactor) GrantRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "grantRole", role, account)
+}
+
+// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d.
+//
+// Solidity: function grantRole(bytes32 role, address account) returns()
+func (_Ten *TenSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.GrantRole(&_Ten.TransactOpts, role, account)
+}
+
+// GrantRole is a paid mutator transaction binding the contract method 0x2f2ff15d.
+//
+// Solidity: function grantRole(bytes32 role, address account) returns()
+func (_Ten *TenTransactorSession) GrantRole(role [32]byte, account common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.GrantRole(&_Ten.TransactOpts, role, account)
+}
+
+// GrantVesting is a paid mutator transaction binding the contract method 0x4a3bbe2b.
+//
+// Solidity: function grantVesting(address account) returns()
+func (_Ten *TenTransactor) GrantVesting(opts *bind.TransactOpts, account common.Address) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "grantVesting", account)
+}
+
+// GrantVesting is a paid mutator transaction binding the contract method 0x4a3bbe2b.
+//
+// Solidity: function grantVesting(address account) returns()
+func (_Ten *TenSession) GrantVesting(account common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.GrantVesting(&_Ten.TransactOpts, account)
+}
+
+// GrantVesting is a paid mutator transaction binding the contract method 0x4a3bbe2b.
+//
+// Solidity: function grantVesting(address account) returns()
+func (_Ten *TenTransactorSession) GrantVesting(account common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.GrantVesting(&_Ten.TransactOpts, account)
+}
+
+// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c.
+//
+// Solidity: function initialize() returns()
+func (_Ten *TenTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "initialize")
+}
+
+// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c.
+//
+// Solidity: function initialize() returns()
+func (_Ten *TenSession) Initialize() (*types.Transaction, error) {
+ return _Ten.Contract.Initialize(&_Ten.TransactOpts)
+}
+
+// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c.
+//
+// Solidity: function initialize() returns()
+func (_Ten *TenTransactorSession) Initialize() (*types.Transaction, error) {
+ return _Ten.Contract.Initialize(&_Ten.TransactOpts)
+}
+
+// InitializeAllocations is a paid mutator transaction binding the contract method 0xa9fb3efd.
+//
+// Solidity: function initializeAllocations((address,uint256,bool)[] allocations) returns()
+func (_Ten *TenTransactor) InitializeAllocations(opts *bind.TransactOpts, allocations []Erc20WithLockInitialAllocation) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "initializeAllocations", allocations)
+}
+
+// InitializeAllocations is a paid mutator transaction binding the contract method 0xa9fb3efd.
+//
+// Solidity: function initializeAllocations((address,uint256,bool)[] allocations) returns()
+func (_Ten *TenSession) InitializeAllocations(allocations []Erc20WithLockInitialAllocation) (*types.Transaction, error) {
+ return _Ten.Contract.InitializeAllocations(&_Ten.TransactOpts, allocations)
+}
+
+// InitializeAllocations is a paid mutator transaction binding the contract method 0xa9fb3efd.
+//
+// Solidity: function initializeAllocations((address,uint256,bool)[] allocations) returns()
+func (_Ten *TenTransactorSession) InitializeAllocations(allocations []Erc20WithLockInitialAllocation) (*types.Transaction, error) {
+ return _Ten.Contract.InitializeAllocations(&_Ten.TransactOpts, allocations)
+}
+
+// Permit is a paid mutator transaction binding the contract method 0xd505accf.
+//
+// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
+func (_Ten *TenTransactor) Permit(opts *bind.TransactOpts, owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "permit", owner, spender, value, deadline, v, r, s)
+}
+
+// Permit is a paid mutator transaction binding the contract method 0xd505accf.
+//
+// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
+func (_Ten *TenSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
+ return _Ten.Contract.Permit(&_Ten.TransactOpts, owner, spender, value, deadline, v, r, s)
+}
+
+// Permit is a paid mutator transaction binding the contract method 0xd505accf.
+//
+// Solidity: function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) returns()
+func (_Ten *TenTransactorSession) Permit(owner common.Address, spender common.Address, value *big.Int, deadline *big.Int, v uint8, r [32]byte, s [32]byte) (*types.Transaction, error) {
+ return _Ten.Contract.Permit(&_Ten.TransactOpts, owner, spender, value, deadline, v, r, s)
+}
+
+// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
+//
+// Solidity: function renounceOwnership() returns()
+func (_Ten *TenTransactor) RenounceOwnership(opts *bind.TransactOpts) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "renounceOwnership")
+}
+
+// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
+//
+// Solidity: function renounceOwnership() returns()
+func (_Ten *TenSession) RenounceOwnership() (*types.Transaction, error) {
+ return _Ten.Contract.RenounceOwnership(&_Ten.TransactOpts)
+}
+
+// RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6.
+//
+// Solidity: function renounceOwnership() returns()
+func (_Ten *TenTransactorSession) RenounceOwnership() (*types.Transaction, error) {
+ return _Ten.Contract.RenounceOwnership(&_Ten.TransactOpts)
+}
+
+// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe.
+//
+// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns()
+func (_Ten *TenTransactor) RenounceRole(opts *bind.TransactOpts, role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "renounceRole", role, callerConfirmation)
+}
+
+// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe.
+//
+// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns()
+func (_Ten *TenSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.RenounceRole(&_Ten.TransactOpts, role, callerConfirmation)
+}
+
+// RenounceRole is a paid mutator transaction binding the contract method 0x36568abe.
+//
+// Solidity: function renounceRole(bytes32 role, address callerConfirmation) returns()
+func (_Ten *TenTransactorSession) RenounceRole(role [32]byte, callerConfirmation common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.RenounceRole(&_Ten.TransactOpts, role, callerConfirmation)
+}
+
+// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f.
+//
+// Solidity: function revokeRole(bytes32 role, address account) returns()
+func (_Ten *TenTransactor) RevokeRole(opts *bind.TransactOpts, role [32]byte, account common.Address) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "revokeRole", role, account)
+}
+
+// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f.
+//
+// Solidity: function revokeRole(bytes32 role, address account) returns()
+func (_Ten *TenSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.RevokeRole(&_Ten.TransactOpts, role, account)
+}
+
+// RevokeRole is a paid mutator transaction binding the contract method 0xd547741f.
+//
+// Solidity: function revokeRole(bytes32 role, address account) returns()
+func (_Ten *TenTransactorSession) RevokeRole(role [32]byte, account common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.RevokeRole(&_Ten.TransactOpts, role, account)
+}
+
+// RevokeVesting is a paid mutator transaction binding the contract method 0x3b0da260.
+//
+// Solidity: function revokeVesting(address account) returns()
+func (_Ten *TenTransactor) RevokeVesting(opts *bind.TransactOpts, account common.Address) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "revokeVesting", account)
+}
+
+// RevokeVesting is a paid mutator transaction binding the contract method 0x3b0da260.
+//
+// Solidity: function revokeVesting(address account) returns()
+func (_Ten *TenSession) RevokeVesting(account common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.RevokeVesting(&_Ten.TransactOpts, account)
+}
+
+// RevokeVesting is a paid mutator transaction binding the contract method 0x3b0da260.
+//
+// Solidity: function revokeVesting(address account) returns()
+func (_Ten *TenTransactorSession) RevokeVesting(account common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.RevokeVesting(&_Ten.TransactOpts, account)
+}
+
+// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
+//
+// Solidity: function transfer(address to, uint256 value) returns(bool)
+func (_Ten *TenTransactor) Transfer(opts *bind.TransactOpts, to common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "transfer", to, value)
+}
+
+// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
+//
+// Solidity: function transfer(address to, uint256 value) returns(bool)
+func (_Ten *TenSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.Contract.Transfer(&_Ten.TransactOpts, to, value)
+}
+
+// Transfer is a paid mutator transaction binding the contract method 0xa9059cbb.
+//
+// Solidity: function transfer(address to, uint256 value) returns(bool)
+func (_Ten *TenTransactorSession) Transfer(to common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.Contract.Transfer(&_Ten.TransactOpts, to, value)
+}
+
+// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
+//
+// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
+func (_Ten *TenTransactor) TransferFrom(opts *bind.TransactOpts, from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "transferFrom", from, to, value)
+}
+
+// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
+//
+// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
+func (_Ten *TenSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.Contract.TransferFrom(&_Ten.TransactOpts, from, to, value)
+}
+
+// TransferFrom is a paid mutator transaction binding the contract method 0x23b872dd.
+//
+// Solidity: function transferFrom(address from, address to, uint256 value) returns(bool)
+func (_Ten *TenTransactorSession) TransferFrom(from common.Address, to common.Address, value *big.Int) (*types.Transaction, error) {
+ return _Ten.Contract.TransferFrom(&_Ten.TransactOpts, from, to, value)
+}
+
+// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
+//
+// Solidity: function transferOwnership(address newOwner) returns()
+func (_Ten *TenTransactor) TransferOwnership(opts *bind.TransactOpts, newOwner common.Address) (*types.Transaction, error) {
+ return _Ten.contract.Transact(opts, "transferOwnership", newOwner)
+}
+
+// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
+//
+// Solidity: function transferOwnership(address newOwner) returns()
+func (_Ten *TenSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.TransferOwnership(&_Ten.TransactOpts, newOwner)
+}
+
+// TransferOwnership is a paid mutator transaction binding the contract method 0xf2fde38b.
+//
+// Solidity: function transferOwnership(address newOwner) returns()
+func (_Ten *TenTransactorSession) TransferOwnership(newOwner common.Address) (*types.Transaction, error) {
+ return _Ten.Contract.TransferOwnership(&_Ten.TransactOpts, newOwner)
+}
+
+// TenApprovalIterator is returned from FilterApproval and is used to iterate over the raw logs and unpacked data for Approval events raised by the Ten contract.
+type TenApprovalIterator struct {
+ Event *TenApproval // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenApprovalIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenApproval)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenApproval)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenApprovalIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenApprovalIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenApproval represents a Approval event raised by the Ten contract.
+type TenApproval struct {
+ Owner common.Address
+ Spender common.Address
+ Value *big.Int
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterApproval is a free log retrieval operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
+//
+// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
+func (_Ten *TenFilterer) FilterApproval(opts *bind.FilterOpts, owner []common.Address, spender []common.Address) (*TenApprovalIterator, error) {
+
+ var ownerRule []interface{}
+ for _, ownerItem := range owner {
+ ownerRule = append(ownerRule, ownerItem)
+ }
+ var spenderRule []interface{}
+ for _, spenderItem := range spender {
+ spenderRule = append(spenderRule, spenderItem)
+ }
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "Approval", ownerRule, spenderRule)
+ if err != nil {
+ return nil, err
+ }
+ return &TenApprovalIterator{contract: _Ten.contract, event: "Approval", logs: logs, sub: sub}, nil
+}
+
+// WatchApproval is a free log subscription operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
+//
+// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
+func (_Ten *TenFilterer) WatchApproval(opts *bind.WatchOpts, sink chan<- *TenApproval, owner []common.Address, spender []common.Address) (event.Subscription, error) {
+
+ var ownerRule []interface{}
+ for _, ownerItem := range owner {
+ ownerRule = append(ownerRule, ownerItem)
+ }
+ var spenderRule []interface{}
+ for _, spenderItem := range spender {
+ spenderRule = append(spenderRule, spenderItem)
+ }
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "Approval", ownerRule, spenderRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenApproval)
+ if err := _Ten.contract.UnpackLog(event, "Approval", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseApproval is a log parse operation binding the contract event 0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925.
+//
+// Solidity: event Approval(address indexed owner, address indexed spender, uint256 value)
+func (_Ten *TenFilterer) ParseApproval(log types.Log) (*TenApproval, error) {
+ event := new(TenApproval)
+ if err := _Ten.contract.UnpackLog(event, "Approval", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenDelegateChangedIterator is returned from FilterDelegateChanged and is used to iterate over the raw logs and unpacked data for DelegateChanged events raised by the Ten contract.
+type TenDelegateChangedIterator struct {
+ Event *TenDelegateChanged // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenDelegateChangedIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenDelegateChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenDelegateChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenDelegateChangedIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenDelegateChangedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenDelegateChanged represents a DelegateChanged event raised by the Ten contract.
+type TenDelegateChanged struct {
+ Delegator common.Address
+ FromDelegate common.Address
+ ToDelegate common.Address
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterDelegateChanged is a free log retrieval operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f.
+//
+// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate)
+func (_Ten *TenFilterer) FilterDelegateChanged(opts *bind.FilterOpts, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (*TenDelegateChangedIterator, error) {
+
+ var delegatorRule []interface{}
+ for _, delegatorItem := range delegator {
+ delegatorRule = append(delegatorRule, delegatorItem)
+ }
+ var fromDelegateRule []interface{}
+ for _, fromDelegateItem := range fromDelegate {
+ fromDelegateRule = append(fromDelegateRule, fromDelegateItem)
+ }
+ var toDelegateRule []interface{}
+ for _, toDelegateItem := range toDelegate {
+ toDelegateRule = append(toDelegateRule, toDelegateItem)
+ }
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule)
+ if err != nil {
+ return nil, err
+ }
+ return &TenDelegateChangedIterator{contract: _Ten.contract, event: "DelegateChanged", logs: logs, sub: sub}, nil
+}
+
+// WatchDelegateChanged is a free log subscription operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f.
+//
+// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate)
+func (_Ten *TenFilterer) WatchDelegateChanged(opts *bind.WatchOpts, sink chan<- *TenDelegateChanged, delegator []common.Address, fromDelegate []common.Address, toDelegate []common.Address) (event.Subscription, error) {
+
+ var delegatorRule []interface{}
+ for _, delegatorItem := range delegator {
+ delegatorRule = append(delegatorRule, delegatorItem)
+ }
+ var fromDelegateRule []interface{}
+ for _, fromDelegateItem := range fromDelegate {
+ fromDelegateRule = append(fromDelegateRule, fromDelegateItem)
+ }
+ var toDelegateRule []interface{}
+ for _, toDelegateItem := range toDelegate {
+ toDelegateRule = append(toDelegateRule, toDelegateItem)
+ }
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "DelegateChanged", delegatorRule, fromDelegateRule, toDelegateRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenDelegateChanged)
+ if err := _Ten.contract.UnpackLog(event, "DelegateChanged", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseDelegateChanged is a log parse operation binding the contract event 0x3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f.
+//
+// Solidity: event DelegateChanged(address indexed delegator, address indexed fromDelegate, address indexed toDelegate)
+func (_Ten *TenFilterer) ParseDelegateChanged(log types.Log) (*TenDelegateChanged, error) {
+ event := new(TenDelegateChanged)
+ if err := _Ten.contract.UnpackLog(event, "DelegateChanged", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenDelegateVotesChangedIterator is returned from FilterDelegateVotesChanged and is used to iterate over the raw logs and unpacked data for DelegateVotesChanged events raised by the Ten contract.
+type TenDelegateVotesChangedIterator struct {
+ Event *TenDelegateVotesChanged // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenDelegateVotesChangedIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenDelegateVotesChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenDelegateVotesChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenDelegateVotesChangedIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenDelegateVotesChangedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenDelegateVotesChanged represents a DelegateVotesChanged event raised by the Ten contract.
+type TenDelegateVotesChanged struct {
+ Delegate common.Address
+ PreviousVotes *big.Int
+ NewVotes *big.Int
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterDelegateVotesChanged is a free log retrieval operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724.
+//
+// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes)
+func (_Ten *TenFilterer) FilterDelegateVotesChanged(opts *bind.FilterOpts, delegate []common.Address) (*TenDelegateVotesChangedIterator, error) {
+
+ var delegateRule []interface{}
+ for _, delegateItem := range delegate {
+ delegateRule = append(delegateRule, delegateItem)
+ }
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "DelegateVotesChanged", delegateRule)
+ if err != nil {
+ return nil, err
+ }
+ return &TenDelegateVotesChangedIterator{contract: _Ten.contract, event: "DelegateVotesChanged", logs: logs, sub: sub}, nil
+}
+
+// WatchDelegateVotesChanged is a free log subscription operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724.
+//
+// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes)
+func (_Ten *TenFilterer) WatchDelegateVotesChanged(opts *bind.WatchOpts, sink chan<- *TenDelegateVotesChanged, delegate []common.Address) (event.Subscription, error) {
+
+ var delegateRule []interface{}
+ for _, delegateItem := range delegate {
+ delegateRule = append(delegateRule, delegateItem)
+ }
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "DelegateVotesChanged", delegateRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenDelegateVotesChanged)
+ if err := _Ten.contract.UnpackLog(event, "DelegateVotesChanged", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseDelegateVotesChanged is a log parse operation binding the contract event 0xdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724.
+//
+// Solidity: event DelegateVotesChanged(address indexed delegate, uint256 previousVotes, uint256 newVotes)
+func (_Ten *TenFilterer) ParseDelegateVotesChanged(log types.Log) (*TenDelegateVotesChanged, error) {
+ event := new(TenDelegateVotesChanged)
+ if err := _Ten.contract.UnpackLog(event, "DelegateVotesChanged", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenEIP712DomainChangedIterator is returned from FilterEIP712DomainChanged and is used to iterate over the raw logs and unpacked data for EIP712DomainChanged events raised by the Ten contract.
+type TenEIP712DomainChangedIterator struct {
+ Event *TenEIP712DomainChanged // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenEIP712DomainChangedIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenEIP712DomainChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenEIP712DomainChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenEIP712DomainChangedIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenEIP712DomainChangedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenEIP712DomainChanged represents a EIP712DomainChanged event raised by the Ten contract.
+type TenEIP712DomainChanged struct {
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterEIP712DomainChanged is a free log retrieval operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31.
+//
+// Solidity: event EIP712DomainChanged()
+func (_Ten *TenFilterer) FilterEIP712DomainChanged(opts *bind.FilterOpts) (*TenEIP712DomainChangedIterator, error) {
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "EIP712DomainChanged")
+ if err != nil {
+ return nil, err
+ }
+ return &TenEIP712DomainChangedIterator{contract: _Ten.contract, event: "EIP712DomainChanged", logs: logs, sub: sub}, nil
+}
+
+// WatchEIP712DomainChanged is a free log subscription operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31.
+//
+// Solidity: event EIP712DomainChanged()
+func (_Ten *TenFilterer) WatchEIP712DomainChanged(opts *bind.WatchOpts, sink chan<- *TenEIP712DomainChanged) (event.Subscription, error) {
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "EIP712DomainChanged")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenEIP712DomainChanged)
+ if err := _Ten.contract.UnpackLog(event, "EIP712DomainChanged", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseEIP712DomainChanged is a log parse operation binding the contract event 0x0a6387c9ea3628b88a633bb4f3b151770f70085117a15f9bf3787cda53f13d31.
+//
+// Solidity: event EIP712DomainChanged()
+func (_Ten *TenFilterer) ParseEIP712DomainChanged(log types.Log) (*TenEIP712DomainChanged, error) {
+ event := new(TenEIP712DomainChanged)
+ if err := _Ten.contract.UnpackLog(event, "EIP712DomainChanged", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenInitializedIterator is returned from FilterInitialized and is used to iterate over the raw logs and unpacked data for Initialized events raised by the Ten contract.
+type TenInitializedIterator struct {
+ Event *TenInitialized // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenInitializedIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenInitialized)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenInitialized)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenInitializedIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenInitializedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenInitialized represents a Initialized event raised by the Ten contract.
+type TenInitialized struct {
+ Version uint64
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterInitialized is a free log retrieval operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
+//
+// Solidity: event Initialized(uint64 version)
+func (_Ten *TenFilterer) FilterInitialized(opts *bind.FilterOpts) (*TenInitializedIterator, error) {
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "Initialized")
+ if err != nil {
+ return nil, err
+ }
+ return &TenInitializedIterator{contract: _Ten.contract, event: "Initialized", logs: logs, sub: sub}, nil
+}
+
+// WatchInitialized is a free log subscription operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
+//
+// Solidity: event Initialized(uint64 version)
+func (_Ten *TenFilterer) WatchInitialized(opts *bind.WatchOpts, sink chan<- *TenInitialized) (event.Subscription, error) {
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "Initialized")
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenInitialized)
+ if err := _Ten.contract.UnpackLog(event, "Initialized", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseInitialized is a log parse operation binding the contract event 0xc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2.
+//
+// Solidity: event Initialized(uint64 version)
+func (_Ten *TenFilterer) ParseInitialized(log types.Log) (*TenInitialized, error) {
+ event := new(TenInitialized)
+ if err := _Ten.contract.UnpackLog(event, "Initialized", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenOwnershipTransferredIterator is returned from FilterOwnershipTransferred and is used to iterate over the raw logs and unpacked data for OwnershipTransferred events raised by the Ten contract.
+type TenOwnershipTransferredIterator struct {
+ Event *TenOwnershipTransferred // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenOwnershipTransferredIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenOwnershipTransferred)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenOwnershipTransferred)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenOwnershipTransferredIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenOwnershipTransferredIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenOwnershipTransferred represents a OwnershipTransferred event raised by the Ten contract.
+type TenOwnershipTransferred struct {
+ PreviousOwner common.Address
+ NewOwner common.Address
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterOwnershipTransferred is a free log retrieval operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
+//
+// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
+func (_Ten *TenFilterer) FilterOwnershipTransferred(opts *bind.FilterOpts, previousOwner []common.Address, newOwner []common.Address) (*TenOwnershipTransferredIterator, error) {
+
+ var previousOwnerRule []interface{}
+ for _, previousOwnerItem := range previousOwner {
+ previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
+ }
+ var newOwnerRule []interface{}
+ for _, newOwnerItem := range newOwner {
+ newOwnerRule = append(newOwnerRule, newOwnerItem)
+ }
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
+ if err != nil {
+ return nil, err
+ }
+ return &TenOwnershipTransferredIterator{contract: _Ten.contract, event: "OwnershipTransferred", logs: logs, sub: sub}, nil
+}
+
+// WatchOwnershipTransferred is a free log subscription operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
+//
+// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
+func (_Ten *TenFilterer) WatchOwnershipTransferred(opts *bind.WatchOpts, sink chan<- *TenOwnershipTransferred, previousOwner []common.Address, newOwner []common.Address) (event.Subscription, error) {
+
+ var previousOwnerRule []interface{}
+ for _, previousOwnerItem := range previousOwner {
+ previousOwnerRule = append(previousOwnerRule, previousOwnerItem)
+ }
+ var newOwnerRule []interface{}
+ for _, newOwnerItem := range newOwner {
+ newOwnerRule = append(newOwnerRule, newOwnerItem)
+ }
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "OwnershipTransferred", previousOwnerRule, newOwnerRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenOwnershipTransferred)
+ if err := _Ten.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseOwnershipTransferred is a log parse operation binding the contract event 0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0.
+//
+// Solidity: event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
+func (_Ten *TenFilterer) ParseOwnershipTransferred(log types.Log) (*TenOwnershipTransferred, error) {
+ event := new(TenOwnershipTransferred)
+ if err := _Ten.contract.UnpackLog(event, "OwnershipTransferred", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenRoleAdminChangedIterator is returned from FilterRoleAdminChanged and is used to iterate over the raw logs and unpacked data for RoleAdminChanged events raised by the Ten contract.
+type TenRoleAdminChangedIterator struct {
+ Event *TenRoleAdminChanged // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenRoleAdminChangedIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenRoleAdminChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenRoleAdminChanged)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenRoleAdminChangedIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenRoleAdminChangedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenRoleAdminChanged represents a RoleAdminChanged event raised by the Ten contract.
+type TenRoleAdminChanged struct {
+ Role [32]byte
+ PreviousAdminRole [32]byte
+ NewAdminRole [32]byte
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterRoleAdminChanged is a free log retrieval operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff.
+//
+// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
+func (_Ten *TenFilterer) FilterRoleAdminChanged(opts *bind.FilterOpts, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (*TenRoleAdminChangedIterator, error) {
+
+ var roleRule []interface{}
+ for _, roleItem := range role {
+ roleRule = append(roleRule, roleItem)
+ }
+ var previousAdminRoleRule []interface{}
+ for _, previousAdminRoleItem := range previousAdminRole {
+ previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem)
+ }
+ var newAdminRoleRule []interface{}
+ for _, newAdminRoleItem := range newAdminRole {
+ newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem)
+ }
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule)
+ if err != nil {
+ return nil, err
+ }
+ return &TenRoleAdminChangedIterator{contract: _Ten.contract, event: "RoleAdminChanged", logs: logs, sub: sub}, nil
+}
+
+// WatchRoleAdminChanged is a free log subscription operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff.
+//
+// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
+func (_Ten *TenFilterer) WatchRoleAdminChanged(opts *bind.WatchOpts, sink chan<- *TenRoleAdminChanged, role [][32]byte, previousAdminRole [][32]byte, newAdminRole [][32]byte) (event.Subscription, error) {
+
+ var roleRule []interface{}
+ for _, roleItem := range role {
+ roleRule = append(roleRule, roleItem)
+ }
+ var previousAdminRoleRule []interface{}
+ for _, previousAdminRoleItem := range previousAdminRole {
+ previousAdminRoleRule = append(previousAdminRoleRule, previousAdminRoleItem)
+ }
+ var newAdminRoleRule []interface{}
+ for _, newAdminRoleItem := range newAdminRole {
+ newAdminRoleRule = append(newAdminRoleRule, newAdminRoleItem)
+ }
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "RoleAdminChanged", roleRule, previousAdminRoleRule, newAdminRoleRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenRoleAdminChanged)
+ if err := _Ten.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseRoleAdminChanged is a log parse operation binding the contract event 0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff.
+//
+// Solidity: event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
+func (_Ten *TenFilterer) ParseRoleAdminChanged(log types.Log) (*TenRoleAdminChanged, error) {
+ event := new(TenRoleAdminChanged)
+ if err := _Ten.contract.UnpackLog(event, "RoleAdminChanged", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenRoleGrantedIterator is returned from FilterRoleGranted and is used to iterate over the raw logs and unpacked data for RoleGranted events raised by the Ten contract.
+type TenRoleGrantedIterator struct {
+ Event *TenRoleGranted // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenRoleGrantedIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenRoleGranted)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenRoleGranted)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenRoleGrantedIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenRoleGrantedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenRoleGranted represents a RoleGranted event raised by the Ten contract.
+type TenRoleGranted struct {
+ Role [32]byte
+ Account common.Address
+ Sender common.Address
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterRoleGranted is a free log retrieval operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d.
+//
+// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
+func (_Ten *TenFilterer) FilterRoleGranted(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*TenRoleGrantedIterator, error) {
+
+ var roleRule []interface{}
+ for _, roleItem := range role {
+ roleRule = append(roleRule, roleItem)
+ }
+ var accountRule []interface{}
+ for _, accountItem := range account {
+ accountRule = append(accountRule, accountItem)
+ }
+ var senderRule []interface{}
+ for _, senderItem := range sender {
+ senderRule = append(senderRule, senderItem)
+ }
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "RoleGranted", roleRule, accountRule, senderRule)
+ if err != nil {
+ return nil, err
+ }
+ return &TenRoleGrantedIterator{contract: _Ten.contract, event: "RoleGranted", logs: logs, sub: sub}, nil
+}
+
+// WatchRoleGranted is a free log subscription operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d.
+//
+// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
+func (_Ten *TenFilterer) WatchRoleGranted(opts *bind.WatchOpts, sink chan<- *TenRoleGranted, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) {
+
+ var roleRule []interface{}
+ for _, roleItem := range role {
+ roleRule = append(roleRule, roleItem)
+ }
+ var accountRule []interface{}
+ for _, accountItem := range account {
+ accountRule = append(accountRule, accountItem)
+ }
+ var senderRule []interface{}
+ for _, senderItem := range sender {
+ senderRule = append(senderRule, senderItem)
+ }
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "RoleGranted", roleRule, accountRule, senderRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenRoleGranted)
+ if err := _Ten.contract.UnpackLog(event, "RoleGranted", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseRoleGranted is a log parse operation binding the contract event 0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d.
+//
+// Solidity: event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
+func (_Ten *TenFilterer) ParseRoleGranted(log types.Log) (*TenRoleGranted, error) {
+ event := new(TenRoleGranted)
+ if err := _Ten.contract.UnpackLog(event, "RoleGranted", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenRoleRevokedIterator is returned from FilterRoleRevoked and is used to iterate over the raw logs and unpacked data for RoleRevoked events raised by the Ten contract.
+type TenRoleRevokedIterator struct {
+ Event *TenRoleRevoked // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenRoleRevokedIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenRoleRevoked)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenRoleRevoked)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenRoleRevokedIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenRoleRevokedIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenRoleRevoked represents a RoleRevoked event raised by the Ten contract.
+type TenRoleRevoked struct {
+ Role [32]byte
+ Account common.Address
+ Sender common.Address
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterRoleRevoked is a free log retrieval operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b.
+//
+// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
+func (_Ten *TenFilterer) FilterRoleRevoked(opts *bind.FilterOpts, role [][32]byte, account []common.Address, sender []common.Address) (*TenRoleRevokedIterator, error) {
+
+ var roleRule []interface{}
+ for _, roleItem := range role {
+ roleRule = append(roleRule, roleItem)
+ }
+ var accountRule []interface{}
+ for _, accountItem := range account {
+ accountRule = append(accountRule, accountItem)
+ }
+ var senderRule []interface{}
+ for _, senderItem := range sender {
+ senderRule = append(senderRule, senderItem)
+ }
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule)
+ if err != nil {
+ return nil, err
+ }
+ return &TenRoleRevokedIterator{contract: _Ten.contract, event: "RoleRevoked", logs: logs, sub: sub}, nil
+}
+
+// WatchRoleRevoked is a free log subscription operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b.
+//
+// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
+func (_Ten *TenFilterer) WatchRoleRevoked(opts *bind.WatchOpts, sink chan<- *TenRoleRevoked, role [][32]byte, account []common.Address, sender []common.Address) (event.Subscription, error) {
+
+ var roleRule []interface{}
+ for _, roleItem := range role {
+ roleRule = append(roleRule, roleItem)
+ }
+ var accountRule []interface{}
+ for _, accountItem := range account {
+ accountRule = append(accountRule, accountItem)
+ }
+ var senderRule []interface{}
+ for _, senderItem := range sender {
+ senderRule = append(senderRule, senderItem)
+ }
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "RoleRevoked", roleRule, accountRule, senderRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenRoleRevoked)
+ if err := _Ten.contract.UnpackLog(event, "RoleRevoked", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseRoleRevoked is a log parse operation binding the contract event 0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b.
+//
+// Solidity: event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
+func (_Ten *TenFilterer) ParseRoleRevoked(log types.Log) (*TenRoleRevoked, error) {
+ event := new(TenRoleRevoked)
+ if err := _Ten.contract.UnpackLog(event, "RoleRevoked", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
+
+// TenTransferIterator is returned from FilterTransfer and is used to iterate over the raw logs and unpacked data for Transfer events raised by the Ten contract.
+type TenTransferIterator struct {
+ Event *TenTransfer // Event containing the contract specifics and raw log
+
+ contract *bind.BoundContract // Generic contract to use for unpacking event data
+ event string // Event name to use for unpacking event data
+
+ logs chan types.Log // Log channel receiving the found contract events
+ sub ethereum.Subscription // Subscription for errors, completion and termination
+ done bool // Whether the subscription completed delivering logs
+ fail error // Occurred error to stop iteration
+}
+
+// Next advances the iterator to the subsequent event, returning whether there
+// are any more events found. In case of a retrieval or parsing error, false is
+// returned and Error() can be queried for the exact failure.
+func (it *TenTransferIterator) Next() bool {
+ // If the iterator failed, stop iterating
+ if it.fail != nil {
+ return false
+ }
+ // If the iterator completed, deliver directly whatever's available
+ if it.done {
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenTransfer)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ default:
+ return false
+ }
+ }
+ // Iterator still in progress, wait for either a data or an error event
+ select {
+ case log := <-it.logs:
+ it.Event = new(TenTransfer)
+ if err := it.contract.UnpackLog(it.Event, it.event, log); err != nil {
+ it.fail = err
+ return false
+ }
+ it.Event.Raw = log
+ return true
+
+ case err := <-it.sub.Err():
+ it.done = true
+ it.fail = err
+ return it.Next()
+ }
+}
+
+// Error returns any retrieval or parsing error occurred during filtering.
+func (it *TenTransferIterator) Error() error {
+ return it.fail
+}
+
+// Close terminates the iteration process, releasing any pending underlying
+// resources.
+func (it *TenTransferIterator) Close() error {
+ it.sub.Unsubscribe()
+ return nil
+}
+
+// TenTransfer represents a Transfer event raised by the Ten contract.
+type TenTransfer struct {
+ From common.Address
+ To common.Address
+ Value *big.Int
+ Raw types.Log // Blockchain specific contextual infos
+}
+
+// FilterTransfer is a free log retrieval operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
+//
+// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
+func (_Ten *TenFilterer) FilterTransfer(opts *bind.FilterOpts, from []common.Address, to []common.Address) (*TenTransferIterator, error) {
+
+ var fromRule []interface{}
+ for _, fromItem := range from {
+ fromRule = append(fromRule, fromItem)
+ }
+ var toRule []interface{}
+ for _, toItem := range to {
+ toRule = append(toRule, toItem)
+ }
+
+ logs, sub, err := _Ten.contract.FilterLogs(opts, "Transfer", fromRule, toRule)
+ if err != nil {
+ return nil, err
+ }
+ return &TenTransferIterator{contract: _Ten.contract, event: "Transfer", logs: logs, sub: sub}, nil
+}
+
+// WatchTransfer is a free log subscription operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
+//
+// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
+func (_Ten *TenFilterer) WatchTransfer(opts *bind.WatchOpts, sink chan<- *TenTransfer, from []common.Address, to []common.Address) (event.Subscription, error) {
+
+ var fromRule []interface{}
+ for _, fromItem := range from {
+ fromRule = append(fromRule, fromItem)
+ }
+ var toRule []interface{}
+ for _, toItem := range to {
+ toRule = append(toRule, toItem)
+ }
+
+ logs, sub, err := _Ten.contract.WatchLogs(opts, "Transfer", fromRule, toRule)
+ if err != nil {
+ return nil, err
+ }
+ return event.NewSubscription(func(quit <-chan struct{}) error {
+ defer sub.Unsubscribe()
+ for {
+ select {
+ case log := <-logs:
+ // New log arrived, parse the event and forward to the user
+ event := new(TenTransfer)
+ if err := _Ten.contract.UnpackLog(event, "Transfer", log); err != nil {
+ return err
+ }
+ event.Raw = log
+
+ select {
+ case sink <- event:
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ case err := <-sub.Err():
+ return err
+ case <-quit:
+ return nil
+ }
+ }
+ }), nil
+}
+
+// ParseTransfer is a log parse operation binding the contract event 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef.
+//
+// Solidity: event Transfer(address indexed from, address indexed to, uint256 value)
+func (_Ten *TenFilterer) ParseTransfer(log types.Log) (*TenTransfer, error) {
+ event := new(TenTransfer)
+ if err := _Ten.contract.UnpackLog(event, "Transfer", log); err != nil {
+ return nil, err
+ }
+ event.Raw = log
+ return event, nil
+}
diff --git a/contracts/generated/TenBridge/TenBridge.go b/contracts/generated/TenBridge/TenBridge.go
index e5dfc6d4cd..673a51ae5f 100644
--- a/contracts/generated/TenBridge/TenBridge.go
+++ b/contracts/generated/TenBridge/TenBridge.go
@@ -32,7 +32,7 @@ var (
// TenBridgeMetaData contains all meta data concerning the TenBridge contract.
var TenBridgeMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUSPENDED_ERC20_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNPAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantPauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractICrossChainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"pauseToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"promoteToAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveNativeWrapped\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteBridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokePauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"setRemoteBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"}],\"name\":\"setWeth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"multisig\",\"type\":\"address\"}],\"name\":\"transferUnpauserRoleToMultisig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"unpauseToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
- Bin: "0x6080604052348015600e575f5ffd5b506131368061001c5f395ff3fe608060405260043610610260575f3560e01c80636c11c21c1161014b578063a1a227fa116100c6578063d547741f1161007c578063e63ab1e911610062578063e63ab1e9146107bc578063f865af08146107ef578063fb1bb9de1461080e575f5ffd5b8063d547741f1461076a578063e4c3ebc714610789575f5ffd5b8063a381c8e2116100ac578063a381c8e2146106ad578063affed0e0146106c0578063b8d1452f1461074b575f5ffd5b8063a1a227fa14610686578063a217fddf1461069a575f5ffd5b80637c41ad2c1161011b5780638456cb59116101015780638456cb59146105f057806391d148541461060457806393b3744214610667575f5ffd5b80637c41ad2c146105b257806383bece4d146105d1575f5ffd5b80636c11c21c146105225780637533087a1461054157806375b238fc146105605780637920c98614610593575f5ffd5b80633b3bff0f116101db578063485cc955116101ab5780635c975abb116101915780635c975abb146104865780635ccc9613146104bc5780635d872970146104ef575f5ffd5b8063485cc95514610448578063498d82ab14610467575f5ffd5b80633b3bff0f146103d55780633cb747bf146103f45780633f4ba83a146104155780633fc8cef314610429575f5ffd5b8063248a9ca3116102305780632f2ff15d116102165780632f2ff15d14610378578063329687821461039757806336568abe146103b6575f5ffd5b8063248a9ca3146102ff5780632540e2da14610359575f5ffd5b806301ffc9a71461026b5780630f0a9a4b146102a057806316ce8149146102cb5780631888d712146102ec575f5ffd5b3661026757005b5f5ffd5b348015610276575f5ffd5b5061028a61028536600461255c565b610841565b604051610297919061258a565b60405180910390f35b3480156102ab575f5ffd5b505f546102be906001600160a01b031681565b60405161029791906125b1565b3480156102d6575f5ffd5b506102ea6102e53660046125d3565b6108a9565b005b6102ea6102fa3660046125d3565b610961565b34801561030a575f5ffd5b5061034c610319366004612601565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040516102979190612624565b348015610364575f5ffd5b506102ea6103733660046125d3565b6109da565b348015610383575f5ffd5b506102ea610392366004612632565b610a13565b3480156103a2575f5ffd5b506102ea6103b13660046125d3565b610a5c565b3480156103c1575f5ffd5b506102ea6103d0366004612632565b610a90565b3480156103e0575f5ffd5b506102ea6103ef3660046125d3565b610adc565b3480156103ff575f5ffd5b50610408610b30565b6040516102979190612685565b348015610420575f5ffd5b506102ea610bbb565b348015610434575f5ffd5b506001546102be906001600160a01b031681565b348015610453575f5ffd5b506102ea610462366004612693565b610bf0565b348015610472575f5ffd5b506102ea6104813660046126ff565b610e07565b348015610491575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661028a565b3480156104c7575f5ffd5b5061034c7fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e81565b3480156104fa575f5ffd5b5061034c7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561052d575f5ffd5b506102ea61053c3660046125d3565b610f53565b34801561054c575f5ffd5b506102ea61055b366004612786565b610f87565b34801561056b575f5ffd5b5061034c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561059e575f5ffd5b506102ea6105ad3660046125d3565b6110a2565b3480156105bd575f5ffd5b506102ea6105cc3660046125d3565b611127565b3480156105dc575f5ffd5b506102ea6105eb3660046127b3565b6111d1565b3480156105fb575f5ffd5b506102ea61132e565b34801561060f575f5ffd5b5061028a61061e366004612632565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b348015610672575f5ffd5b506102ea6106813660046125d3565b611360565b348015610691575f5ffd5b506104086113c2565b3480156106a5575f5ffd5b5061034c5f81565b6102ea6106bb3660046127b3565b611442565b3480156106cb575f5ffd5b5060408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd005461034c565b348015610756575f5ffd5b506102ea6107653660046125d3565b6116ad565b348015610775575f5ffd5b506102ea610784366004612632565b61178e565b348015610794575f5ffd5b5061034c7fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b3480156107c7575f5ffd5b5061034c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156107fa575f5ffd5b506102ea6108093660046125d3565b6117d1565b348015610819575f5ffd5b5061034c7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806108a357507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756108d381611805565b6108db61180f565b6001600160a01b03821661090a5760405162461bcd60e51b81526004016109019061282d565b60405180910390fd5b5f546001600160a01b0316156109325760405162461bcd60e51b815260040161090190612897565b505f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61096961180f565b5f34116109885760405162461bcd60e51b8152600401610901906128d9565b5f6040518060400160405280348152602001836001600160a01b03168152506040516020016109b79190612908565b60408051601f1981840301815291905290506109d68160025f5f61186d565b5050565b5f6109e481611805565b610a0e7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611978565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a4c81611805565b610a568383611a25565b50505050565b5f610a6681611805565b610a0e7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611a25565b6001600160a01b0381163314610ad2576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0e8282611978565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610b0681611805565b610a0e7fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e83611978565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f9081527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad02851382005b546001600160a01b0316919050565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610be581611805565b610bed611ae8565b50565b5f610bf9611b54565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610c255750825b90505f8267ffffffffffffffff166001148015610c415750303b155b905081158015610c4f575080155b15610c86576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038716610ce05760405162461bcd60e51b815260040161090190612948565b6001600160a01b038616610d065760405162461bcd60e51b81526004016109019061298a565b610d0f87611b7c565b610d1886611d7d565b610d225f87611a25565b50610d2d5f30611a25565b50610d587fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217755f611df5565b610d827fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177587611a25565b50610dad7fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105785f611a25565b508315610dfe57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610df5906001906129b4565b60405180910390a15b50505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e3181611805565b610e3961180f565b6001600160a01b038616610e5f5760405162461bcd60e51b8152600401610901906129f4565b6001600160a01b0386165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff1615610eb65760405162461bcd60e51b815260040161090190612a36565b610ee07f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87611a25565b505f63458ffd6360e01b8787878787604051602401610f03959493929190612a71565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091525f54909150610dfe906001600160a01b03168260015b5f5f5f611e96565b5f610f5d81611805565b610a0e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83611a25565b5f546001600160a01b0316610f9a612010565b610fb65760405162461bcd60e51b815260040161090190612b0a565b806001600160a01b0316610fc8612032565b6001600160a01b031614610fee5760405162461bcd60e51b815260040161090190612b72565b30610ff761209f565b6001600160a01b03161461101d5760405162461bcd60e51b815260040161090190612bda565b61102561180f565b60015f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015611072575f5ffd5b505af1158015611084573d5f5f3e3d5ffd5b5050600154610a0e93506001600160a01b03169150849050856120e3565b5f6110ac81611805565b6001600160a01b0382166110d25760405162461bcd60e51b815260040161090190612c1c565b6110fc7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a33611978565b50610a0e7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611a25565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561115181611805565b6001600160a01b0382165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166111a75760405162461bcd60e51b815260040161090190612c5e565b610a0e7fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e83611a25565b5f546001600160a01b03166111e4612010565b6112005760405162461bcd60e51b815260040161090190612b0a565b806001600160a01b0316611212612032565b6001600160a01b0316146112385760405162461bcd60e51b815260040161090190612b72565b3061124161209f565b6001600160a01b0316146112675760405162461bcd60e51b815260040161090190612bda565b61126f61213e565b61127761180f565b6001600160a01b0384165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff16156112c6576112c18484846120e3565b611326565b6001600160a01b0384165f9081527e5fd0bb0e17815069821c0eac859eb66a4da90a93d511d999ef71402d667e27602052604090205460ff161561130e576112c182846121c4565b60405162461bcd60e51b815260040161090190612cc6565b610a56612276565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61135881611805565b610bed6122a0565b5f61136a81611805565b61137261180f565b6001600160a01b0382166113985760405162461bcd60e51b815260040161090190612d08565b6109d67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610a13565b60408051808201909152601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020909101527f3e1bb302f668bd876eab4a48b3759a1d614a1ecbcc67ee27a10c9a116878004e5f9081527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00610bac565b61144a61180f565b6001600160a01b0383165f9081527ff8f9f0c07f8f13fae35355825022a620ece4ae820bcc59c97dd7358124668dc9602052604090205460ff16156114a15760405162461bcd60e51b815260040161090190612d4a565b5f82116114c05760405162461bcd60e51b815260040161090190612d8c565b6001600160a01b0383165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166115165760405162461bcd60e51b815260040161090190612d9c565b611522833330856122fb565b6001546001600160a01b039081169084160361168f576001546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e1a7d4d90611581908590600401612624565b5f604051808303815f87803b158015611598575f5ffd5b505af11580156115aa573d5f5f3e3d5ffd5b50505f546040517f1888d712000000000000000000000000000000000000000000000000000000008152309350631888d712925085916115f8916001600160a01b03909116906004016125b1565b5f604051808303818588803b15801561160f575f5ffd5b505af1158015611621573d5f5f3e3d5ffd5b50505050505f637533087a60e01b8284604051602401611642929190612e23565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091525f8054919250610a56916001600160a01b0316908390610f4b565b5f6383bece4d60e01b84848460405160240161164293929190612e3e565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756116d781611805565b6116df61180f565b6001600160a01b0382166117055760405162461bcd60e51b815260040161090190612ea0565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091555f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166109d657610a0e7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83611a25565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117c781611805565b610a568383611978565b5f6117db81611805565b610a0e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83611978565b610bed8133612355565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561186b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6118756113c2565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f61190a83612edd565b919050558688866040518663ffffffff1660e01b81526004016119309493929190612f56565b60206040518083038185885af115801561194c573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119719190612fb6565b5050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611a1c575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108a3565b5f9150506108a3565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611a1c575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611a9e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108a3565b611af06123d3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611b4991906125b1565b60405180910390a150565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006108a3565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad0285138200805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055611c23610b30565b6001600160a01b031663a1a227fa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c829190612fde565b604080518082018252601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020918201527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092558051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e6365000000000000910152507f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f9081527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0055565b611d8561242e565b611d8d61246c565b611d9561246c565b611d9f5f82611a25565b50611dca7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82611a25565b506109d67f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a82611a25565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611e4e845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b6001600160a01b038616611ebc5760405162461bcd60e51b81526004016109019061302d565b5f6040518060600160405280886001600160a01b0316815260200187815260200185815250604051602001611ef19190613085565b6040516020818303038152906040529050611f0a6113c2565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f611f9f83612edd565b919050558885886040518663ffffffff1660e01b8152600401611fc59493929190612f56565b60206040518083038185885af1158015611fe1573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120069190612fb6565b5050505050505050565b5f612019610b30565b6001600160a01b0316336001600160a01b031614905090565b5f61203b610b30565b6001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612076573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209a9190612fde565b905090565b5f6120a8610b30565b6001600160a01b031663b859ce836040518163ffffffff1660e01b8152600401602060405180830381865afa158015612076573d5f5f3e3d5ffd5b6120ee838284612474565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516121319190612624565b60405180910390a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15612197576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61186b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b9061249a565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461220d576040519150601f19603f3d011682016040523d82523d5f602084013e612212565b606091505b50509050806122335760405162461bcd60e51b8152600401610901906130c8565b5f6001600160a01b0316836001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516121319190612624565b61186b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006121be565b6122a861180f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b3c565b610a5684856001600160a01b03166323b872dd868686604051602401612323939291906130d8565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506124a1565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109d65780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610901929190612e23565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661186b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243661251d565b61186b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61186b61242e565b610a0e83846001600160a01b031663a9059cbb8585604051602401612323929190612e23565b80825d5050565b5f5f60205f8451602086015f885af1806124c0576040513d5f823e3d81fd5b50505f513d915081156124d75780600114156124e4565b6001600160a01b0384163b155b15610a5657836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161090191906125b1565b5f612526611b54565b5468010000000000000000900460ff16919050565b6001600160e01b031981165b8114610bed575f5ffd5b80356108a38161253b565b5f6020828403121561256f5761256f5f5ffd5b6125798383612551565b9392505050565b8015155b82525050565b602081016108a38284612580565b5f6001600160a01b0382166108a3565b61258481612598565b602081016108a382846125a8565b61254781612598565b80356108a3816125bf565b5f602082840312156125e6576125e65f5ffd5b61257983836125c8565b80612547565b80356108a3816125f0565b5f60208284031215612614576126145f5ffd5b61257983836125f6565b80612584565b602081016108a3828461261e565b5f5f60408385031215612646576126465f5ffd5b61265084846125f6565b915061265f84602085016125c8565b90509250929050565b5f6108a382612598565b5f6108a382612668565b61258481612672565b602081016108a3828461267c565b5f5f604083850312156126a7576126a75f5ffd5b61265084846125c8565b5f5f83601f8401126126c4576126c45f5ffd5b50813567ffffffffffffffff8111156126de576126de5f5ffd5b6020830191508360018202830111156126f8576126f85f5ffd5b9250929050565b5f5f5f5f5f60608688031215612716576127165f5ffd5b61272087876125c8565b9450602086013567ffffffffffffffff81111561273e5761273e5f5ffd5b61274a888289016126b1565b9450945050604086013567ffffffffffffffff81111561276b5761276b5f5ffd5b612777888289016126b1565b92509250509295509295909350565b5f5f6040838503121561279a5761279a5f5ffd5b6127a484846125c8565b915061265f84602085016125f6565b5f5f5f606084860312156127c8576127c85f5ffd5b6127d285856125c8565b92506127e185602086016125f6565b91506127f085604086016125c8565b90509250925092565b60148152602081017f4272696467652063616e6e6f7420626520307830000000000000000000000000815290505b60200190565b602080825281016108a3816127f9565b60228152602081017f52656d6f746520627269646765206164647265737320616c726561647920736581527f742e000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016108a38161283d565b600f8152602081017f456d707479207472616e736665722e000000000000000000000000000000000081529050612827565b602080825281016108a3816128a7565b80516128f5838261261e565b506020810151610a0e60208401826125a8565b604081016108a382846128e9565b60178152602081017f4d657373656e6765722063616e6e6f742062652030783000000000000000000081529050612827565b602080825281016108a381612916565b60138152602081017f4f776e65722063616e6e6f74206265203078300000000000000000000000000081529050612827565b602080825281016108a381612958565b5f67ffffffffffffffff82166108a3565b6125848161299a565b602081016108a382846129ab565b60138152602081017f41737365742063616e6e6f74206265203078300000000000000000000000000081529050612827565b602080825281016108a3816129c2565b60198152602081017f546f6b656e20616c72656164792077686974656c69737465640000000000000081529050612827565b602080825281016108a381612a04565b82818337505f910152565b818352602083019250612a65828483612a46565b50601f01601f19160190565b60608101612a7f82886125a8565b8181036020830152612a92818688612a51565b90508181036040830152612aa7818486612a51565b979650505050505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050612891565b602080825281016108a381612ab2565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050612891565b602080825281016108a381612b1a565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f7272656374207461726765742100000000000000000000000000000060208201529050612891565b602080825281016108a381612b82565b60188152602081017f496e76616c6964206d756c74697369672061646472657373000000000000000081529050612827565b602080825281016108a381612bea565b60188152602081017f546f6b656e206973206e6f742077686974656c6973746564000000000000000081529050612827565b602080825281016108a381612c2c565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e00000000000000000000000000000000000000000000000000000060208201529050612891565b602080825281016108a381612c6e565b60178152602081017f4e65772061646d696e2063616e6e6f742062652030783000000000000000000081529050612827565b602080825281016108a381612cd6565b60108152602081017f546f6b656e206973207061757365642e0000000000000000000000000000000081529050612827565b602080825281016108a381612d18565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e00000000000081529050612827565b602080825281016108a381612d5a565b602080825281016108a381604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b60408101612e3182856125a8565b612579602083018461261e565b60608101612e4c82866125a8565b612e59602083018561261e565b612e6660408301846125a8565b949350505050565b60128152602081017f574554482063616e6e6f7420626520307830000000000000000000000000000081529050612827565b602080825281016108a381612e6e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60018201612eee57612eee612eb0565b5060010190565b67ffffffffffffffff8116612584565b63ffffffff8116612584565b8281835e505f910152565b5f612f25825190565b808452602084019350612f3c818560208601612f11565b601f01601f19169290920192915050565b60ff8116612584565b60808101612f648287612ef5565b612f716020830186612f05565b8181036040830152612f838185612f1c565b9050612f926060830184612f4d565b95945050505050565b67ffffffffffffffff8116612547565b80516108a381612f9b565b5f60208284031215612fc957612fc95f5ffd5b6125798383612fab565b80516108a3816125bf565b5f60208284031215612ff157612ff15f5ffd5b6125798383612fd3565b60148152602081017f5461726765742063616e6e6f742062652030783000000000000000000000000081529050612827565b602080825281016108a381612ffb565b80515f90606084019061305085826125a8565b50602083015184820360208601526130688282612f1c565b915050604083015161307d604086018261261e565b509392505050565b60208082528101612579818461303d565b60148152602081017f4661696c656420746f2073656e6420457468657200000000000000000000000081529050612827565b602080825281016108a381613096565b606081016130e682866125a8565b6130f360208301856125a8565b612e66604083018461261e56fea2646970667358221220464a682c7e813cbd099b690d79870203a05b17b5bc7e99ec79b0a46afd25f07264736f6c634300081c0033",
+ Bin: "0x6080604052348015600e575f5ffd5b506131368061001c5f395ff3fe608060405260043610610260575f3560e01c80636c11c21c1161014b578063a1a227fa116100c6578063d547741f1161007c578063e63ab1e911610062578063e63ab1e9146107bc578063f865af08146107ef578063fb1bb9de1461080e575f5ffd5b8063d547741f1461076a578063e4c3ebc714610789575f5ffd5b8063a381c8e2116100ac578063a381c8e2146106ad578063affed0e0146106c0578063b8d1452f1461074b575f5ffd5b8063a1a227fa14610686578063a217fddf1461069a575f5ffd5b80637c41ad2c1161011b5780638456cb59116101015780638456cb59146105f057806391d148541461060457806393b3744214610667575f5ffd5b80637c41ad2c146105b257806383bece4d146105d1575f5ffd5b80636c11c21c146105225780637533087a1461054157806375b238fc146105605780637920c98614610593575f5ffd5b80633b3bff0f116101db578063485cc955116101ab5780635c975abb116101915780635c975abb146104865780635ccc9613146104bc5780635d872970146104ef575f5ffd5b8063485cc95514610448578063498d82ab14610467575f5ffd5b80633b3bff0f146103d55780633cb747bf146103f45780633f4ba83a146104155780633fc8cef314610429575f5ffd5b8063248a9ca3116102305780632f2ff15d116102165780632f2ff15d14610378578063329687821461039757806336568abe146103b6575f5ffd5b8063248a9ca3146102ff5780632540e2da14610359575f5ffd5b806301ffc9a71461026b5780630f0a9a4b146102a057806316ce8149146102cb5780631888d712146102ec575f5ffd5b3661026757005b5f5ffd5b348015610276575f5ffd5b5061028a61028536600461255c565b610841565b604051610297919061258a565b60405180910390f35b3480156102ab575f5ffd5b505f546102be906001600160a01b031681565b60405161029791906125b1565b3480156102d6575f5ffd5b506102ea6102e53660046125d3565b6108a9565b005b6102ea6102fa3660046125d3565b610961565b34801561030a575f5ffd5b5061034c610319366004612601565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040516102979190612624565b348015610364575f5ffd5b506102ea6103733660046125d3565b6109da565b348015610383575f5ffd5b506102ea610392366004612632565b610a13565b3480156103a2575f5ffd5b506102ea6103b13660046125d3565b610a5c565b3480156103c1575f5ffd5b506102ea6103d0366004612632565b610a90565b3480156103e0575f5ffd5b506102ea6103ef3660046125d3565b610adc565b3480156103ff575f5ffd5b50610408610b30565b6040516102979190612685565b348015610420575f5ffd5b506102ea610bbb565b348015610434575f5ffd5b506001546102be906001600160a01b031681565b348015610453575f5ffd5b506102ea610462366004612693565b610bf0565b348015610472575f5ffd5b506102ea6104813660046126ff565b610e07565b348015610491575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661028a565b3480156104c7575f5ffd5b5061034c7fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e81565b3480156104fa575f5ffd5b5061034c7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b34801561052d575f5ffd5b506102ea61053c3660046125d3565b610f53565b34801561054c575f5ffd5b506102ea61055b366004612786565b610f87565b34801561056b575f5ffd5b5061034c7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b34801561059e575f5ffd5b506102ea6105ad3660046125d3565b6110a2565b3480156105bd575f5ffd5b506102ea6105cc3660046125d3565b611127565b3480156105dc575f5ffd5b506102ea6105eb3660046127b3565b6111d1565b3480156105fb575f5ffd5b506102ea61132e565b34801561060f575f5ffd5b5061028a61061e366004612632565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b348015610672575f5ffd5b506102ea6106813660046125d3565b611360565b348015610691575f5ffd5b506104086113c2565b3480156106a5575f5ffd5b5061034c5f81565b6102ea6106bb3660046127b3565b611442565b3480156106cb575f5ffd5b5060408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd005461034c565b348015610756575f5ffd5b506102ea6107653660046125d3565b6116ad565b348015610775575f5ffd5b506102ea610784366004612632565b61178e565b348015610794575f5ffd5b5061034c7fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b3480156107c7575f5ffd5b5061034c7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b3480156107fa575f5ffd5b506102ea6108093660046125d3565b6117d1565b348015610819575f5ffd5b5061034c7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806108a357507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756108d381611805565b6108db61180f565b6001600160a01b03821661090a5760405162461bcd60e51b81526004016109019061282d565b60405180910390fd5b5f546001600160a01b0316156109325760405162461bcd60e51b815260040161090190612897565b505f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61096961180f565b5f34116109885760405162461bcd60e51b8152600401610901906128d9565b5f6040518060400160405280348152602001836001600160a01b03168152506040516020016109b79190612908565b60408051601f1981840301815291905290506109d68160025f5f61186d565b5050565b5f6109e481611805565b610a0e7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611978565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a4c81611805565b610a568383611a25565b50505050565b5f610a6681611805565b610a0e7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611a25565b6001600160a01b0381163314610ad2576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a0e8282611978565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610b0681611805565b610a0e7fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e83611978565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f9081527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad02851382005b546001600160a01b0316919050565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610be581611805565b610bed611ae8565b50565b5f610bf9611b54565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610c255750825b90505f8267ffffffffffffffff166001148015610c415750303b155b905081158015610c4f575080155b15610c86576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038716610ce05760405162461bcd60e51b815260040161090190612948565b6001600160a01b038616610d065760405162461bcd60e51b81526004016109019061298a565b610d0f87611b7c565b610d1886611d7d565b610d225f87611a25565b50610d2d5f30611a25565b50610d587fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217755f611df5565b610d827fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177587611a25565b50610dad7fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105785f611a25565b508315610dfe57845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610df5906001906129b4565b60405180910390a15b50505050505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610e3181611805565b610e3961180f565b6001600160a01b038616610e5f5760405162461bcd60e51b8152600401610901906129f4565b6001600160a01b0386165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff1615610eb65760405162461bcd60e51b815260040161090190612a36565b610ee07f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87611a25565b505f63458ffd6360e01b8787878787604051602401610f03959493929190612a71565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091525f54909150610dfe906001600160a01b03168260015b5f5f5f611e96565b5f610f5d81611805565b610a0e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83611a25565b5f546001600160a01b0316610f9a612010565b610fb65760405162461bcd60e51b815260040161090190612b0a565b806001600160a01b0316610fc8612032565b6001600160a01b031614610fee5760405162461bcd60e51b815260040161090190612b72565b30610ff761209f565b6001600160a01b03161461101d5760405162461bcd60e51b815260040161090190612bda565b61102561180f565b60015f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015611072575f5ffd5b505af1158015611084573d5f5f3e3d5ffd5b5050600154610a0e93506001600160a01b03169150849050856120e3565b5f6110ac81611805565b6001600160a01b0382166110d25760405162461bcd60e51b815260040161090190612c1c565b6110fc7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a33611978565b50610a0e7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611a25565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561115181611805565b6001600160a01b0382165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166111a75760405162461bcd60e51b815260040161090190612c5e565b610a0e7fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e83611a25565b5f546001600160a01b03166111e4612010565b6112005760405162461bcd60e51b815260040161090190612b0a565b806001600160a01b0316611212612032565b6001600160a01b0316146112385760405162461bcd60e51b815260040161090190612b72565b3061124161209f565b6001600160a01b0316146112675760405162461bcd60e51b815260040161090190612bda565b61126f61213e565b61127761180f565b6001600160a01b0384165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff16156112c6576112c18484846120e3565b611326565b6001600160a01b0384165f9081527e5fd0bb0e17815069821c0eac859eb66a4da90a93d511d999ef71402d667e27602052604090205460ff161561130e576112c182846121c4565b60405162461bcd60e51b815260040161090190612cc6565b610a56612276565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61135881611805565b610bed6122a0565b5f61136a81611805565b61137261180f565b6001600160a01b0382166113985760405162461bcd60e51b815260040161090190612d08565b6109d67fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177583610a13565b60408051808201909152601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020909101527f3e1bb302f668bd876eab4a48b3759a1d614a1ecbcc67ee27a10c9a116878004e5f9081527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00610bac565b61144a61180f565b6001600160a01b0383165f9081527ff8f9f0c07f8f13fae35355825022a620ece4ae820bcc59c97dd7358124668dc9602052604090205460ff16156114a15760405162461bcd60e51b815260040161090190612d4a565b5f82116114c05760405162461bcd60e51b815260040161090190612d8c565b6001600160a01b0383165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166115165760405162461bcd60e51b815260040161090190612d9c565b611522833330856122fb565b6001546001600160a01b039081169084160361168f576001546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e1a7d4d90611581908590600401612624565b5f604051808303815f87803b158015611598575f5ffd5b505af11580156115aa573d5f5f3e3d5ffd5b50505f546040517f1888d712000000000000000000000000000000000000000000000000000000008152309350631888d712925085916115f8916001600160a01b03909116906004016125b1565b5f604051808303818588803b15801561160f575f5ffd5b505af1158015611621573d5f5f3e3d5ffd5b50505050505f637533087a60e01b8284604051602401611642929190612e23565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091525f8054919250610a56916001600160a01b0316908390610f4b565b5f6383bece4d60e01b84848460405160240161164293929190612e3e565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756116d781611805565b6116df61180f565b6001600160a01b0382166117055760405162461bcd60e51b815260040161090190612ea0565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091555f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166109d657610a0e7f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83611a25565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680060205260409020600101546117c781611805565b610a568383611978565b5f6117db81611805565b610a0e7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83611978565b610bed8133612355565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561186b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6118756113c2565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f61190a83612edd565b919050558688866040518663ffffffff1660e01b81526004016119309493929190612f56565b60206040518083038185885af115801561194c573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906119719190612fb6565b5050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611a1c575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108a3565b5f9150506108a3565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611a1c575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611a9e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108a3565b611af06123d3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611b4991906125b1565b60405180910390a150565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006108a3565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad0285138200805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055611c23610b30565b6001600160a01b031663a1a227fa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c5e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c829190612fde565b604080518082018252601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020918201527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092558051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e6365000000000000910152507f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f9081527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0055565b611d8561242e565b611d8d61246c565b611d9561246c565b611d9f5f82611a25565b50611dca7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82611a25565b506109d67f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a82611a25565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611e4e845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b6001600160a01b038616611ebc5760405162461bcd60e51b81526004016109019061302d565b5f6040518060600160405280886001600160a01b0316815260200187815260200185815250604051602001611ef19190613085565b6040516020818303038152906040529050611f0a6113c2565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f611f9f83612edd565b919050558885886040518663ffffffff1660e01b8152600401611fc59493929190612f56565b60206040518083038185885af1158015611fe1573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120069190612fb6565b5050505050505050565b5f612019610b30565b6001600160a01b0316336001600160a01b031614905090565b5f61203b610b30565b6001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612076573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209a9190612fde565b905090565b5f6120a8610b30565b6001600160a01b031663b859ce836040518163ffffffff1660e01b8152600401602060405180830381865afa158015612076573d5f5f3e3d5ffd5b6120ee838284612474565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516121319190612624565b60405180910390a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15612197576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61186b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b9061249a565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461220d576040519150601f19603f3d011682016040523d82523d5f602084013e612212565b606091505b50509050806122335760405162461bcd60e51b8152600401610901906130c8565b5f6001600160a01b0316836001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516121319190612624565b61186b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006121be565b6122a861180f565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611b3c565b610a5684856001600160a01b03166323b872dd868686604051602401612323939291906130d8565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506124a1565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109d65780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610901929190612e23565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661186b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61243661251d565b61186b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61186b61242e565b610a0e83846001600160a01b031663a9059cbb8585604051602401612323929190612e23565b80825d5050565b5f5f60205f8451602086015f885af1806124c0576040513d5f823e3d81fd5b50505f513d915081156124d75780600114156124e4565b6001600160a01b0384163b155b15610a5657836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161090191906125b1565b5f612526611b54565b5468010000000000000000900460ff16919050565b6001600160e01b031981165b8114610bed575f5ffd5b80356108a38161253b565b5f6020828403121561256f5761256f5f5ffd5b6125798383612551565b9392505050565b8015155b82525050565b602081016108a38284612580565b5f6001600160a01b0382166108a3565b61258481612598565b602081016108a382846125a8565b61254781612598565b80356108a3816125bf565b5f602082840312156125e6576125e65f5ffd5b61257983836125c8565b80612547565b80356108a3816125f0565b5f60208284031215612614576126145f5ffd5b61257983836125f6565b80612584565b602081016108a3828461261e565b5f5f60408385031215612646576126465f5ffd5b61265084846125f6565b915061265f84602085016125c8565b90509250929050565b5f6108a382612598565b5f6108a382612668565b61258481612672565b602081016108a3828461267c565b5f5f604083850312156126a7576126a75f5ffd5b61265084846125c8565b5f5f83601f8401126126c4576126c45f5ffd5b50813567ffffffffffffffff8111156126de576126de5f5ffd5b6020830191508360018202830111156126f8576126f85f5ffd5b9250929050565b5f5f5f5f5f60608688031215612716576127165f5ffd5b61272087876125c8565b9450602086013567ffffffffffffffff81111561273e5761273e5f5ffd5b61274a888289016126b1565b9450945050604086013567ffffffffffffffff81111561276b5761276b5f5ffd5b612777888289016126b1565b92509250509295509295909350565b5f5f6040838503121561279a5761279a5f5ffd5b6127a484846125c8565b915061265f84602085016125f6565b5f5f5f606084860312156127c8576127c85f5ffd5b6127d285856125c8565b92506127e185602086016125f6565b91506127f085604086016125c8565b90509250925092565b60148152602081017f4272696467652063616e6e6f7420626520307830000000000000000000000000815290505b60200190565b602080825281016108a3816127f9565b60228152602081017f52656d6f746520627269646765206164647265737320616c726561647920736581527f742e000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016108a38161283d565b600f8152602081017f456d707479207472616e736665722e000000000000000000000000000000000081529050612827565b602080825281016108a3816128a7565b80516128f5838261261e565b506020810151610a0e60208401826125a8565b604081016108a382846128e9565b60178152602081017f4d657373656e6765722063616e6e6f742062652030783000000000000000000081529050612827565b602080825281016108a381612916565b60138152602081017f4f776e65722063616e6e6f74206265203078300000000000000000000000000081529050612827565b602080825281016108a381612958565b5f67ffffffffffffffff82166108a3565b6125848161299a565b602081016108a382846129ab565b60138152602081017f41737365742063616e6e6f74206265203078300000000000000000000000000081529050612827565b602080825281016108a3816129c2565b60198152602081017f546f6b656e20616c72656164792077686974656c69737465640000000000000081529050612827565b602080825281016108a381612a04565b82818337505f910152565b818352602083019250612a65828483612a46565b50601f01601f19160190565b60608101612a7f82886125a8565b8181036020830152612a92818688612a51565b90508181036040830152612aa7818486612a51565b979650505050505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050612891565b602080825281016108a381612ab2565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050612891565b602080825281016108a381612b1a565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f7272656374207461726765742100000000000000000000000000000060208201529050612891565b602080825281016108a381612b82565b60188152602081017f496e76616c6964206d756c74697369672061646472657373000000000000000081529050612827565b602080825281016108a381612bea565b60188152602081017f546f6b656e206973206e6f742077686974656c6973746564000000000000000081529050612827565b602080825281016108a381612c2c565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e00000000000000000000000000000000000000000000000000000060208201529050612891565b602080825281016108a381612c6e565b60178152602081017f4e65772061646d696e2063616e6e6f742062652030783000000000000000000081529050612827565b602080825281016108a381612cd6565b60108152602081017f546f6b656e206973207061757365642e0000000000000000000000000000000081529050612827565b602080825281016108a381612d18565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e00000000000081529050612827565b602080825281016108a381612d5a565b602080825281016108a381604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b60408101612e3182856125a8565b612579602083018461261e565b60608101612e4c82866125a8565b612e59602083018561261e565b612e6660408301846125a8565b949350505050565b60128152602081017f574554482063616e6e6f7420626520307830000000000000000000000000000081529050612827565b602080825281016108a381612e6e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f60018201612eee57612eee612eb0565b5060010190565b67ffffffffffffffff8116612584565b63ffffffff8116612584565b8281835e505f910152565b5f612f25825190565b808452602084019350612f3c818560208601612f11565b601f01601f19169290920192915050565b60ff8116612584565b60808101612f648287612ef5565b612f716020830186612f05565b8181036040830152612f838185612f1c565b9050612f926060830184612f4d565b95945050505050565b67ffffffffffffffff8116612547565b80516108a381612f9b565b5f60208284031215612fc957612fc95f5ffd5b6125798383612fab565b80516108a3816125bf565b5f60208284031215612ff157612ff15f5ffd5b6125798383612fd3565b60148152602081017f5461726765742063616e6e6f742062652030783000000000000000000000000081529050612827565b602080825281016108a381612ffb565b80515f90606084019061305085826125a8565b50602083015184820360208601526130688282612f1c565b915050604083015161307d604086018261261e565b509392505050565b60208082528101612579818461303d565b60148152602081017f4661696c656420746f2073656e6420457468657200000000000000000000000081529050612827565b602080825281016108a381613096565b606081016130e682866125a8565b6130f360208301856125a8565b612e66604083018461261e56fea2646970667358221220c91311fb80998ce2a6c98976313854814f758372e56f9b1aa42f2db9541ef68664736f6c634300081c0033",
}
// TenBridgeABI is the input ABI used to generate the binding from.
diff --git a/contracts/generated/TenBridgeTestnet/TenBridgeTestnet.go b/contracts/generated/TenBridgeTestnet/TenBridgeTestnet.go
index 2c4b98d222..4cc5edcb93 100644
--- a/contracts/generated/TenBridgeTestnet/TenBridgeTestnet.go
+++ b/contracts/generated/TenBridgeTestnet/TenBridgeTestnet.go
@@ -32,7 +32,7 @@ var (
// TenBridgeTestnetMetaData contains all meta data concerning the TenBridgeTestnet contract.
var TenBridgeTestnetMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EnforcedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExpectedPause\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_TOKEN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SUSPENDED_ERC20_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UNPAUSER_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantPauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"messenger\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messageBus\",\"outputs\":[{\"internalType\":\"contractIMessageBus\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"messenger\",\"outputs\":[{\"internalType\":\"contractICrossChainMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"nonce\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"pauseToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"promoteToAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"receiveAssets\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"receiveNativeWrapped\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"recoverTestnetFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"remoteBridgeAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokePauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeUnpauserRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendERC20\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"}],\"name\":\"sendNative\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"bridge\",\"type\":\"address\"}],\"name\":\"setRemoteBridge\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_weth\",\"type\":\"address\"}],\"name\":\"setWeth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"multisig\",\"type\":\"address\"}],\"name\":\"transferUnpauserRoleToMultisig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"unpauseToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"weth\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"symbol\",\"type\":\"string\"}],\"name\":\"whitelistToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
- Bin: "0x6080604052348015600e575f5ffd5b506133028061001c5f395ff3fe60806040526004361061027a575f3560e01c80637533087a1161014b578063a217fddf116100c6578063d547741f1161007c578063e63ab1e911610062578063e63ab1e9146107e2578063f865af0814610815578063fb1bb9de14610834575f5ffd5b8063d547741f14610790578063e4c3ebc7146107af575f5ffd5b8063affed0e0116100ac578063affed0e0146106c7578063b8d1452f14610752578063c091a58b14610771575f5ffd5b8063a217fddf146106a1578063a381c8e2146106b4575f5ffd5b806383bece4d1161011b57806391d148541161010157806391d148541461060b57806393b374421461066e578063a1a227fa1461068d575f5ffd5b806383bece4d146105d85780638456cb59146105f7575f5ffd5b80637533087a1461055b57806375b238fc1461057a5780637920c9861461059a5780637c41ad2c146105b9575f5ffd5b80633b3bff0f116101f5578063498d82ab116101ab5780635ccc9613116101915780635ccc9613146104d65780635d872970146105095780636c11c21c1461053c575f5ffd5b8063498d82ab146104815780635c975abb146104a0575f5ffd5b80633f4ba83a116101db5780633f4ba83a1461042f5780633fc8cef314610443578063485cc95514610462575f5ffd5b80633b3bff0f146103ef5780633cb747bf1461040e575f5ffd5b8063248a9ca31161024a5780632f2ff15d116102305780632f2ff15d1461039257806332968782146103b157806336568abe146103d0575f5ffd5b8063248a9ca3146103195780632540e2da14610373575f5ffd5b806301ffc9a7146102855780630f0a9a4b146102ba57806316ce8149146102e55780631888d71214610306575f5ffd5b3661028157005b5f5ffd5b348015610290575f5ffd5b506102a461029f36600461261c565b610867565b6040516102b1919061264a565b60405180910390f35b3480156102c5575f5ffd5b505f546102d8906001600160a01b031681565b6040516102b19190612671565b3480156102f0575f5ffd5b506103046102ff366004612693565b6108cf565b005b610304610314366004612693565b610974565b348015610324575f5ffd5b506103666103333660046126c1565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040516102b191906126e4565b34801561037e575f5ffd5b5061030461038d366004612693565b6109ed565b34801561039d575f5ffd5b506103046103ac3660046126f2565b610a26565b3480156103bc575f5ffd5b506103046103cb366004612693565b610a6f565b3480156103db575f5ffd5b506103046103ea3660046126f2565b610aa3565b3480156103fa575f5ffd5b50610304610409366004612693565b610aef565b348015610419575f5ffd5b50610422610b30565b6040516102b19190612745565b34801561043a575f5ffd5b50610304610bbb565b34801561044e575f5ffd5b506001546102d8906001600160a01b031681565b34801561046d575f5ffd5b5061030461047c366004612753565b610bf0565b34801561048c575f5ffd5b5061030461049b3660046127bf565b610de1565b3480156104ab575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166102a4565b3480156104e1575f5ffd5b506103667fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e81565b348015610514575f5ffd5b506103667f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b348015610547575f5ffd5b50610304610556366004612693565b610f1a565b348015610566575f5ffd5b50610304610575366004612846565b610f4e565b348015610585575f5ffd5b506103665f5160206132ad5f395f51905f5281565b3480156105a5575f5ffd5b506103046105b4366004612693565b611069565b3480156105c4575f5ffd5b506103046105d3366004612693565b6110ee565b3480156105e3575f5ffd5b506103046105f2366004612873565b611185565b348015610602575f5ffd5b506103046112e2565b348015610616575f5ffd5b506102a46106253660046126f2565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b348015610679575f5ffd5b50610304610688366004612693565b611314565b348015610698575f5ffd5b50610422611363565b3480156106ac575f5ffd5b506103665f81565b6103046106c2366004612873565b6113e3565b3480156106d2575f5ffd5b5060408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0054610366565b34801561075d575f5ffd5b5061030461076c366004612693565b61164e565b34801561077c575f5ffd5b5061030461078b366004612693565b61171c565b34801561079b575f5ffd5b506103046107aa3660046126f2565b61184e565b3480156107ba575f5ffd5b506103667fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b3480156107ed575f5ffd5b506103667f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b348015610820575f5ffd5b5061030461082f366004612693565b611891565b34801561083f575f5ffd5b506103667f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806108c957507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b5f5160206132ad5f395f51905f526108e6816118c5565b6108ee6118cf565b6001600160a01b03821661091d5760405162461bcd60e51b8152600401610914906128ed565b60405180910390fd5b5f546001600160a01b0316156109455760405162461bcd60e51b815260040161091490612957565b505f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61097c6118cf565b5f341161099b5760405162461bcd60e51b815260040161091490612999565b5f6040518060400160405280348152602001836001600160a01b03168152506040516020016109ca91906129c8565b60408051601f1981840301815291905290506109e98160025f5f61192d565b5050565b5f6109f7816118c5565b610a217f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611a38565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a5f816118c5565b610a698383611ae5565b50505050565b5f610a79816118c5565b610a217f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611ae5565b6001600160a01b0381163314610ae5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a218282611a38565b5f5160206132ad5f395f51905f52610b06816118c5565b610a217fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e83611a38565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f9081527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad02851382005b546001600160a01b0316919050565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610be5816118c5565b610bed611ba8565b50565b5f610bf9611c14565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610c255750825b90505f8267ffffffffffffffff166001148015610c415750303b155b905081158015610c4f575080155b15610c86576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038716610ce05760405162461bcd60e51b815260040161091490612a08565b6001600160a01b038616610d065760405162461bcd60e51b815260040161091490612a4a565b610d0f87611c3c565b610d1886611e3d565b610d225f87611ae5565b50610d2d5f30611ae5565b50610d455f5160206132ad5f395f51905f525f611eb5565b610d5c5f5160206132ad5f395f51905f5287611ae5565b50610d877fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105785f611ae5565b508315610dd857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610dcf90600190612a74565b60405180910390a15b50505050505050565b5f5160206132ad5f395f51905f52610df8816118c5565b610e006118cf565b6001600160a01b038616610e265760405162461bcd60e51b815260040161091490612ab4565b6001600160a01b0386165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff1615610e7d5760405162461bcd60e51b815260040161091490612af6565b610ea77f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87611ae5565b505f63458ffd6360e01b8787878787604051602401610eca959493929190612b31565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091525f54909150610dd8906001600160a01b03168260015b5f5f5f611f56565b5f610f24816118c5565b610a217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83611ae5565b5f546001600160a01b0316610f616120d0565b610f7d5760405162461bcd60e51b815260040161091490612bca565b806001600160a01b0316610f8f6120f2565b6001600160a01b031614610fb55760405162461bcd60e51b815260040161091490612c32565b30610fbe61215f565b6001600160a01b031614610fe45760405162461bcd60e51b815260040161091490612c9a565b610fec6118cf565b60015f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015611039575f5ffd5b505af115801561104b573d5f5f3e3d5ffd5b5050600154610a2193506001600160a01b03169150849050856121a3565b5f611073816118c5565b6001600160a01b0382166110995760405162461bcd60e51b815260040161091490612cdc565b6110c37f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a33611a38565b50610a217f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611ae5565b5f5160206132ad5f395f51905f52611105816118c5565b6001600160a01b0382165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff1661115b5760405162461bcd60e51b815260040161091490612d1e565b610a217fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e83611ae5565b5f546001600160a01b03166111986120d0565b6111b45760405162461bcd60e51b815260040161091490612bca565b806001600160a01b03166111c66120f2565b6001600160a01b0316146111ec5760405162461bcd60e51b815260040161091490612c32565b306111f561215f565b6001600160a01b03161461121b5760405162461bcd60e51b815260040161091490612c9a565b6112236121fe565b61122b6118cf565b6001600160a01b0384165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff161561127a576112758484846121a3565b6112da565b6001600160a01b0384165f9081527e5fd0bb0e17815069821c0eac859eb66a4da90a93d511d999ef71402d667e27602052604090205460ff16156112c2576112758284612284565b60405162461bcd60e51b815260040161091490612d86565b610a69612336565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61130c816118c5565b610bed612360565b5f61131e816118c5565b6113266118cf565b6001600160a01b03821661134c5760405162461bcd60e51b815260040161091490612dc8565b6109e95f5160206132ad5f395f51905f5283610a26565b60408051808201909152601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020909101527f3e1bb302f668bd876eab4a48b3759a1d614a1ecbcc67ee27a10c9a116878004e5f9081527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00610bac565b6113eb6118cf565b6001600160a01b0383165f9081527ff8f9f0c07f8f13fae35355825022a620ece4ae820bcc59c97dd7358124668dc9602052604090205460ff16156114425760405162461bcd60e51b815260040161091490612e0a565b5f82116114615760405162461bcd60e51b815260040161091490612e4c565b6001600160a01b0383165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166114b75760405162461bcd60e51b815260040161091490612e5c565b6114c3833330856123bb565b6001546001600160a01b0390811690841603611630576001546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e1a7d4d906115229085906004016126e4565b5f604051808303815f87803b158015611539575f5ffd5b505af115801561154b573d5f5f3e3d5ffd5b50505f546040517f1888d712000000000000000000000000000000000000000000000000000000008152309350631888d71292508591611599916001600160a01b0390911690600401612671565b5f604051808303818588803b1580156115b0575f5ffd5b505af11580156115c2573d5f5f3e3d5ffd5b50505050505f637533087a60e01b82846040516024016115e3929190612ee3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091525f8054919250610a69916001600160a01b0316908390610f12565b5f6383bece4d60e01b8484846040516024016115e393929190612efe565b5f5160206132ad5f395f51905f52611665816118c5565b61166d6118cf565b6001600160a01b0382166116935760405162461bcd60e51b815260040161091490612f60565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091555f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166109e957610a217f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83611ae5565b5f5160206132ad5f395f51905f52611733816118c5565b6001600160a01b0382166117595760405162461bcd60e51b815260040161091490612fa2565b4662aa36a7148061176b575046610539145b6117875760405162461bcd60e51b81526004016109149061300a565b478015610a21575f836001600160a01b0316826040515f6040518083038185875af1925050503d805f81146117d7576040519150601f19603f3d011682016040523d82523d5f602084013e6117dc565b606091505b50509050806117fd5760405162461bcd60e51b81526004016109149061304c565b5f6001600160a01b0316846001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63988460405161184091906126e4565b60405180910390a350505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611887816118c5565b610a698383611a38565b5f61189b816118c5565b610a217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83611a38565b610bed8133612415565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561192b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611935611363565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f6119ca83613089565b919050558688866040518663ffffffff1660e01b81526004016119f09493929190613102565b60206040518083038185885af1158015611a0c573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a319190613162565b5050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611adc575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108c9565b5f9150506108c9565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611adc575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611b5e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108c9565b611bb0612493565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611c099190612671565b60405180910390a150565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006108c9565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad0285138200805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055611ce3610b30565b6001600160a01b031663a1a227fa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d42919061318a565b604080518082018252601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020918201527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092558051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e6365000000000000910152507f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f9081527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0055565b611e456124ee565b611e4d61252c565b611e5561252c565b611e5f5f82611ae5565b50611e8a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82611ae5565b506109e97f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a82611ae5565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611f0e845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b6001600160a01b038616611f7c5760405162461bcd60e51b8152600401610914906131d9565b5f6040518060600160405280886001600160a01b0316815260200187815260200185815250604051602001611fb19190613231565b6040516020818303038152906040529050611fca611363565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f61205f83613089565b919050558885886040518663ffffffff1660e01b81526004016120859493929190613102565b60206040518083038185885af11580156120a1573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120c69190613162565b5050505050505050565b5f6120d9610b30565b6001600160a01b0316336001600160a01b031614905090565b5f6120fb610b30565b6001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612136573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215a919061318a565b905090565b5f612168610b30565b6001600160a01b031663b859ce836040518163ffffffff1660e01b8152600401602060405180830381865afa158015612136573d5f5f3e3d5ffd5b6121ae838284612534565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516121f191906126e4565b60405180910390a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15612257576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b9061255a565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146122cd576040519150601f19603f3d011682016040523d82523d5f602084013e6122d2565b606091505b50509050806122f35760405162461bcd60e51b815260040161091490613274565b5f6001600160a01b0316836001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516121f191906126e4565b61192b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061227e565b6123686118cf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611bfc565b610a6984856001600160a01b03166323b872dd8686866040516024016123e393929190613284565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612561565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109e95780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610914929190612ee3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661192b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124f66125dd565b61192b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192b6124ee565b610a2183846001600160a01b031663a9059cbb85856040516024016123e3929190612ee3565b80825d5050565b5f5f60205f8451602086015f885af180612580576040513d5f823e3d81fd5b50505f513d915081156125975780600114156125a4565b6001600160a01b0384163b155b15610a6957836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016109149190612671565b5f6125e6611c14565b5468010000000000000000900460ff16919050565b6001600160e01b031981165b8114610bed575f5ffd5b80356108c9816125fb565b5f6020828403121561262f5761262f5f5ffd5b6126398383612611565b9392505050565b8015155b82525050565b602081016108c98284612640565b5f6001600160a01b0382166108c9565b61264481612658565b602081016108c98284612668565b61260781612658565b80356108c98161267f565b5f602082840312156126a6576126a65f5ffd5b6126398383612688565b80612607565b80356108c9816126b0565b5f602082840312156126d4576126d45f5ffd5b61263983836126b6565b80612644565b602081016108c982846126de565b5f5f60408385031215612706576127065f5ffd5b61271084846126b6565b915061271f8460208501612688565b90509250929050565b5f6108c982612658565b5f6108c982612728565b61264481612732565b602081016108c9828461273c565b5f5f60408385031215612767576127675f5ffd5b6127108484612688565b5f5f83601f840112612784576127845f5ffd5b50813567ffffffffffffffff81111561279e5761279e5f5ffd5b6020830191508360018202830111156127b8576127b85f5ffd5b9250929050565b5f5f5f5f5f606086880312156127d6576127d65f5ffd5b6127e08787612688565b9450602086013567ffffffffffffffff8111156127fe576127fe5f5ffd5b61280a88828901612771565b9450945050604086013567ffffffffffffffff81111561282b5761282b5f5ffd5b61283788828901612771565b92509250509295509295909350565b5f5f6040838503121561285a5761285a5f5ffd5b6128648484612688565b915061271f84602085016126b6565b5f5f5f60608486031215612888576128885f5ffd5b6128928585612688565b92506128a185602086016126b6565b91506128b08560408601612688565b90509250925092565b60148152602081017f4272696467652063616e6e6f7420626520307830000000000000000000000000815290505b60200190565b602080825281016108c9816128b9565b60228152602081017f52656d6f746520627269646765206164647265737320616c726561647920736581527f742e000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016108c9816128fd565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290506128e7565b602080825281016108c981612967565b80516129b583826126de565b506020810151610a216020840182612668565b604081016108c982846129a9565b60178152602081017f4d657373656e6765722063616e6e6f7420626520307830000000000000000000815290506128e7565b602080825281016108c9816129d6565b60138152602081017f4f776e65722063616e6e6f742062652030783000000000000000000000000000815290506128e7565b602080825281016108c981612a18565b5f67ffffffffffffffff82166108c9565b61264481612a5a565b602081016108c98284612a6b565b60138152602081017f41737365742063616e6e6f742062652030783000000000000000000000000000815290506128e7565b602080825281016108c981612a82565b60198152602081017f546f6b656e20616c72656164792077686974656c697374656400000000000000815290506128e7565b602080825281016108c981612ac4565b82818337505f910152565b818352602083019250612b25828483612b06565b50601f01601f19160190565b60608101612b3f8288612668565b8181036020830152612b52818688612b11565b90508181036040830152612b67818486612b11565b979650505050505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050612951565b602080825281016108c981612b72565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050612951565b602080825281016108c981612bda565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f7272656374207461726765742100000000000000000000000000000060208201529050612951565b602080825281016108c981612c42565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290506128e7565b602080825281016108c981612caa565b60188152602081017f546f6b656e206973206e6f742077686974656c69737465640000000000000000815290506128e7565b602080825281016108c981612cec565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e00000000000000000000000000000000000000000000000000000060208201529050612951565b602080825281016108c981612d2e565b60178152602081017f4e65772061646d696e2063616e6e6f7420626520307830000000000000000000815290506128e7565b602080825281016108c981612d96565b60108152602081017f546f6b656e206973207061757365642e00000000000000000000000000000000815290506128e7565b602080825281016108c981612dd8565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e000000000000815290506128e7565b602080825281016108c981612e1a565b602080825281016108c981604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b60408101612ef18285612668565b61263960208301846126de565b60608101612f0c8286612668565b612f1960208301856126de565b612f266040830184612668565b949350505050565b60128152602081017f574554482063616e6e6f74206265203078300000000000000000000000000000815290506128e7565b602080825281016108c981612f2e565b60168152602081017f52656365697665722063616e6e6f742062652030783000000000000000000000815290506128e7565b602080825281016108c981612f70565b602a8152602081017f5265636f76657279206f6e6c7920616c6c6f776564206f6e20617070726f766581527f6420746573746e6574730000000000000000000000000000000000000000000060208201529050612951565b602080825281016108c981612fb2565b60178152602081017f4661696c656420746f207265636f766572204574686572000000000000000000815290506128e7565b602080825281016108c98161301a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6001820161309a5761309a61305c565b5060010190565b67ffffffffffffffff8116612644565b63ffffffff8116612644565b8281835e505f910152565b5f6130d1825190565b8084526020840193506130e88185602086016130bd565b601f01601f19169290920192915050565b60ff8116612644565b6080810161311082876130a1565b61311d60208301866130b1565b818103604083015261312f81856130c8565b905061313e60608301846130f9565b95945050505050565b67ffffffffffffffff8116612607565b80516108c981613147565b5f60208284031215613175576131755f5ffd5b6126398383613157565b80516108c98161267f565b5f6020828403121561319d5761319d5f5ffd5b612639838361317f565b60148152602081017f5461726765742063616e6e6f7420626520307830000000000000000000000000815290506128e7565b602080825281016108c9816131a7565b80515f9060608401906131fc8582612668565b506020830151848203602086015261321482826130c8565b915050604083015161322960408601826126de565b509392505050565b6020808252810161263981846131e9565b60148152602081017f4661696c656420746f2073656e64204574686572000000000000000000000000815290506128e7565b602080825281016108c981613242565b606081016132928286612668565b61329f6020830185612668565b612f2660408301846126de56fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212203476db4f69b1b19850757a5e71e029669d99231aa7a2b44b68f9a4680853983964736f6c634300081c0033",
+ Bin: "0x6080604052348015600e575f5ffd5b506133028061001c5f395ff3fe60806040526004361061027a575f3560e01c80637533087a1161014b578063a217fddf116100c6578063d547741f1161007c578063e63ab1e911610062578063e63ab1e9146107e2578063f865af0814610815578063fb1bb9de14610834575f5ffd5b8063d547741f14610790578063e4c3ebc7146107af575f5ffd5b8063affed0e0116100ac578063affed0e0146106c7578063b8d1452f14610752578063c091a58b14610771575f5ffd5b8063a217fddf146106a1578063a381c8e2146106b4575f5ffd5b806383bece4d1161011b57806391d148541161010157806391d148541461060b57806393b374421461066e578063a1a227fa1461068d575f5ffd5b806383bece4d146105d85780638456cb59146105f7575f5ffd5b80637533087a1461055b57806375b238fc1461057a5780637920c9861461059a5780637c41ad2c146105b9575f5ffd5b80633b3bff0f116101f5578063498d82ab116101ab5780635ccc9613116101915780635ccc9613146104d65780635d872970146105095780636c11c21c1461053c575f5ffd5b8063498d82ab146104815780635c975abb146104a0575f5ffd5b80633f4ba83a116101db5780633f4ba83a1461042f5780633fc8cef314610443578063485cc95514610462575f5ffd5b80633b3bff0f146103ef5780633cb747bf1461040e575f5ffd5b8063248a9ca31161024a5780632f2ff15d116102305780632f2ff15d1461039257806332968782146103b157806336568abe146103d0575f5ffd5b8063248a9ca3146103195780632540e2da14610373575f5ffd5b806301ffc9a7146102855780630f0a9a4b146102ba57806316ce8149146102e55780631888d71214610306575f5ffd5b3661028157005b5f5ffd5b348015610290575f5ffd5b506102a461029f36600461261c565b610867565b6040516102b1919061264a565b60405180910390f35b3480156102c5575f5ffd5b505f546102d8906001600160a01b031681565b6040516102b19190612671565b3480156102f0575f5ffd5b506103046102ff366004612693565b6108cf565b005b610304610314366004612693565b610974565b348015610324575f5ffd5b506103666103333660046126c1565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040516102b191906126e4565b34801561037e575f5ffd5b5061030461038d366004612693565b6109ed565b34801561039d575f5ffd5b506103046103ac3660046126f2565b610a26565b3480156103bc575f5ffd5b506103046103cb366004612693565b610a6f565b3480156103db575f5ffd5b506103046103ea3660046126f2565b610aa3565b3480156103fa575f5ffd5b50610304610409366004612693565b610aef565b348015610419575f5ffd5b50610422610b30565b6040516102b19190612745565b34801561043a575f5ffd5b50610304610bbb565b34801561044e575f5ffd5b506001546102d8906001600160a01b031681565b34801561046d575f5ffd5b5061030461047c366004612753565b610bf0565b34801561048c575f5ffd5b5061030461049b3660046127bf565b610de1565b3480156104ab575f5ffd5b507fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166102a4565b3480156104e1575f5ffd5b506103667fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e81565b348015610514575f5ffd5b506103667f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a81565b348015610547575f5ffd5b50610304610556366004612693565b610f1a565b348015610566575f5ffd5b50610304610575366004612846565b610f4e565b348015610585575f5ffd5b506103665f5160206132ad5f395f51905f5281565b3480156105a5575f5ffd5b506103046105b4366004612693565b611069565b3480156105c4575f5ffd5b506103046105d3366004612693565b6110ee565b3480156105e3575f5ffd5b506103046105f2366004612873565b611185565b348015610602575f5ffd5b506103046112e2565b348015610616575f5ffd5b506102a46106253660046126f2565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408084206001600160a01b0393909316845291905290205460ff1690565b348015610679575f5ffd5b50610304610688366004612693565b611314565b348015610698575f5ffd5b50610422611363565b3480156106ac575f5ffd5b506103665f81565b6103046106c2366004612873565b6113e3565b3480156106d2575f5ffd5b5060408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0054610366565b34801561075d575f5ffd5b5061030461076c366004612693565b61164e565b34801561077c575f5ffd5b5061030461078b366004612693565b61171c565b34801561079b575f5ffd5b506103046107aa3660046126f2565b61184e565b3480156107ba575f5ffd5b506103667fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad211057881565b3480156107ed575f5ffd5b506103667f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b348015610820575f5ffd5b5061030461082f366004612693565b611891565b34801561083f575f5ffd5b506103667f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a81565b5f6001600160e01b031982167f7965db0b0000000000000000000000000000000000000000000000000000000014806108c957507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b5f5160206132ad5f395f51905f526108e6816118c5565b6108ee6118cf565b6001600160a01b03821661091d5760405162461bcd60e51b8152600401610914906128ed565b60405180910390fd5b5f546001600160a01b0316156109455760405162461bcd60e51b815260040161091490612957565b505f805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b61097c6118cf565b5f341161099b5760405162461bcd60e51b815260040161091490612999565b5f6040518060400160405280348152602001836001600160a01b03168152506040516020016109ca91906129c8565b60408051601f1981840301815291905290506109e98160025f5f61192d565b5050565b5f6109f7816118c5565b610a217f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611a38565b505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610a5f816118c5565b610a698383611ae5565b50505050565b5f610a79816118c5565b610a217f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611ae5565b6001600160a01b0381163314610ae5576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a218282611a38565b5f5160206132ad5f395f51905f52610b06816118c5565b610a217fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e83611a38565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f9081527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad02851382005b546001600160a01b0316919050565b7f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a610be5816118c5565b610bed611ba8565b50565b5f610bf9611c14565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015610c255750825b90505f8267ffffffffffffffff166001148015610c415750303b155b905081158015610c4f575080155b15610c86576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610cba57845468ff00000000000000001916680100000000000000001785555b6001600160a01b038716610ce05760405162461bcd60e51b815260040161091490612a08565b6001600160a01b038616610d065760405162461bcd60e51b815260040161091490612a4a565b610d0f87611c3c565b610d1886611e3d565b610d225f87611ae5565b50610d2d5f30611ae5565b50610d455f5160206132ad5f395f51905f525f611eb5565b610d5c5f5160206132ad5f395f51905f5287611ae5565b50610d877fd2fb17ceaa388942529b17e0006ffc4d559f040dd4f2157b8070f17ad21105785f611ae5565b508315610dd857845468ff0000000000000000191685556040517fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290610dcf90600190612a74565b60405180910390a15b50505050505050565b5f5160206132ad5f395f51905f52610df8816118c5565b610e006118cf565b6001600160a01b038616610e265760405162461bcd60e51b815260040161091490612ab4565b6001600160a01b0386165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff1615610e7d5760405162461bcd60e51b815260040161091490612af6565b610ea77f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a87611ae5565b505f63458ffd6360e01b8787878787604051602401610eca959493929190612b31565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091525f54909150610dd8906001600160a01b03168260015b5f5f5f611f56565b5f610f24816118c5565b610a217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83611ae5565b5f546001600160a01b0316610f616120d0565b610f7d5760405162461bcd60e51b815260040161091490612bca565b806001600160a01b0316610f8f6120f2565b6001600160a01b031614610fb55760405162461bcd60e51b815260040161091490612c32565b30610fbe61215f565b6001600160a01b031614610fe45760405162461bcd60e51b815260040161091490612c9a565b610fec6118cf565b60015f9054906101000a90046001600160a01b03166001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004015f604051808303818588803b158015611039575f5ffd5b505af115801561104b573d5f5f3e3d5ffd5b5050600154610a2193506001600160a01b03169150849050856121a3565b5f611073816118c5565b6001600160a01b0382166110995760405162461bcd60e51b815260040161091490612cdc565b6110c37f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a33611a38565b50610a217f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a83611ae5565b5f5160206132ad5f395f51905f52611105816118c5565b6001600160a01b0382165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff1661115b5760405162461bcd60e51b815260040161091490612d1e565b610a217fe08e2b666d5448741eeecf0d9bbc95ce21b6e73cca0d67afab4279e53c07cd3e83611ae5565b5f546001600160a01b03166111986120d0565b6111b45760405162461bcd60e51b815260040161091490612bca565b806001600160a01b03166111c66120f2565b6001600160a01b0316146111ec5760405162461bcd60e51b815260040161091490612c32565b306111f561215f565b6001600160a01b03161461121b5760405162461bcd60e51b815260040161091490612c9a565b6112236121fe565b61122b6118cf565b6001600160a01b0384165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff161561127a576112758484846121a3565b6112da565b6001600160a01b0384165f9081527e5fd0bb0e17815069821c0eac859eb66a4da90a93d511d999ef71402d667e27602052604090205460ff16156112c2576112758284612284565b60405162461bcd60e51b815260040161091490612d86565b610a69612336565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61130c816118c5565b610bed612360565b5f61131e816118c5565b6113266118cf565b6001600160a01b03821661134c5760405162461bcd60e51b815260040161091490612dc8565b6109e95f5160206132ad5f395f51905f5283610a26565b60408051808201909152601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020909101527f3e1bb302f668bd876eab4a48b3759a1d614a1ecbcc67ee27a10c9a116878004e5f9081527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00610bac565b6113eb6118cf565b6001600160a01b0383165f9081527ff8f9f0c07f8f13fae35355825022a620ece4ae820bcc59c97dd7358124668dc9602052604090205460ff16156114425760405162461bcd60e51b815260040161091490612e0a565b5f82116114615760405162461bcd60e51b815260040161091490612e4c565b6001600160a01b0383165f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166114b75760405162461bcd60e51b815260040161091490612e5c565b6114c3833330856123bb565b6001546001600160a01b0390811690841603611630576001546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e1a7d4d906115229085906004016126e4565b5f604051808303815f87803b158015611539575f5ffd5b505af115801561154b573d5f5f3e3d5ffd5b50505f546040517f1888d712000000000000000000000000000000000000000000000000000000008152309350631888d71292508591611599916001600160a01b0390911690600401612671565b5f604051808303818588803b1580156115b0575f5ffd5b505af11580156115c2573d5f5f3e3d5ffd5b50505050505f637533087a60e01b82846040516024016115e3929190612ee3565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091525f8054919250610a69916001600160a01b0316908390610f12565b5f6383bece4d60e01b8484846040516024016115e393929190612efe565b5f5160206132ad5f395f51905f52611665816118c5565b61166d6118cf565b6001600160a01b0382166116935760405162461bcd60e51b815260040161091490612f60565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0384169081179091555f9081527fe0305390dd8de2e924991bcde8c43652df4370e71f9558170e600f8cd2fe1d57602052604090205460ff166109e957610a217f9f225881f6e7ac8a885b63aa2269cbce78dd6a669864ccd2cd2517a8e709d73a83611ae5565b5f5160206132ad5f395f51905f52611733816118c5565b6001600160a01b0382166117595760405162461bcd60e51b815260040161091490612fa2565b4662aa36a7148061176b575046610539145b6117875760405162461bcd60e51b81526004016109149061300a565b478015610a21575f836001600160a01b0316826040515f6040518083038185875af1925050503d805f81146117d7576040519150601f19603f3d011682016040523d82523d5f602084013e6117dc565b606091505b50509050806117fd5760405162461bcd60e51b81526004016109149061304c565b5f6001600160a01b0316846001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63988460405161184091906126e4565b60405180910390a350505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611887816118c5565b610a698383611a38565b5f61189b816118c5565b610a217f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a83611a38565b610bed8133612415565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff161561192b576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b611935611363565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f6119ca83613089565b919050558688866040518663ffffffff1660e01b81526004016119f09493929190613102565b60206040518083038185885af1158015611a0c573d5f5f3e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611a319190613162565b5050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff1615611adc575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108c9565b5f9150506108c9565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602081815260408084206001600160a01b038616855290915282205460ff16611adc575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611b5e3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108c9565b611bb0612493565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b604051611c099190612671565b60405180910390a150565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006108c9565b60408051808201909152601e81527f43726f7373436861696e456e61626c656454454e2e6d657373656e67657200006020909101527fa8b5aada5c72138bb5566a3940e8fe06f59ef8af1e490446ba6ea7fa80395d525f527f3b49b3a570909bb4d324cb0ca029c61a2f4f7251edd27af783a6ad0285138200805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316179055611ce3610b30565b6001600160a01b031663a1a227fa6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d1e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d42919061318a565b604080518082018252601f81527f43726f7373436861696e456e61626c656454454e2e6d657373616765427573006020918201527f6c6664e79adefe2c614a8e3c94fc27135b7678c3722965a80d01e330dd948d00805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0394909416939093179092558051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e6365000000000000910152507f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f9081527fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd0055565b611e456124ee565b611e4d61252c565b611e5561252c565b611e5f5f82611ae5565b50611e8a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a82611ae5565b506109e97f427da25fe773164f88948d3e215c94b6554e2ed5e5f203a821c9f2f6131cf75a82611ae5565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268005f611f0e845f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b5f85815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b6001600160a01b038616611f7c5760405162461bcd60e51b8152600401610914906131d9565b5f6040518060600160405280886001600160a01b0316815260200187815260200185815250604051602001611fb19190613231565b6040516020818303038152906040529050611fca611363565b60408051808201909152601a81527f43726f7373436861696e456e61626c656454454e2e6e6f6e63650000000000006020909101527f896d106647b57d520a34062c7c0dde769b7551e327629f69d5e9844e20c864625f526001600160a01b0316630d3fd67c837fe7fbfe9855ab39eb2e984ddc0938c4134151cf94d8a54d4770b35b584ad4bd008054905f61205f83613089565b919050558885886040518663ffffffff1660e01b81526004016120859493929190613102565b60206040518083038185885af11580156120a1573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906120c69190613162565b5050505050505050565b5f6120d9610b30565b6001600160a01b0316336001600160a01b031614905090565b5f6120fb610b30565b6001600160a01b03166363012de56040518163ffffffff1660e01b8152600401602060405180830381865afa158015612136573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215a919061318a565b905090565b5f612168610b30565b6001600160a01b031663b859ce836040518163ffffffff1660e01b8152600401602060405180830381865afa158015612136573d5f5f3e3d5ffd5b6121ae838284612534565b826001600160a01b0316816001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516121f191906126e4565b60405180910390a3505050565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c15612257576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005b9061255a565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146122cd576040519150601f19603f3d011682016040523d82523d5f602084013e6122d2565b606091505b50509050806122f35760405162461bcd60e51b815260040161091490613274565b5f6001600160a01b0316836001600160a01b03167f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398846040516121f191906126e4565b61192b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0061227e565b6123686118cf565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff191660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833611bfc565b610a6984856001600160a01b03166323b872dd8686866040516024016123e393929190613284565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612561565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602090815260408083206001600160a01b038516845290915290205460ff166109e95780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610914929190612ee3565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1661192b576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6124f66125dd565b61192b576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61192b6124ee565b610a2183846001600160a01b031663a9059cbb85856040516024016123e3929190612ee3565b80825d5050565b5f5f60205f8451602086015f885af180612580576040513d5f823e3d81fd5b50505f513d915081156125975780600114156125a4565b6001600160a01b0384163b155b15610a6957836040517f5274afe70000000000000000000000000000000000000000000000000000000081526004016109149190612671565b5f6125e6611c14565b5468010000000000000000900460ff16919050565b6001600160e01b031981165b8114610bed575f5ffd5b80356108c9816125fb565b5f6020828403121561262f5761262f5f5ffd5b6126398383612611565b9392505050565b8015155b82525050565b602081016108c98284612640565b5f6001600160a01b0382166108c9565b61264481612658565b602081016108c98284612668565b61260781612658565b80356108c98161267f565b5f602082840312156126a6576126a65f5ffd5b6126398383612688565b80612607565b80356108c9816126b0565b5f602082840312156126d4576126d45f5ffd5b61263983836126b6565b80612644565b602081016108c982846126de565b5f5f60408385031215612706576127065f5ffd5b61271084846126b6565b915061271f8460208501612688565b90509250929050565b5f6108c982612658565b5f6108c982612728565b61264481612732565b602081016108c9828461273c565b5f5f60408385031215612767576127675f5ffd5b6127108484612688565b5f5f83601f840112612784576127845f5ffd5b50813567ffffffffffffffff81111561279e5761279e5f5ffd5b6020830191508360018202830111156127b8576127b85f5ffd5b9250929050565b5f5f5f5f5f606086880312156127d6576127d65f5ffd5b6127e08787612688565b9450602086013567ffffffffffffffff8111156127fe576127fe5f5ffd5b61280a88828901612771565b9450945050604086013567ffffffffffffffff81111561282b5761282b5f5ffd5b61283788828901612771565b92509250509295509295909350565b5f5f6040838503121561285a5761285a5f5ffd5b6128648484612688565b915061271f84602085016126b6565b5f5f5f60608486031215612888576128885f5ffd5b6128928585612688565b92506128a185602086016126b6565b91506128b08560408601612688565b90509250925092565b60148152602081017f4272696467652063616e6e6f7420626520307830000000000000000000000000815290505b60200190565b602080825281016108c9816128b9565b60228152602081017f52656d6f746520627269646765206164647265737320616c726561647920736581527f742e000000000000000000000000000000000000000000000000000000000000602082015290505b60400190565b602080825281016108c9816128fd565b600f8152602081017f456d707479207472616e736665722e0000000000000000000000000000000000815290506128e7565b602080825281016108c981612967565b80516129b583826126de565b506020810151610a216020840182612668565b604081016108c982846129a9565b60178152602081017f4d657373656e6765722063616e6e6f7420626520307830000000000000000000815290506128e7565b602080825281016108c9816129d6565b60138152602081017f4f776e65722063616e6e6f742062652030783000000000000000000000000000815290506128e7565b602080825281016108c981612a18565b5f67ffffffffffffffff82166108c9565b61264481612a5a565b602081016108c98284612a6b565b60138152602081017f41737365742063616e6e6f742062652030783000000000000000000000000000815290506128e7565b602080825281016108c981612a82565b60198152602081017f546f6b656e20616c72656164792077686974656c697374656400000000000000815290506128e7565b602080825281016108c981612ac4565b82818337505f910152565b818352602083019250612b25828483612b06565b50601f01601f19160190565b60608101612b3f8288612668565b8181036020830152612b52818688612b11565b90508181036040830152612b67818486612b11565b979650505050505050565b60308152602081017f436f6e74726163742063616c6c6572206973206e6f742074686520726567697381527f7465726564206d657373656e676572210000000000000000000000000000000060208201529050612951565b602080825281016108c981612b72565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f72726563742073656e6465722100000000000000000000000000000060208201529050612951565b602080825281016108c981612bda565b60318152602081017f43726f737320636861696e206d65737361676520636f6d696e672066726f6d2081527f696e636f7272656374207461726765742100000000000000000000000000000060208201529050612951565b602080825281016108c981612c42565b60188152602081017f496e76616c6964206d756c746973696720616464726573730000000000000000815290506128e7565b602080825281016108c981612caa565b60188152602081017f546f6b656e206973206e6f742077686974656c69737465640000000000000000815290506128e7565b602080825281016108c981612cec565b60258152602081017f417474656d7074696e6720746f20776974686472617720756e6b6e6f776e206181527f737365742e00000000000000000000000000000000000000000000000000000060208201529050612951565b602080825281016108c981612d2e565b60178152602081017f4e65772061646d696e2063616e6e6f7420626520307830000000000000000000815290506128e7565b602080825281016108c981612d96565b60108152602081017f546f6b656e206973207061757365642e00000000000000000000000000000000815290506128e7565b602080825281016108c981612dd8565b601a8152602081017f417474656d7074696e6720656d707479207472616e736665722e000000000000815290506128e7565b602080825281016108c981612e1a565b602080825281016108c981604e81527f54686973206164647265737320686173206e6f74206265656e20676976656e2060208201527f61207479706520616e64206973207468757320636f6e73696465726564206e6f60408201527f742077686974656c69737465642e000000000000000000000000000000000000606082015260800190565b60408101612ef18285612668565b61263960208301846126de565b60608101612f0c8286612668565b612f1960208301856126de565b612f266040830184612668565b949350505050565b60128152602081017f574554482063616e6e6f74206265203078300000000000000000000000000000815290506128e7565b602080825281016108c981612f2e565b60168152602081017f52656365697665722063616e6e6f742062652030783000000000000000000000815290506128e7565b602080825281016108c981612f70565b602a8152602081017f5265636f76657279206f6e6c7920616c6c6f776564206f6e20617070726f766581527f6420746573746e6574730000000000000000000000000000000000000000000060208201529050612951565b602080825281016108c981612fb2565b60178152602081017f4661696c656420746f207265636f766572204574686572000000000000000000815290506128e7565b602080825281016108c98161301a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6001820161309a5761309a61305c565b5060010190565b67ffffffffffffffff8116612644565b63ffffffff8116612644565b8281835e505f910152565b5f6130d1825190565b8084526020840193506130e88185602086016130bd565b601f01601f19169290920192915050565b60ff8116612644565b6080810161311082876130a1565b61311d60208301866130b1565b818103604083015261312f81856130c8565b905061313e60608301846130f9565b95945050505050565b67ffffffffffffffff8116612607565b80516108c981613147565b5f60208284031215613175576131755f5ffd5b6126398383613157565b80516108c98161267f565b5f6020828403121561319d5761319d5f5ffd5b612639838361317f565b60148152602081017f5461726765742063616e6e6f7420626520307830000000000000000000000000815290506128e7565b602080825281016108c9816131a7565b80515f9060608401906131fc8582612668565b506020830151848203602086015261321482826130c8565b915050604083015161322960408601826126de565b509392505050565b6020808252810161263981846131e9565b60148152602081017f4661696c656420746f2073656e64204574686572000000000000000000000000815290506128e7565b602080825281016108c981613242565b606081016132928286612668565b61329f6020830185612668565b612f2660408301846126de56fea49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775a26469706673582212208fe4fa809491a9b3118a11cf031ba2d46840d4bb24a911183be811aad2e962d664736f6c634300081c0033",
}
// TenBridgeTestnetABI is the input ABI used to generate the binding from.
diff --git a/contracts/src/README.md b/contracts/src/README.md
index 0a0e47a489..d1fc7f69e0 100644
--- a/contracts/src/README.md
+++ b/contracts/src/README.md
@@ -9,10 +9,8 @@ Basic functionality and data structures used across functionality.
## - l1_management
-Set of contracts deployed to Ethereum that manage the state of the TEN network collectively called the "Management Contract".
-This is the main entry point into TEN.
+Set of contracts deployed to Ethereum that manage the state of the TEN network collectively.
-The "Management Contract" is composed of:
- configurations (`NetworkConfig.sol`): advertising point for the important addresses and configurations.
- network management (`NetworkEnclaveRegistry.sol`): responsible for managing the network secret and holds a list of all nodes which have the secret. It is the Source of Truth(SoT) for the node that functions as a sequencer.
- data availability (`DataAvailabilityRegistry.sol`): manages “Rollups” which are data structures with metadata and an encrypted blob representing L2 transactions.
@@ -20,58 +18,21 @@ The "Management Contract" is composed of:
## - cross_chain_messaging
-A generic message bus implementation which has both Ethereum support and TEN platform support.
-This cross chain messaging protocol is intended to be used by top-of-stack bridges.
+Generic cross-chain messaging protocol between Ethereum and TEN. Contracts exist on both layers:
-The TEN platform understands the `IMessageBus` interface and executes the cross-chain logic in real time when the L1 blocks are created.
+- `MessageBus` — publishes messages as events and stores incoming messages from the other chain. On L2, the enclave stores L1 messages via synthetic transactions. On L1, `MerkleTreeMessageBus` extends this with Merkle proof verification against rollup state roots.
+- `CrossChainMessenger` — permissionless relay layer. Verifies a message (via finality check on L2, or Merkle proof on L1), marks it consumed, and executes the encoded function call on the target contract.
+- `CrossChainEnabledTEN` — abstract base contract for dApps. Provides `queueMessage()` to send cross-chain function calls and `onlyCrossChainSender()` to authenticate incoming ones.
-On Ethereum, the messages are submitted by TEN as a MTree root, which is "finalised" based on the DA. A relayer is responsible for presenting the actual message and executing it.
-
-This is the original design: https://github.com/ten-protocol/go-ten/blob/main/design/bridge/bridge_design.md
-(note: the current implementation differs slightly from the design)
+Design doc: https://github.com/ten-protocol/go-ten/blob/main/design/bridge/bridge_design.md
## - reference_bridge
-TEN-Ethereum ERC20 and native ETH reference bridge implementation on top of the native cross-chain protocol.
-
-```plantuml
-@startuml
-'https://plantuml.com/sequence-diagram
-
-title Ten->Ethereum native value withdrawal flow
-autonumber
-
-Alice -> TEN: Calls "EthereumBridge.sendNative" with 0.1Eth
-TEN --> TEN: Encode the value transfer as a xchain message
-TEN --> TEN: Emit MB `LogMessagePublished` event encoding the VT (E1)
-
-TEN -> Ethereum: Rollup with Xchain MTreeRoot (R1)
-
-Alice -> Ethereum: Call "TenBridge.extractNativeValue" with E1 as parameter. (This is the "Relay" step)
-Ethereum -> Ethereum: Check E1 against R1 (Call the Message Bus contract and authenticate the message)
-Ethereum -> Ethereum: Check that the message originated from the `"EthereumBridge"` (LogMessagePublished.sender=address(EthereumBridge))
-Ethereum -> Ethereum: Decode the `LogMessagePublished.payload` into a ValueTransfer(vt) struct
-Ethereum -> Ethereum: Move native value from the MB to Alice's account (`receiver.call{value: vt.amount}("");`)
-
-@enduml
-```
-
-```plantuml
-@startuml
-'https://plantuml.com/sequence-diagram
-
-title Ethereum->TEN native value deposit flow.
-autonumber
-
-Alice -> Ethereum: Calls "TenBridge.sendNative" with 0.1Eth (Transaction T1)
-Ethereum --> Ethereum: Encode the value transfer as a ``ValueTransfer``(VT)
-Ethereum --> Ethereum: Emit MB `LogMessagePublished` event encoding the VT (E1)
+Lock-and-mint ERC20/native ETH bridge built on top of the cross-chain messaging protocol:
-Ethereum --> TEN: The Ethereum block containing T1 is processed by TEN
-TEN -> TEN: Event E1 is authenticated against the block
-TEN -> TEN: Increase Alice's native balance
-@enduml
-```
+- `TenBridge` (L1) — locks ERC20 tokens and native ETH on Ethereum. Manages a token whitelist. On withdrawal, releases locked tokens back to the receiver.
+- `EthereumBridge` (L2) — mints/burns `WrappedERC20` tokens on TEN. When a token is whitelisted on L1, deploys a corresponding wrapped token on L2.
+- Native ETH deposits (L1→L2) are processed automatically by the enclave as value transfers. All other flows (ERC20 deposits, withdrawals, WETH) require an explicit `relayMessage` / `relayMessageWithProof` call.
## - system
diff --git a/contracts/src/cross_chain_messaging/common/IMessageBus.sol b/contracts/src/cross_chain_messaging/common/IMessageBus.sol
index e421b49165..dcc13f94e4 100644
--- a/contracts/src/cross_chain_messaging/common/IMessageBus.sol
+++ b/contracts/src/cross_chain_messaging/common/IMessageBus.sol
@@ -43,7 +43,7 @@ interface IMessageBus {
function getMessageTimeOfFinality(Structs.CrossChainMessage calldata crossChainMessage) external view returns (uint256);
// This is the smart contract function which is used to store messages sent from the other linked layer.
- // The function will be called by the ManagementContract on L1 and the enclave on L2.
+ // The function will only be called by the enclave on the L2.
// It should be access controlled and called according to the consistencyLevel and Obscuro platform rules.
function storeCrossChainMessage(Structs.CrossChainMessage calldata crossChainMessage, uint256 finalAfterTimestamp) external;
diff --git a/design/bridge/bridge_design.md b/design/bridge/bridge_design.md
index dc09372175..8a40572cff 100644
--- a/design/bridge/bridge_design.md
+++ b/design/bridge/bridge_design.md
@@ -1,364 +1,603 @@
-# TEN Cross Chain Messaging And Initial Bridge - Design Document
+# TEN Cross-Chain Messaging & Bridge
-We want to expose a system API that allows any developer to come and build a bridge on Ten. We also want this API to support all types of well known bridges - wrapping assets, liquidity bridges, etc. And ideally we want the system API to further allow even more exotic type of apps - providing randomness to the L1, hidden game state and anything other that can be enabled as a cross chain application!
+## 1. Introduction
-With the API we will build an initial bridge that wraps assets and might progress this further.
+TEN is an L2 that needs to communicate with Ethereum L1. This document describes the native cross-chain messaging protocol and reference bridge built on top of it..
-The API design proposal is inspired by the [Wormhole protocol](https://wormhole.com/). The idea is we would allow for authenticated messaging between Layer 1 and Layer 2 on TEN through a smart contract API available on both layers.
-It will be provided by two smart contracts deployed on network creation on both layers.
-These contracts will be owned by the ManagementContract and the enclave on their respective layers.
+The messaging protocol is a general-purpose API. Any developer can use it to build cross-chain applications — bridges, oracles, governance relays, or anything else that requires authenticated data to move between L1 and L2.
-
+The reference bridge is one such application. It locks ERC20 tokens (and native ETH) on L1 and mints wrapped equivalents on L2, and vice versa.
-## Requirements
+### Goals
-1. **High Level Requirements**
- * The TEN platform provides On-Chain system APIs that allow dApp developers to build cross-chain bridges and applications.
- * Users should be able to transmit authenticated data between L1 & L2. Example Message:
- ```json
- {
- "message": "I've locked 25 tokens from address 0x5adaf",
- "from": "0xLockContract",
- "chainId": 1
- }
- ```
- * As an L2 developer I want to be able to query specific message topics coming from specific addresses.
- * The TEN gas calculation should include the L1 fees of submitting a message that originates on the L2. Users should fully cover the storage fees and the Rollup publisher should not incur any financial loss.
- * The messaging and bridge are decentralized as much as possible.
- * Block reorganizations should have no impact on the security of the messaging protocol and the downstream apps that use this protocol.
+- Provide a generic, permissionless messaging API between L1 and L2
+- Build a reference bridge as an ordinary application on top of that API (no special privileges)
+- Support both push and pull semantics for message delivery
+- Ensure security through Merkle proofs, challenge periods, and replay protection
+---
+
+## 2. Architecture Overview
+
+The system has three layers:
+1. Transport - publishes and stores messages
+2. Relay - verifies and delivers messages
+3. Applications (eg Bridge) - dApps built by anyone
-2. **Bridge Requirements**
- * The reference bridge contracts should be completely ordinary and separate from the management contract; The API should expose all the messaging pieces of information required in order to build the bridge independently from Ten
- * The bridge will have an asset whitelist controlled and configured by the management contract. Later this will be managed by the TEN DAO.
- * Assets and their wrapped L2 counterparts should be mapped and exposed for querying.
- * Bridge functionality should be able to use the [pull payment](https://docs.openzeppelin.com/contracts/2.x/api/payment#PullPayment) design.
- > If any current dApps want to extend or port their functionality on TEN then it should be possible for them to do it without collaborating with anyone else
-## Scope
-* Messaging architecture between TEN and Mainnet Ethereum.
-* Basic Bridge that wraps assets
-* Primitive fees implementation
+Each layer exists on both the L1 and L2, but with different implementations suited to each environment:
-## Assumptions
+| Component | L1 | L2 |
+|---|---|---|
+| Transport | `MerkleTreeMessageBus` verifies messages via Merkle proofs against rollup state roots | `MessageBus` stores messages submitted by the enclave from L1 block processing |
+| Relay | `CrossChainMessenger` relays messages using Merkle proofs | `CrossChainMessenger` relays messages after finality verification |
+| App | `TenBridge` holds locked tokens, manages whitelist | `EthereumBridge` mints/burns wrapped tokens |
-1. Fees
- * Big assumption - there will be a way to pay for bridge services/messaging in TEN without incurring losses in ETH on the layer 1 side.
- * The TEN DAO will be able to configure properties for the messaging part of the protocol and accurately estimate the `gas costs` of storing data without losing too much on `gas price` spikes.
-2. Finality
- * The management contract will be responsible for not exposing data that has not been finalized. This means that it should have first gone through the challenge period.
- * The Rollup protocol will ensure the L1 blocks being consumed by the enclave and the resulting synthetic transactions are always bound to the blocks generating them.
- * TEN has fast finality over the transaction ordering rather than the results. When a deposit gets reorganized the results on TEN L2 should reorganize too if depending on it.
+---
+
+## 3. Core Data Structures
-## Modifications
+Before diving into contracts, here are the two message types that flow through the system.
-The Rollup headers right now are assumed to include withdrawal instructions. These instructions will change to generalized messages. Those messages might be withdrawal instructions or anything else.
+### CrossChainMessage
+Every cross-chain communication is encoded as a `CrossChainMessage`:
-## Definitions
+```solidity
+struct CrossChainMessage {
+ address sender; // address that published the message
+ uint64 sequence; // auto-incrementing index per sender
+ uint64 nonce; // app-defined deduplication key
+ uint32 topic; // message category (TRANSFER, MANAGEMENT, VALUE)
+ bytes payload; // arbitrary encoded data
+ uint8 consistencyLevel; // block confirmations before finality
+}
+```
-* `System contract` - A contract that is deployed by the TEN protocol when the Layer 2 network is created. System contracts serve the purpose of providing system API access on-chain.
+- `sequence` is assigned by the MessageBus (auto-incrementing per sender). The caller cannot control it. `sender + sequence` uniquely identifies every message.
+- `nonce` is provided by the caller. It is included in the emitted event and the message hash. In `CrossChainEnabledTEN`, it is auto-incremented per contract. Used to group related messages or deduplicate identical payloads.
+- `topic` provides basic routing and versioning — the bridge uses topics `0` (transfer), `1` (management), and `2` (value).
+- `consistencyLevel` controls how many L1 block confirmations must pass before the message is considered final for L2 to L1 messages.
-## MessageBus Design - TEN cross-chain data transmission
+### ValueTransferMessage
-The `MessageBus` will be deployed as a [`Proxy`](https://docs.openzeppelin.com/contracts/4.x/api/proxy)
+A specialised struct for native currency transfers:
-**The interface of the MessageBus will look like this:**
```solidity
-interface IMessageBus {
- function publishMessage(
- uint32 nonce,
- bytes memory topic,
- bytes memory payload,
- uint8 consistencyLevel
- ) external payable returns (uint64 sequence);
-
- function verifyMessageReceived(
- address sender,
- uint64 sequence,
- uint32 nonce,
- bytes memory topic,
- bytes memory payload
- ) external returns (bool);
-
- function submitOutOfNetworkMessage(
- address sender,
- uint64 sequence,
- uint32 nonce,
- bytes memory topic,
- bytes memory payload
- ) external;
-
- function queryMessages(
- address sender,
- bytes memory topic,
- uint256 fromIndex,
- uint256 toIndex
- ) external returns (bytes [] memory);
+struct ValueTransferMessage {
+ address sender;
+ address receiver;
+ uint256 amount;
+ uint64 sequence;
}
```
-The messaging API will be provided by the new `MessageBus` system contract. This contract's interface will be available for L1 and L2. This contract needs to be [`Ownable`](https://docs.openzeppelin.com/contracts/2.x/access-control) or [`RBAC`](https://docs.openzeppelin.com/contracts/2.x/access-control#role-based-access-control) based as some of the functions should only be callable from an administrative trusted address.
-This trusted address can either be the `Enclave` or the `ManagementContract`. As a system contract, the `MessageBus` should be created during the network bootstrap process.
+This struct is used for L1 to L2 native deposits. When the enclave processes a `Topics.VALUE` message with a `ValueTransfer` payload from L1, it extracts the sender, receiver, and amount, and directly credits the receiver's L2 native balance — bypassing the messenger relay entirely. The `MerkleTreeMessageBus` has a `verifyValueTransferInclusion` method for verifying these against state roots.
+
+---
+
+## 4. MessageBus (Transport)
+
+The MessageBus is the foundation of cross-chain communication. It's defined as the set of contracts that exists on both chains but with different implementations:
+The L1 message bus is deployed as `MerkleTreeMessageBus`, which extends the base `MessageBus`. It accepts outbound messages from L1 contracts (e.g. the bridge publishing a deposit). For inbound messages from L2, it does **not** store them individually. Instead, the `DataAvailabilityRegistry` registers rollup state roots, and messages are verified on-demand against those roots using Merkle proofs.
+The L2 message bus is deployed as the base `MessageBus`. It accepts outbound messages from L2 contracts (e.g. the bridge publishing a withdrawal). For inbound messages from L1, the enclave creates synthetic transactions that store them directly in the contract. These stored messages can then be verified and relayed.
-### Publish Message
+Both implementations share the same publishing interface:
-Taking inspiration from the [Wormhole contract](https://github.com/wormhole-foundation/wormhole/blob/dev.v2/ethereum/contracts/Implementation.sol) the main method of transferring information across networks would be the `publishMessage` function. For us, it will look like their definition with added `topic`.
+### Publishing a Message
+
+Any contract calls `publishMessage()`:
```solidity
function publishMessage(
- uint32 nonce, //deduplication/uniqueness mechanism
- bytes memory topic,
- bytes memory payload,
- uint8 consistencyLevel //number of confirmation blocks to wait for
-) public payable returns (uint64 sequence) {
- // check fee
- require(msg.value == messageFee(), "invalid fee");
-
- sequence = useSequence(msg.sender);
- // emit log
- emit LogMessagePublished(msg.sender, sequence, nonce, topic, payload);
+ uint64 nonce,
+ uint32 topic,
+ bytes payload,
+ uint8 consistencyLevel
+) external payable returns (uint64 sequence);
+```
+
+The MessageBus:
+1. Collects the publishing fee (`msg.value`)
+2. Assigns a sequence number to the sender
+3. Emits `LogMessagePublished(sender, sequence, nonce, topic, payload, consistencyLevel)`
+
+Messages are not stored on-chain at the source. They exist only as events. The enclave (for L1 to L2) or the rollup publisher (for L2 to L1) picks them up from there.
+
+### Storing Incoming Messages (L2 only)
+
+On L2, when the enclave processes an L1 block and finds `LogMessagePublished` events, it creates "synthetic transactions" that call `storeCrossChainMessage` on the L2 MessageBus:
+
+```solidity
+function storeCrossChainMessage(
+ CrossChainMessage message,
+ uint256 finalAfterTimestamp
+) external;
+```
+
+The function is gated by `ownerOrSelf` — synthetic transactions are sent from a masked version of the MessageBus address, which the protocol treats as a trusted internal caller. User transactions to this function are blocked at the protocol level, even if sent from an address with the correct role.
+
+The message is stored in a nested mapping (`sender to topic to message[]`) and its hash is recorded with a finality timestamp. The message cannot be consumed until `block.timestamp >= finalAfterTimestamp`.
+
+### Verifying a Message
+
+```solidity
+function verifyMessageFinalized(CrossChainMessage message) external view returns (bool);
+```
+
+Returns `true` if the message has been stored **and** its challenge period has elapsed.
+
+### L1 Extension: MerkleTreeMessageBus
+
+On L1, the MessageBus is extended with Merkle proof verification. Instead of storing every L2 to L1 message individually, rollup state roots are registered and messages are verified against them:
+
+```solidity
+function addStateRoot(bytes32 stateRoot, uint256 activationTime) external;
+function verifyMessageInclusion(CrossChainMessage msg, bytes32[] proof, bytes32 root) external view returns (bool);
+function verifyValueTransferInclusion(ValueTransferMessage msg, bytes32[] proof, bytes32 root) external view returns (bool);
+```
+
+**Leaf construction for messages:**
+```
+leaf = keccak256(abi.encode("m", keccak256(abi.encode(message))))
+```
+
+**Leaf construction for value transfers:**
+```
+leaf = keccak256(abi.encode("v", keccak256(abi.encode(message))))
+```
+
+State roots have an activation time — they can't be used for verification until `block.timestamp >= activationTime`. This is the challenge period. State roots can also be disabled if a rollup is successfully challenged.
+
+---
+
+## 5. Cross Chain Messenger
+
+The messenger sits between the MessageBus and application contracts. It takes a verified message and executes it — calling the target contract with the encoded calldata.
+
+### Cross Chain Function Calls
+
+When a dApp wants to send a cross-chain function call, it encodes a `CrossChainCall`:
+
+```solidity
+struct CrossChainCall {
+ address target; // contract to call on destination chain
+ bytes data; // encoded function call
+ uint256 gas; // gas allocation (currently unused)
}
```
-Any contract or user can call the `publishMessage` function. Any message passed will be bound to its sender so contracts cannot simply impersonate one another. As messages are not stored, but rather emitted as events all of our synchronization behind the scenes will happen inside of the `Enclave`. It will be subscribed to those events.
+This struct is packed into the `payload` field of a `CrossChainMessage`.
+
+### Relaying a Message
+
+Anyone can trigger message relay — it's permissionless. The messenger exposes two paths:
+
+**Direct verification** (L2, where messages are stored by the enclave):
+```solidity
+function relayMessage(CrossChainMessage message) external;
+```
+
+**Merkle proof verification** (L1, where messages are verified against state roots):
+```solidity
+function relayMessageWithProof(
+ CrossChainMessage message,
+ bytes32[] proof,
+ bytes32 root
+) external;
+```
-`nonce` is a deduplication mechanism that enables uniqueness between two identical payloads on the same topic. An example is when the message __"I've received 50 USDC tokens from 0xBob"__ is received twice with different nonces, this should mean those were two different deposits.
+In both cases the messenger:
+1. Verifies the message
+2. Marks it as consumed (prevents replay)
+3. Decodes the `CrossChainCall` from the payload
+4. Sets `crossChainSender` and `crossChainTarget` temporarily
+5. Calls `target.call(data)`
+6. Clears the sender/target state
-`consistencyLevel` is a mechanism to introduce delay before the message is considered valid. The platform will only expose the message after the block producing it is confirmed by blocks equal to the `consistencyLevel`
+### Replay Protection
-> **_NOTE:_** `consistencyLevel` is only required if TEN does not reorganize when L1 deposits reorganize. In other instances it can be set to 0 or 1. There is however another use case for it described in [Security](#MessageBusSecurity).
+A `mapping(bytes32 => bool) messageConsumed` ensures each message can only be relayed once. The key is the hash of the full `CrossChainMessage`.
+---
-### Verify Message
+## 6. Developer API (CrossChainEnabledTEN)
-This function checks if such a message has been submitted from the other network to the `MessageBus` contract and is useful for pull semantics. Its interface will look like this:
+`CrossChainEnabledTEN` is a convenience base contract that applications inherit to get cross-chain capabilities. During initialisation, it must be configured with the address of the `CrossChainMessenger` on the same chain — e.g. `TenBridge` on L1 points to the L1 messenger, `EthereumBridge` on L2 points to the L2 messenger. This is the trusted authority that authenticates incoming cross-chain calls:
-```solidity
-function verifyMessageReceived(
- address sender,
- uint?? sequence,
- uint32 nonce,
- bytes memory topic,
- bytes memory payload
-) public returns (bool)
+```solidity
+CrossChainEnabledTEN.configure(messengerAddress);
```
-Internally, the function will hash the message and compare it with the result of the key in `receivedMessages` map. If the map contains a `true` under this key, then the message has been received by this contract and `verifyMessageReceived` will return true. This is useful as a cheap-ish way to verify something has happened by utilizing the end user's client (or browser) as the transfer mechanism for the full message.
+The `configure` call derives the `MessageBus` address from the messenger and initialises the nonce counter. Once configured, the contract provides:
+### Sending Messages
+```solidity
+function queueMessage(
+ address remoteTarget,
+ bytes memory payload,
+ uint32 topic,
+ uint256 gas,
+ uint8 consistencyLevel
+) internal;
+```
+
+This encodes a `CrossChainCall` and publishes it through the MessageBus. The bridge uses this to send function calls like `receiveAssets(...)` to its counterpart on the other chain.
+
+For raw data (not function calls):
+```solidity
+function publishRawMessage(bytes memory data, uint32 topic, uint8 consistencyLevel) internal;
+```
-### Submit Out Of Network Messages
+### Receiving Messages
-This is the smart contract function which is used to store messages sent from the other linked layer. The function will be called by the `ManagementContract` on L1 and the `enclave` on L2. It should be access controlled and called according to the `consistencyLevel` and TEN platform rules.
+The `onlyCrossChainSender` modifier verifies that the current call originated from a cross-chain relay and came from the expected sender:
-```solidity
-function submitOutOfNetworkMessage(
- address sender,
- uint?? sequence,
- uint32 nonce,
- bytes memory topic,
- bytes memory payload
-) public onlyRole(ADMINISTRATOR|OWNER)
+```solidity
+modifier onlyCrossChainSender(address expectedSender) {
+ require(_isCrossChain());
+ require(_crossChainSender() == expectedSender);
+ require(_crossChainTarget() == address(this));
+ _;
+}
```
-This function should not be callable by any users or contracts unless they have the `ADMINISTRATOR` role or are the `Owner` of the `MessageBus` contract. Along with those requirements, on the TEN layer 2, there is an additional security measure - Any incoming transaction to this function is blocked, even if it is coming from an address that has the correct role. The protocol will block transactions that do not originate from inside of the enclave due to consuming L1 blocks. This means that even if the enclave gets hacked and the keys leak the verifiers will block withdraws.
+This is how the bridge ensures that only its counterpart on the other chain can call `receiveAssets`.
+
+---
+
+## 7. Message Flows
-When called, the function should store the message indexed in storage - map of `senders` that contains a map of `topics` which points to array of `messages` should be sufficient.
-Along with it, the hash of the whole message should be used as a key to store a message received flag inside the map `receivedMessages`. This map enables quick verification that a message is valid and received.
+There are two types of cross-chain communication, and they work differently:
-### Query Messages
+- **Message-based** (`queueMessage`) — encodes a function call as a `CrossChainCall`. Requires explicit relay on the destination chain.
+- **Value transfers** (`publishRawMessage` with `Topics.VALUE`) — encodes a `ValueTransfer` struct. On L2, the enclave processes these automatically as native balance increases. No relay needed.
-This function allows querying messages on a topic, by a certain user.
+### L1 to L2 (Message-based)
-```solidity
-function queryMessages(
- address sender,
- bytes memory topic,
- uint256 fromIndex,
- uint256 toIndex,
-) public returns (bytes [] memory)
+Used by: ERC20 deposits, token whitelisting, WETH notifications.
+
+```
+ Ethereum L1 TEN L2
+
+ 1. User/admin calls dApp (e.g. sendERC20)
+ 2. dApp calls queueMessage()
+ to MessageBus.publishMessage()
+ 3. LogMessagePublished event emitted
+ │
+ │ (automatic)
+ │ Enclave processes L1 block,
+ │ extracts LogMessagePublished events,
+ │ creates synthetic transactions
+ ▼
+ 4. MessageBus.storeCrossChainMessage()
+ (message now stored on L2)
+ 5. Poll MessageBus.verifyMessageFinalized()
+ until it returns true
+ 6. Call CrossChainMessenger.relayMessage(message)
+ 7. Messenger decodes CrossChainCall,
+ calls target contract
```
-This function should return all the messages between the requested `fromIndex` and `toIndex` of the array storing the submitted messages. The array can be found when going through the map of `senders` under the concrete `topic`. It is a more expensive way to get messages on-chain without relying on users to ferry them around.
+Step 4 is automatic (the enclave creates synthetic transactions). Steps 5-6 require someone to act — typically the user's frontend extracts the `CrossChainMessage` from the L1 `LogMessagePublished` event logs, polls for finality on L2, then submits the relay transaction.
+
+### L1 to L2 (Native value transfer)
+
+Used by `TenBridge.sendNative()` (native ETH deposits).
+
+```
+ Ethereum L1 TEN L2
+
+
+ 1. User calls TenBridge.sendNative{value}()
+ 2. publishRawMessage(ValueTransfer, Topics.VALUE)
+ to MessageBus.publishMessage()
+ 3. LogMessagePublished event emitted
+ │
+ │
+ │
+ │
+ │
+ ▼
+ 4. Receiver's balance updated
+```
-### MessageBus Internal workings - L1 to L2
+Native value transfers bypass the relay mechanism entirely. The enclave recognises `Topics.VALUE` messages with a `ValueTransfer` payload and credits the receiver's L2 balance directly via state modification.
-When a block from `L1` is processed by the `enclave` and transactions inside of it result in `MessagePublished` events, the `enclave` will submit them as messages to the inbox of the `L2` contract. This enables the `L2 smart contracts` to use/consume messages from `L1`.
+### L2 to L1
-
+Used by ERC20 withdrawals, native withdrawals, WETH withdrawals.
-> **_NOTE:_** The enclave should not accept user transactions to system contracts. Only internal/synthetic transactions should be able to call the system functions!
+```
+ TEN L2 Ethereum L1
+ ────── ──────────
+
+ 1. User calls dApp (e.g. sendERC20)
+ 2. dApp calls queueMessage()
+ to MessageBus.publishMessage()
+ 3. LogMessagePublished event emitted
+ 4. Message included in rollup state
+ │
+ │
+ │
+ │
+ │
+ │
+ ▼
+ 5. Challenge period elapses,
+ state root activates
+ 6. Call CrossChainMessenger
+ .relayMessageWithProof(
+ message, proof, root)
+ 7. MerkleTreeMessageBus verifies
+ proof against state root
+ 8. Messenger decodes CrossChainCall,
+ calls target contract
+```
-### MessageBus Internal workings - L2 to L1
+On L1, messages from L2 are never stored individually. The rollup's state root is registered in the `MerkleTreeMessageBus`, and messages are verified on-demand using Merkle proofs. This is gas-efficient — only messages that are actually claimed incur verification cost. The caller must provide the Merkle proof and the state root to use.
-When a transaction on the `L2` results in `LogMessagePublished`, the event will automatically be added to the `Rollup header` by the `enclave`. Then the management contract will submit them to the `MessageBus` or they will directly be.
+### L1 Event Authentication
-
+The host only processes events emitted by the **known L1 MessageBus contract address**, and only events matching the `LogMessagePublished` topic signature. These are extracted from L1 blocks whose integrity is guaranteed by Ethereum consensus. The enclave then binds its rollups to specific L1 block hashes — if L1 reorgs and a block changes, any rollup referencing the old block hash is invalidated (see [L1 Reorganisation Handling](#l1-reorganisation-handling)).
-> **_NOTE:_** **The messages must not be accessible unless** the challenge period has passed! On top of that the block where the message is submitted to L1 must have confirmations equal to `consistencyLevel` before the message is released. Those are simply counted on-chain as "confirmations" is meaningless for TEN L2.
+---
-### Alternative approaches
+## 8. Reference Bridge
-1. TEN only ever pushes the hash of the message. The user has the responsibility of providing the full message which will only be accepted if it matches one of the hashes, if necessary.
- * This simplifies gas cost calculations, but the problem described in the `Fees` section remains.
- * Contracts can hash their messages before passing them to the `MessageBus` and achieve nearly the same outcome if they want to.
-2. TEN only pushes to L2. Messages on L1 are provided signed by the enclave through an RPC and the MessageBus contract verifies that they have been signed by a correct enclave-owned key.
- * This disabled the option to read messages and ordering becomes problematic.
- * The API is different between layers, which might end up being a bad UX.
-### Fees
+The bridge is built entirely on top of the messaging API. It consists of two contracts:
-When publishing a message on the TEN L2, storing the message will have a direct cost to the `Sequencer` who is publishing the Rollup in the form of gas. In order to channel this cost to the user who is publishing the message we would need some configurable properties.
+| Contract | Chain | Role |
+|---|---|---|
+| `TenBridge` | L1 | Holds locked tokens, manages whitelist |
+| `EthereumBridge` | L2 | Mints/burns wrapped tokens |
-**Assumption: TEN DAO** will vote and set the following properties:
-* `fixedMessageStoringCost` - this is the gas cost for storing the fixed-size properties of the message
-* `dynamicCostPerByte` - this is the gas cost per byte for storing the dinamically sized data - `bytes payload`, `bytes topic`
-> **_NOTE:_** This whole section might change based on the outcome of the TEN fees & rewards design. It only outlines a potential solution.
+### Token Whitelisting
-The wormhole implementation requires that a fee is paid for each published message. This is something we should implement exactly as is to prevent people from spamming huge messages on L2 for a little gas cost that results in TEN having to pay for them being submitted to the L1!
+Before a token can be bridged, it must be whitelisted on L1. This triggers wrapped token creation on L2.
-The problem we will experience is that the native currency on TEN L2 will be different from the native currency on L1 - ETH. This means `ETH : TEN` pair volatility might result in losing money on gas costs.
+**On L1 (admin action):**
+1. Admin calls `TenBridge.whitelistToken(tokenAddress, name, symbol)`
+2. Bridge grants `ERC20_TOKEN_ROLE` to the token address
+3. Bridge calls `queueMessage()` to encodes `onCreateTokenCommand(tokenAddress, name, symbol)` as a `CrossChainCall` to `MessageBus.publishMessage()` emits `LogMessagePublished`
-I see a couple of possible solutions to this:
-1. Collect the fees in `WETH` when calling `publishMessage`.
- * This is a bad user experience. Anytime we want to withdraw we must source `WETH`
- * It does protect us from losing money when publishing rollups, however.
-2. Using a DEX when it becomes available on Ten's L2 we can exchange TEN tokens for the required amount of `WETH`.
+**Relay to L2 (user/relayer action):**
+4. Extract the `CrossChainMessage` from the L1 tx's `LogMessagePublished` event
+5. Poll L2 `MessageBus.verifyMessageFinalized(message)` until it returns `true`
+6. Call L2 `CrossChainMessenger.relayMessage(message)`
+7. Messenger decodes the `CrossChainCall` and calls `EthereumBridge.onCreateTokenCommand()`
+8. `EthereumBridge` deploys a new `WrappedERC20` and stores the bidirectional token mapping
-An additional insurance fee might be required. It is described in [Security](#MessageBusSecurity)
+### Deposit: L1 to L2 (ERC20)
+**On L1 (user action):**
+1. User calls `TenBridge.sendERC20(asset, amount, receiver)`
+2. Bridge verifies token is whitelisted and not suspended
+3. Bridge calls `safeTransferFrom(user, bridge, amount)` — locks tokens
+4. Bridge calls `queueMessage()` to encodes `receiveAssets(asset, amount, receiver)` to `MessageBus.publishMessage()`
+**Relay to L2 (user/relayer action):**
+5. Extract `CrossChainMessage` from L1 tx logs
+6. Poll L2 `MessageBus.verifyMessageFinalized(message)` until `true`
+7. Call L2 `CrossChainMessenger.relayMessage(message)`
+8. Messenger calls `EthereumBridge.receiveAssets(asset, amount, receiver)`
+9. Bridge looks up the L2 wrapped token and calls `WrappedERC20.issueFor(receiver, amount)`
-### Security
+### Withdrawal: L2 to L1 (ERC20)
-The security of the `MessageBus` is maintained by the `ManagementContract` and the enclave. When the `MessageBus` is secure, then all the downstream apps are secure too. **The maximum achievable security depends on the type of finality the TEN L2 has.**
+**On L2 (user action):**
+1. User calls `EthereumBridge.sendERC20(wrappedToken, amount, receiver)` with `msg.value >= publishFee`
+2. Bridge looks up L1 token address for the wrapped token
+3. Bridge calls `WrappedERC20.burnFor(user, amount)` — burns wrapped tokens
+4. Bridge calls `queueMessage()` to encodes `receiveAssets(l1Token, amount, receiver)` to `MessageBus.publishMessage()`
- * For probabilistic finality - We can be fully secure as L1 block reorgs will reorganize us too.
- * Fast & hard finality - Block reorgs can lead to instances of the enclave having delivered a message that got thrown away, even when accounting for confirmations.
+**Relay to L1 (user/relayer action, after challenge period):**
+5. Wait for the rollup containing this message to be published to L1 and the state root to activate
+6. Call L1 `CrossChainMessenger.relayMessageWithProof(message, proof, root)`
+7. Messenger verifies Merkle proof against the state root
+8. Messenger calls `TenBridge.receiveAssets(l1Token, amount, receiver)`
+9. Bridge calls `safeTransfer(receiver, amount)` — releases locked tokens
-`consistencyLevel` should be used to prevent opportunistic attacks in protocols that use messages to transfer financial value. For example if the `consistencyLevel` is equal to `0` and a user bridges some tokens which he later on trades he would still have the possible chance of canceling the "final" trade. He can do this by submitting a conflicting transaction (same `tx_nonce` as the transaction that bridged assets ) on the `L1` which always has chance of going in before the other one in cases of block reorganizations. This statistical probability can be exponentially reduced by increasing the `consistencyLevel` as there will be more blocks confirming his initial bridged asset and in turn locking it down.
+### Native ETH: L1 to L2
-**__Example cross-chain messaging and reorganization:__**
-> A user submits a transaction to bridge assets on `L1` and this transaction results in a message published from L1 -> L2. Immediately the user attempts to mint the equivalent assets from the bridge on `L2` using the message. Then the user bridges them back to the `L1`. The user transaction is immediately captured in a rollup which gets sent to `L1`. **In the meantime `L1` has experienced an reorg** and the deposit is no longer inside.
+**On L1 (user action):**
+1. User calls `TenBridge.sendNative{value: amount}(receiver)`
+2. Bridge calls `publishRawMessage()` with `ValueTransfer(amount, receiver)` on `Topics.VALUE`
-When the rollup reaches the management contract either one of those must be true:
-* The rollup must be bound to a specific `blockhash` for `block.number`. This would mean that if it contains synthetic transactions which were caused by messages that no longer exist, then the rollup will be rejected as the `blockhash` would be different for the `block.number`. The only way to ever have the same blockhash is to have the same state, transactions and order over them.
-* The rollup must be bound to a specific `MessageBus` state. Another approach is to have the `MessageBus` contract chain-hash the published messages it receives and the `ManagementContract` verifies if incoming rollups point to a historic or current hash of the `MessageBus`.
+**Automatic (no relay needed):**
+3. Enclave processes the value transfer and directly increases the receiver's native L2 balance
-This diagrams should help illustrate the control flow:
-
+### Native: L2 to L1
-**If the canonical block remains the one without the message, then the enclave should regenerate a rollup from there by reapplying the transactions!**
+**On L2 (user action):**
+1. User calls `EthereumBridge.sendNative{value: amount + fee}(receiver)`
+2. Bridge deducts the publish fee
+3. Bridge calls `queueMessage()` to encodes `receiveAssets(address(0), amount, receiver)` on `Topics.VALUE`
-> **_NOTE:_** The following section is only for fast finality that does not support block reorgs
+**Relay to L1 (after challenge period):**
+4. Call L1 `CrossChainMessenger.relayMessageWithProof(message, proof, root)`
+5. Messenger calls `TenBridge.receiveAssets(address(0), amount, receiver)`
+6. Bridge sends native ETH to receiver
+### WETH: L1 to L2
-
- More on hard & fast finality
+WETH deposits involve two operations — a native value transfer (automatic) and a message (needs relay):
-**L2 to L1 Delivery** - The `ManagementContract` needs to ensure that information is exposed through the APIs and/or messages are submitted only after the challenge period of a rollup has passed. This means that anything that shows up there will be final.
+**On L1 (user action):**
+1. User calls `TenBridge.sendERC20(weth, amount, receiver)`
+2. Bridge unwraps WETH to native ETH via `IWETH.withdraw(amount)`
+3. Bridge calls `this.sendNative{value: amount}(remoteBridgeAddress)` — publishes a `ValueTransfer` that increases the L2 bridge's native balance
+4. Bridge calls `queueMessage()` to encodes `receiveNativeWrapped(receiver, amount)` on `Topics.TRANSFER`
-**L1 to L2 Delivery** - We need to implement a block confirmation mechanism to secure the `MessageBus` - when the enclave encounters the `LogMessagePublished` it will only create a synthetic transaction for it on the L2 once the required `consistencyLevel` is achieved. Otherwise if we publish the message instantly it might end being fake as the `L1` event that caused it has been reogranized.
+**Automatic + relay:**
+5. Enclave credits the L2 bridge contract's native balance (automatic)
+6. User/relayer polls finality, then calls L2 `CrossChainMessenger.relayMessage(message)`
+7. Messenger calls `EthereumBridge.receiveNativeWrapped(receiver, amount)`
+8. Bridge wraps native ETH to WETH via `IWETH.deposit()` and transfers WETH to receiver
-We can also engineer a mechanism to insure delivered messages:
-* When fees are collected for `publishMessage`, part of those fees is funneled to an insurance pool.
-* When a message that has been published gets reorganized the TenDAO can pay for the financial loss from the insurance pool.
+### WETH: L2 to L1
-> **_NOTE:_** The maximum possible payout should always be less than the penalty for PoS slashing on MainNet. This ensures there is no profit to attacking and claiming insurance.
+**On L2 (user action):**
+1. User calls `EthereumBridge.sendERC20(localWETH, amount, receiver)` with `msg.value >= 2 * publishFee`
+2. Bridge collects WETH from user via `safeTransferFrom`, then unwraps to native ETH
+3. Bridge calls `this.sendNative{value: amount + fee}(remoteBridgeAddress)` — queues `receiveAssets(address(0), amount, remoteBridge)` on `Topics.VALUE`
+4. Bridge calls `queueMessage()` to encodes `receiveNativeWrapped(receiver, amount)` on `Topics.TRANSFER`
-
+**Relay to L1 (after challenge period):**
+5. Relay the value transfer message — `TenBridge.receiveAssets(address(0), ...)` sends native ETH to the bridge itself
+6. Relay the WETH notification — `TenBridge.receiveNativeWrapped(receiver, amount)` wraps ETH to WETH and transfers to receiver
+---
+## 9. Security Model
-## Bridge
+Security is layered, matching the architecture.
-The actual bridge will be deployed as a [`Proxy`](https://docs.openzeppelin.com/contracts/4.x/api/proxy).
+### MessageBus Security
-The initial version of the bridge implementation is going to create wrapped versions of ERC tokens. The bridge will hook into the `MessageBus` API in order to provide its functionality.
+| Threat | Mitigation |
+|---|---|
+| **Fake messages from L2** | L1 verifies messages against rollup state roots via Merkle proofs. Fake messages would require forging a state root, which requires compromising the rollup. |
+| **Premature message consumption** | Challenge period enforced via `activationTime` on state roots and `finalAfterTimestamp` on stored messages. |
+| **L1 block reorganisation** | Rollups are bound to specific L1 block hashes. If the L1 reorgs, the rollup referencing the old block becomes invalid, and any messages it contained are rejected. |
+| **Fake messages to L2** | Only synthetic transactions from the enclave can call `storeCrossChainMessage`. User transactions to the MessageBus are blocked at the protocol level. |
-It will have the following functions:
-* ```solidity
- function bridgeAssets(address erc20token, uin256 amount) public
- ```
-* ```solidity
- function receiveAssets(bytes calldata memory) public
- ```
-* ```solidity
- function bridgeETH() payable public //this function will only be available on L1 as L2 will only have WETH
- ```
-* functions to interact with OpenZeppelin's whitelist.
+### Messenger Security
-It will also have the following properties required for the OpenZeppelin whitelist to run. The whitelist is discussed in detail further down this document.
+| Threat | Mitigation |
+|---|---|
+| **Message replay** | `messageConsumed` mapping prevents any message from being relayed twice. |
+| **Reentrancy** | `ReentrancyGuard` on all relay functions. |
+| **Sender spoofing** | `onlyCrossChainSender` modifier checks both the original sender and intended target. |
+### Bridge Security
+| Threat | Mitigation |
+|---|---|
+| **Unauthorised minting** | Only cross-chain messages from the paired bridge contract can trigger `receiveAssets`. |
+| **Double withdrawal** | Handled by messenger-level replay protection. Each message can only be consumed once. |
+| **Malicious tokens** | Whitelist controlled by admin (eventually DAO). Only approved tokens can be bridged. |
+| **Reentrancy on withdrawals** | `ReentrancyGuardTransient` on `TenBridge`. |
+### L1 Reorganisation Handling
-### Cross-chain messages definitions
+This is the most subtle security concern. Consider:
-There will be the following topics initially:
-* `Transfers` - messages here will be for users transferring value across chains.
-* `Administration` - messages here will be for administrative changes; Voted upgrades, and whitelist changes.
+1. User deposits tokens on L1
+2. Message published, enclave stores it on L2, user relays it, tokens minted on L2
+3. User withdraws back to L1
+4. **L1 reorgs** — the original deposit transaction disappears
+The system handles this because rollups are **bound to specific L1 block hashes**. If the L1 reorgs:
+- The block hash changes for that block number
+- The rollup that processed the now-missing deposit references the old (invalid) block hash
+- The L1 rollup contract rejects the rollup
+- The enclave regenerates from the new canonical chain
-### Transfers
+The `consistencyLevel` parameter provides additional protection — setting it to `N` means the message won't be processed until `N` blocks have confirmed the original transaction, exponentially reducing reorg probability.
-**Diagram of the bridge process that happens on the Ethereum MainNet**
-
+### Contract Dependency Chain
+
+```
+TenBridge → CrossChainMessenger → MerkleTreeMessageBus ← DataAvailabilityRegistry
+ ← CrossChain
+```
+
+- `TenBridge` inherits `CrossChainEnabledTEN`, which is configured with the `CrossChainMessenger` address
+- `CrossChainMessenger` is initialized with the `MerkleTreeMessageBus` address for proof verification
+- `DataAvailabilityRegistry` publishes state roots to `MerkleTreeMessageBus`
+- `CrossChain` manages value transfer withdrawals via `MerkleTreeMessageBus`
---
-**Diagram of the bridge process that happens on Ten's Layer 2 when a deposit is created**
-
+## 12. Contract Reference
-**Diagram of the process to withdraw the assets from the bridge contract on Ten's Layer 2**
-
+### Messaging Contracts
-The API to transfer assets from the perspective of the user is the same on both layers. The process is as follows:
+| Contract | Purpose |
+|---|---|
+| `IMessageBus` | MessageBus interface |
+| `MessageBus` | Base implementation — publish, store, verify |
+| `MerkleTreeMessageBus` | L1 extension with Merkle proof and state root verification |
+| `ICrossChainMessenger` | Messenger interface |
+| `CrossChainMessenger` | Relay layer — consumes and executes messages |
+| `CrossChainEnabledTEN` | Abstract base for dApps — provides `queueMessage`, `onlyCrossChainSender` |
-1. User calls `function bridgeAssets(address erc20token, uint256 amount, address receiver)` after approving allowance for the address of the bridge.
-2. The bridge ensures that the `erc20token` is inside of the whitelist.
-3. The bridge ensures that `msg.value` is `0` or reverts.
-4. The bridge transfers the assets to itself - `IERC20(erc20token).transferFrom(msg.sender, address(this), amount);`
-5. If the `transferFrom` call succeeds the bridge calls `publishMessage` on the `MessageBus`. The message passed to `publishedMessage` must include the amount, the token type, and who transferred it.
-6. The bridge emits an event containing the published message along with the returned sequence number from the MessageBus.
-7. The user sends a transaction to the other layer that calls the `function receiveAssets(bytes calldata message)`
-8. The bridge contract on the other layer verifies that such a message was received by calling `verifyMessageReceived` on the `MessageBus`
-9. If verification is successful, the bridge checks that the message has not already been consumed and marks it as such, and then transfers the tokens to the corresponding address.
+### Bridge Contracts
+| Contract | Purpose |
+|---|---|
+| `IBridge` | Bridge interface |
+| `TenBridge` | L1 bridge — locks tokens, manages whitelist |
+| `EthereumBridge` | L2 bridge — mints/burns wrapped tokens |
+| `WrappedERC20` | Wrapped token with mint/burn access control |
+| `TenERC20` | Privacy-aware ERC20 base for TEN |
-> **_NOTE:_** To send raw ETH users must first call into `bridgeETH`. This function internally will convert the `msg.value` to WETH and then internally call into `bridgeAssets` with the `receiver` being equal to the `msg.sender` and the amount being equal to the WETH converted.
+### L1 Management Contracts
+| Contract | Purpose |
+|---|---|
+| `NetworkConfig` | Registry of all deployed contract addresses |
+| `CrossChain` | Manages cross-chain value transfer withdrawals and bundle verification |
+| `DataAvailabilityRegistry` | Publishes rollup state roots to `MerkleTreeMessageBus` |
+| `NetworkEnclaveRegistry` | Manages enclave registration |
+---
-### Whitelist
+## Fees
-The whitelist will be controlled by the DAO. This will be done by adding OpenZeppelin `RBAC` to the functions managing the whitelist. As for the actual whitelist we can use OpenZeppelin's [`WhitelistedRole`](https://docs.openzeppelin.com/contracts/2.x/api/access#WhitelistedRole).
+Publishing a message on L2 has a direct cost: the sequencer must pay L1 gas to include it in the rollup. The fee model channels this cost to the user.
-**When a contract is added to the whitelist**, the bridge calls `publishMessage` on the `MessageBus`. In turn, there should be another call on L2 that instructs the bridge over there to create a wrapper contract upon verifying the message.
+```solidity
+function getPublishFee() external view returns (uint256);
+```
+The fee is collected as `msg.value` when calling `publishMessage`. It covers:
+- Fixed cost for the message metadata
+- Variable cost proportional to payload size
+Fee parameters are managed by a separate `Fees` contract, configurable by the DAO.
-### Differences between L1 and L2 for the bridge contract implementation
+For the bridge specifically, native value transfers deduct the publishing fee from the sent amount:
+```
+actual_bridged = msg.value - publishFee
+```
-1. On layer 1,
- * `receiveAssets` makes the bridge approves allowance/transfers to the receiving address.
- * `bridgeAssets` makes the bridge transfer assets to itself.
-2. On layer 2
- * `receiveAssets` makes the bridge mint tokens to the receiving address. The bridge can do that as it owns the ERC20 wrapper contracts.
- * `bridgeAssets` makes the bridge burn wrapped assets from the address of `msg.sender` instead of transferring them.
+---
+## Deployment
+All L1 contracts are deployed behind `OpenZeppelinTransparentProxy` for upgradeability. L2 contracts (`MessageBus`, `CrossChainMessenger`, `EthereumBridge`) are deployed as **system contracts** during L2 network creation — they are not deployed via the L1 deployment scripts.
-### Bridge Security
+### L1 Deployment Order
-The security of the `MessageBus` guarantees that downstream dApps using it are also secure as far as cross-chain messaging is concerned. One aspect however that needs to be managed by applications is marking messages as consumed. If this is not done for the bridge then users can simply run the same message again through `receiveAssets` to mint more.
+The L1 deployment happens across three scripts in `deployment_scripts/core/`:
+**Step 1** Core infrastructure:
+1. `Fees` — fee configuration
+2. `MerkleTreeMessageBus` — initialized with `(deployer, deployer, feesAddress)`
+3. `CrossChain` — initialized with `(deployer, merkleMessageBusAddress)`, manages value transfer withdrawals
+4. `NetworkEnclaveRegistry` — enclave registration
+5. `DataAvailabilityRegistry` — initialized with `(merkleMessageBusAddress, networkEnclaveRegistryAddress, deployer)`
+6. `NetworkConfig` — registry of all deployed addresses
+7. Role grants:
+ - `DataAvailabilityRegistry` → `STATE_ROOT_MANAGER_ROLE` on `MerkleTreeMessageBus` (so it can publish rollup state roots)
+ - `CrossChain` → `WITHDRAWAL_MANAGER_ROLE` on `MerkleTreeMessageBus`
+**Step 2** Relay layer:
+1. `CrossChainMessenger` — initialized with `messageBusAddress` (read from `NetworkConfig`)
+2. Address recorded in `NetworkConfig` via `setL1CrossChainMessengerAddress`
-## Decentralization
+**Step 3** Bridge:
+1. `TenBridge` — initialized with `(crossChainMessengerAddress, deployer)`
+2. Address recorded in `NetworkConfig` via `setL1BridgeAddress`
-The `MessageBus` and `Bridge` contracts sit on-chain and inherit the least common denominator properties of both TEN and Eth. If TEN is decentralized then the Bridge and MessageBus will be too.
+### L1 to L2 Linking
+After both L1 and L2 contracts exist, `bridge/001_deploy_bridge.ts` links them:
+1. Reads L1 and L2 bridge addresses from network config
+2. Calls `TenBridge.setRemoteBridge(l2BridgeAddress)` on L1
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index 4bb88465b9..0000000000
--- a/package-lock.json
+++ /dev/null
@@ -1,3265 +0,0 @@
-{
- "name": "go-ten",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "go-ten",
- "version": "1.0.0",
- "license": "ISC",
- "dependencies": {
- "turbo": "^1.13.3"
- },
- "devDependencies": {
- "@nomicfoundation/hardhat-verify": "^2.0.14"
- }
- },
- "node_modules/@ethereumjs/rlp": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz",
- "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==",
- "dev": true,
- "license": "MPL-2.0",
- "peer": true,
- "bin": {
- "rlp": "bin/rlp.cjs"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@ethereumjs/util": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/@ethereumjs/util/-/util-9.1.0.tgz",
- "integrity": "sha512-XBEKsYqLGXLah9PNJbgdkigthkG7TAGvlD/sH12beMXEyHDyigfcbdvHhmLyDWgDyOJn4QwiQUaF7yeuhnjdog==",
- "dev": true,
- "license": "MPL-2.0",
- "peer": true,
- "dependencies": {
- "@ethereumjs/rlp": "^5.0.2",
- "ethereum-cryptography": "^2.2.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@ethereumjs/util/node_modules/@noble/curves": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz",
- "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/hashes": "1.4.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@ethereumjs/util/node_modules/@noble/hashes": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz",
- "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@ethereumjs/util/node_modules/@scure/bip32": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz",
- "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/curves": "~1.4.0",
- "@noble/hashes": "~1.4.0",
- "@scure/base": "~1.1.6"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@ethereumjs/util/node_modules/@scure/bip39": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz",
- "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/hashes": "~1.4.0",
- "@scure/base": "~1.1.6"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@ethereumjs/util/node_modules/ethereum-cryptography": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz",
- "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/curves": "1.4.2",
- "@noble/hashes": "1.4.0",
- "@scure/bip32": "1.4.0",
- "@scure/bip39": "1.3.0"
- }
- },
- "node_modules/@ethersproject/abi": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.8.0.tgz",
- "integrity": "sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/address": "^5.8.0",
- "@ethersproject/bignumber": "^5.8.0",
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/constants": "^5.8.0",
- "@ethersproject/hash": "^5.8.0",
- "@ethersproject/keccak256": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "@ethersproject/properties": "^5.8.0",
- "@ethersproject/strings": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/abstract-provider": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz",
- "integrity": "sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bignumber": "^5.8.0",
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "@ethersproject/networks": "^5.8.0",
- "@ethersproject/properties": "^5.8.0",
- "@ethersproject/transactions": "^5.8.0",
- "@ethersproject/web": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/abstract-signer": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz",
- "integrity": "sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/abstract-provider": "^5.8.0",
- "@ethersproject/bignumber": "^5.8.0",
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "@ethersproject/properties": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/address": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.8.0.tgz",
- "integrity": "sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bignumber": "^5.8.0",
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/keccak256": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "@ethersproject/rlp": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/base64": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.8.0.tgz",
- "integrity": "sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bytes": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/bignumber": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.8.0.tgz",
- "integrity": "sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "bn.js": "^5.2.1"
- }
- },
- "node_modules/@ethersproject/bytes": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.8.0.tgz",
- "integrity": "sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/logger": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/constants": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.8.0.tgz",
- "integrity": "sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bignumber": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/hash": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.8.0.tgz",
- "integrity": "sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/abstract-signer": "^5.8.0",
- "@ethersproject/address": "^5.8.0",
- "@ethersproject/base64": "^5.8.0",
- "@ethersproject/bignumber": "^5.8.0",
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/keccak256": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "@ethersproject/properties": "^5.8.0",
- "@ethersproject/strings": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/keccak256": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.8.0.tgz",
- "integrity": "sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bytes": "^5.8.0",
- "js-sha3": "0.8.0"
- }
- },
- "node_modules/@ethersproject/logger": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.8.0.tgz",
- "integrity": "sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT"
- },
- "node_modules/@ethersproject/networks": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.8.0.tgz",
- "integrity": "sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/logger": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/properties": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.8.0.tgz",
- "integrity": "sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/logger": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/rlp": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.8.0.tgz",
- "integrity": "sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/logger": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/signing-key": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.8.0.tgz",
- "integrity": "sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "@ethersproject/properties": "^5.8.0",
- "bn.js": "^5.2.1",
- "elliptic": "6.6.1",
- "hash.js": "1.1.7"
- }
- },
- "node_modules/@ethersproject/strings": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.8.0.tgz",
- "integrity": "sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/constants": "^5.8.0",
- "@ethersproject/logger": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/transactions": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.8.0.tgz",
- "integrity": "sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/address": "^5.8.0",
- "@ethersproject/bignumber": "^5.8.0",
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/constants": "^5.8.0",
- "@ethersproject/keccak256": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "@ethersproject/properties": "^5.8.0",
- "@ethersproject/rlp": "^5.8.0",
- "@ethersproject/signing-key": "^5.8.0"
- }
- },
- "node_modules/@ethersproject/web": {
- "version": "5.8.0",
- "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.8.0.tgz",
- "integrity": "sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2"
- },
- {
- "type": "individual",
- "url": "https://www.buymeacoffee.com/ricmoo"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "@ethersproject/base64": "^5.8.0",
- "@ethersproject/bytes": "^5.8.0",
- "@ethersproject/logger": "^5.8.0",
- "@ethersproject/properties": "^5.8.0",
- "@ethersproject/strings": "^5.8.0"
- }
- },
- "node_modules/@fastify/busboy": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.1.tgz",
- "integrity": "sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@noble/curves": {
- "version": "1.9.4",
- "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.4.tgz",
- "integrity": "sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/hashes": "1.8.0"
- },
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@noble/curves/node_modules/@noble/hashes": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
- "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@noble/hashes": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz",
- "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "license": "MIT",
- "peer": true
- },
- "node_modules/@noble/secp256k1": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz",
- "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "license": "MIT",
- "peer": true
- },
- "node_modules/@nomicfoundation/edr": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/edr/-/edr-0.11.3.tgz",
- "integrity": "sha512-kqILRkAd455Sd6v8mfP3C1/0tCOynJWY+Ir+k/9Boocu2kObCrsFgG+ZWB7fSBVdd9cPVSNrnhWS+V+PEo637g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@nomicfoundation/edr-darwin-arm64": "0.11.3",
- "@nomicfoundation/edr-darwin-x64": "0.11.3",
- "@nomicfoundation/edr-linux-arm64-gnu": "0.11.3",
- "@nomicfoundation/edr-linux-arm64-musl": "0.11.3",
- "@nomicfoundation/edr-linux-x64-gnu": "0.11.3",
- "@nomicfoundation/edr-linux-x64-musl": "0.11.3",
- "@nomicfoundation/edr-win32-x64-msvc": "0.11.3"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/@nomicfoundation/edr-darwin-arm64": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.11.3.tgz",
- "integrity": "sha512-w0tksbdtSxz9nuzHKsfx4c2mwaD0+l5qKL2R290QdnN9gi9AV62p9DHkOgfBdyg6/a6ZlnQqnISi7C9avk/6VA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/@nomicfoundation/edr-darwin-x64": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.11.3.tgz",
- "integrity": "sha512-QR4jAFrPbOcrO7O2z2ESg+eUeIZPe2bPIlQYgiJ04ltbSGW27FblOzdd5+S3RoOD/dsZGKAvvy6dadBEl0NgoA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/@nomicfoundation/edr-linux-arm64-gnu": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.11.3.tgz",
- "integrity": "sha512-Ktjv89RZZiUmOFPspuSBVJ61mBZQ2+HuLmV67InNlh9TSUec/iDjGIwAn59dx0bF/LOSrM7qg5od3KKac4LJDQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/@nomicfoundation/edr-linux-arm64-musl": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.11.3.tgz",
- "integrity": "sha512-B3sLJx1rL2E9pfdD4mApiwOZSrX0a/KQSBWdlq1uAhFKqkl00yZaY4LejgZndsJAa4iKGQJlGnw4HCGeVt0+jA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/@nomicfoundation/edr-linux-x64-gnu": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.11.3.tgz",
- "integrity": "sha512-D/4cFKDXH6UYyKPu6J3Y8TzW11UzeQI0+wS9QcJzjlrrfKj0ENW7g9VihD1O2FvXkdkTjcCZYb6ai8MMTCsaVw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/@nomicfoundation/edr-linux-x64-musl": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.11.3.tgz",
- "integrity": "sha512-ergXuIb4nIvmf+TqyiDX5tsE49311DrBky6+jNLgsGDTBaN1GS3OFwFS8I6Ri/GGn6xOaT8sKu3q7/m+WdlFzg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/@nomicfoundation/edr-win32-x64-msvc": {
- "version": "0.11.3",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.11.3.tgz",
- "integrity": "sha512-snvEf+WB3OV0wj2A7kQ+ZQqBquMcrozSLXcdnMdEl7Tmn+KDCbmFKBt3Tk0X3qOU4RKQpLPnTxdM07TJNVtung==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/@nomicfoundation/hardhat-verify": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.1.0.tgz",
- "integrity": "sha512-ogRbwlzphOR2MK/TxDG/uOftEhVJtD81eBU32YZ/maqQOHYOPKymu7BvF9syp7b2fxID5/loEIvxizjW1yBvvQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@ethersproject/abi": "^5.1.2",
- "@ethersproject/address": "^5.0.2",
- "cbor": "^8.1.0",
- "debug": "^4.1.1",
- "lodash.clonedeep": "^4.5.0",
- "picocolors": "^1.1.0",
- "semver": "^6.3.0",
- "table": "^6.8.0",
- "undici": "^5.14.0"
- },
- "peerDependencies": {
- "hardhat": "^2.26.0"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz",
- "integrity": "sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 12"
- },
- "optionalDependencies": {
- "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.2",
- "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.2",
- "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.2",
- "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.2",
- "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.2",
- "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.2",
- "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.2"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz",
- "integrity": "sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz",
- "integrity": "sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz",
- "integrity": "sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz",
- "integrity": "sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz",
- "integrity": "sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz",
- "integrity": "sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz",
- "integrity": "sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "peer": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/@scure/base": {
- "version": "1.1.9",
- "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz",
- "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@scure/bip32": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz",
- "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/hashes": "~1.2.0",
- "@noble/secp256k1": "~1.7.0",
- "@scure/base": "~1.1.0"
- }
- },
- "node_modules/@scure/bip39": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz",
- "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/hashes": "~1.2.0",
- "@scure/base": "~1.1.0"
- }
- },
- "node_modules/@sentry/core": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz",
- "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "dependencies": {
- "@sentry/hub": "5.30.0",
- "@sentry/minimal": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/hub": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz",
- "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "dependencies": {
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/minimal": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz",
- "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "dependencies": {
- "@sentry/hub": "5.30.0",
- "@sentry/types": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/node": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz",
- "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "dependencies": {
- "@sentry/core": "5.30.0",
- "@sentry/hub": "5.30.0",
- "@sentry/tracing": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "cookie": "^0.4.1",
- "https-proxy-agent": "^5.0.0",
- "lru_map": "^0.3.3",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/tracing": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz",
- "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@sentry/hub": "5.30.0",
- "@sentry/minimal": "5.30.0",
- "@sentry/types": "5.30.0",
- "@sentry/utils": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/types": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz",
- "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@sentry/utils": {
- "version": "5.30.0",
- "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz",
- "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "dependencies": {
- "@sentry/types": "5.30.0",
- "tslib": "^1.9.3"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/adm-zip": {
- "version": "0.4.16",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
- "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.3.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/aggregate-error": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
- "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "clean-stack": "^2.0.0",
- "indent-string": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ajv": {
- "version": "8.17.1",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz",
- "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ansi-align": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz",
- "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "string-width": "^4.1.0"
- }
- },
- "node_modules/ansi-colors": {
- "version": "4.1.3",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
- "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/ansi-escapes": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
- "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "type-fest": "^0.21.3"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/anymatch/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
- "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
- "dev": true,
- "license": "Python-2.0",
- "peer": true
- },
- "node_modules/astral-regex": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz",
- "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/binary-extensions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
- "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bn.js": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.2.tgz",
- "integrity": "sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/boxen": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
- "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-align": "^3.0.0",
- "camelcase": "^6.2.0",
- "chalk": "^4.1.0",
- "cli-boxes": "^2.2.1",
- "string-width": "^4.2.2",
- "type-fest": "^0.20.2",
- "widest-line": "^3.1.0",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/boxen/node_modules/type-fest": {
- "version": "0.20.2",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
- "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/brace-expansion": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz",
- "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
- "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/brorand": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
- "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/browser-stdout": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
- "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
- "dev": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
- "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/camelcase": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz",
- "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cbor": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/cbor/-/cbor-8.1.0.tgz",
- "integrity": "sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "nofilter": "^3.1.0"
- },
- "engines": {
- "node": ">=12.19"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/chokidar": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
- "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "readdirp": "^4.0.1"
- },
- "engines": {
- "node": ">= 14.16.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/ci-info": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
- "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/clean-stack": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
- "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/cli-boxes": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz",
- "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cliui": {
- "version": "7.0.4",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz",
- "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.0",
- "wrap-ansi": "^7.0.0"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/command-exists": {
- "version": "1.2.9",
- "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz",
- "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/commander": {
- "version": "8.3.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
- "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/cookie": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz",
- "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
- "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/decamelize": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz",
- "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
- "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/diff": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
- "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/elliptic": {
- "version": "6.6.1",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz",
- "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "bn.js": "^4.11.9",
- "brorand": "^1.1.0",
- "hash.js": "^1.0.0",
- "hmac-drbg": "^1.0.1",
- "inherits": "^2.0.4",
- "minimalistic-assert": "^1.0.1",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/elliptic/node_modules/bn.js": {
- "version": "4.12.2",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.2.tgz",
- "integrity": "sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/enquirer": {
- "version": "2.4.1",
- "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.4.1.tgz",
- "integrity": "sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-colors": "^4.1.1",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
- "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
- "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ethereum-cryptography": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz",
- "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/hashes": "1.2.0",
- "@noble/secp256k1": "1.7.1",
- "@scure/bip32": "1.1.5",
- "@scure/bip39": "1.1.1"
- }
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
- "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-uri": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz",
- "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fastify"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fastify"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz",
- "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
- "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
- "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/flat": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz",
- "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "bin": {
- "flat": "cli.js"
- }
- },
- "node_modules/follow-redirects": {
- "version": "1.15.9",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz",
- "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://github.com/sponsors/RubenVerborgh"
- }
- ],
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=4.0"
- },
- "peerDependenciesMeta": {
- "debug": {
- "optional": true
- }
- }
- },
- "node_modules/fp-ts": {
- "version": "1.19.3",
- "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz",
- "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/fs-extra": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz",
- "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "graceful-fs": "^4.1.2",
- "jsonfile": "^4.0.0",
- "universalify": "^0.1.0"
- },
- "engines": {
- "node": ">=6 <7 || >=8"
- }
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "peer": true,
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/glob": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz",
- "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
- "deprecated": "Glob versions prior to v9 are no longer supported",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^5.0.1",
- "once": "^1.3.0"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/hardhat": {
- "version": "2.26.0",
- "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.26.0.tgz",
- "integrity": "sha512-hwEUBvMJzl3Iuru5bfMOEDeF2d7cbMNNF46rkwdo8AeW2GDT4VxFLyYWTi6PTLrZiftHPDiKDlAdAiGvsR9FYA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@ethereumjs/util": "^9.1.0",
- "@ethersproject/abi": "^5.1.2",
- "@nomicfoundation/edr": "^0.11.3",
- "@nomicfoundation/solidity-analyzer": "^0.1.0",
- "@sentry/node": "^5.18.1",
- "adm-zip": "^0.4.16",
- "aggregate-error": "^3.0.0",
- "ansi-escapes": "^4.3.0",
- "boxen": "^5.1.2",
- "chokidar": "^4.0.0",
- "ci-info": "^2.0.0",
- "debug": "^4.1.1",
- "enquirer": "^2.3.0",
- "env-paths": "^2.2.0",
- "ethereum-cryptography": "^1.0.3",
- "find-up": "^5.0.0",
- "fp-ts": "1.19.3",
- "fs-extra": "^7.0.1",
- "immutable": "^4.0.0-rc.12",
- "io-ts": "1.10.4",
- "json-stream-stringify": "^3.1.4",
- "keccak": "^3.0.2",
- "lodash": "^4.17.11",
- "micro-eth-signer": "^0.16.0",
- "mnemonist": "^0.38.0",
- "mocha": "^10.0.0",
- "p-map": "^4.0.0",
- "picocolors": "^1.1.0",
- "raw-body": "^2.4.1",
- "resolve": "1.17.0",
- "semver": "^6.3.0",
- "solc": "0.8.26",
- "source-map-support": "^0.5.13",
- "stacktrace-parser": "^0.1.10",
- "tinyglobby": "^0.2.6",
- "tsort": "0.0.1",
- "undici": "^5.14.0",
- "uuid": "^8.3.2",
- "ws": "^7.4.6"
- },
- "bin": {
- "hardhat": "internal/cli/bootstrap.js"
- },
- "peerDependencies": {
- "ts-node": "*",
- "typescript": "*"
- },
- "peerDependenciesMeta": {
- "ts-node": {
- "optional": true
- },
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/hash.js": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz",
- "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/he": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
- "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "bin": {
- "he": "bin/he"
- }
- },
- "node_modules/hmac-drbg": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
- "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hash.js": "^1.0.3",
- "minimalistic-assert": "^1.0.0",
- "minimalistic-crypto-utils": "^1.0.1"
- }
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
- "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
- "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.4.24",
- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
- "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/immutable": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz",
- "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/indent-string": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
- "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/io-ts": {
- "version": "1.10.4",
- "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz",
- "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fp-ts": "^1.0.0"
- }
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz",
- "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
- "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/js-sha3": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz",
- "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
- "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-stream-stringify": {
- "version": "3.1.6",
- "resolved": "https://registry.npmjs.org/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz",
- "integrity": "sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=7.10.1"
- }
- },
- "node_modules/jsonfile": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
- "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/keccak": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz",
- "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "node-addon-api": "^2.0.0",
- "node-gyp-build": "^4.2.0",
- "readable-stream": "^3.6.0"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
- "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/lodash.truncate": {
- "version": "4.4.2",
- "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz",
- "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/log-symbols": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
- "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "chalk": "^4.1.0",
- "is-unicode-supported": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lru_map": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz",
- "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/memorystream": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz",
- "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==",
- "dev": true,
- "peer": true,
- "engines": {
- "node": ">= 0.10.0"
- }
- },
- "node_modules/micro-eth-signer": {
- "version": "0.16.0",
- "resolved": "https://registry.npmjs.org/micro-eth-signer/-/micro-eth-signer-0.16.0.tgz",
- "integrity": "sha512-rsSJcMGfY+kt3ROlL3U6y5BcjkK2H0zDKUQV6soo1JvjrctKKe+X7rKB0YIuwhWjlhJIoVHLuRYF+GXyyuVXxQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@noble/curves": "~1.9.2",
- "@noble/hashes": "2.0.0-beta.1",
- "micro-packed": "~0.7.3"
- },
- "engines": {
- "node": ">= 20.19.0"
- }
- },
- "node_modules/micro-eth-signer/node_modules/@noble/hashes": {
- "version": "2.0.0-beta.1",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.0-beta.1.tgz",
- "integrity": "sha512-xnnogJ6ccNZ55lLgWdjhBqKUdFoznjpFr3oy23n5Qm7h+ZMtt8v4zWvHg9zRW6jcETweplD5F4iUqb0SSPC+Dw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 20.19.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/micro-packed": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/micro-packed/-/micro-packed-0.7.3.tgz",
- "integrity": "sha512-2Milxs+WNC00TRlem41oRswvw31146GiSaoCT7s3Xi2gMUglW5QBeqlQaZeHr5tJx9nm3i57LNXPqxOOaWtTYg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "@scure/base": "~1.2.5"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/micro-packed/node_modules/@scure/base": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.2.6.tgz",
- "integrity": "sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
- "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/minimalistic-crypto-utils": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
- "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/minimatch": {
- "version": "5.1.6",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz",
- "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/mnemonist": {
- "version": "0.38.5",
- "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz",
- "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "obliterator": "^2.0.0"
- }
- },
- "node_modules/mocha": {
- "version": "10.8.2",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz",
- "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-colors": "^4.1.3",
- "browser-stdout": "^1.3.1",
- "chokidar": "^3.5.3",
- "debug": "^4.3.5",
- "diff": "^5.2.0",
- "escape-string-regexp": "^4.0.0",
- "find-up": "^5.0.0",
- "glob": "^8.1.0",
- "he": "^1.2.0",
- "js-yaml": "^4.1.0",
- "log-symbols": "^4.1.0",
- "minimatch": "^5.1.6",
- "ms": "^2.1.3",
- "serialize-javascript": "^6.0.2",
- "strip-json-comments": "^3.1.1",
- "supports-color": "^8.1.1",
- "workerpool": "^6.5.1",
- "yargs": "^16.2.0",
- "yargs-parser": "^20.2.9",
- "yargs-unparser": "^2.0.0"
- },
- "bin": {
- "_mocha": "bin/_mocha",
- "mocha": "bin/mocha.js"
- },
- "engines": {
- "node": ">= 14.0.0"
- }
- },
- "node_modules/mocha/node_modules/chokidar": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
- "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/mocha/node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/mocha/node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/mocha/node_modules/supports-color": {
- "version": "8.1.1",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
- "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/supports-color?sponsor=1"
- }
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/node-addon-api": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz",
- "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/node-gyp-build": {
- "version": "4.8.4",
- "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
- "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "bin": {
- "node-gyp-build": "bin.js",
- "node-gyp-build-optional": "optional.js",
- "node-gyp-build-test": "build-test.js"
- }
- },
- "node_modules/nofilter": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/nofilter/-/nofilter-3.1.0.tgz",
- "integrity": "sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.19"
- }
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/obliterator": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz",
- "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/os-tmpdir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
- "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
- "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
- "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-map": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
- "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "aggregate-error": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
- "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
- "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
- "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/randombytes": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
- "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "^5.1.0"
- }
- },
- "node_modules/raw-body": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
- "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "bytes": "3.1.2",
- "http-errors": "2.0.0",
- "iconv-lite": "0.4.24",
- "unpipe": "1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/readdirp": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
- "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 14.18.0"
- },
- "funding": {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
- "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "path-parse": "^1.0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "peer": true
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
- "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/serialize-javascript": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
- "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "dependencies": {
- "randombytes": "^2.1.0"
- }
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/slice-ansi": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz",
- "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "astral-regex": "^2.0.0",
- "is-fullwidth-code-point": "^3.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/slice-ansi?sponsor=1"
- }
- },
- "node_modules/solc": {
- "version": "0.8.26",
- "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.26.tgz",
- "integrity": "sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "command-exists": "^1.2.8",
- "commander": "^8.1.0",
- "follow-redirects": "^1.12.1",
- "js-sha3": "0.8.0",
- "memorystream": "^0.3.1",
- "semver": "^5.5.0",
- "tmp": "0.0.33"
- },
- "bin": {
- "solcjs": "solc.js"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/solc/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "license": "BSD-3-Clause",
- "peer": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- }
- },
- "node_modules/stacktrace-parser": {
- "version": "0.1.11",
- "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz",
- "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "type-fest": "^0.7.1"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/stacktrace-parser/node_modules/type-fest": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz",
- "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "peer": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/statuses": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
- "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
- "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/table": {
- "version": "6.9.0",
- "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz",
- "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "ajv": "^8.0.1",
- "lodash.truncate": "^4.4.2",
- "slice-ansi": "^4.0.0",
- "string-width": "^4.2.3",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz",
- "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tmp": {
- "version": "0.0.33",
- "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
- "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "os-tmpdir": "~1.0.2"
- },
- "engines": {
- "node": ">=0.6.0"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tslib": {
- "version": "1.14.1",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
- "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true,
- "license": "0BSD",
- "peer": true
- },
- "node_modules/tsort": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz",
- "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/turbo": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.13.4.tgz",
- "integrity": "sha512-1q7+9UJABuBAHrcC4Sxp5lOqYS5mvxRrwa33wpIyM18hlOCpRD/fTJNxZ0vhbMcJmz15o9kkVm743mPn7p6jpQ==",
- "license": "MPL-2.0",
- "bin": {
- "turbo": "bin/turbo"
- },
- "optionalDependencies": {
- "turbo-darwin-64": "1.13.4",
- "turbo-darwin-arm64": "1.13.4",
- "turbo-linux-64": "1.13.4",
- "turbo-linux-arm64": "1.13.4",
- "turbo-windows-64": "1.13.4",
- "turbo-windows-arm64": "1.13.4"
- }
- },
- "node_modules/turbo-darwin-arm64": {
- "version": "1.13.4",
- "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.13.4.tgz",
- "integrity": "sha512-eG769Q0NF6/Vyjsr3mKCnkG/eW6dKMBZk6dxWOdrHfrg6QgfkBUk0WUUujzdtVPiUIvsh4l46vQrNVd9EOtbyA==",
- "cpu": [
- "arm64"
- ],
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/type-fest": {
- "version": "0.21.3",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
- "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
- "dev": true,
- "license": "(MIT OR CC0-1.0)",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/undici": {
- "version": "5.29.0",
- "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz",
- "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@fastify/busboy": "^2.0.0"
- },
- "engines": {
- "node": ">=14.0"
- }
- },
- "node_modules/universalify": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
- "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true,
- "license": "MIT",
- "peer": true
- },
- "node_modules/uuid": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
- "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/widest-line": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz",
- "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "string-width": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/workerpool": {
- "version": "6.5.1",
- "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz",
- "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
- "dev": true,
- "license": "Apache-2.0",
- "peer": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true,
- "license": "ISC",
- "peer": true
- },
- "node_modules/ws": {
- "version": "7.5.10",
- "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz",
- "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=8.3.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": "^5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs": {
- "version": "16.2.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz",
- "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "cliui": "^7.0.2",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.0",
- "y18n": "^5.0.5",
- "yargs-parser": "^20.2.2"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-parser": {
- "version": "20.2.9",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz",
- "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
- "dev": true,
- "license": "ISC",
- "peer": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yargs-unparser": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz",
- "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "dependencies": {
- "camelcase": "^6.0.0",
- "decamelize": "^4.0.0",
- "flat": "^5.0.2",
- "is-plain-obj": "^2.1.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
- "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
- "dev": true,
- "license": "MIT",
- "peer": true,
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- }
- }
-}