Commit 287d0a7f authored by Kelvin Fichter's avatar Kelvin Fichter

fix(ctb): break out clamp func in Metering

Breaks out the base fee clamping function in ResourceMetering to
deduplicate some code.
parent 1d9e8c1d
......@@ -48,8 +48,8 @@ type TypesWithdrawalTransaction struct {
// OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract.
var OptimismPortalMetaData = &bind.MetaData{
ABI: "[{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structTypes.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
Bin: "0x6101206040523480156200001257600080fd5b506040516200507338038062005073833981016040819052620000359162000261565b6000608081905260a052600160c0526001600160a01b0382166101005260e08190526200006162000069565b50506200029d565b600054610100900460ff16158080156200008a5750600054600160ff909116105b80620000ba5750620000a730620001af60201b62001a1f1760201c565b158015620000ba575060005460ff166001145b620001235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000147576000805461ff0019166101001790555b603280546001600160a01b03191661dead17905562000165620001be565b8015620001ac576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff166200022b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b600080604083850312156200027557600080fd5b82516001600160a01b03811681146200028d57600080fd5b6020939093015192949293505050565b60805160a05160c05160e05161010051614d6e620003056000396000818161018501528181610aba01528181610f580152818161134301526115b50152600081816104da0152611d6901526000610ec301526000610e9a01526000610e710152614d6e6000f3fe6080604052600436106101475760003560e01c80638b4c40b0116100c0578063cd7c978911610074578063e965084c11610059578063e965084c14610429578063e9e05c42146104b5578063f4daa291146104c857600080fd5b8063cd7c978914610373578063cff0ab961461038857600080fd5b80639bf62d82116100a55780639bf62d8214610301578063a14238e71461032e578063ca3e99ba1461035e57600080fd5b80638b4c40b01461016c5780638c3152e9146102e157600080fd5b806364b79208116101175780636dbffb78116100fc5780636dbffb78146102865780638129fc1c146102b6578063867ead13146102cb57600080fd5b806364b792081461024c5780636bb0291e1461027157600080fd5b80621c2ff61461017357806313620abd146101d15780634870496f1461020a57806354fd4d501461022a57600080fd5b3661016e5761016c3334620186a06000604051806020016040528060008152506104fc565b005b600080fd5b34801561017f57600080fd5b506101a77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101dd57600080fd5b506101e9633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101c8565b34801561021657600080fd5b5061016c610225366004614426565b6109c9565b34801561023657600080fd5b5061023f610e6a565b6040516101c8919061457c565b34801561025857600080fd5b50610263627a120081565b6040519081526020016101c8565b34801561027d57600080fd5b50610263600481565b34801561029257600080fd5b506102a66102a136600461458f565b610f0d565b60405190151581526020016101c8565b3480156102c257600080fd5b5061016c610fe4565b3480156102d757600080fd5b5061026361271081565b3480156102ed57600080fd5b5061016c6102fc3660046145a8565b6111a2565b34801561030d57600080fd5b506032546101a79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561033a57600080fd5b506102a661034936600461458f565b60336020526000908152604090205460ff1681565b34801561036a57600080fd5b50610263611a0e565b34801561037f57600080fd5b50610263600881565b34801561039457600080fd5b506001546103f0906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101c8565b34801561043557600080fd5b5061048761044436600461458f565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101c8565b61016c6104c33660046145dd565b6104fc565b3480156104d457600080fd5b506102637f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105b35773ffffffffffffffffffffffffffffffffffffffff8716156105b357604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b333281146105d4575033731111000000000000000000000000000000001111015b600034888888886040516020016105ef95949392919061466a565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161065f919061457c565b60405180910390a4505060015460009061069f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436146fe565b905080156108285760006106b76004627a1200614744565b6001546106e29190700100000000000000000000000000000000900467ffffffffffffffff166147ac565b9050600060086106f66004627a1200614744565b6001546107169085906fffffffffffffffffffffffffffffffff16614820565b6107209190614744565b61072a9190614744565b60015490915060009061077690610760906107589085906fffffffffffffffffffffffffffffffff166148dc565b612710611a3b565b6fffffffffffffffffffffffffffffffff611a54565b905060018411156107e9576107e6610760670de0b6b3a76400006107d261079e600883614744565b6107b090670de0b6b3a76400006147ac565b6107bb60018a6146fe565b6107cd90670de0b6b3a7640000614950565b611a63565b6107dc9085614820565b6107589190614744565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805484919060109061085b908490700100000000000000000000000000000000900467ffffffffffffffff1661498d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105aa565b600154600090610963906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166149b9565b6fffffffffffffffffffffffffffffffff169050600061098748633b9aca00611a94565b61099190836149f1565b905060005a6109a090866146fe565b9050808211156109bc576109bc6109b782846146fe565b611aa4565b5050505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105aa565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614a25565b519050610b54610b4f36869003860186614a8a565b611ad2565b8114610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105aa565b6000610bed87611b2e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c79575080604001516fffffffffffffffffffffffffffffffff1687148015610c79575080518314155b610d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105aa565b610d1d826040880135610d188789614af0565b611b5e565b610da9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105aa565b604080516060810182528481526fffffffffffffffffffffffffffffffff42811660208084019182528b831684860190815260008881526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558a830151908b0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a45050505050505050565b6060610e957f0000000000000000000000000000000000000000000000000000000000000000611c25565b610ebe7f0000000000000000000000000000000000000000000000000000000000000000611c25565b610ee77f0000000000000000000000000000000000000000000000000000000000000000611c25565b604051602001610ef993929190614b74565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fde9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc39190614a25565b602001516fffffffffffffffffffffffffffffffff16611d62565b92915050565b600054610100900460ff16158080156110045750600054600160ff909116105b8061101e5750303b15801561101e575060005460ff166001145b6110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105aa565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561110857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905561113c611d96565b801561119f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105aa565b600061125682611b2e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e00000000000000000000000000000000000060648201526084016105aa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d09190614bea565b81602001516fffffffffffffffffffffffffffffffff16101561149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105aa565b6114ba81602001516fffffffffffffffffffffffffffffffff16611d62565b61156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105aa565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116359190614a25565b82518151919250146116ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105aa565b61170e81602001516fffffffffffffffffffffffffffffffff16611d62565b6117c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105aa565b60008381526033602052604090205460ff161561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105aa565b600083815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560808401516118a890614e2090614c03565b5a1015611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016105aa565b8360200151603260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061199a8560400151866080015187606001518860a00151611e79565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906119ff90841515815260200190565b60405180910390a25050505050565b611a1c6004627a1200614744565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600081831215611a4b5781611a4d565b825b9392505050565b6000818312611a4b5781611a4d565b6000611a4d670de0b6b3a764000083611a7b86611e93565b611a859190614820565b611a8f9190614744565b6120d7565b600081831015611a4b5781611a4d565b6000805a90505b825a611ab790836146fe565b1015611acd57611ac682614c1b565b9150611aab565b505050565b60008160000151826020015183604001518460600151604051602001611b11949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611b11979096959101614c53565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611c1c9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587612316565b95945050505050565b606081600003611c6857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611c925780611c7c81614c1b565b9150611c8b9050600a836149f1565b9150611c6c565b60008167ffffffffffffffff811115611cad57611cad61424c565b6040519080825280601f01601f191660200182016040528015611cd7576020820181803683370190505b5090505b8415611d5a57611cec6001836146fe565b9150611cf9600a86614caa565b611d04906030614c03565b60f81b818381518110611d1957611d19614cbe565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d53600a866149f1565b9450611cdb565b949350505050565b6000611d8e7f000000000000000000000000000000000000000000000000000000000000000083614c03565b421192915050565b600054610100900460ff16611e2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105aa565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600080600080845160208601878a8af19695505050505050565b6000808213611efe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105aa565b60006060611f0b8461233a565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361210857506000919050565b680755bf798b4a1bf1e5821261217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105aa565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60008061232286612410565b905061233081868686612442565b9695505050505050565b60008082116123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105aa565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060818051906020012060405160200161242c91815260200190565b6040516020818303038152906040529050919050565b600080600061245287868661247f565b9150915081801561247457508051602080830191909120875191880191909120145b979650505050505050565b60006060600061248e8561259d565b905060008060006124a0848a8961268c565b815192955090935091501580806124b45750815b612540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c696400000000000000000000000000000000000000000000000000000060648201526084016105aa565b60008161255c5760405180602001604052806000815250612588565b6125888661256b6001886146fe565b8151811061257b5761257b614cbe565b6020026020010151612d90565b805115159c909b509950505050505050505050565b805160609060008167ffffffffffffffff8111156125bd576125bd61424c565b60405190808252806020026020018201604052801561260257816020015b60408051808201909152606080825260208201528152602001906001900390816125db5790505b50905060005b8281101561268457604051806040016040528086838151811061262d5761262d614cbe565b6020026020010151815260200161265c87848151811061264f5761264f614cbe565b6020026020010151612dc7565b81525082828151811061267157612671614cbe565b6020908102919091010152600101612608565b509392505050565b6000606081808061269c87612dda565b90506000866040516020016126b391815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152606080835260208301529150600090819060005b8c51811015612d12578c818151811061271357612713614cbe565b6020026020010151915082846127299190614c03565b9350612736600188614c03565b9650836000036127f157815180516020918201206040516127869261276092910190815260200190565b604051602081830303815290604052868051602091820120825192909101919091201490565b6127ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105aa565b612948565b8151516020116128a7578151805160209182012060405161281b9261276092910190815260200190565b6127ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105aa565b815185516020808801919091208251919092012014612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105aa565b61295460106001614c03565b826020015151036129c65785518414612d1257600086858151811061297b5761297b614cbe565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106129a6576129a6614cbe565b602002602001015190506129b981612f75565b9650600194505050612d00565b600282602001515103612c785760006129de83612f9a565b90506000816000815181106129f5576129f5614cbe565b016020015160f81c90506000612a0c600283614ced565b612a17906002614d0f565b90506000612a28848360ff16612fbe565b90506000612a368b8a612fbe565b90506000612a448383612ff4565b9050825182511015612ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a20696e76616c6964206b6579206c656e677468206660448201527f6f72206c656166206f7220657874656e73696f6e206e6f64650000000000000060648201526084016105aa565b60ff851660021480612aed575060ff85166003145b15612b5757808351148015612b025750808251145b15612b1457612b11818b614c03565b99505b6040518060400160405280600181526020017f80000000000000000000000000000000000000000000000000000000000000008152509a50505050505050612d12565b60ff85161580612b6a575060ff85166001145b15612bf05782518114612bba576040518060400160405280600181526020017f80000000000000000000000000000000000000000000000000000000000000008152509a50505050505050612d12565b612be18860200151600181518110612bd457612bd4614cbe565b6020026020010151612f75565b9a509750612d00945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105aa565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105aa565b80612d0a81614c1b565b9150506126f8565b5085612d1e8685612fbe565b60408051808201909152600181527f80000000000000000000000000000000000000000000000000000000000000006020918201528651908701207f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4211498509850985050505050505093509350939050565b60208101518051606091610fde91612daa906001906146fe565b81518110612dba57612dba614cbe565b60200260200101516130a3565b6060610fde612dd583613203565b6132ec565b80516060906000612dec826002614950565b67ffffffffffffffff811115612e0457612e0461424c565b6040519080825280601f01601f191660200182016040528015612e2e576020820181803683370190505b5090506000805b83811015612f6b57858181518110612e4f57612e4f614cbe565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff00000000000000000000000000000000000000000000000000000000000001683612eab836002614950565b81518110612ebb57612ebb614cbe565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f00000000000000000000000000000000000000000000000000000000000000821683612f19836002614950565b612f24906001614c03565b81518110612f3457612f34614cbe565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101612e35565b5090949350505050565b60606020826000015110612f9157612f8c826130a3565b610fde565b610fde82613550565b6060610fde612fb98360200151600081518110612dba57612dba614cbe565b612dda565b606082518210612fdd5750604080516020810190915260008152610fde565b611a4d8383848651612fef91906146fe565b613566565b6000806000835185511061300957835161300c565b84515b90505b8082108015613093575083828151811061302b5761302b614cbe565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685838151811061306a5761306a614cbe565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156126845781600101915061300f565b606060008060006130b38561373e565b9194509250905060008160018111156130ce576130ce614d32565b1461315b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105aa565b6131658284614c03565b8551146131f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105aa565b611c1c856020015184846141ab565b604080518082019091526000808252602082015260008251116132ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105aa565b50604080518082019091528151815260209182019181019190915290565b606060008060006132fc8561373e565b91945092509050600181600181111561331757613317614d32565b146133a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105aa565b84516133b08385614c03565b1461343d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105aa565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816134565790505090506000845b8751811015613544576000806134c96040518060400160405280858d600001516134ad91906146fe565b8152602001858d602001516134c29190614c03565b905261373e565b5091509150604051806040016040528083836134e59190614c03565b8152602001848c602001516134fa9190614c03565b81525085858151811061350f5761350f614cbe565b6020908102919091010152613525600185614c03565b93506135318183614c03565b61353b9084614c03565b92505050613483565b50815295945050505050565b6060610fde8260200151600084600001516141ab565b60608182601f0110156135d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105aa565b828284011015613641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105aa565b818301845110156136ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105aa565b6060821580156136cd5760405191506000825260208201604052613735565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156137065780518352602092830192016136ee565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000806000808460000151116137fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105aa565b6020840151805160001a607f81116138215760006001600094509450945050506141a4565b60b78111613a2f5760006138366080836146fe565b9050808760000151116138f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105aa565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061396a57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613a1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105aa565b50600195509350600092506141a4915050565b60bf8111613d7d576000613a4460b7836146fe565b905080876000015111613aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105aa565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613bdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105aa565b600184015160088302610100031c60378111613ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105aa565b613cab8184614c03565b895111613d60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105aa565b613d6b836001614c03565b97509550600094506141a49350505050565b60f78111613e5e576000613d9260c0836146fe565b905080876000015111613e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105aa565b6001955093508492506141a4915050565b6000613e6b60f7836146fe565b905080876000015111613f26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105aa565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614004576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105aa565b600184015160088302610100031c603781116140c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105aa565b6140d28184614c03565b895111614187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105aa565b614192836001614c03565b97509550600194506141a49350505050565b9193909250565b606060008267ffffffffffffffff8111156141c8576141c861424c565b6040519080825280601f01601f1916602001820160405280156141f2576020820181803683370190505b50905082600003614204579050611a4d565b60006142108587614c03565b90506020820160005b85811015614231578281015182820152602001614219565b85811115614240576000868301525b50919695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142c2576142c261424c565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146142ee57600080fd5b919050565b600082601f83011261430457600080fd5b813567ffffffffffffffff81111561431e5761431e61424c565b61434f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161427b565b81815284602083860101111561436457600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561439357600080fd5b60405160c0810167ffffffffffffffff82821081831117156143b7576143b761424c565b81604052829350843583526143ce602086016142ca565b60208401526143df604086016142ca565b6040840152606085013560608401526080850135608084015260a085013591508082111561440c57600080fd5b50614419858286016142f3565b60a0830152505092915050565b600080600080600085870360e081121561443f57600080fd5b863567ffffffffffffffff8082111561445757600080fd5b6144638a838b01614381565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561449c57600080fd5b60408901955060c08901359250808311156144b657600080fd5b828901925089601f8401126144ca57600080fd5b82359150808211156144db57600080fd5b508860208260051b84010111156144f157600080fd5b959894975092955050506020019190565b60005b8381101561451d578181015183820152602001614505565b8381111561452c576000848401525b50505050565b6000815180845261454a816020860160208601614502565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a4d6020830184614532565b6000602082840312156145a157600080fd5b5035919050565b6000602082840312156145ba57600080fd5b813567ffffffffffffffff8111156145d157600080fd5b611d5a84828501614381565b600080600080600060a086880312156145f557600080fd5b6145fe866142ca565b945060208601359350604086013567ffffffffffffffff808216821461462357600080fd5b909350606087013590811515821461463a57600080fd5b9092506080870135908082111561465057600080fd5b5061465d888289016142f3565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516146be816049850160208701614502565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614710576147106146cf565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261475357614753614715565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156147a7576147a76146cf565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156147e6576147e66146cf565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561481a5761481a6146cf565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614861576148616146cf565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561489c5761489c6146cf565b600087129250878205871284841616156148b8576148b86146cf565b878505871281841616156148ce576148ce6146cf565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614916576149166146cf565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561494a5761494a6146cf565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614988576149886146cf565b500290565b600067ffffffffffffffff8083168185168083038211156149b0576149b06146cf565b01949350505050565b60006fffffffffffffffffffffffffffffffff808316818516818304811182151516156149e8576149e86146cf565b02949350505050565b600082614a0057614a00614715565b500490565b80516fffffffffffffffffffffffffffffffff811681146142ee57600080fd5b600060608284031215614a3757600080fd5b6040516060810181811067ffffffffffffffff82111715614a5a57614a5a61424c565b60405282518152614a6d60208401614a05565b6020820152614a7e60408401614a05565b60408201529392505050565b600060808284031215614a9c57600080fd5b6040516080810181811067ffffffffffffffff82111715614abf57614abf61424c565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b0b57614b0b61424c565b8360051b6020614b1c81830161427b565b868152918501918181019036841115614b3457600080fd5b865b84811015614b6857803586811115614b4e5760008081fd5b614b5a36828b016142f3565b845250918301918301614b36565b50979650505050505050565b60008451614b86818460208901614502565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614bc2816001850160208a01614502565b60019201918201528351614bdd816002840160208801614502565b0160020195945050505050565b600060208284031215614bfc57600080fd5b5051919050565b60008219821115614c1657614c166146cf565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c4c57614c4c6146cf565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614c9e60c0830184614532565b98975050505050505050565b600082614cb957614cb9614715565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614d0057614d00614715565b8060ff84160691505092915050565b600060ff821660ff841680821015614d2957614d296146cf565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a",
ABI: "[{\"inputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"_l2Oracle\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_finalizationPeriodSeconds\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"version\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"opaqueData\",\"type\":\"bytes\"}],\"name\":\"TransactionDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"WithdrawalFinalized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"withdrawalHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"WithdrawalProven\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BASE_FEE_MAX_CHANGE_DENOMINATOR\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ELASTICITY_MULTIPLIER\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FINALIZATION_PERIOD_SECONDS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"INITIAL_BASE_FEE\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"L2_ORACLE\",\"outputs\":[{\"internalType\":\"contractL2OutputOracle\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MINIMUM_BASE_FEE\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TARGET_RESOURCE_LIMIT\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_value\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"_gasLimit\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"_isCreation\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"name\":\"depositTransaction\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"donateETH\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"}],\"name\":\"finalizeWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"finalizedWithdrawals\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"}],\"name\":\"isOutputFinalized\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"l2Sender\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"params\",\"outputs\":[{\"internalType\":\"uint128\",\"name\":\"prevBaseFee\",\"type\":\"uint128\"},{\"internalType\":\"uint64\",\"name\":\"prevBoughtGas\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"prevBlockNum\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"nonce\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"internalType\":\"structTypes.WithdrawalTransaction\",\"name\":\"_tx\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"_l2OutputIndex\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"version\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"stateRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"messagePasserStorageRoot\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"latestBlockhash\",\"type\":\"bytes32\"}],\"internalType\":\"structTypes.OutputRootProof\",\"name\":\"_outputRootProof\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"_withdrawalProof\",\"type\":\"bytes[]\"}],\"name\":\"proveWithdrawalTransaction\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"provenWithdrawals\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"outputRoot\",\"type\":\"bytes32\"},{\"internalType\":\"uint128\",\"name\":\"timestamp\",\"type\":\"uint128\"},{\"internalType\":\"uint128\",\"name\":\"l2OutputIndex\",\"type\":\"uint128\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}]",
Bin: "0x6101206040523480156200001257600080fd5b50604051620050cf380380620050cf833981016040819052620000359162000261565b6000608081905260a052600160c0526001600160a01b0382166101005260e08190526200006162000069565b50506200029d565b600054610100900460ff16158080156200008a5750600054600160ff909116105b80620000ba5750620000a730620001af60201b62001a091760201c565b158015620000ba575060005460ff166001145b620001235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000147576000805461ff0019166101001790555b603280546001600160a01b03191661dead17905562000165620001be565b8015620001ac576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff166200022b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b600080604083850312156200027557600080fd5b82516001600160a01b03811681146200028d57600080fd5b6020939093015192949293505050565b60805160a05160c05160e05161010051614dca62000305600039600081816101a001528181610aa401528181610f420152818161132d015261159f0152600081816105190152611d7501526000610ead01526000610e8401526000610e5b0152614dca6000f3fe6080604052600436106101625760003560e01c80638b4c40b0116100c0578063cd7c978911610074578063e965084c11610059578063e965084c14610468578063e9e05c42146104f4578063f4daa2911461050757600080fd5b8063cd7c9789146103b2578063cff0ab96146103c757600080fd5b80639bf62d82116100a55780639bf62d8214610340578063a14238e71461036d578063ca3e99ba1461039d57600080fd5b80638b4c40b0146101875780638c3152e91461032057600080fd5b806364b79208116101175780636dbffb78116100fc5780636dbffb78146102c55780638129fc1c146102f5578063867ead131461030a57600080fd5b806364b79208146102995780636bb0291e146102b057600080fd5b80634870496f116101485780634870496f1461022557806354fd4d50146102455780635c1f28271461026757600080fd5b80621c2ff61461018e57806313620abd146101ec57600080fd5b36610189576101873334620186a060006040518060200160405280600081525061053b565b005b600080fd5b34801561019a57600080fd5b506101c27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101f857600080fd5b50610204633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e3565b34801561023157600080fd5b50610187610240366004614482565b6109b3565b34801561025157600080fd5b5061025a610e54565b6040516101e391906145d8565b34801561027357600080fd5b5061028b6fffffffffffffffffffffffffffffffff81565b6040519081526020016101e3565b3480156102a557600080fd5b5061028b627a120081565b3480156102bc57600080fd5b5061028b600481565b3480156102d157600080fd5b506102e56102e03660046145eb565b610ef7565b60405190151581526020016101e3565b34801561030157600080fd5b50610187610fce565b34801561031657600080fd5b5061028b61271081565b34801561032c57600080fd5b5061018761033b366004614604565b61118c565b34801561034c57600080fd5b506032546101c29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037957600080fd5b506102e56103883660046145eb565b60336020526000908152604090205460ff1681565b3480156103a957600080fd5b5061028b6119f8565b3480156103be57600080fd5b5061028b600881565b3480156103d357600080fd5b5060015461042f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e3565b34801561047457600080fd5b506104c66104833660046145eb565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e3565b610187610502366004614639565b61053b565b34801561051357600080fd5b5061028b7f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105f25773ffffffffffffffffffffffffffffffffffffffff8716156105f257604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b33328114610613575033731111000000000000000000000000000000001111015b6000348888888860405160200161062e9594939291906146c6565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161069e91906145d8565b60405180910390a450506001546000906106de907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361475a565b905080156108125760006106f66004627a12006147a0565b6001546107219190700100000000000000000000000000000000900467ffffffffffffffff16614808565b9050600060086107356004627a12006147a0565b6001546107559085906fffffffffffffffffffffffffffffffff1661487c565b61075f91906147a0565b61076991906147a0565b6001549091506000906107ac906107939084906fffffffffffffffffffffffffffffffff16614938565b6127106fffffffffffffffffffffffffffffffff611a25565b905060018411156107d3576107d06107938260086107cb60018961475a565b611a44565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610845908490700100000000000000000000000000000000900467ffffffffffffffff166149ac565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105e9565b60015460009061094d906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166149d8565b6fffffffffffffffffffffffffffffffff169050600061097148633b9aca00611a99565b61097b9083614a10565b905060005a61098a908661475a565b9050808211156109a6576109a66109a1828461475a565b611ab0565b5050505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105e9565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190614a44565b519050610b3e610b3936869003860186614aa9565b611ade565b8114610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105e9565b6000610bd787611b3a565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c63575080604001516fffffffffffffffffffffffffffffffff1687148015610c63575080518314155b610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105e9565b610d07826040880135610d028789614b0f565b611b6a565b610d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105e9565b604080516060810182528481526fffffffffffffffffffffffffffffffff42811660208084019182528b831684860190815260008881526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558a830151908b0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a45050505050505050565b6060610e7f7f0000000000000000000000000000000000000000000000000000000000000000611c31565b610ea87f0000000000000000000000000000000000000000000000000000000000000000611c31565b610ed17f0000000000000000000000000000000000000000000000000000000000000000611c31565b604051602001610ee393929190614b93565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fc89073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad9190614a44565b602001516fffffffffffffffffffffffffffffffff16611d6e565b92915050565b600054610100900460ff1615808015610fee5750600054600160ff909116105b806110085750303b158015611008575060005460ff166001145b611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105e9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156110f257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055611126611da2565b801561118957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105e9565b600061124082611b3a565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e00000000000000000000000000000000000060648201526084016105e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614c09565b81602001516fffffffffffffffffffffffffffffffff161015611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105e9565b6114a481602001516fffffffffffffffffffffffffffffffff16611d6e565b611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161f9190614a44565b82518151919250146116d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105e9565b6116f881602001516fffffffffffffffffffffffffffffffff16611d6e565b6117aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60008381526033602052604090205460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105e9565b600083815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608084015161189290614e2090614c22565b5a1015611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016105e9565b8360200151603260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006119848560400151866080015187606001518860a00151611e85565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906119e990841515815260200190565b60405180910390a25050505050565b611a066004627a12006147a0565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000611a3a611a348585611e9f565b83611eaf565b90505b9392505050565b6000670de0b6b3a7640000611a85611a5c85836147a0565b611a6e90670de0b6b3a7640000614808565b611a8085670de0b6b3a764000061487c565b611ebe565b611a8f908661487c565b611a3a91906147a0565b600081831015611aa95781611a3d565b5090919050565b6000805a90505b825a611ac3908361475a565b1015611ad957611ad282614c3a565b9150611ab7565b505050565b60008160000151826020015183604001518460600151604051602001611b1d949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611b1d979096959101614c72565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611c289101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611eef565b95945050505050565b606081600003611c7457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611c9e5780611c8881614c3a565b9150611c979050600a83614a10565b9150611c78565b60008167ffffffffffffffff811115611cb957611cb96142a8565b6040519080825280601f01601f191660200182016040528015611ce3576020820181803683370190505b5090505b8415611d6657611cf860018361475a565b9150611d05600a86614cc9565b611d10906030614c22565b60f81b818381518110611d2557611d25614cdd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d5f600a86614a10565b9450611ce7565b949350505050565b6000611d9a7f000000000000000000000000000000000000000000000000000000000000000083614c22565b421192915050565b600054610100900460ff16611e39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e9565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600080600080845160208601878a8af19695505050505050565b600081831215611aa95781611a3d565b6000818312611aa95781611a3d565b6000611a3d670de0b6b3a764000083611ed686611f13565b611ee0919061487c565b611eea91906147a0565b612157565b600080611efb86612396565b9050611f09818686866123c8565b9695505050505050565b6000808213611f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b60006060611f8b84612405565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361218857506000919050565b680755bf798b4a1bf1e582126121fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105e9565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606081805190602001206040516020016123b291815260200190565b6040516020818303038152906040529050919050565b60008060006123d88786866124db565b915091508180156123fa57508051602080830191909120875191880191909120145b979650505050505050565b6000808211612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6000606060006124ea856125f9565b905060008060006124fc848a896126e8565b815192955090935091501580806125105750815b61259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c696400000000000000000000000000000000000000000000000000000060648201526084016105e9565b6000816125b857604051806020016040528060008152506125e4565b6125e4866125c760018861475a565b815181106125d7576125d7614cdd565b6020026020010151612dec565b805115159c909b509950505050505050505050565b805160609060008167ffffffffffffffff811115612619576126196142a8565b60405190808252806020026020018201604052801561265e57816020015b60408051808201909152606080825260208201528152602001906001900390816126375790505b50905060005b828110156126e057604051806040016040528086838151811061268957612689614cdd565b602002602001015181526020016126b88784815181106126ab576126ab614cdd565b6020026020010151612e23565b8152508282815181106126cd576126cd614cdd565b6020908102919091010152600101612664565b509392505050565b600060608180806126f887612e36565b905060008660405160200161270f91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152606080835260208301529150600090819060005b8c51811015612d6e578c818151811061276f5761276f614cdd565b6020026020010151915082846127859190614c22565b9350612792600188614c22565b96508360000361284d57815180516020918201206040516127e2926127bc92910190815260200190565b604051602081830303815290604052868051602091820120825192909101919091201490565b612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105e9565b6129a4565b8151516020116129035781518051602091820120604051612877926127bc92910190815260200190565b612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105e9565b8151855160208088019190912082519190920120146129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105e9565b6129b060106001614c22565b82602001515103612a225785518414612d6e5760008685815181106129d7576129d7614cdd565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110612a0257612a02614cdd565b60200260200101519050612a1581612fd1565b9650600194505050612d5c565b600282602001515103612cd4576000612a3a83612ff6565b9050600081600081518110612a5157612a51614cdd565b016020015160f81c90506000612a68600283614d0c565b612a73906002614d2e565b90506000612a84848360ff1661301a565b90506000612a928b8a61301a565b90506000612aa08383613050565b9050825182511015612b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a20696e76616c6964206b6579206c656e677468206660448201527f6f72206c656166206f7220657874656e73696f6e206e6f64650000000000000060648201526084016105e9565b60ff851660021480612b49575060ff85166003145b15612bb357808351148015612b5e5750808251145b15612b7057612b6d818b614c22565b99505b6040518060400160405280600181526020017f80000000000000000000000000000000000000000000000000000000000000008152509a50505050505050612d6e565b60ff85161580612bc6575060ff85166001145b15612c4c5782518114612c16576040518060400160405280600181526020017f80000000000000000000000000000000000000000000000000000000000000008152509a50505050505050612d6e565b612c3d8860200151600181518110612c3057612c30614cdd565b6020026020010151612fd1565b9a509750612d5c945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105e9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105e9565b80612d6681614c3a565b915050612754565b5085612d7a868561301a565b60408051808201909152600181527f80000000000000000000000000000000000000000000000000000000000000006020918201528651908701207f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4211498509850985050505050505093509350939050565b60208101518051606091610fc891612e069060019061475a565b81518110612e1657612e16614cdd565b60200260200101516130ff565b6060610fc8612e318361325f565b613348565b80516060906000612e48826002614d51565b67ffffffffffffffff811115612e6057612e606142a8565b6040519080825280601f01601f191660200182016040528015612e8a576020820181803683370190505b5090506000805b83811015612fc757858181518110612eab57612eab614cdd565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff00000000000000000000000000000000000000000000000000000000000001683612f07836002614d51565b81518110612f1757612f17614cdd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f00000000000000000000000000000000000000000000000000000000000000821683612f75836002614d51565b612f80906001614c22565b81518110612f9057612f90614cdd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101612e91565b5090949350505050565b60606020826000015110612fed57612fe8826130ff565b610fc8565b610fc8826135ac565b6060610fc86130158360200151600081518110612e1657612e16614cdd565b612e36565b6060825182106130395750604080516020810190915260008152610fc8565b611a3d838384865161304b919061475a565b6135c2565b60008060008351855110613065578351613068565b84515b90505b80821080156130ef575083828151811061308757613087614cdd565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168583815181106130c6576130c6614cdd565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156126e05781600101915061306b565b6060600080600061310f8561379a565b91945092509050600081600181111561312a5761312a614d8e565b146131b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105e9565b6131c18284614c22565b855114613250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105e9565b611c2885602001518484614207565b6040805180820190915260008082526020820152600082511161332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b50604080518082019091528151815260209182019181019190915290565b606060008060006133588561379a565b91945092509050600181600181111561337357613373614d8e565b14613400576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105e9565b845161340c8385614c22565b14613499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105e9565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816134b25790505090506000845b87518110156135a0576000806135256040518060400160405280858d60000151613509919061475a565b8152602001858d6020015161351e9190614c22565b905261379a565b5091509150604051806040016040528083836135419190614c22565b8152602001848c602001516135569190614c22565b81525085858151811061356b5761356b614cdd565b6020908102919091010152613581600185614c22565b935061358d8183614c22565b6135979084614c22565b925050506134df565b50815295945050505050565b6060610fc8826020015160008460000151614207565b60608182601f011015613631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b82828401101561369d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b8183018451101561370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105e9565b6060821580156137295760405191506000825260208201604052613791565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561376257805183526020928301920161374a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600080600080846000015111613858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b6020840151805160001a607f811161387d576000600160009450945094505050614200565b60b78111613a8b57600061389260808361475a565b90508087600001511161394d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105e9565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806139c657507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105e9565b5060019550935060009250614200915050565b60bf8111613dd9576000613aa060b78361475a565b905080876000015111613b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613cfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105e9565b613d078184614c22565b895111613dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105e9565b613dc7836001614c22565b97509550600094506142009350505050565b60f78111613eba576000613dee60c08361475a565b905080876000015111613ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b600195509350849250614200915050565b6000613ec760f78361475a565b905080876000015111613f82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111614124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105e9565b61412e8184614c22565b8951116141e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b6141ee836001614c22565b97509550600194506142009350505050565b9193909250565b606060008267ffffffffffffffff811115614224576142246142a8565b6040519080825280601f01601f19166020018201604052801561424e576020820181803683370190505b50905082600003614260579050611a3d565b600061426c8587614c22565b90506020820160005b8581101561428d578281015182820152602001614275565b8581111561429c576000868301525b50919695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561431e5761431e6142a8565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461434a57600080fd5b919050565b600082601f83011261436057600080fd5b813567ffffffffffffffff81111561437a5761437a6142a8565b6143ab60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016142d7565b8181528460208386010111156143c057600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156143ef57600080fd5b60405160c0810167ffffffffffffffff8282108183111715614413576144136142a8565b816040528293508435835261442a60208601614326565b602084015261443b60408601614326565b6040840152606085013560608401526080850135608084015260a085013591508082111561446857600080fd5b506144758582860161434f565b60a0830152505092915050565b600080600080600085870360e081121561449b57600080fd5b863567ffffffffffffffff808211156144b357600080fd5b6144bf8a838b016143dd565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156144f857600080fd5b60408901955060c089013592508083111561451257600080fd5b828901925089601f84011261452657600080fd5b823591508082111561453757600080fd5b508860208260051b840101111561454d57600080fd5b959894975092955050506020019190565b60005b83811015614579578181015183820152602001614561565b83811115614588576000848401525b50505050565b600081518084526145a681602086016020860161455e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a3d602083018461458e565b6000602082840312156145fd57600080fd5b5035919050565b60006020828403121561461657600080fd5b813567ffffffffffffffff81111561462d57600080fd5b611d66848285016143dd565b600080600080600060a0868803121561465157600080fd5b61465a86614326565b945060208601359350604086013567ffffffffffffffff808216821461467f57600080fd5b909350606087013590811515821461469657600080fd5b909250608087013590808211156146ac57600080fd5b506146b98882890161434f565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b60488201526000825161471a81604985016020870161455e565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561476c5761476c61472b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826147af576147af614771565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156148035761480361472b565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156148425761484261472b565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156148765761487661472b565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156148bd576148bd61472b565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156148f8576148f861472b565b600087129250878205871284841616156149145761491461472b565b8785058712818416161561492a5761492a61472b565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156149725761497261472b565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156149a6576149a661472b565b50500190565b600067ffffffffffffffff8083168185168083038211156149cf576149cf61472b565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615614a0757614a0761472b565b02949350505050565b600082614a1f57614a1f614771565b500490565b80516fffffffffffffffffffffffffffffffff8116811461434a57600080fd5b600060608284031215614a5657600080fd5b6040516060810181811067ffffffffffffffff82111715614a7957614a796142a8565b60405282518152614a8c60208401614a24565b6020820152614a9d60408401614a24565b60408201529392505050565b600060808284031215614abb57600080fd5b6040516080810181811067ffffffffffffffff82111715614ade57614ade6142a8565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b2a57614b2a6142a8565b8360051b6020614b3b8183016142d7565b868152918501918181019036841115614b5357600080fd5b865b84811015614b8757803586811115614b6d5760008081fd5b614b7936828b0161434f565b845250918301918301614b55565b50979650505050505050565b60008451614ba581846020890161455e565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614be1816001850160208a0161455e565b60019201918201528351614bfc81600284016020880161455e565b0160020195945050505050565b600060208284031215614c1b57600080fd5b5051919050565b60008219821115614c3557614c3561472b565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c6b57614c6b61472b565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614cbd60c083018461458e565b98975050505050505050565b600082614cd857614cd8614771565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614d1f57614d1f614771565b8060ff84160691505092915050565b600060ff821660ff841680821015614d4857614d4861472b565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8957614d8961472b565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a",
}
// OptimismPortalABI is the input ABI used to generate the binding from.
......@@ -374,6 +374,37 @@ func (_OptimismPortal *OptimismPortalCallerSession) L2ORACLE() (common.Address,
return _OptimismPortal.Contract.L2ORACLE(&_OptimismPortal.CallOpts)
}
// MAXIMUMBASEFEE is a free data retrieval call binding the contract method 0x5c1f2827.
//
// Solidity: function MAXIMUM_BASE_FEE() view returns(int256)
func (_OptimismPortal *OptimismPortalCaller) MAXIMUMBASEFEE(opts *bind.CallOpts) (*big.Int, error) {
var out []interface{}
err := _OptimismPortal.contract.Call(opts, &out, "MAXIMUM_BASE_FEE")
if err != nil {
return *new(*big.Int), err
}
out0 := *abi.ConvertType(out[0], new(*big.Int)).(**big.Int)
return out0, err
}
// MAXIMUMBASEFEE is a free data retrieval call binding the contract method 0x5c1f2827.
//
// Solidity: function MAXIMUM_BASE_FEE() view returns(int256)
func (_OptimismPortal *OptimismPortalSession) MAXIMUMBASEFEE() (*big.Int, error) {
return _OptimismPortal.Contract.MAXIMUMBASEFEE(&_OptimismPortal.CallOpts)
}
// MAXIMUMBASEFEE is a free data retrieval call binding the contract method 0x5c1f2827.
//
// Solidity: function MAXIMUM_BASE_FEE() view returns(int256)
func (_OptimismPortal *OptimismPortalCallerSession) MAXIMUMBASEFEE() (*big.Int, error) {
return _OptimismPortal.Contract.MAXIMUMBASEFEE(&_OptimismPortal.CallOpts)
}
// MAXRESOURCELIMIT is a free data retrieval call binding the contract method 0x64b79208.
//
// Solidity: function MAX_RESOURCE_LIMIT() view returns(int256)
......
......@@ -13,7 +13,7 @@ const OptimismPortalStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contrac
var OptimismPortalStorageLayout = new(solc.StorageLayout)
var OptimismPortalDeployedBin = "0x6080604052600436106101475760003560e01c80638b4c40b0116100c0578063cd7c978911610074578063e965084c11610059578063e965084c14610429578063e9e05c42146104b5578063f4daa291146104c857600080fd5b8063cd7c978914610373578063cff0ab961461038857600080fd5b80639bf62d82116100a55780639bf62d8214610301578063a14238e71461032e578063ca3e99ba1461035e57600080fd5b80638b4c40b01461016c5780638c3152e9146102e157600080fd5b806364b79208116101175780636dbffb78116100fc5780636dbffb78146102865780638129fc1c146102b6578063867ead13146102cb57600080fd5b806364b792081461024c5780636bb0291e1461027157600080fd5b80621c2ff61461017357806313620abd146101d15780634870496f1461020a57806354fd4d501461022a57600080fd5b3661016e5761016c3334620186a06000604051806020016040528060008152506104fc565b005b600080fd5b34801561017f57600080fd5b506101a77f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101dd57600080fd5b506101e9633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101c8565b34801561021657600080fd5b5061016c610225366004614426565b6109c9565b34801561023657600080fd5b5061023f610e6a565b6040516101c8919061457c565b34801561025857600080fd5b50610263627a120081565b6040519081526020016101c8565b34801561027d57600080fd5b50610263600481565b34801561029257600080fd5b506102a66102a136600461458f565b610f0d565b60405190151581526020016101c8565b3480156102c257600080fd5b5061016c610fe4565b3480156102d757600080fd5b5061026361271081565b3480156102ed57600080fd5b5061016c6102fc3660046145a8565b6111a2565b34801561030d57600080fd5b506032546101a79073ffffffffffffffffffffffffffffffffffffffff1681565b34801561033a57600080fd5b506102a661034936600461458f565b60336020526000908152604090205460ff1681565b34801561036a57600080fd5b50610263611a0e565b34801561037f57600080fd5b50610263600881565b34801561039457600080fd5b506001546103f0906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101c8565b34801561043557600080fd5b5061048761044436600461458f565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101c8565b61016c6104c33660046145dd565b6104fc565b3480156104d457600080fd5b506102637f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105b35773ffffffffffffffffffffffffffffffffffffffff8716156105b357604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b333281146105d4575033731111000000000000000000000000000000001111015b600034888888886040516020016105ef95949392919061466a565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161065f919061457c565b60405180910390a4505060015460009061069f907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436146fe565b905080156108285760006106b76004627a1200614744565b6001546106e29190700100000000000000000000000000000000900467ffffffffffffffff166147ac565b9050600060086106f66004627a1200614744565b6001546107169085906fffffffffffffffffffffffffffffffff16614820565b6107209190614744565b61072a9190614744565b60015490915060009061077690610760906107589085906fffffffffffffffffffffffffffffffff166148dc565b612710611a3b565b6fffffffffffffffffffffffffffffffff611a54565b905060018411156107e9576107e6610760670de0b6b3a76400006107d261079e600883614744565b6107b090670de0b6b3a76400006147ac565b6107bb60018a6146fe565b6107cd90670de0b6b3a7640000614950565b611a63565b6107dc9085614820565b6107589190614744565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b6001805484919060109061085b908490700100000000000000000000000000000000900467ffffffffffffffff1661498d565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315610937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105aa565b600154600090610963906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166149b9565b6fffffffffffffffffffffffffffffffff169050600061098748633b9aca00611a94565b61099190836149f1565b905060005a6109a090866146fe565b9050808211156109bc576109bc6109b782846146fe565b611aa4565b5050505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a88576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105aa565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b3a9190614a25565b519050610b54610b4f36869003860186614a8a565b611ad2565b8114610be2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105aa565b6000610bed87611b2e565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c79575080604001516fffffffffffffffffffffffffffffffff1687148015610c79575080518314155b610d05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105aa565b610d1d826040880135610d188789614af0565b611b5e565b610da9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105aa565b604080516060810182528481526fffffffffffffffffffffffffffffffff42811660208084019182528b831684860190815260008881526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558a830151908b0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a45050505050505050565b6060610e957f0000000000000000000000000000000000000000000000000000000000000000611c25565b610ebe7f0000000000000000000000000000000000000000000000000000000000000000611c25565b610ee77f0000000000000000000000000000000000000000000000000000000000000000611c25565b604051602001610ef993929190614b74565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fde9073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc39190614a25565b602001516fffffffffffffffffffffffffffffffff16611d62565b92915050565b600054610100900460ff16158080156110045750600054600160ff909116105b8061101e5750303b15801561101e575060005460ff166001145b6110aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105aa565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055801561110857600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905561113c611d96565b801561119f57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead1461124b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105aa565b600061125682611b2e565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e00000000000000000000000000000000000060648201526084016105aa565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d09190614bea565b81602001516fffffffffffffffffffffffffffffffff16101561149b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105aa565b6114ba81602001516fffffffffffffffffffffffffffffffff16611d62565b61156c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105aa565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611611573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116359190614a25565b82518151919250146116ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105aa565b61170e81602001516fffffffffffffffffffffffffffffffff16611d62565b6117c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105aa565b60008381526033602052604090205460ff161561185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105aa565b600083815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905560808401516118a890614e2090614c03565b5a1015611937576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016105aa565b8360200151603260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600061199a8560400151866080015187606001518860a00151611e79565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906119ff90841515815260200190565b60405180910390a25050505050565b611a1c6004627a1200614744565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b600081831215611a4b5781611a4d565b825b9392505050565b6000818312611a4b5781611a4d565b6000611a4d670de0b6b3a764000083611a7b86611e93565b611a859190614820565b611a8f9190614744565b6120d7565b600081831015611a4b5781611a4d565b6000805a90505b825a611ab790836146fe565b1015611acd57611ac682614c1b565b9150611aab565b505050565b60008160000151826020015183604001518460600151604051602001611b11949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611b11979096959101614c53565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611c1c9101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587612316565b95945050505050565b606081600003611c6857505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611c925780611c7c81614c1b565b9150611c8b9050600a836149f1565b9150611c6c565b60008167ffffffffffffffff811115611cad57611cad61424c565b6040519080825280601f01601f191660200182016040528015611cd7576020820181803683370190505b5090505b8415611d5a57611cec6001836146fe565b9150611cf9600a86614caa565b611d04906030614c03565b60f81b818381518110611d1957611d19614cbe565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d53600a866149f1565b9450611cdb565b949350505050565b6000611d8e7f000000000000000000000000000000000000000000000000000000000000000083614c03565b421192915050565b600054610100900460ff16611e2d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105aa565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600080600080845160208601878a8af19695505050505050565b6000808213611efe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105aa565b60006060611f0b8461233a565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361210857506000919050565b680755bf798b4a1bf1e5821261217a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105aa565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b60008061232286612410565b905061233081868686612442565b9695505050505050565b60008082116123a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105aa565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060818051906020012060405160200161242c91815260200190565b6040516020818303038152906040529050919050565b600080600061245287868661247f565b9150915081801561247457508051602080830191909120875191880191909120145b979650505050505050565b60006060600061248e8561259d565b905060008060006124a0848a8961268c565b815192955090935091501580806124b45750815b612540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c696400000000000000000000000000000000000000000000000000000060648201526084016105aa565b60008161255c5760405180602001604052806000815250612588565b6125888661256b6001886146fe565b8151811061257b5761257b614cbe565b6020026020010151612d90565b805115159c909b509950505050505050505050565b805160609060008167ffffffffffffffff8111156125bd576125bd61424c565b60405190808252806020026020018201604052801561260257816020015b60408051808201909152606080825260208201528152602001906001900390816125db5790505b50905060005b8281101561268457604051806040016040528086838151811061262d5761262d614cbe565b6020026020010151815260200161265c87848151811061264f5761264f614cbe565b6020026020010151612dc7565b81525082828151811061267157612671614cbe565b6020908102919091010152600101612608565b509392505050565b6000606081808061269c87612dda565b90506000866040516020016126b391815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152606080835260208301529150600090819060005b8c51811015612d12578c818151811061271357612713614cbe565b6020026020010151915082846127299190614c03565b9350612736600188614c03565b9650836000036127f157815180516020918201206040516127869261276092910190815260200190565b604051602081830303815290604052868051602091820120825192909101919091201490565b6127ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105aa565b612948565b8151516020116128a7578151805160209182012060405161281b9261276092910190815260200190565b6127ec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105aa565b815185516020808801919091208251919092012014612948576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105aa565b61295460106001614c03565b826020015151036129c65785518414612d1257600086858151811061297b5761297b614cbe565b602001015160f81c60f81b60f81c9050600083602001518260ff16815181106129a6576129a6614cbe565b602002602001015190506129b981612f75565b9650600194505050612d00565b600282602001515103612c785760006129de83612f9a565b90506000816000815181106129f5576129f5614cbe565b016020015160f81c90506000612a0c600283614ced565b612a17906002614d0f565b90506000612a28848360ff16612fbe565b90506000612a368b8a612fbe565b90506000612a448383612ff4565b9050825182511015612ad8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a20696e76616c6964206b6579206c656e677468206660448201527f6f72206c656166206f7220657874656e73696f6e206e6f64650000000000000060648201526084016105aa565b60ff851660021480612aed575060ff85166003145b15612b5757808351148015612b025750808251145b15612b1457612b11818b614c03565b99505b6040518060400160405280600181526020017f80000000000000000000000000000000000000000000000000000000000000008152509a50505050505050612d12565b60ff85161580612b6a575060ff85166001145b15612bf05782518114612bba576040518060400160405280600181526020017f80000000000000000000000000000000000000000000000000000000000000008152509a50505050505050612d12565b612be18860200151600181518110612bd457612bd4614cbe565b6020026020010151612f75565b9a509750612d00945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105aa565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105aa565b80612d0a81614c1b565b9150506126f8565b5085612d1e8685612fbe565b60408051808201909152600181527f80000000000000000000000000000000000000000000000000000000000000006020918201528651908701207f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4211498509850985050505050505093509350939050565b60208101518051606091610fde91612daa906001906146fe565b81518110612dba57612dba614cbe565b60200260200101516130a3565b6060610fde612dd583613203565b6132ec565b80516060906000612dec826002614950565b67ffffffffffffffff811115612e0457612e0461424c565b6040519080825280601f01601f191660200182016040528015612e2e576020820181803683370190505b5090506000805b83811015612f6b57858181518110612e4f57612e4f614cbe565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff00000000000000000000000000000000000000000000000000000000000001683612eab836002614950565b81518110612ebb57612ebb614cbe565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f00000000000000000000000000000000000000000000000000000000000000821683612f19836002614950565b612f24906001614c03565b81518110612f3457612f34614cbe565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101612e35565b5090949350505050565b60606020826000015110612f9157612f8c826130a3565b610fde565b610fde82613550565b6060610fde612fb98360200151600081518110612dba57612dba614cbe565b612dda565b606082518210612fdd5750604080516020810190915260008152610fde565b611a4d8383848651612fef91906146fe565b613566565b6000806000835185511061300957835161300c565b84515b90505b8082108015613093575083828151811061302b5761302b614cbe565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685838151811061306a5761306a614cbe565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156126845781600101915061300f565b606060008060006130b38561373e565b9194509250905060008160018111156130ce576130ce614d32565b1461315b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105aa565b6131658284614c03565b8551146131f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105aa565b611c1c856020015184846141ab565b604080518082019091526000808252602082015260008251116132ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105aa565b50604080518082019091528151815260209182019181019190915290565b606060008060006132fc8561373e565b91945092509050600181600181111561331757613317614d32565b146133a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105aa565b84516133b08385614c03565b1461343d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105aa565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816134565790505090506000845b8751811015613544576000806134c96040518060400160405280858d600001516134ad91906146fe565b8152602001858d602001516134c29190614c03565b905261373e565b5091509150604051806040016040528083836134e59190614c03565b8152602001848c602001516134fa9190614c03565b81525085858151811061350f5761350f614cbe565b6020908102919091010152613525600185614c03565b93506135318183614c03565b61353b9084614c03565b92505050613483565b50815295945050505050565b6060610fde8260200151600084600001516141ab565b60608182601f0110156135d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105aa565b828284011015613641576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105aa565b818301845110156136ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105aa565b6060821580156136cd5760405191506000825260208201604052613735565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156137065780518352602092830192016136ee565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6000806000808460000151116137fc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105aa565b6020840151805160001a607f81116138215760006001600094509450945050506141a4565b60b78111613a2f5760006138366080836146fe565b9050808760000151116138f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105aa565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061396a57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613a1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105aa565b50600195509350600092506141a4915050565b60bf8111613d7d576000613a4460b7836146fe565b905080876000015111613aff576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105aa565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613bdd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105aa565b600184015160088302610100031c60378111613ca1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105aa565b613cab8184614c03565b895111613d60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105aa565b613d6b836001614c03565b97509550600094506141a49350505050565b60f78111613e5e576000613d9260c0836146fe565b905080876000015111613e4d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105aa565b6001955093508492506141a4915050565b6000613e6b60f7836146fe565b905080876000015111613f26576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105aa565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614004576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105aa565b600184015160088302610100031c603781116140c8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105aa565b6140d28184614c03565b895111614187576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105aa565b614192836001614c03565b97509550600194506141a49350505050565b9193909250565b606060008267ffffffffffffffff8111156141c8576141c861424c565b6040519080825280601f01601f1916602001820160405280156141f2576020820181803683370190505b50905082600003614204579050611a4d565b60006142108587614c03565b90506020820160005b85811015614231578281015182820152602001614219565b85811115614240576000868301525b50919695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156142c2576142c261424c565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146142ee57600080fd5b919050565b600082601f83011261430457600080fd5b813567ffffffffffffffff81111561431e5761431e61424c565b61434f60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161427b565b81815284602083860101111561436457600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561439357600080fd5b60405160c0810167ffffffffffffffff82821081831117156143b7576143b761424c565b81604052829350843583526143ce602086016142ca565b60208401526143df604086016142ca565b6040840152606085013560608401526080850135608084015260a085013591508082111561440c57600080fd5b50614419858286016142f3565b60a0830152505092915050565b600080600080600085870360e081121561443f57600080fd5b863567ffffffffffffffff8082111561445757600080fd5b6144638a838b01614381565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561449c57600080fd5b60408901955060c08901359250808311156144b657600080fd5b828901925089601f8401126144ca57600080fd5b82359150808211156144db57600080fd5b508860208260051b84010111156144f157600080fd5b959894975092955050506020019190565b60005b8381101561451d578181015183820152602001614505565b8381111561452c576000848401525b50505050565b6000815180845261454a816020860160208601614502565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a4d6020830184614532565b6000602082840312156145a157600080fd5b5035919050565b6000602082840312156145ba57600080fd5b813567ffffffffffffffff8111156145d157600080fd5b611d5a84828501614381565b600080600080600060a086880312156145f557600080fd5b6145fe866142ca565b945060208601359350604086013567ffffffffffffffff808216821461462357600080fd5b909350606087013590811515821461463a57600080fd5b9092506080870135908082111561465057600080fd5b5061465d888289016142f3565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516146be816049850160208701614502565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614710576147106146cf565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261475357614753614715565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156147a7576147a76146cf565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156147e6576147e66146cf565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01831381161561481a5761481a6146cf565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614861576148616146cf565b7f8000000000000000000000000000000000000000000000000000000000000000600087128682058812818416161561489c5761489c6146cf565b600087129250878205871284841616156148b8576148b86146cf565b878505871281841616156148ce576148ce6146cf565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614916576149166146cf565b827f800000000000000000000000000000000000000000000000000000000000000003841281161561494a5761494a6146cf565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614988576149886146cf565b500290565b600067ffffffffffffffff8083168185168083038211156149b0576149b06146cf565b01949350505050565b60006fffffffffffffffffffffffffffffffff808316818516818304811182151516156149e8576149e86146cf565b02949350505050565b600082614a0057614a00614715565b500490565b80516fffffffffffffffffffffffffffffffff811681146142ee57600080fd5b600060608284031215614a3757600080fd5b6040516060810181811067ffffffffffffffff82111715614a5a57614a5a61424c565b60405282518152614a6d60208401614a05565b6020820152614a7e60408401614a05565b60408201529392505050565b600060808284031215614a9c57600080fd5b6040516080810181811067ffffffffffffffff82111715614abf57614abf61424c565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b0b57614b0b61424c565b8360051b6020614b1c81830161427b565b868152918501918181019036841115614b3457600080fd5b865b84811015614b6857803586811115614b4e5760008081fd5b614b5a36828b016142f3565b845250918301918301614b36565b50979650505050505050565b60008451614b86818460208901614502565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614bc2816001850160208a01614502565b60019201918201528351614bdd816002840160208801614502565b0160020195945050505050565b600060208284031215614bfc57600080fd5b5051919050565b60008219821115614c1657614c166146cf565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c4c57614c4c6146cf565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614c9e60c0830184614532565b98975050505050505050565b600082614cb957614cb9614715565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614d0057614d00614715565b8060ff84160691505092915050565b600060ff821660ff841680821015614d2957614d296146cf565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"
var OptimismPortalDeployedBin = "0x6080604052600436106101625760003560e01c80638b4c40b0116100c0578063cd7c978911610074578063e965084c11610059578063e965084c14610468578063e9e05c42146104f4578063f4daa2911461050757600080fd5b8063cd7c9789146103b2578063cff0ab96146103c757600080fd5b80639bf62d82116100a55780639bf62d8214610340578063a14238e71461036d578063ca3e99ba1461039d57600080fd5b80638b4c40b0146101875780638c3152e91461032057600080fd5b806364b79208116101175780636dbffb78116100fc5780636dbffb78146102c55780638129fc1c146102f5578063867ead131461030a57600080fd5b806364b79208146102995780636bb0291e146102b057600080fd5b80634870496f116101485780634870496f1461022557806354fd4d50146102455780635c1f28271461026757600080fd5b80621c2ff61461018e57806313620abd146101ec57600080fd5b36610189576101873334620186a060006040518060200160405280600081525061053b565b005b600080fd5b34801561019a57600080fd5b506101c27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101f857600080fd5b50610204633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e3565b34801561023157600080fd5b50610187610240366004614482565b6109b3565b34801561025157600080fd5b5061025a610e54565b6040516101e391906145d8565b34801561027357600080fd5b5061028b6fffffffffffffffffffffffffffffffff81565b6040519081526020016101e3565b3480156102a557600080fd5b5061028b627a120081565b3480156102bc57600080fd5b5061028b600481565b3480156102d157600080fd5b506102e56102e03660046145eb565b610ef7565b60405190151581526020016101e3565b34801561030157600080fd5b50610187610fce565b34801561031657600080fd5b5061028b61271081565b34801561032c57600080fd5b5061018761033b366004614604565b61118c565b34801561034c57600080fd5b506032546101c29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037957600080fd5b506102e56103883660046145eb565b60336020526000908152604090205460ff1681565b3480156103a957600080fd5b5061028b6119f8565b3480156103be57600080fd5b5061028b600881565b3480156103d357600080fd5b5060015461042f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e3565b34801561047457600080fd5b506104c66104833660046145eb565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e3565b610187610502366004614639565b61053b565b34801561051357600080fd5b5061028b7f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105f25773ffffffffffffffffffffffffffffffffffffffff8716156105f257604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b33328114610613575033731111000000000000000000000000000000001111015b6000348888888860405160200161062e9594939291906146c6565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161069e91906145d8565b60405180910390a450506001546000906106de907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361475a565b905080156108125760006106f66004627a12006147a0565b6001546107219190700100000000000000000000000000000000900467ffffffffffffffff16614808565b9050600060086107356004627a12006147a0565b6001546107559085906fffffffffffffffffffffffffffffffff1661487c565b61075f91906147a0565b61076991906147a0565b6001549091506000906107ac906107939084906fffffffffffffffffffffffffffffffff16614938565b6127106fffffffffffffffffffffffffffffffff611a25565b905060018411156107d3576107d06107938260086107cb60018961475a565b611a44565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610845908490700100000000000000000000000000000000900467ffffffffffffffff166149ac565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105e9565b60015460009061094d906fffffffffffffffffffffffffffffffff1667ffffffffffffffff86166149d8565b6fffffffffffffffffffffffffffffffff169050600061097148633b9aca00611a99565b61097b9083614a10565b905060005a61098a908661475a565b9050808211156109a6576109a66109a1828461475a565b611ab0565b5050505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105e9565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190614a44565b519050610b3e610b3936869003860186614aa9565b611ade565b8114610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105e9565b6000610bd787611b3a565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c63575080604001516fffffffffffffffffffffffffffffffff1687148015610c63575080518314155b610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105e9565b610d07826040880135610d028789614b0f565b611b6a565b610d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105e9565b604080516060810182528481526fffffffffffffffffffffffffffffffff42811660208084019182528b831684860190815260008881526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558a830151908b0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a45050505050505050565b6060610e7f7f0000000000000000000000000000000000000000000000000000000000000000611c31565b610ea87f0000000000000000000000000000000000000000000000000000000000000000611c31565b610ed17f0000000000000000000000000000000000000000000000000000000000000000611c31565b604051602001610ee393929190614b93565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fc89073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad9190614a44565b602001516fffffffffffffffffffffffffffffffff16611d6e565b92915050565b600054610100900460ff1615808015610fee5750600054600160ff909116105b806110085750303b158015611008575060005460ff166001145b611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105e9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156110f257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055611126611da2565b801561118957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105e9565b600061124082611b3a565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e00000000000000000000000000000000000060648201526084016105e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614c09565b81602001516fffffffffffffffffffffffffffffffff161015611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105e9565b6114a481602001516fffffffffffffffffffffffffffffffff16611d6e565b611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161f9190614a44565b82518151919250146116d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105e9565b6116f881602001516fffffffffffffffffffffffffffffffff16611d6e565b6117aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60008381526033602052604090205460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105e9565b600083815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608084015161189290614e2090614c22565b5a1015611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016105e9565b8360200151603260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006119848560400151866080015187606001518860a00151611e85565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906119e990841515815260200190565b60405180910390a25050505050565b611a066004627a12006147a0565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000611a3a611a348585611e9f565b83611eaf565b90505b9392505050565b6000670de0b6b3a7640000611a85611a5c85836147a0565b611a6e90670de0b6b3a7640000614808565b611a8085670de0b6b3a764000061487c565b611ebe565b611a8f908661487c565b611a3a91906147a0565b600081831015611aa95781611a3d565b5090919050565b6000805a90505b825a611ac3908361475a565b1015611ad957611ad282614c3a565b9150611ab7565b505050565b60008160000151826020015183604001518460600151604051602001611b1d949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611b1d979096959101614c72565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611c289101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611eef565b95945050505050565b606081600003611c7457505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611c9e5780611c8881614c3a565b9150611c979050600a83614a10565b9150611c78565b60008167ffffffffffffffff811115611cb957611cb96142a8565b6040519080825280601f01601f191660200182016040528015611ce3576020820181803683370190505b5090505b8415611d6657611cf860018361475a565b9150611d05600a86614cc9565b611d10906030614c22565b60f81b818381518110611d2557611d25614cdd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611d5f600a86614a10565b9450611ce7565b949350505050565b6000611d9a7f000000000000000000000000000000000000000000000000000000000000000083614c22565b421192915050565b600054610100900460ff16611e39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e9565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600080600080845160208601878a8af19695505050505050565b600081831215611aa95781611a3d565b6000818312611aa95781611a3d565b6000611a3d670de0b6b3a764000083611ed686611f13565b611ee0919061487c565b611eea91906147a0565b612157565b600080611efb86612396565b9050611f09818686866123c8565b9695505050505050565b6000808213611f7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b60006060611f8b84612405565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361218857506000919050565b680755bf798b4a1bf1e582126121fa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105e9565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b606081805190602001206040516020016123b291815260200190565b6040516020818303038152906040529050919050565b60008060006123d88786866124db565b915091508180156123fa57508051602080830191909120875191880191909120145b979650505050505050565b6000808211612470576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6000606060006124ea856125f9565b905060008060006124fc848a896126e8565b815192955090935091501580806125105750815b61259c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2070726f76696465642070726f6f6620697320696e60448201527f76616c696400000000000000000000000000000000000000000000000000000060648201526084016105e9565b6000816125b857604051806020016040528060008152506125e4565b6125e4866125c760018861475a565b815181106125d7576125d7614cdd565b6020026020010151612dec565b805115159c909b509950505050505050505050565b805160609060008167ffffffffffffffff811115612619576126196142a8565b60405190808252806020026020018201604052801561265e57816020015b60408051808201909152606080825260208201528152602001906001900390816126375790505b50905060005b828110156126e057604051806040016040528086838151811061268957612689614cdd565b602002602001015181526020016126b88784815181106126ab576126ab614cdd565b6020026020010151612e23565b8152508282815181106126cd576126cd614cdd565b6020908102919091010152600101612664565b509392505050565b600060608180806126f887612e36565b905060008660405160200161270f91815260200190565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152606080835260208301529150600090819060005b8c51811015612d6e578c818151811061276f5761276f614cdd565b6020026020010151915082846127859190614c22565b9350612792600188614c22565b96508360000361284d57815180516020918201206040516127e2926127bc92910190815260200190565b604051602081830303815290604052868051602091820120825192909101919091201490565b612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105e9565b6129a4565b8151516020116129035781518051602091820120604051612877926127bc92910190815260200190565b612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105e9565b8151855160208088019190912082519190920120146129a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105e9565b6129b060106001614c22565b82602001515103612a225785518414612d6e5760008685815181106129d7576129d7614cdd565b602001015160f81c60f81b60f81c9050600083602001518260ff1681518110612a0257612a02614cdd565b60200260200101519050612a1581612fd1565b9650600194505050612d5c565b600282602001515103612cd4576000612a3a83612ff6565b9050600081600081518110612a5157612a51614cdd565b016020015160f81c90506000612a68600283614d0c565b612a73906002614d2e565b90506000612a84848360ff1661301a565b90506000612a928b8a61301a565b90506000612aa08383613050565b9050825182511015612b34576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a20696e76616c6964206b6579206c656e677468206660448201527f6f72206c656166206f7220657874656e73696f6e206e6f64650000000000000060648201526084016105e9565b60ff851660021480612b49575060ff85166003145b15612bb357808351148015612b5e5750808251145b15612b7057612b6d818b614c22565b99505b6040518060400160405280600181526020017f80000000000000000000000000000000000000000000000000000000000000008152509a50505050505050612d6e565b60ff85161580612bc6575060ff85166001145b15612c4c5782518114612c16576040518060400160405280600181526020017f80000000000000000000000000000000000000000000000000000000000000008152509a50505050505050612d6e565b612c3d8860200151600181518110612c3057612c30614cdd565b6020026020010151612fd1565b9a509750612d5c945050505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105e9565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105e9565b80612d6681614c3a565b915050612754565b5085612d7a868561301a565b60408051808201909152600181527f80000000000000000000000000000000000000000000000000000000000000006020918201528651908701207f56e81f171bcc55a6ff8345e692c0f86e5b48e01b996cadc001622fb5e363b4211498509850985050505050505093509350939050565b60208101518051606091610fc891612e069060019061475a565b81518110612e1657612e16614cdd565b60200260200101516130ff565b6060610fc8612e318361325f565b613348565b80516060906000612e48826002614d51565b67ffffffffffffffff811115612e6057612e606142a8565b6040519080825280601f01601f191660200182016040528015612e8a576020820181803683370190505b5090506000805b83811015612fc757858181518110612eab57612eab614cdd565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff00000000000000000000000000000000000000000000000000000000000001683612f07836002614d51565b81518110612f1757612f17614cdd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f00000000000000000000000000000000000000000000000000000000000000821683612f75836002614d51565b612f80906001614c22565b81518110612f9057612f90614cdd565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101612e91565b5090949350505050565b60606020826000015110612fed57612fe8826130ff565b610fc8565b610fc8826135ac565b6060610fc86130158360200151600081518110612e1657612e16614cdd565b612e36565b6060825182106130395750604080516020810190915260008152610fc8565b611a3d838384865161304b919061475a565b6135c2565b60008060008351855110613065578351613068565b84515b90505b80821080156130ef575083828151811061308757613087614cdd565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168583815181106130c6576130c6614cdd565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156126e05781600101915061306b565b6060600080600061310f8561379a565b91945092509050600081600181111561312a5761312a614d8e565b146131b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105e9565b6131c18284614c22565b855114613250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105e9565b611c2885602001518484614207565b6040805180820190915260008082526020820152600082511161332a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b50604080518082019091528151815260209182019181019190915290565b606060008060006133588561379a565b91945092509050600181600181111561337357613373614d8e565b14613400576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105e9565b845161340c8385614c22565b14613499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105e9565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816134b25790505090506000845b87518110156135a0576000806135256040518060400160405280858d60000151613509919061475a565b8152602001858d6020015161351e9190614c22565b905261379a565b5091509150604051806040016040528083836135419190614c22565b8152602001848c602001516135569190614c22565b81525085858151811061356b5761356b614cdd565b6020908102919091010152613581600185614c22565b935061358d8183614c22565b6135979084614c22565b925050506134df565b50815295945050505050565b6060610fc8826020015160008460000151614207565b60608182601f011015613631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b82828401101561369d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b8183018451101561370a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105e9565b6060821580156137295760405191506000825260208201604052613791565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561376257805183526020928301920161374a565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b600080600080846000015111613858576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b6020840151805160001a607f811161387d576000600160009450945094505050614200565b60b78111613a8b57600061389260808361475a565b90508087600001511161394d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105e9565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806139c657507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613a78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105e9565b5060019550935060009250614200915050565b60bf8111613dd9576000613aa060b78361475a565b905080876000015111613b5b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613c39576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613cfd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105e9565b613d078184614c22565b895111613dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105e9565b613dc7836001614c22565b97509550600094506142009350505050565b60f78111613eba576000613dee60c08361475a565b905080876000015111613ea9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b600195509350849250614200915050565b6000613ec760f78361475a565b905080876000015111613f82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614060576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111614124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105e9565b61412e8184614c22565b8951116141e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b6141ee836001614c22565b97509550600194506142009350505050565b9193909250565b606060008267ffffffffffffffff811115614224576142246142a8565b6040519080825280601f01601f19166020018201604052801561424e576020820181803683370190505b50905082600003614260579050611a3d565b600061426c8587614c22565b90506020820160005b8581101561428d578281015182820152602001614275565b8581111561429c576000868301525b50919695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561431e5761431e6142a8565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461434a57600080fd5b919050565b600082601f83011261436057600080fd5b813567ffffffffffffffff81111561437a5761437a6142a8565b6143ab60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016142d7565b8181528460208386010111156143c057600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156143ef57600080fd5b60405160c0810167ffffffffffffffff8282108183111715614413576144136142a8565b816040528293508435835261442a60208601614326565b602084015261443b60408601614326565b6040840152606085013560608401526080850135608084015260a085013591508082111561446857600080fd5b506144758582860161434f565b60a0830152505092915050565b600080600080600085870360e081121561449b57600080fd5b863567ffffffffffffffff808211156144b357600080fd5b6144bf8a838b016143dd565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156144f857600080fd5b60408901955060c089013592508083111561451257600080fd5b828901925089601f84011261452657600080fd5b823591508082111561453757600080fd5b508860208260051b840101111561454d57600080fd5b959894975092955050506020019190565b60005b83811015614579578181015183820152602001614561565b83811115614588576000848401525b50505050565b600081518084526145a681602086016020860161455e565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611a3d602083018461458e565b6000602082840312156145fd57600080fd5b5035919050565b60006020828403121561461657600080fd5b813567ffffffffffffffff81111561462d57600080fd5b611d66848285016143dd565b600080600080600060a0868803121561465157600080fd5b61465a86614326565b945060208601359350604086013567ffffffffffffffff808216821461467f57600080fd5b909350606087013590811515821461469657600080fd5b909250608087013590808211156146ac57600080fd5b506146b98882890161434f565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b60488201526000825161471a81604985016020870161455e565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008282101561476c5761476c61472b565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826147af576147af614771565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156148035761480361472b565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156148425761484261472b565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156148765761487661472b565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156148bd576148bd61472b565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156148f8576148f861472b565b600087129250878205871284841616156149145761491461472b565b8785058712818416161561492a5761492a61472b565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038413811516156149725761497261472b565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156149a6576149a661472b565b50500190565b600067ffffffffffffffff8083168185168083038211156149cf576149cf61472b565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615614a0757614a0761472b565b02949350505050565b600082614a1f57614a1f614771565b500490565b80516fffffffffffffffffffffffffffffffff8116811461434a57600080fd5b600060608284031215614a5657600080fd5b6040516060810181811067ffffffffffffffff82111715614a7957614a796142a8565b60405282518152614a8c60208401614a24565b6020820152614a9d60408401614a24565b60408201529392505050565b600060808284031215614abb57600080fd5b6040516080810181811067ffffffffffffffff82111715614ade57614ade6142a8565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614b2a57614b2a6142a8565b8360051b6020614b3b8183016142d7565b868152918501918181019036841115614b5357600080fd5b865b84811015614b8757803586811115614b6d5760008081fd5b614b7936828b0161434f565b845250918301918301614b55565b50979650505050505050565b60008451614ba581846020890161455e565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614be1816001850160208a0161455e565b60019201918201528351614bfc81600284016020880161455e565b0160020195945050505050565b600060208284031215614c1b57600080fd5b5051919050565b60008219821115614c3557614c3561472b565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614c6b57614c6b61472b565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614cbd60c083018461458e565b98975050505050505050565b600082614cd857614cd8614771565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614d1f57614d1f614771565b8060ff84160691505092915050565b600060ff821660ff841680821015614d4857614d4861472b565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614d8957614d8961472b565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"
func init() {
if err := json.Unmarshal([]byte(OptimismPortalStorageLayoutJSON), OptimismPortalStorageLayout); err != nil {
......
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 261326)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 75499)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 348154)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 112232)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 348176)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 112253)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_0() (gas: 261323)
GasBenchMark_L1CrossDomainMessenger:test_L1MessengerSendMessage_benchmark_1() (gas: 75850)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_0() (gas: 348151)
GasBenchMark_L1StandardBridge_Deposit:test_depositERC20_benchmark_1() (gas: 112583)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_0() (gas: 348173)
GasBenchMark_L1StandardBridge_Deposit:test_depositETH_benchmark_1() (gas: 112604)
GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (gas: 40502)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 88513)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74956)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 35693)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74953)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 36044)
CrossDomainMessenger_Test:testFuzz_baseGas(uint32) (runs: 256, μ: 20196, ~: 20196)
CrossDomainMessenger_Test:test_baseGas() (gas: 20054)
CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner() (gas: 61809)
CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner() (gas: 61806)
CrossDomainOwnable_Test:test_onlyOwner() (gas: 34861)
CrossDomainOwnable_Test:test_revertOnlyOwner() (gas: 10530)
CrossDomainOwnable2_Test:test_onlyOwner() (gas: 77782)
......@@ -51,16 +51,16 @@ L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageToSystemContract() (gas:
L1CrossDomainMessenger_Test:test_L1MessengerRelayMessageV0Fails() (gas: 33236)
L1CrossDomainMessenger_Test:test_L1MessengerRelayShouldRevertIfPaused() (gas: 60475)
L1CrossDomainMessenger_Test:test_L1MessengerReplayMessageWithValue() (gas: 38192)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 299569)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1490463)
L1CrossDomainMessenger_Test:test_L1MessengerSendMessage() (gas: 299566)
L1CrossDomainMessenger_Test:test_L1MessengerTwiceSendMessage() (gas: 1490457)
L1CrossDomainMessenger_Test:test_L1MessengerUnpause() (gas: 45186)
L1CrossDomainMessenger_Test:test_L1MessengerXDomainSenderReverts() (gas: 24232)
L1CrossDomainMessenger_Test:test_L1MessengerxDomainMessageSenderResets() (gas: 84056)
L1StandardBridge_DepositERC20To_Test:test_depositERC20To_success() (gas: 575965)
L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 573789)
L1StandardBridge_DepositERC20To_Test:test_depositERC20To_success() (gas: 575962)
L1StandardBridge_DepositERC20_Test:test_depositERC20_succeeds() (gas: 573786)
L1StandardBridge_DepositERC20_TestFail:test_depositERC20_revert_notEoa() (gas: 22298)
L1StandardBridge_DepositETHTo_Test:test_depositETHTo() (gas: 324705)
L1StandardBridge_DepositETH_Test:test_depositETH_success() (gas: 367541)
L1StandardBridge_DepositETHTo_Test:test_depositETHTo() (gas: 324702)
L1StandardBridge_DepositETH_Test:test_depositETH_success() (gas: 367538)
L1StandardBridge_DepositETH_TestFail:test_DepositETH_revert_notEoa() (gas: 40758)
L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_revert_incorrectValue() (gas: 34207)
L1StandardBridge_FinalizeBridgeETH_TestFail:test_finalizeBridgeETH_revert_sendToMessenger() (gas: 34266)
......@@ -71,7 +71,7 @@ L1StandardBridge_FinalizeERC20Withdrawal_TestFail:test_finalizeERC20Withdrawal_r
L1StandardBridge_FinalizeETHWithdrawal_Test:test_finalizeETHWithdrawal() (gas: 58708)
L1StandardBridge_Getter_Test:test_getters_success() (gas: 31472)
L1StandardBridge_Initialize_Test:test_initialize_success() (gas: 22027)
L1StandardBridge_Receive_Test:test_receive_success() (gas: 514479)
L1StandardBridge_Receive_Test:test_receive_success() (gas: 514476)
L2CrossDomainMessenger_Test:testCannot_L2MessengerPause() (gas: 10860)
L2CrossDomainMessenger_Test:test_L1MessengerRelayMessageRevertsOnReentrancy() (gas: 167775)
L2CrossDomainMessenger_Test:test_L2MessengerMessageVersion() (gas: 8389)
......@@ -151,38 +151,38 @@ OptimismMintableTokenFactory_Test:test_createStandardL2TokenSameTwice() (gas: 21
OptimismMintableTokenFactory_Test:test_createStandardL2TokenShouldRevertIfRemoteIsZero() (gas: 9413)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10813)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15789)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_success() (gas: 16010)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_success() (gas: 16033)
OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_success() (gas: 180435)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 199749)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 202002)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 199750)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 202003)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 39656)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 197091)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 197813)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 177828)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 236176)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 237807)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_success() (gas: 229533)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 332148)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 193771)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 83520)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 50754)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_oninvalidWithdrawalProof_reverts() (gas: 136780)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_success() (gas: 277100)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 189161)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_success() (gas: 179346)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17253)
OptimismPortal_Test:test_OptimismPortalReceiveEth_success() (gas: 127483)
OptimismPortal_Test:test_depositTransaction_NoValueContract_success() (gas: 76684)
OptimismPortal_Test:test_depositTransaction_NoValueEOA_success() (gas: 76984)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 197092)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 197814)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 177829)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 236177)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 237785)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_success() (gas: 229511)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 332126)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 193772)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 83498)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 50732)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_oninvalidWithdrawalProof_reverts() (gas: 136758)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_success() (gas: 277056)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 189117)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_success() (gas: 179324)
OptimismPortal_Test:test_OptimismPortalConstructor() (gas: 17276)
OptimismPortal_Test:test_OptimismPortalReceiveEth_success() (gas: 127480)
OptimismPortal_Test:test_depositTransaction_NoValueContract_success() (gas: 76681)
OptimismPortal_Test:test_depositTransaction_NoValueEOA_success() (gas: 77153)
OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 14245)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_success() (gas: 76710)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_success() (gas: 77032)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation_success() (gas: 83712)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_success() (gas: 75875)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_success() (gas: 83414)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_success() (gas: 83942)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_success() (gas: 76707)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_success() (gas: 77029)
OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreation_success() (gas: 83709)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_success() (gas: 75872)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_success() (gas: 83411)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_success() (gas: 84111)
OptimismPortal_Test:test_isOutputFinalized_success() (gas: 119473)
OptimismPortal_Test:test_simple_isOutputFinalized_success() (gas: 24186)
OptimismPortal_Test:test_simple_isOutputFinalized_success() (gas: 24209)
Proxy_Test:test_clashingFunctionSignatures() (gas: 101347)
Proxy_Test:test_implementationKey() (gas: 20887)
Proxy_Test:test_implementationProxyCallIfNotAdmin() (gas: 29963)
......@@ -278,13 +278,13 @@ RLPWriter_Test:test_writeUint_smallint2() (gas: 7281)
RLPWriter_Test:test_writeUint_smallint3() (gas: 7301)
RLPWriter_Test:test_writeUint_smallint4() (gas: 7280)
RLPWriter_Test:test_writeUint_zero() (gas: 7749)
ResourceMetering_Test:test_initialResourceParams() (gas: 8964)
ResourceMetering_Test:test_initialResourceParams() (gas: 8987)
ResourceMetering_Test:test_updateNoGasDelta() (gas: 2008125)
ResourceMetering_Test:test_updateOneEmptyBlock() (gas: 18104)
ResourceMetering_Test:test_updateOneEmptyBlock() (gas: 18151)
ResourceMetering_Test:test_updateParamsNoChange() (gas: 13867)
ResourceMetering_Test:test_updateTenEmptyBlocks() (gas: 20548)
ResourceMetering_Test:test_updateTwoEmptyBlocks() (gas: 20594)
ResourceMetering_Test:test_useMaxSucceeds() (gas: 8017123)
ResourceMetering_Test:test_updateTenEmptyBlocks() (gas: 20899)
ResourceMetering_Test:test_updateTwoEmptyBlocks() (gas: 20945)
ResourceMetering_Test:test_useMaxSucceeds() (gas: 8017170)
ResourceMetering_Test:test_useMoreThanMaxReverts() (gas: 16045)
SafeCall_Test:test_safeCall(address,address,uint256,uint64,bytes) (runs: 256, μ: 43316, ~: 45640)
Semver_Test:test_behindProxy() (gas: 506748)
......
......@@ -3,9 +3,8 @@ pragma solidity 0.8.15;
import { Initializable } from "@openzeppelin/contracts/proxy/utils/Initializable.sol";
import { Math } from "@openzeppelin/contracts/utils/math/Math.sol";
import { SignedMath } from "@openzeppelin/contracts/utils/math/SignedMath.sol";
import { FixedPointMathLib } from "@rari-capital/solmate/src/utils/FixedPointMathLib.sol";
import { Burn } from "../libraries/Burn.sol";
import { Arithmetic } from "../libraries/Arithmetic.sol";
/**
* @custom:upgradeable
......@@ -49,6 +48,11 @@ abstract contract ResourceMetering is Initializable {
*/
int256 public constant MINIMUM_BASE_FEE = 10_000;
/**
* @notice Maximum base fee value, cannot go higher than this.
*/
int256 public constant MAXIMUM_BASE_FEE = int256(uint256(type(uint128).max));
/**
* @notice Initial base fee value.
*/
......@@ -89,12 +93,10 @@ abstract contract ResourceMetering is Initializable {
// Update base fee by adding the base fee delta and clamp the resulting value between
// min and max.
int256 newBaseFee = SignedMath.min(
SignedMath.max(
int256 newBaseFee = Arithmetic.clamp(
int256(uint256(params.prevBaseFee)) + baseFeeDelta,
int256(MINIMUM_BASE_FEE)
),
int256(uint256(type(uint128).max))
MINIMUM_BASE_FEE,
MAXIMUM_BASE_FEE
);
// If we skipped more than one block, we also need to account for every empty block.
......@@ -104,20 +106,14 @@ abstract contract ResourceMetering is Initializable {
// Update the base fee by repeatedly applying the exponent 1-(1/change_denominator)
// blockDiff - 1 times. Simulates multiple empty blocks. Clamp the resulting value
// between min and max.
newBaseFee = SignedMath.min(
SignedMath.max(
int256(
(newBaseFee *
(
FixedPointMathLib.powWad(
1e18 - (1e18 / BASE_FEE_MAX_CHANGE_DENOMINATOR),
int256((blockDiff - 1) * 1e18)
)
)) / 1e18
),
int256(MINIMUM_BASE_FEE)
newBaseFee = Arithmetic.clamp(
Arithmetic.cdexp(
newBaseFee,
BASE_FEE_MAX_CHANGE_DENOMINATOR,
int256(blockDiff - 1)
),
int256(uint256(type(uint128).max))
MINIMUM_BASE_FEE,
MAXIMUM_BASE_FEE
);
}
......
// SPDX-License-Identifier: MIT
pragma solidity 0.8.15;
import { SignedMath } from "@openzeppelin/contracts/utils/math/SignedMath.sol";
import { FixedPointMathLib } from "@rari-capital/solmate/src/utils/FixedPointMathLib.sol";
/**
* @title Arithmetic
* @notice Even more math than before.
*/
library Arithmetic {
/**
* @notice Clamps a value between a minimum and maximum.
*
* @param _value The value to clamp.
* @param _min The minimum value.
* @param _max The maximum value.
*
* @return The clamped value.
*/
function clamp(
int256 _value,
int256 _min,
int256 _max
) internal pure returns (int256) {
return SignedMath.min(SignedMath.max(_value, _min), _max);
}
/**
* @notice (c)oefficient (d)enominator (exp)onentiation function.
* Returns the result of: c * (1 - 1/d)^exp.
*
* @param _coefficient Coefficient of the function.
* @param _denominator Fractional denominator.
* @param _exponent Power function exponent.
*
* @return Result of c * (1 - 1/d)^exp.
*/
function cdexp(
int256 _coefficient,
int256 _denominator,
int256 _exponent
) internal pure returns (int256) {
return
(_coefficient *
(FixedPointMathLib.powWad(1e18 - (1e18 / _denominator), _exponent * 1e18))) / 1e18;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment