Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
N
nebula
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
exchain
nebula
Commits
eb4033c3
Commit
eb4033c3
authored
Aug 02, 2023
by
Mark Tyneway
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
contracts-bedrock: update optimism portal
parent
ac5923af
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
187 additions
and
59 deletions
+187
-59
optimismportal.go
op-bindings/bindings/optimismportal.go
+95
-2
optimismportal_more.go
op-bindings/bindings/optimismportal_more.go
+2
-2
.gas-snapshot
packages/contracts-bedrock/.gas-snapshot
+40
-40
OptimismPortal.sol
packages/contracts-bedrock/src/L1/OptimismPortal.sol
+47
-15
OptimismPortal.t.sol
packages/contracts-bedrock/test/OptimismPortal.t.sol
+3
-0
No files found.
op-bindings/bindings/optimismportal.go
View file @
eb4033c3
This source diff could not be displayed because it is too large. You can
view the blob
instead.
op-bindings/bindings/optimismportal_more.go
View file @
eb4033c3
...
@@ -9,11 +9,11 @@ import (
...
@@ -9,11 +9,11 @@ import (
"github.com/ethereum-optimism/optimism/op-bindings/solc"
"github.com/ethereum-optimism/optimism/op-bindings/solc"
)
)
const
OptimismPortalStorageLayoutJSON
=
"{
\"
storage
\"
:[{
\"
astId
\"
:1000,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
_initialized
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
0
\"
,
\"
type
\"
:
\"
t_uint8
\"
},{
\"
astId
\"
:1001,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
_initializing
\"
,
\"
offset
\"
:1,
\"
slot
\"
:
\"
0
\"
,
\"
type
\"
:
\"
t_bool
\"
},{
\"
astId
\"
:1002,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
params
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
1
\"
,
\"
type
\"
:
\"
t_struct(ResourceParams)1014_storage
\"
},{
\"
astId
\"
:1003,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
__gap
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
2
\"
,
\"
type
\"
:
\"
t_array(t_uint256)48_storage
\"
},{
\"
astId
\"
:1004,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
l2Sender
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
50
\"
,
\"
type
\"
:
\"
t_address
\"
},{
\"
astId
\"
:1005,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
finalizedWithdrawals
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
51
\"
,
\"
type
\"
:
\"
t_mapping(t_bytes32,t_bool)
\"
},{
\"
astId
\"
:1006,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
provenWithdrawals
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
52
\"
,
\"
type
\"
:
\"
t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1013_storage)
\"
},{
\"
astId
\"
:1007,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
paused
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
53
\"
,
\"
type
\"
:
\"
t_bool
\"
},{
\"
astId
\"
:1008,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
L2_ORACLE
\"
,
\"
offset
\"
:1,
\"
slot
\"
:
\"
53
\"
,
\"
type
\"
:
\"
t_contract(L2OutputOracle)1011
\"
},{
\"
astId
\"
:1009,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
SYSTEM_CONFIG
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
54
\"
,
\"
type
\"
:
\"
t_contract(SystemConfig)1012
\"
},{
\"
astId
\"
:1010,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
GUARDIAN
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
55
\"
,
\"
type
\"
:
\"
t_address
\"
}],
\"
types
\"
:{
\"
t_address
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
address
\"
,
\"
numberOfBytes
\"
:
\"
20
\"
},
\"
t_array(t_uint256)48_storage
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint256[48]
\"
,
\"
numberOfBytes
\"
:
\"
1536
\"
,
\"
base
\"
:
\"
t_uint256
\"
},
\"
t_bool
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
bool
\"
,
\"
numberOfBytes
\"
:
\"
1
\"
},
\"
t_bytes32
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
bytes32
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
},
\"
t_contract(L2OutputOracle)1011
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
contract L2OutputOracle
\"
,
\"
numberOfBytes
\"
:
\"
20
\"
},
\"
t_contract(SystemConfig)1012
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
contract SystemConfig
\"
,
\"
numberOfBytes
\"
:
\"
20
\"
},
\"
t_mapping(t_bytes32,t_bool)
\"
:{
\"
encoding
\"
:
\"
mapping
\"
,
\"
label
\"
:
\"
mapping(bytes32 =
\u003e
bool)
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
,
\"
key
\"
:
\"
t_bytes32
\"
,
\"
value
\"
:
\"
t_bool
\"
},
\"
t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1013_storage)
\"
:{
\"
encoding
\"
:
\"
mapping
\"
,
\"
label
\"
:
\"
mapping(bytes32 =
\u003e
struct OptimismPortal.ProvenWithdrawal)
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
,
\"
key
\"
:
\"
t_bytes32
\"
,
\"
value
\"
:
\"
t_struct(ProvenWithdrawal)1013_storage
\"
},
\"
t_struct(ProvenWithdrawal)1013_storage
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
struct OptimismPortal.ProvenWithdrawal
\"
,
\"
numberOfBytes
\"
:
\"
64
\"
},
\"
t_struct(ResourceParams)1014_storage
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
struct ResourceMetering.ResourceParams
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
},
\"
t_uint128
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint128
\"
,
\"
numberOfBytes
\"
:
\"
16
\"
},
\"
t_uint256
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint256
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
},
\"
t_uint64
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint64
\"
,
\"
numberOfBytes
\"
:
\"
8
\"
},
\"
t_uint8
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint8
\"
,
\"
numberOfBytes
\"
:
\"
1
\"
}}}"
const
OptimismPortalStorageLayoutJSON
=
"{
\"
storage
\"
:[{
\"
astId
\"
:1000,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
_initialized
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
0
\"
,
\"
type
\"
:
\"
t_uint8
\"
},{
\"
astId
\"
:1001,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
_initializing
\"
,
\"
offset
\"
:1,
\"
slot
\"
:
\"
0
\"
,
\"
type
\"
:
\"
t_bool
\"
},{
\"
astId
\"
:1002,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
params
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
1
\"
,
\"
type
\"
:
\"
t_struct(ResourceParams)1014_storage
\"
},{
\"
astId
\"
:1003,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
__gap
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
2
\"
,
\"
type
\"
:
\"
t_array(t_uint256)48_storage
\"
},{
\"
astId
\"
:1004,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
l2Sender
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
50
\"
,
\"
type
\"
:
\"
t_address
\"
},{
\"
astId
\"
:1005,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
finalizedWithdrawals
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
51
\"
,
\"
type
\"
:
\"
t_mapping(t_bytes32,t_bool)
\"
},{
\"
astId
\"
:1006,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
provenWithdrawals
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
52
\"
,
\"
type
\"
:
\"
t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1013_storage)
\"
},{
\"
astId
\"
:1007,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
paused
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
53
\"
,
\"
type
\"
:
\"
t_bool
\"
},{
\"
astId
\"
:1008,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
_L2_ORACLE
\"
,
\"
offset
\"
:1,
\"
slot
\"
:
\"
53
\"
,
\"
type
\"
:
\"
t_contract(L2OutputOracle)1011
\"
},{
\"
astId
\"
:1009,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
_SYSTEM_CONFIG
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
54
\"
,
\"
type
\"
:
\"
t_contract(SystemConfig)1012
\"
},{
\"
astId
\"
:1010,
\"
contract
\"
:
\"
src/L1/OptimismPortal.sol:OptimismPortal
\"
,
\"
label
\"
:
\"
_
GUARDIAN
\"
,
\"
offset
\"
:0,
\"
slot
\"
:
\"
55
\"
,
\"
type
\"
:
\"
t_address
\"
}],
\"
types
\"
:{
\"
t_address
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
address
\"
,
\"
numberOfBytes
\"
:
\"
20
\"
},
\"
t_array(t_uint256)48_storage
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint256[48]
\"
,
\"
numberOfBytes
\"
:
\"
1536
\"
,
\"
base
\"
:
\"
t_uint256
\"
},
\"
t_bool
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
bool
\"
,
\"
numberOfBytes
\"
:
\"
1
\"
},
\"
t_bytes32
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
bytes32
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
},
\"
t_contract(L2OutputOracle)1011
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
contract L2OutputOracle
\"
,
\"
numberOfBytes
\"
:
\"
20
\"
},
\"
t_contract(SystemConfig)1012
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
contract SystemConfig
\"
,
\"
numberOfBytes
\"
:
\"
20
\"
},
\"
t_mapping(t_bytes32,t_bool)
\"
:{
\"
encoding
\"
:
\"
mapping
\"
,
\"
label
\"
:
\"
mapping(bytes32 =
\u003e
bool)
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
,
\"
key
\"
:
\"
t_bytes32
\"
,
\"
value
\"
:
\"
t_bool
\"
},
\"
t_mapping(t_bytes32,t_struct(ProvenWithdrawal)1013_storage)
\"
:{
\"
encoding
\"
:
\"
mapping
\"
,
\"
label
\"
:
\"
mapping(bytes32 =
\u003e
struct OptimismPortal.ProvenWithdrawal)
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
,
\"
key
\"
:
\"
t_bytes32
\"
,
\"
value
\"
:
\"
t_struct(ProvenWithdrawal)1013_storage
\"
},
\"
t_struct(ProvenWithdrawal)1013_storage
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
struct OptimismPortal.ProvenWithdrawal
\"
,
\"
numberOfBytes
\"
:
\"
64
\"
},
\"
t_struct(ResourceParams)1014_storage
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
struct ResourceMetering.ResourceParams
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
},
\"
t_uint128
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint128
\"
,
\"
numberOfBytes
\"
:
\"
16
\"
},
\"
t_uint256
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint256
\"
,
\"
numberOfBytes
\"
:
\"
32
\"
},
\"
t_uint64
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint64
\"
,
\"
numberOfBytes
\"
:
\"
8
\"
},
\"
t_uint8
\"
:{
\"
encoding
\"
:
\"
inplace
\"
,
\"
label
\"
:
\"
uint8
\"
,
\"
numberOfBytes
\"
:
\"
1
\"
}}}"
var
OptimismPortalStorageLayout
=
new
(
solc
.
StorageLayout
)
var
OptimismPortalStorageLayout
=
new
(
solc
.
StorageLayout
)
var
OptimismPortalDeployedBin
=
"0x6080604052600436106101
2c5760003560e01c80638c3152e9116100a5578063cff0ab9611610074578063e9e05c4211610059578063e9e05c421461047a578063f04987501461048d578063fecf9734146104ba57600080fd5b8063cff0ab961461034d578063e965084c146103ee57600080fd5b80638c3152e9146102975780639bf62d82146102b7578063a14238e7146102e4578063a35d99df1461031457600080fd5b80635c975abb116100fc578063724c184c116100e1578063724c184c146102555780638456cb59146102825780638b4c40b01461015157600080fd5b80635c975abb1461020b5780636dbffb781461023557600080fd5b80621c2ff6146101585780633f4ba83a146101b45780634870496f146101c957806354fd4d50146101e957600080fd5b36610153576101513334620186a06000604051806020016040528060008152506104da565b005b600080fd5b34801561016457600080fd5b5060355461018a90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101c057600080fd5b50610151610775565b3480156101d557600080fd5b506101516101e4366004614b33565b61087a565b3480156101f557600080fd5b506101fe610eaf565b6040516101ab9190614c89565b34801561021757600080fd5b506035546102259060ff1681565b60405190151581526020016101ab565b34801561024157600080fd5b50610225610250366004614c9c565b610f52565b34801561026157600080fd5b5060375461018a9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561028e57600080fd5b50610151611011565b3480156102a357600080fd5b506101516102b2366004614cb5565b611113565b3480156102c357600080fd5b5060325461018a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156102f057600080fd5b506102256102ff366004614c9c565b60336020526000908152604090205460ff1681565b34801561032057600080fd5b5061033461032f366004614d07565b6119d7565b60405167ffffffffffffffff90911681526020016101ab565b34801561035957600080fd5b506001546103b5906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101ab565b3480156103fa57600080fd5b5061044c610409366004614c9c565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101ab565b610151610488366004614d32565b6104da565b34801561049957600080fd5b5060365461018a9073ffffffffffffffffffffffffffffffffffffffff1681565b3480156104c657600080fd5b506101516104d5366004614dad565b6119f0565b8260005a905083156105915773ffffffffffffffffffffffffffffffffffffffff87161561059157604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b61059b83516119d7565b67ffffffffffffffff168567ffffffffffffffff16101561063e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c00000000000000000000000000000000000000000000000000000000006064820152608401610588565b6201d4c0835111156106ac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c6172676500006044820152606401610588565b333281146106cd575033731111000000000000000000000000000000001111015b600034888888886040516020016106e8959493929190614e07565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c32846040516107589190614c89565b60405180910390a4505061076c8282611bfe565b50505050505050565b60375473ffffffffffffffffffffffffffffffffffffffff16331461081c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e706175736500000000000000000000000000000000000000000000006064820152608401610588565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff16156108e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610588565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e7472616374006064820152608401610588565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3f9190614e8c565b519050610a59610a5436869003860186614ef1565b611f2b565b8114610ae7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f6600000000000000000000000000000000000000000000006064820152608401610588565b6000610af287611f87565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c0c5750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610be4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c089190614e8c565b5114155b610c98576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e0000000000000000006064820152608401610588565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d619101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d57888a614f57565b8a60400135611fb7565b610ded576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f6600000000000000000000000000006064820152608401610588565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610eda7f0000000000000000000000000000000000000000000000000000000000000000611fdb565b610f037f0000000000000000000000000000000000000000000000000000000000000000611fdb565b610f2c7f0000000000000000000000000000000000000000000000000000000000000000611fdb565b604051602001610f3e93929190614fdb565b604051602081830303815290604052905090565b6035546040517fa25ae5570000000000000000000000000000000000000000000000000000000081526004810183905260009161100b9161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff09190614e8c565b602001516fffffffffffffffffffffffffffffffff16612118565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff1633146110b8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e207061757365000000000000000000000000000000000000000000000000006064820152608401610588565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602001610870565b60355460ff1615611180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a20706175736564000000000000000000006044820152606401610588565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611229576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e006064820152608401610588565b600061123482611f87565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361131f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e2079657400000000000000000000000000006064820152608401610588565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa15801561138c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b09190615051565b81602001516fffffffffffffffffffffffffffffffff16101561147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a401610588565b61149a81602001516fffffffffffffffffffffffffffffffff16612118565b61154c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a401610588565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fc9190614e8c565b82518151919250146116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a401610588565b6116d581602001516fffffffffffffffffffffffffffffffff16612118565b611787576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a401610588565b60008381526033602052604090205460ff1615611826576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a656400000000000000000000006064820152608401610588565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516118c8939291906121bd565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061192d90841515815260200190565b60405180910390a2801580156119435750326001145b156119d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f64000000000000000000000000000000000000000000000000000000000000006064820152608401610588565b5050505050565b60006119e4826010615099565b61100b906152086150c9565b600054600290610100900460ff16158015611a12575060005460ff8083169116105b611a9e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610588565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100908117909155603280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811661dead17909155603580546036805473ffffffffffffffffffffffffffffffffffffffff89811691861691909117909155603780548a83169516949094179093558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217179055611b9961221b565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600154600090611c34907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436150f5565b90506000611c406122fe565b90506000816020015160ff16826000015163ffffffff16611c61919061513b565b90508215611d9857600154600090611c98908390700100000000000000000000000000000000900467ffffffffffffffff166151a3565b90506000836040015160ff1683611caf9190615217565b600154611ccf9084906fffffffffffffffffffffffffffffffff16615217565b611cd9919061513b565b600154909150600090611d2a90611d039084906fffffffffffffffffffffffffffffffff166152d3565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166123c4565b90506001861115611d5957611d56611d0382876040015160ff1660018a611d5191906150f5565b6123e3565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611dcb908490700100000000000000000000000000000000900467ffffffffffffffff166150c9565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611eae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d697400006064820152608401610588565b600154600090611eda906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8816615347565b90506000611eec48633b9aca00612438565b611ef69083615384565b905060005a611f0590886150f5565b905080821115611f2157611f21611f1c82846150f5565b61244f565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611f6a949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611f6a979096959101615398565b600080611fc38661247d565b9050611fd1818686866124af565b9695505050505050565b60608160000361201e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b81156120485780612032816153ef565b91506120419050600a83615384565b9150612022565b60008167ffffffffffffffff81111561206357612063614953565b6040519080825280601f01601f19166020018201604052801561208d576020820181803683370190505b5090505b8415612110576120a26001836150f5565b91506120af600a86615427565b6120ba90603061543b565b60f81b8183815181106120cf576120cf615453565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612109600a86615384565b9450612091565b949350505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa158015612187573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ab9190615051565b6121b5908361543b565b421192915050565b60008060006121cd8660006124df565b905080612203576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166122b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610588565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa15801561239b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bf91906154a7565b905090565b60006123d96123d385856124fd565b8361250d565b90505b9392505050565b6000670de0b6b3a76400006124246123fb858361513b565b61240d90670de0b6b3a76400006151a3565b61241f85670de0b6b3a7640000615217565b61251c565b61242e9086615217565b6123d9919061513b565b60008183101561244857816123dc565b5090919050565b6000805a90505b825a61246290836150f5565b101561247857612471826153ef565b9150612456565b505050565b6060818051906020012060405160200161249991815260200190565b6040516020818303038152906040529050919050565b60006124d6846124c087868661254d565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561244857816123dc565b600081831261244857816123dc565b60006123dc670de0b6b3a76400008361253486612fcb565b61253e9190615217565b612548919061513b565b61320f565b606060008451116125ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b657900000000000000000000006044820152606401610588565b60006125c58461344e565b905060006125d28661353a565b90506000846040516020016125e991815260200190565b60405160208183030381529060405290506000805b8451811015612f4257600085828151811061261b5761261b615453565b6020026020010151905084518311156126b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e6774680000000000000000000000000000000000006064820152608401610588565b8260000361276f5780518051602091820120604051612704926126de92910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61276a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f7420686173680000006044820152606401610588565b6128c6565b8051516020116128255780518051602091820120604051612799926126de92910190815260200190565b61276a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c2068617368000000000000000000000000000000000000000000000000006064820152608401610588565b8051845160208087019190912082519190920120146128c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f65206861736800000000000000000000000000000000000000000000000000006064820152608401610588565b6128d26010600161543b565b81602001515103612aae5784518303612a465761290c81602001516010815181106128ff576128ff615453565b602002602001015161359d565b9650600087511161299f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e63682900000000006064820152608401610588565b600186516129ad91906150f5565b8214612a3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e6368290000000000006064820152608401610588565b5050505050506123dc565b6000858481518110612a5a57612a5a615453565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612a8557612a85615453565b60200260200101519050612a98816136fd565b9550612aa560018661543b565b94505050612f2f565b600281602001515103612ea7576000612ac682613722565b9050600081600081518110612add57612add615453565b016020015160f81c90506000612af4600283615546565b612aff906002615568565b90506000612b10848360ff16613746565b90506000612b1e8a89613746565b90506000612b2c838361377c565b905080835114612bbe576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b65790000000000006064820152608401610588565b60ff851660021480612bd3575060ff85166003145b15612dc25780825114612c68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e6465720000006064820152608401610588565b612c8287602001516001815181106128ff576128ff615453565b9c5060008d5111612d15576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c65616629000000000000006064820152608401610588565b60018c51612d2391906150f5565b8814612db1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c6561662900000000000000006064820152608401610588565b5050505050505050505050506123dc565b60ff85161580612dd5575060ff85166001145b15612e1457612e018760200151600181518110612df457612df4615453565b60200260200101516136fd565b9950612e0d818a61543b565b9850612e9c565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e2070726566697800000000000000000000000000006064820152608401610588565b505050505050612f2f565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f64650000000000000000000000000000000000000000000000006064820152608401610588565b5080612f3a816153ef565b9150506125fe565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e74730000000000000000000000000000000000000000000000000000006064820152608401610588565b6000808213613036576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610588565b6000606061304384613830565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361324057506000919050565b680755bf798b4a1bf1e582126132b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f5700000000000000000000000000000000000000006044820152606401610588565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff81111561346c5761346c614953565b6040519080825280602002602001820160405280156134b157816020015b604080518082019091526060808252602082015281526020019060019003908161348a5790505b50915060005b818110156135335760405180604001604052808583815181106134dc576134dc615453565b6020026020010151815260200161350b8684815181106134fe576134fe615453565b6020026020010151613906565b81525083828151811061352057613520615453565b60209081029190910101526001016134b7565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b83811015613592578060011b82018184015160001a8060041c8253600f811660018301535050600101613564565b509295945050505050565b606060008060006135ad85613919565b9194509250905060008160018111156135c8576135c861558b565b14613655576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d000000000000006064820152608401610588565b61365f828461543b565b8551146136ee576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e6465720000000000000000000000006064820152608401610588565b6124d685602001518484614386565b60606020826000015110613719576137148261359d565b61100b565b61100b8261441a565b606061100b61374183602001516000815181106128ff576128ff615453565b61353a565b606082518210613765575060408051602081019091526000815261100b565b6123dc838384865161377791906150f5565b614430565b600080825184511061378f578251613792565b83515b90505b808210801561381957508282815181106137b1576137b1615453565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106137f0576137f0615453565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561382957816001019150613795565b5092915050565b600080821161389b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e454400000000000000000000000000000000000000000000006044820152606401610588565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061100b61391483614608565b6146f1565b6000806000808460000151116139d7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610588565b6020840151805160001a607f81116139fc57600060016000945094509450505061437f565b60b78111613c0a576000613a116080836150f5565b905080876000015111613acc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a401610588565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613b4557507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613bf7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a401610588565b506001955093506000925061437f915050565b60bf8111613f58576000613c1f60b7836150f5565b905080876000015111613cda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a401610588565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613db8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a401610588565b600184015160088302610100031c60378111613e7c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a401610588565b613e86818461543b565b895111613f3b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a401610588565b613f4683600161543b565b975095506000945061437f9350505050565b60f78111614039576000613f6d60c0836150f5565b905080876000015111614028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a401610588565b60019550935084925061437f915050565b600061404660f7836150f5565b905080876000015111614101576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a401610588565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036141df576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a401610588565b600184015160088302610100031c603781116142a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a401610588565b6142ad818461543b565b895111614362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a401610588565b61436d83600161543b565b975095506001945061437f9350505050565b9193909250565b60608167ffffffffffffffff8111156143a1576143a1614953565b6040519080825280601f01601f1916602001820160405280156143cb576020820181803683370190505b50905081156123dc5760006143e0848661543b565b90506020820160005b848110156144015782810151828201526020016143e9565b84811115614410576000858301525b5050509392505050565b606061100b826020015160008460000151614386565b60608182601f01101561449f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610588565b82828401101561450b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f770000000000000000000000000000000000006044820152606401610588565b81830184511015614578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e64730000000000000000000000000000006044820152606401610588565b60608215801561459757604051915060008252602082016040526145ff565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156145d05780518352602092830192016145b8565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116146d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a401610588565b50604080518082019091528151815260209182019181019190915290565b6060600080600061470185613919565b91945092509050600181600181111561471c5761471c61558b565b146147a9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d00000000000000006064820152608401610588565b84516147b5838561543b565b14614842576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e64657200000000000000000000000000006064820152608401610588565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816148595790505093506000835b8651811015614947576000806148cc6040518060400160405280858c600001516148b091906150f5565b8152602001858c602001516148c5919061543b565b9052613919565b5091509150604051806040016040528083836148e8919061543b565b8152602001848b602001516148fd919061543b565b81525088858151811061491257614912615453565b602090810291909101015261492860018561543b565b9350614934818361543b565b61493e908461543b565b92505050614886565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156149c9576149c9614953565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff811681146149f357600080fd5b50565b600082601f830112614a0757600080fd5b813567ffffffffffffffff811115614a2157614a21614953565b614a5260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601614982565b818152846020838601011115614a6757600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614a9657600080fd5b60405160c0810167ffffffffffffffff8282108183111715614aba57614aba614953565b816040528293508435835260208501359150614ad5826149d1565b81602084015260408501359150614aeb826149d1565b816040840152606085013560608401526080850135608084015260a0850135915080821115614b1957600080fd5b50614b26858286016149f6565b60a0830152505092915050565b600080600080600085870360e0811215614b4c57600080fd5b863567ffffffffffffffff80821115614b6457600080fd5b614b708a838b01614a84565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614ba957600080fd5b60408901955060c0890135925080831115614bc357600080fd5b828901925089601f840112614bd757600080fd5b8235915080821115614be857600080fd5b508860208260051b8401011115614bfe57600080fd5b959894975092955050506020019190565b60005b83811015614c2a578181015183820152602001614c12565b83811115614c39576000848401525b50505050565b60008151808452614c57816020860160208601614c0f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006123dc6020830184614c3f565b600060208284031215614cae57600080fd5b5035919050565b600060208284031215614cc757600080fd5b813567ffffffffffffffff811115614cde57600080fd5b61211084828501614a84565b803567ffffffffffffffff81168114614d0257600080fd5b919050565b600060208284031215614d1957600080fd5b6123dc82614cea565b80358015158114614d0257600080fd5b600080600080600060a08688031215614d4a57600080fd5b8535614d55816149d1565b945060208601359350614d6a60408701614cea565b9250614d7860608701614d22565b9150608086013567ffffffffffffffff811115614d9457600080fd5b614da0888289016149f6565b9150509295509295909350565b60008060008060808587031215614dc357600080fd5b8435614dce816149d1565b93506020850135614dde816149d1565b92506040850135614dee816149d1565b9150614dfc60608601614d22565b905092959194509250565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614e5b816049850160208701614c0f565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614d0257600080fd5b600060608284031215614e9e57600080fd5b6040516060810181811067ffffffffffffffff82111715614ec157614ec1614953565b60405282518152614ed460208401614e6c565b6020820152614ee560408401614e6c565b60408201529392505050565b600060808284031215614f0357600080fd5b6040516080810181811067ffffffffffffffff82111715614f2657614f26614953565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614f7257614f72614953565b8360051b6020614f83818301614982565b868152918501918181019036841115614f9b57600080fd5b865b84811015614fcf57803586811115614fb55760008081fd5b614fc136828b016149f6565b845250918301918301614f9d565b50979650505050505050565b60008451614fed818460208901614c0f565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615029816001850160208a01614c0f565b60019201918201528351615044816002840160208801614c0f565b0160020195945050505050565b60006020828403121561506357600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156150c0576150c061506a565b02949350505050565b600067ffffffffffffffff8083168185168083038211156150ec576150ec61506a565b01949350505050565b6000828210156151075761510761506a565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261514a5761514a61510c565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561519e5761519e61506a565b500590565b6000808312837f8000000000000000000000000000000000000000000000000000000000000000018312811516156151dd576151dd61506a565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0183138116156152115761521161506a565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6000841360008413858304851182821616156152585761525861506a565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156152935761529361506a565b600087129250878205871284841616156152af576152af61506a565b878505871281841616156152c5576152c561506a565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0384138115161561530d5761530d61506a565b827f80000000000000000000000000000000000000000000000000000000000000000384128116156153415761534161506a565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561537f5761537f61506a565b500290565b6000826153935761539361510c565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a08301526153e360c0830184614c3f565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036154205761542061506a565b5060010190565b6000826154365761543661510c565b500690565b6000821982111561544e5761544e61506a565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805163ffffffff81168114614d0257600080fd5b805160ff81168114614d0257600080fd5b600060c082840312156154b957600080fd5b60405160c0810181811067ffffffffffffffff821117156154dc576154dc614953565b6040526154e883615482565b81526154f660208401615496565b602082015261550760408401615496565b604082015261551860608401615482565b606082015261552960808401615482565b608082015261553a60a08401614e6c565b60a08201529392505050565b600060ff8316806155595761555961510c565b8060ff84160691505092915050565b600060ff821660ff8416808210156155825761558261506a
565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"
var
OptimismPortalDeployedBin
=
"0x6080604052600436106101
6d5760003560e01c80638b4c40b0116100cb578063a35d99df1161007f578063e9e05c4211610059578063e9e05c42146104de578063f0498750146101ef578063fecf9734146104f157600080fd5b8063a35d99df14610378578063cff0ab96146103b1578063e965084c1461045257600080fd5b80639b5f694a116100b05780639b5f694a146101995780639bf62d821461031b578063a14238e71461034857600080fd5b80638b4c40b0146101925780638c3152e9146102fb57600080fd5b806354fd4d50116101225780636dbffb78116101075780636dbffb78146102c6578063724c184c1461022f5780638456cb59146102e657600080fd5b806354fd4d501461027a5780635c975abb1461029c57600080fd5b80633f4ba83a116101535780633f4ba83a1461021a578063452a93201461022f5780634870496f1461025a57600080fd5b80621c2ff61461019957806333d7e2bd146101ef57600080fd5b36610194576101923334620186a0600060405180602001604052806000815250610511565b005b600080fd5b3480156101a557600080fd5b50603554610100900473ffffffffffffffffffffffffffffffffffffffff165b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101fb57600080fd5b5060365473ffffffffffffffffffffffffffffffffffffffff166101c5565b34801561022657600080fd5b506101926107ac565b34801561023b57600080fd5b5060375473ffffffffffffffffffffffffffffffffffffffff166101c5565b34801561026657600080fd5b50610192610275366004614b6a565b6108b1565b34801561028657600080fd5b5061028f610ee6565b6040516101e69190614cc0565b3480156102a857600080fd5b506035546102b69060ff1681565b60405190151581526020016101e6565b3480156102d257600080fd5b506102b66102e1366004614cd3565b610f89565b3480156102f257600080fd5b50610192611048565b34801561030757600080fd5b50610192610316366004614cec565b61114a565b34801561032757600080fd5b506032546101c59073ffffffffffffffffffffffffffffffffffffffff1681565b34801561035457600080fd5b506102b6610363366004614cd3565b60336020526000908152604090205460ff1681565b34801561038457600080fd5b50610398610393366004614d3e565b611a0e565b60405167ffffffffffffffff90911681526020016101e6565b3480156103bd57600080fd5b50600154610419906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e6565b34801561045e57600080fd5b506104b061046d366004614cd3565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e6565b6101926104ec366004614d69565b610511565b3480156104fd57600080fd5b5061019261050c366004614de4565b611a27565b8260005a905083156105c85773ffffffffffffffffffffffffffffffffffffffff8716156105c857604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b6105d28351611a0e565b67ffffffffffffffff168567ffffffffffffffff161015610675576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f4f7074696d69736d506f7274616c3a20676173206c696d697420746f6f20736d60448201527f616c6c000000000000000000000000000000000000000000000000000000000060648201526084016105bf565b6201d4c0835111156106e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f4f7074696d69736d506f7274616c3a206461746120746f6f206c61726765000060448201526064016105bf565b33328114610704575033731111000000000000000000000000000000001111015b6000348888888860405160200161071f959493929190614e3e565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161078f9190614cc0565b60405180910390a450506107a38282611c35565b50505050505050565b60375473ffffffffffffffffffffffffffffffffffffffff163314610853576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e20756e7061757365000000000000000000000000000000000000000000000060648201526084016105bf565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa906020015b60405180910390a1565b60355460ff161561091e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016105bf565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff16036109dd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105bf565b6035546040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101869052600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610a52573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a769190614ec3565b519050610a90610a8b36869003860186614f28565b611f62565b8114610b1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105bf565b6000610b2987611fbe565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c435750805160355460408084015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff909116600482015261010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f9190614ec3565b5114155b610ccf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105bf565b60408051602081018490526000918101829052606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250610d989101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f0100000000000000000000000000000000000000000000000000000000000000602083015290610d8e888a614f8e565b8a60400135611fee565b610e24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105bf565b604080516060810182528581526fffffffffffffffffffffffffffffffff42811660208084019182528c831684860190815260008981526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558b830151908c0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169186917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a4505050505050505050565b6060610f117f0000000000000000000000000000000000000000000000000000000000000000612012565b610f3a7f0000000000000000000000000000000000000000000000000000000000000000612012565b610f637f0000000000000000000000000000000000000000000000000000000000000000612012565b604051602001610f7593929190615012565b604051602081830303815290604052905090565b6035546040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018390526000916110429161010090910473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015611003573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110279190614ec3565b602001516fffffffffffffffffffffffffffffffff1661214f565b92915050565b60375473ffffffffffffffffffffffffffffffffffffffff1633146110ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4f7074696d69736d506f7274616c3a206f6e6c7920677561726469616e20636160448201527f6e2070617573650000000000000000000000000000000000000000000000000060648201526084016105bf565b603580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258906020016108a7565b60355460ff16156111b7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f7074696d69736d506f7274616c3a207061757365640000000000000000000060448201526064016105bf565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611260576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105bf565b600061126b82611fbe565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff80821694830185905270010000000000000000000000000000000090910416918101919091529293509003611356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e20796574000000000000000000000000000060648201526084016105bf565b603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e79190615088565b81602001516fffffffffffffffffffffffffffffffff1610156114b2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105bf565b6114d181602001516fffffffffffffffffffffffffffffffff1661214f565b611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105bf565b60355460408281015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff9091166004820152600091610100900473ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa15801561160f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116339190614ec3565b82518151919250146116ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105bf565b61170c81602001516fffffffffffffffffffffffffffffffff1661214f565b6117be576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105bf565b60008381526033602052604090205460ff161561185d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105bf565b600083815260336020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055908601516032805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790558501516080860151606087015160a08801516118ff939291906121f4565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b9061196490841515815260200190565b60405180910390a28015801561197a5750326001145b15611a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016105bf565b5050505050565b6000611a1b8260106150d0565b61104290615208615100565b600054600290610100900460ff16158015611a49575060005460ff8083169116105b611ad5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105bf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001660ff831617610100908117909155603280547fffffffffffffffffffffffff000000000000000000000000000000000000000090811661dead17909155603580546036805473ffffffffffffffffffffffffffffffffffffffff89811691861691909117909155603780548a83169516949094179093558515159289169093027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00167fffffffffffffffffffffff00000000000000000000000000000000000000000090931692909217179055611bd0612252565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16905560405160ff821681527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b600154600090611c6b907801000000000000000000000000000000000000000000000000900467ffffffffffffffff164361512c565b90506000611c77612335565b90506000816020015160ff16826000015163ffffffff16611c989190615172565b90508215611dcf57600154600090611ccf908390700100000000000000000000000000000000900467ffffffffffffffff166151da565b90506000836040015160ff1683611ce6919061524e565b600154611d069084906fffffffffffffffffffffffffffffffff1661524e565b611d109190615172565b600154909150600090611d6190611d3a9084906fffffffffffffffffffffffffffffffff1661530a565b866060015163ffffffff168760a001516fffffffffffffffffffffffffffffffff166123fb565b90506001861115611d9057611d8d611d3a82876040015160ff1660018a611d88919061512c565b61241a565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054869190601090611e02908490700100000000000000000000000000000000900467ffffffffffffffff16615100565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550816000015163ffffffff16600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315611ee5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105bf565b600154600090611f11906fffffffffffffffffffffffffffffffff1667ffffffffffffffff881661537e565b90506000611f2348633b9aca0061246f565b611f2d90836153bb565b905060005a611f3c908861512c565b905080821115611f5857611f58611f53828461512c565b612486565b5050505050505050565b60008160000151826020015183604001518460600151604051602001611fa1949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611fa19790969591016153cf565b600080611ffa866124b4565b9050612008818686866124e6565b9695505050505050565b60608160000361205557505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b811561207f578061206981615426565b91506120789050600a836153bb565b9150612059565b60008167ffffffffffffffff81111561209a5761209a61498a565b6040519080825280601f01601f1916602001820160405280156120c4576020820181803683370190505b5090505b8415612147576120d960018361512c565b91506120e6600a8661545e565b6120f1906030615472565b60f81b8183815181106121065761210661548a565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350612140600a866153bb565b94506120c8565b949350505050565b6000603560019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f4daa2916040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121e29190615088565b6121ec9083615472565b421192915050565b6000806000612204866000612516565b90508061223a576308c379a06000526020805278185361666543616c6c3a204e6f7420656e6f756768206761736058526064601cfd5b600080855160208701888b5af1979650505050505050565b600054610100900460ff166122e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105bf565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b6040805160c08082018352600080835260208301819052828401819052606083018190526080830181905260a083015260365483517fcc731b020000000000000000000000000000000000000000000000000000000081529351929373ffffffffffffffffffffffffffffffffffffffff9091169263cc731b02926004808401939192918290030181865afa1580156123d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123f691906154de565b905090565b600061241061240a8585612534565b83612544565b90505b9392505050565b6000670de0b6b3a764000061245b6124328583615172565b61244490670de0b6b3a76400006151da565b61245685670de0b6b3a764000061524e565b612553565b612465908661524e565b6124109190615172565b60008183101561247f5781612413565b5090919050565b6000805a90505b825a612499908361512c565b10156124af576124a882615426565b915061248d565b505050565b606081805190602001206040516020016124d091815260200190565b6040516020818303038152906040529050919050565b600061250d846124f7878686612584565b8051602091820120825192909101919091201490565b95945050505050565b600080603f83619c4001026040850201603f5a021015949350505050565b60008183121561247f5781612413565b600081831261247f5781612413565b6000612413670de0b6b3a76400008361256b86613002565b612575919061524e565b61257f9190615172565b613246565b606060008451116125f1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016105bf565b60006125fc84613485565b9050600061260986613571565b905060008460405160200161262091815260200190565b60405160208183030381529060405290506000805b8451811015612f795760008582815181106126525761265261548a565b6020026020010151905084518311156126ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016105bf565b826000036127a6578051805160209182012060405161273b9261271592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b6127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105bf565b6128fd565b80515160201161285c57805180516020918201206040516127d09261271592910190815260200190565b6127a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105bf565b8051845160208087019190912082519190920120146128fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105bf565b61290960106001615472565b81602001515103612ae55784518303612a7d5761294381602001516010815181106129365761293661548a565b60200260200101516135d4565b965060008751116129d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016105bf565b600186516129e4919061512c565b8214612a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016105bf565b505050505050612413565b6000858481518110612a9157612a9161548a565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612abc57612abc61548a565b60200260200101519050612acf81613734565b9550612adc600186615472565b94505050612f66565b600281602001515103612ede576000612afd82613759565b9050600081600081518110612b1457612b1461548a565b016020015160f81c90506000612b2b60028361557d565b612b3690600261559f565b90506000612b47848360ff1661377d565b90506000612b558a8961377d565b90506000612b6383836137b3565b905080835114612bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016105bf565b60ff851660021480612c0a575060ff85166003145b15612df95780825114612c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016105bf565b612cb987602001516001815181106129365761293661548a565b9c5060008d5111612d4c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016105bf565b60018c51612d5a919061512c565b8814612de8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016105bf565b505050505050505050505050612413565b60ff85161580612e0c575060ff85166001145b15612e4b57612e388760200151600181518110612e2b57612e2b61548a565b6020026020010151613734565b9950612e44818a615472565b9850612ed3565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105bf565b505050505050612f66565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105bf565b5080612f7181615426565b915050612635565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016105bf565b600080821361306d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105bf565b6000606061307a84613867565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361327757506000919050565b680755bf798b4a1bf1e582126132e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105bf565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b80516060908067ffffffffffffffff8111156134a3576134a361498a565b6040519080825280602002602001820160405280156134e857816020015b60408051808201909152606080825260208201528152602001906001900390816134c15790505b50915060005b8181101561356a5760405180604001604052808583815181106135135761351361548a565b602002602001015181526020016135428684815181106135355761353561548a565b602002602001015161393d565b8152508382815181106135575761355761548a565b60209081029190910101526001016134ee565b5050919050565b606080604051905082518060011b603f8101601f1916830160405280835250602084016020830160005b838110156135c9578060011b82018184015160001a8060041c8253600f81166001830153505060010161359b565b509295945050505050565b606060008060006135e485613950565b9194509250905060008160018111156135ff576135ff6155c2565b1461368c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105bf565b6136968284615472565b855114613725576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105bf565b61250d856020015184846143bd565b606060208260000151106137505761374b826135d4565b611042565b61104282614451565b606061104261377883602001516000815181106129365761293661548a565b613571565b60608251821061379c5750604080516020810190915260008152611042565b61241383838486516137ae919061512c565b614467565b60008082518451106137c65782516137c9565b83515b90505b808210801561385057508282815181106137e8576137e861548a565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168483815181106138275761382761548a565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b15613860578160010191506137cc565b5092915050565b60008082116138d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105bf565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606061104261394b8361463f565b614728565b600080600080846000015111613a0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105bf565b6020840151805160001a607f8111613a335760006001600094509450945050506143b6565b60b78111613c41576000613a4860808361512c565b905080876000015111613b03576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105bf565b6001838101517fff00000000000000000000000000000000000000000000000000000000000000169082141580613b7c57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613c2e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105bf565b50600195509350600092506143b6915050565b60bf8111613f8f576000613c5660b78361512c565b905080876000015111613d11576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105bf565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613def576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105bf565b600184015160088302610100031c60378111613eb3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105bf565b613ebd8184615472565b895111613f72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105bf565b613f7d836001615472565b97509550600094506143b69350505050565b60f78111614070576000613fa460c08361512c565b90508087600001511161405f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105bf565b6001955093508492506143b6915050565b600061407d60f78361512c565b905080876000015111614138576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105bf565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003614216576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105bf565b600184015160088302610100031c603781116142da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105bf565b6142e48184615472565b895111614399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105bf565b6143a4836001615472565b97509550600194506143b69350505050565b9193909250565b60608167ffffffffffffffff8111156143d8576143d861498a565b6040519080825280601f01601f191660200182016040528015614402576020820181803683370190505b50905081156124135760006144178486615472565b90506020820160005b84811015614438578281015182820152602001614420565b84811115614447576000858301525b5050509392505050565b60606110428260200151600084600001516143bd565b60608182601f0110156144d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105bf565b828284011015614542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105bf565b818301845110156145af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105bf565b6060821580156145ce5760405191506000825260208201604052614636565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156146075780518352602092830192016145ef565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161470a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105bf565b50604080518082019091528151815260209182019181019190915290565b6060600080600061473885613950565b919450925090506001816001811115614753576147536155c2565b146147e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105bf565b84516147ec8385615472565b14614879576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105bf565b604080516020808252610420820190925290816020015b60408051808201909152600080825260208201528152602001906001900390816148905790505093506000835b865181101561497e576000806149036040518060400160405280858c600001516148e7919061512c565b8152602001858c602001516148fc9190615472565b9052613950565b50915091506040518060400160405280838361491f9190615472565b8152602001848b602001516149349190615472565b8152508885815181106149495761494961548a565b602090810291909101015261495f600185615472565b935061496b8183615472565b6149759084615472565b925050506148bd565b50845250919392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614a0057614a0061498a565b604052919050565b73ffffffffffffffffffffffffffffffffffffffff81168114614a2a57600080fd5b50565b600082601f830112614a3e57600080fd5b813567ffffffffffffffff811115614a5857614a5861498a565b614a8960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016149b9565b818152846020838601011115614a9e57600080fd5b816020850160208301376000918101602001919091529392505050565b600060c08284031215614acd57600080fd5b60405160c0810167ffffffffffffffff8282108183111715614af157614af161498a565b816040528293508435835260208501359150614b0c82614a08565b81602084015260408501359150614b2282614a08565b816040840152606085013560608401526080850135608084015260a0850135915080821115614b5057600080fd5b50614b5d85828601614a2d565b60a0830152505092915050565b600080600080600085870360e0811215614b8357600080fd5b863567ffffffffffffffff80821115614b9b57600080fd5b614ba78a838b01614abb565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc084011215614be057600080fd5b60408901955060c0890135925080831115614bfa57600080fd5b828901925089601f840112614c0e57600080fd5b8235915080821115614c1f57600080fd5b508860208260051b8401011115614c3557600080fd5b959894975092955050506020019190565b60005b83811015614c61578181015183820152602001614c49565b83811115614c70576000848401525b50505050565b60008151808452614c8e816020860160208601614c46565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006124136020830184614c76565b600060208284031215614ce557600080fd5b5035919050565b600060208284031215614cfe57600080fd5b813567ffffffffffffffff811115614d1557600080fd5b61214784828501614abb565b803567ffffffffffffffff81168114614d3957600080fd5b919050565b600060208284031215614d5057600080fd5b61241382614d21565b80358015158114614d3957600080fd5b600080600080600060a08688031215614d8157600080fd5b8535614d8c81614a08565b945060208601359350614da160408701614d21565b9250614daf60608701614d59565b9150608086013567ffffffffffffffff811115614dcb57600080fd5b614dd788828901614a2d565b9150509295509295909350565b60008060008060808587031215614dfa57600080fd5b8435614e0581614a08565b93506020850135614e1581614a08565b92506040850135614e2581614a08565b9150614e3360608601614d59565b905092959194509250565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b604882015260008251614e92816049850160208701614c46565b919091016049019695505050505050565b80516fffffffffffffffffffffffffffffffff81168114614d3957600080fd5b600060608284031215614ed557600080fd5b6040516060810181811067ffffffffffffffff82111715614ef857614ef861498a565b60405282518152614f0b60208401614ea3565b6020820152614f1c60408401614ea3565b60408201529392505050565b600060808284031215614f3a57600080fd5b6040516080810181811067ffffffffffffffff82111715614f5d57614f5d61498a565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614fa957614fa961498a565b8360051b6020614fba8183016149b9565b868152918501918181019036841115614fd257600080fd5b865b8481101561500657803586811115614fec5760008081fd5b614ff836828b01614a2d565b845250918301918301614fd4565b50979650505050505050565b60008451615024818460208901614c46565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551615060816001850160208a01614c46565b6001920191820152835161507b816002840160208801614c46565b0160020195945050505050565b60006020828403121561509a57600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600067ffffffffffffffff808316818516818304811182151516156150f7576150f76150a1565b02949350505050565b600067ffffffffffffffff808316818516808303821115615123576151236150a1565b01949350505050565b60008282101561513e5761513e6150a1565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261518157615181615143565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f8000000000000000000000000000000000000000000000000000000000000000831416156151d5576151d56150a1565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615615214576152146150a1565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615615248576152486150a1565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60008413600084138583048511828216161561528f5761528f6150a1565b7f800000000000000000000000000000000000000000000000000000000000000060008712868205881281841616156152ca576152ca6150a1565b600087129250878205871284841616156152e6576152e66150a1565b878505871281841616156152fc576152fc6150a1565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615615344576153446150a1565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615615378576153786150a1565b50500190565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156153b6576153b66150a1565b500290565b6000826153ca576153ca615143565b500490565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a083015261541a60c0830184614c76565b98975050505050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615457576154576150a1565b5060010190565b60008261546d5761546d615143565b500690565b60008219821115615485576154856150a1565b500190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b805163ffffffff81168114614d3957600080fd5b805160ff81168114614d3957600080fd5b600060c082840312156154f057600080fd5b60405160c0810181811067ffffffffffffffff821117156155135761551361498a565b60405261551f836154b9565b815261552d602084016154cd565b602082015261553e604084016154cd565b604082015261554f606084016154b9565b6060820152615560608084016154b9565b608082015261557160a08401614ea3565b60a08201529392505050565b600060ff83168061559057615590615143565b8060ff84160691505092915050565b600060ff821660ff8416808210156155b9576155b96150a1
565b90039392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"
func
init
()
{
func
init
()
{
if
err
:=
json
.
Unmarshal
([]
byte
(
OptimismPortalStorageLayoutJSON
),
OptimismPortalStorageLayout
);
err
!=
nil
{
if
err
:=
json
.
Unmarshal
([]
byte
(
OptimismPortalStorageLayoutJSON
),
OptimismPortalStorageLayout
);
err
!=
nil
{
...
...
packages/contracts-bedrock/.gas-snapshot
View file @
eb4033c3
...
@@ -130,7 +130,7 @@ GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (g
...
@@ -130,7 +130,7 @@ GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (g
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 88513)
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 88513)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75079)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 75079)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 75688)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 75688)
GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 143
181
)
GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 143
203
)
GasPriceOracle_Test:test_baseFee_succeeds() (gas: 8325)
GasPriceOracle_Test:test_baseFee_succeeds() (gas: 8325)
GasPriceOracle_Test:test_decimals_succeeds() (gas: 6167)
GasPriceOracle_Test:test_decimals_succeeds() (gas: 6167)
GasPriceOracle_Test:test_gasPrice_succeeds() (gas: 8294)
GasPriceOracle_Test:test_gasPrice_succeeds() (gas: 8294)
...
@@ -161,18 +161,18 @@ L1BlockTest:test_timestamp_succeeds() (gas: 7640)
...
@@ -161,18 +161,18 @@ L1BlockTest:test_timestamp_succeeds() (gas: 7640)
L1BlockTest:test_updateValues_succeeds() (gas: 60482)
L1BlockTest:test_updateValues_succeeds() (gas: 60482)
L1CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 24803)
L1CrossDomainMessenger_Test:test_messageVersion_succeeds() (gas: 24803)
L1CrossDomainMessenger_Test:test_relayMessage_legacyOldReplay_reverts() (gas: 49395)
L1CrossDomainMessenger_Test:test_relayMessage_legacyOldReplay_reverts() (gas: 49395)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterFailureThenSuccess_reverts() (gas: 2097
22
)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterFailureThenSuccess_reverts() (gas: 2097
44
)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterFailure_succeeds() (gas: 2036
20
)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterFailure_succeeds() (gas: 2036
42
)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterSuccess_reverts() (gas: 1240
02
)
L1CrossDomainMessenger_Test:test_relayMessage_legacyRetryAfterSuccess_reverts() (gas: 1240
24
)
L1CrossDomainMessenger_Test:test_relayMessage_legacy_succeeds() (gas: 77
294
)
L1CrossDomainMessenger_Test:test_relayMessage_legacy_succeeds() (gas: 77
316
)
L1CrossDomainMessenger_Test:test_relayMessage_retryAfterFailure_succeeds() (gas: 197
594
)
L1CrossDomainMessenger_Test:test_relayMessage_retryAfterFailure_succeeds() (gas: 197
616
)
L1CrossDomainMessenger_Test:test_relayMessage_succeeds() (gas: 742
52
)
L1CrossDomainMessenger_Test:test_relayMessage_succeeds() (gas: 742
74
)
L1CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 56
496
)
L1CrossDomainMessenger_Test:test_relayMessage_toSystemContract_reverts() (gas: 56
518
)
L1CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 12343)
L1CrossDomainMessenger_Test:test_relayMessage_v2_reverts() (gas: 12343)
L1CrossDomainMessenger_Test:test_replayMessage_withValue_reverts() (gas: 31063)
L1CrossDomainMessenger_Test:test_replayMessage_withValue_reverts() (gas: 31063)
L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 390677)
L1CrossDomainMessenger_Test:test_sendMessage_succeeds() (gas: 390677)
L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1666608)
L1CrossDomainMessenger_Test:test_sendMessage_twice_succeeds() (gas: 1666608)
L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 84
694
)
L1CrossDomainMessenger_Test:test_xDomainMessageSender_reset_succeeds() (gas: 84
716
)
L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24253)
L1CrossDomainMessenger_Test:test_xDomainSender_notSet_reverts() (gas: 24253)
L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 52707)
L1ERC721Bridge_Test:test_bridgeERC721To_localTokenZeroAddress_reverts() (gas: 52707)
L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 27288)
L1ERC721Bridge_Test:test_bridgeERC721To_remoteTokenZeroAddress_reverts() (gas: 27288)
...
@@ -351,33 +351,33 @@ OptimismMintableTokenFactory_Test:test_createStandardL2Token_sameTwice_succeeds(
...
@@ -351,33 +351,33 @@ OptimismMintableTokenFactory_Test:test_createStandardL2Token_sameTwice_succeeds(
OptimismMintableTokenFactory_Test:test_createStandardL2Token_succeeds() (gas: 1268564)
OptimismMintableTokenFactory_Test:test_createStandardL2Token_succeeds() (gas: 1268564)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 11178)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 11178)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 16111)
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 16111)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 217
74
)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 217
96
)
OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_succeeds() (gas: 191412)
OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_succeeds() (gas: 191412)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 178
573
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 178
646
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 1822
12
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 1822
85
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 417
35
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 417
80
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 173
859
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 173
932
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 180
585
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 180
658
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 1546
24
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 1546
97
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 218
56
4)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 218
70
4)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 220
851
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 220
963
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_paused_reverts() (gas: 38
623
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_paused_reverts() (gas: 38
706
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 2096
13
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 2096
80
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 879774668769616267
5
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 879774668769616267
6
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 171
251
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 171
324
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 858
05
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 858
27
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidWithdrawalProof_reverts() (gas: 1113
17
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidWithdrawalProof_reverts() (gas: 1113
39
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 529
51
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 529
73
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_paused_reverts() (gas: 58
78
6)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_paused_reverts() (gas: 58
84
6)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRootAndOutputIndex_succeeds() (gas: 295
24
4)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRootAndOutputIndex_succeeds() (gas: 295
33
4)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_succeeds() (gas: 227
596
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_succeeds() (gas: 227
662
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 1667
21
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 1667
65
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_succeeds() (gas: 1544
30
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_succeeds() (gas: 1544
52
)
OptimismPortal_Test:test_constructor_succeeds() (gas:
19522
)
OptimismPortal_Test:test_constructor_succeeds() (gas:
28141
)
OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 14292)
OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 14292)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_succeeds() (gas: 76817)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_succeeds() (gas: 76817)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_succeeds() (gas: 77118)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForEOA_succeeds() (gas: 77118)
OptimismPortal_Test:test_depositTransaction_largeData_reverts() (gas: 5121
93
)
OptimismPortal_Test:test_depositTransaction_largeData_reverts() (gas: 5121
49
)
OptimismPortal_Test:test_depositTransaction_noValueContract_succeeds() (gas: 76770)
OptimismPortal_Test:test_depositTransaction_noValueContract_succeeds() (gas: 76770)
OptimismPortal_Test:test_depositTransaction_noValueEOA_succeeds() (gas: 77115)
OptimismPortal_Test:test_depositTransaction_noValueEOA_succeeds() (gas: 77115)
OptimismPortal_Test:test_depositTransaction_smallGasLimit_reverts() (gas: 14528)
OptimismPortal_Test:test_depositTransaction_smallGasLimit_reverts() (gas: 14528)
...
@@ -385,14 +385,14 @@ OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreat
...
@@ -385,14 +385,14 @@ OptimismPortal_Test:test_depositTransaction_withEthValueAndContractContractCreat
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_succeeds() (gas: 75932)
OptimismPortal_Test:test_depositTransaction_withEthValueAndEOAContractCreation_succeeds() (gas: 75932)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_succeeds() (gas: 83479)
OptimismPortal_Test:test_depositTransaction_withEthValueFromContract_succeeds() (gas: 83479)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_succeeds() (gas: 84072)
OptimismPortal_Test:test_depositTransaction_withEthValueFromEOA_succeeds() (gas: 84072)
OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 124
659
)
OptimismPortal_Test:test_isOutputFinalized_succeeds() (gas: 124
567
)
OptimismPortal_Test:test_minimumGasLimit_succeeds() (gas: 17
65
0)
OptimismPortal_Test:test_minimumGasLimit_succeeds() (gas: 17
43
0)
OptimismPortal_Test:test_pause_onlyGuardian_reverts() (gas: 244
05
)
OptimismPortal_Test:test_pause_onlyGuardian_reverts() (gas: 244
87
)
OptimismPortal_Test:test_pause_succeeds() (gas: 27
262
)
OptimismPortal_Test:test_pause_succeeds() (gas: 27
344
)
OptimismPortal_Test:test_receive_succeeds() (gas: 127567)
OptimismPortal_Test:test_receive_succeeds() (gas: 127567)
OptimismPortal_Test:test_simple_isOutputFinalized_succeeds() (gas: 356
9
1)
OptimismPortal_Test:test_simple_isOutputFinalized_succeeds() (gas: 356
5
1)
OptimismPortal_Test:test_unpause_onlyGuardian_reverts() (gas: 31
416
)
OptimismPortal_Test:test_unpause_onlyGuardian_reverts() (gas: 31
514
)
OptimismPortal_Test:test_unpause_succeeds() (gas: 27
369
)
OptimismPortal_Test:test_unpause_succeeds() (gas: 27
451
)
OptimistAllowlistTest:test_constructor_succeeds() (gas: 16407)
OptimistAllowlistTest:test_constructor_succeeds() (gas: 16407)
OptimistAllowlistTest:test_isAllowedToMint_fromAllowlistAttestorWithFalsyValue_fails() (gas: 49842)
OptimistAllowlistTest:test_isAllowedToMint_fromAllowlistAttestorWithFalsyValue_fails() (gas: 49842)
OptimistAllowlistTest:test_isAllowedToMint_fromAllowlistAttestor_succeeds() (gas: 49304)
OptimistAllowlistTest:test_isAllowedToMint_fromAllowlistAttestor_succeeds() (gas: 49304)
...
@@ -564,7 +564,7 @@ SequencerFeeVault_Test:test_minWithdrawalAmount_succeeds() (gas: 5464)
...
@@ -564,7 +564,7 @@ SequencerFeeVault_Test:test_minWithdrawalAmount_succeeds() (gas: 5464)
SequencerFeeVault_Test:test_receive_succeeds() (gas: 17373)
SequencerFeeVault_Test:test_receive_succeeds() (gas: 17373)
SequencerFeeVault_Test:test_withdraw_notEnough_reverts() (gas: 9332)
SequencerFeeVault_Test:test_withdraw_notEnough_reverts() (gas: 9332)
SequencerFeeVault_Test:test_withdraw_toL1_succeeds() (gas: 169242)
SequencerFeeVault_Test:test_withdraw_toL1_succeeds() (gas: 169242)
SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 115
15
)
SetPrevBaseFee_Test:test_setPrevBaseFee_succeeds() (gas: 115
37
)
StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936)
StandardBridge_Stateless_Test:test_isCorrectTokenPair_succeeds() (gas: 49936)
StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072)
StandardBridge_Stateless_Test:test_isOptimismMintableERC20_succeeds() (gas: 33072)
SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 148851)
SystemConfig_Initialize_TestFail:test_initialize_lowGasLimit_reverts() (gas: 148851)
...
...
packages/contracts-bedrock/src/L1/OptimismPortal.sol
View file @
eb4033c3
...
@@ -53,15 +53,15 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -53,15 +53,15 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
/// @notice Address of the L2OutputOracle contract.
/// @notice Address of the L2OutputOracle contract.
/// @custom:network-specific
/// @custom:network-specific
L2OutputOracle
public
L2_ORACLE;
L2OutputOracle
internal _
L2_ORACLE;
/// @notice Address of the SystemConfig contract.
/// @notice Address of the SystemConfig contract.
/// @custom:network-specific
/// @custom:network-specific
SystemConfig
public
SYSTEM_CONFIG;
SystemConfig
internal _
SYSTEM_CONFIG;
/// @notice Address that has the ability to pause and unpause withdrawals.
/// @notice Address that has the ability to pause and unpause withdrawals.
/// @custom:network-specific
/// @custom:network-specific
address
public
GUARDIAN;
address
internal _
GUARDIAN;
/// @notice Emitted when a transaction is deposited from L1 to L2.
/// @notice Emitted when a transaction is deposited from L1 to L2.
/// The parameters of this event are read by the rollup node and used to derive deposit
/// The parameters of this event are read by the rollup node and used to derive deposit
...
@@ -129,23 +129,55 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -129,23 +129,55 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
bool _paused
bool _paused
) public reinitializer(2) {
) public reinitializer(2) {
l2Sender = Constants.DEFAULT_L2_SENDER;
l2Sender = Constants.DEFAULT_L2_SENDER;
L2_ORACLE = _l2Oracle;
_
L2_ORACLE = _l2Oracle;
SYSTEM_CONFIG = _systemConfig;
_
SYSTEM_CONFIG = _systemConfig;
GUARDIAN = _guardian;
_
GUARDIAN = _guardian;
paused = _paused;
paused = _paused;
__ResourceMetering_init();
__ResourceMetering_init();
}
}
/// @notice Getter for the L2OutputOracle
/// @custom:legacy
function L2_ORACLE() external view returns (L2OutputOracle) {
return _L2_ORACLE;
}
/// @notice Getter for the L2OutputOracle
function l2Oracle() external view returns (L2OutputOracle) {
return _L2_ORACLE;
}
/// @notice Getter for the SystemConfig
/// @custom:legacy
function SYSTEM_CONFIG() external view returns (SystemConfig) {
return _SYSTEM_CONFIG;
}
/// @notice Getter for the SystemConfig
function systemConfig() external view returns (SystemConfig) {
return _SYSTEM_CONFIG;
}
/// @notice Getter for the Guardian
/// @custom:legacy
function GUARDIAN() external view returns (address) {
return _GUARDIAN;
}
/// @notice Getter for the Guardian
function guardian() external view returns (address) {
return _GUARDIAN;
}
/// @notice Pauses withdrawals.
/// @notice Pauses withdrawals.
function pause() external {
function pause() external {
require(msg.sender == GUARDIAN, "OptimismPortal: only guardian can pause");
require(msg.sender ==
_
GUARDIAN, "OptimismPortal: only guardian can pause");
paused = true;
paused = true;
emit Paused(msg.sender);
emit Paused(msg.sender);
}
}
/// @notice Unpauses withdrawals.
/// @notice Unpauses withdrawals.
function unpause() external {
function unpause() external {
require(msg.sender == GUARDIAN, "OptimismPortal: only guardian can unpause");
require(msg.sender ==
_
GUARDIAN, "OptimismPortal: only guardian can unpause");
paused = false;
paused = false;
emit Unpaused(msg.sender);
emit Unpaused(msg.sender);
}
}
...
@@ -187,7 +219,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -187,7 +219,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
override
override
returns (ResourceMetering.ResourceConfig memory)
returns (ResourceMetering.ResourceConfig memory)
{
{
return SYSTEM_CONFIG.resourceConfig();
return
_
SYSTEM_CONFIG.resourceConfig();
}
}
/// @notice Proves a withdrawal transaction.
/// @notice Proves a withdrawal transaction.
...
@@ -211,7 +243,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -211,7 +243,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
// Get the output root and load onto the stack to prevent multiple mloads. This will
// Get the output root and load onto the stack to prevent multiple mloads. This will
// revert if there is no output root for the given block number.
// revert if there is no output root for the given block number.
bytes32 outputRoot = L2_ORACLE.getL2Output(_l2OutputIndex).outputRoot;
bytes32 outputRoot =
_
L2_ORACLE.getL2Output(_l2OutputIndex).outputRoot;
// Verify that the output root can be generated with the elements in the proof.
// Verify that the output root can be generated with the elements in the proof.
require(
require(
...
@@ -231,7 +263,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -231,7 +263,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
// output index has been updated.
// output index has been updated.
require(
require(
provenWithdrawal.timestamp == 0 ||
provenWithdrawal.timestamp == 0 ||
L2_ORACLE.getL2Output(provenWithdrawal.l2OutputIndex).outputRoot !=
_
L2_ORACLE.getL2Output(provenWithdrawal.l2OutputIndex).outputRoot !=
provenWithdrawal.outputRoot,
provenWithdrawal.outputRoot,
"OptimismPortal: withdrawal hash has already been proven"
"OptimismPortal: withdrawal hash has already been proven"
);
);
...
@@ -303,7 +335,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -303,7 +335,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
// starting timestamp inside the L2OutputOracle. Not strictly necessary but extra layer of
// starting timestamp inside the L2OutputOracle. Not strictly necessary but extra layer of
// safety against weird bugs in the proving step.
// safety against weird bugs in the proving step.
require(
require(
provenWithdrawal.timestamp >= L2_ORACLE.startingTimestamp(),
provenWithdrawal.timestamp >=
_
L2_ORACLE.startingTimestamp(),
"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp"
"OptimismPortal: withdrawal timestamp less than L2 Oracle starting timestamp"
);
);
...
@@ -318,7 +350,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -318,7 +350,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
// Grab the OutputProposal from the L2OutputOracle, will revert if the output that
// Grab the OutputProposal from the L2OutputOracle, will revert if the output that
// corresponds to the given index has not been proposed yet.
// corresponds to the given index has not been proposed yet.
Types.OutputProposal memory proposal = L2_ORACLE.getL2Output(
Types.OutputProposal memory proposal =
_
L2_ORACLE.getL2Output(
provenWithdrawal.l2OutputIndex
provenWithdrawal.l2OutputIndex
);
);
...
@@ -438,7 +470,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -438,7 +470,7 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
/// @param _l2OutputIndex Index of the L2 output to check.
/// @param _l2OutputIndex Index of the L2 output to check.
/// @return Whether or not the output is finalized.
/// @return Whether or not the output is finalized.
function isOutputFinalized(uint256 _l2OutputIndex) external view returns (bool) {
function isOutputFinalized(uint256 _l2OutputIndex) external view returns (bool) {
return _isFinalizationPeriodElapsed(L2_ORACLE.getL2Output(_l2OutputIndex).timestamp);
return _isFinalizationPeriodElapsed(
_
L2_ORACLE.getL2Output(_l2OutputIndex).timestamp);
}
}
/// @notice Determines whether the finalization period has elapsed with respect to
/// @notice Determines whether the finalization period has elapsed with respect to
...
@@ -446,6 +478,6 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
...
@@ -446,6 +478,6 @@ contract OptimismPortal is Initializable, ResourceMetering, Semver {
/// @param _timestamp Timestamp to check.
/// @param _timestamp Timestamp to check.
/// @return Whether or not the finalization period has elapsed.
/// @return Whether or not the finalization period has elapsed.
function _isFinalizationPeriodElapsed(uint256 _timestamp) internal view returns (bool) {
function _isFinalizationPeriodElapsed(uint256 _timestamp) internal view returns (bool) {
return block.timestamp > _timestamp + L2_ORACLE.FINALIZATION_PERIOD_SECONDS();
return block.timestamp > _timestamp +
_
L2_ORACLE.FINALIZATION_PERIOD_SECONDS();
}
}
}
}
packages/contracts-bedrock/test/OptimismPortal.t.sol
View file @
eb4033c3
...
@@ -26,6 +26,9 @@ contract OptimismPortal_Test is Portal_Initializer {
...
@@ -26,6 +26,9 @@ contract OptimismPortal_Test is Portal_Initializer {
/// @dev Tests that the constructor sets the correct values.
/// @dev Tests that the constructor sets the correct values.
function test_constructor_succeeds() external {
function test_constructor_succeeds() external {
assertEq(address(op.L2_ORACLE()), address(oracle));
assertEq(address(op.L2_ORACLE()), address(oracle));
assertEq(address(op.l2Oracle()), address(oracle));
assertEq(op.GUARDIAN(), guardian);
assertEq(op.guardian(), guardian);
assertEq(op.l2Sender(), 0x000000000000000000000000000000000000dEaD);
assertEq(op.l2Sender(), 0x000000000000000000000000000000000000dEaD);
assertEq(op.paused(), false);
assertEq(op.paused(), false);
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment