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
9b74fd6d
Unverified
Commit
9b74fd6d
authored
Dec 12, 2022
by
mergify[bot]
Committed by
GitHub
Dec 12, 2022
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #4234 from ethereum-optimism/clabby/ctb-trie/contract-changes
feat(ctb): MPT Fuzzing contract changes
parents
af8ca902
ae7947f2
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
187 additions
and
44 deletions
+187
-44
optimismportal.go
op-bindings/bindings/optimismportal.go
+1
-1
optimismportal_more.go
op-bindings/bindings/optimismportal_more.go
+1
-1
.gas-snapshot
packages/contracts-bedrock/.gas-snapshot
+36
-36
MerkleTrie.sol
...contracts-bedrock/contracts/libraries/trie/MerkleTrie.sol
+2
-0
CommonTest.t.sol
packages/contracts-bedrock/contracts/test/CommonTest.t.sol
+19
-0
MerkleTrie.t.sol
packages/contracts-bedrock/contracts/test/MerkleTrie.t.sol
+120
-1
package.json
packages/contracts-bedrock/package.json
+6
-5
README.md
packages/contracts-bedrock/test-case-generator/README.md
+2
-0
No files found.
op-bindings/bindings/optimismportal.go
View file @
9b74fd6d
...
...
@@ -49,7 +49,7 @@ type TypesWithdrawalTransaction struct {
// OptimismPortalMetaData contains all meta data concerning the OptimismPortal contract.
var
OptimismPortalMetaData
=
&
bind
.
MetaData
{
ABI
:
"[{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
contractL2OutputOracle
\"
,
\"
name
\"
:
\"
_l2Oracle
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
_finalizationPeriodSeconds
\"
,
\"
type
\"
:
\"
uint256
\"
}],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
constructor
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:false,
\"
internalType
\"
:
\"
uint8
\"
,
\"
name
\"
:
\"
version
\"
,
\"
type
\"
:
\"
uint8
\"
}],
\"
name
\"
:
\"
Initialized
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
from
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
to
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
version
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
indexed
\"
:false,
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
opaqueData
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
name
\"
:
\"
TransactionDeposited
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"
withdrawalHash
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
indexed
\"
:false,
\"
internalType
\"
:
\"
bool
\"
,
\"
name
\"
:
\"
success
\"
,
\"
type
\"
:
\"
bool
\"
}],
\"
name
\"
:
\"
WithdrawalFinalized
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
anonymous
\"
:false,
\"
inputs
\"
:[{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"
withdrawalHash
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
from
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
indexed
\"
:true,
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
to
\"
,
\"
type
\"
:
\"
address
\"
}],
\"
name
\"
:
\"
WithdrawalProven
\"
,
\"
type
\"
:
\"
event
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
BASE_FEE_MAX_CHANGE_DENOMINATOR
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
int256
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
int256
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
ELASTICITY_MULTIPLIER
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
int256
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
int256
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
FINALIZATION_PERIOD_SECONDS
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
uint256
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
INITIAL_BASE_FEE
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
uint128
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
uint128
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
L2_ORACLE
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
contractL2OutputOracle
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
MAXIMUM_BASE_FEE
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
int256
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
int256
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
MAX_RESOURCE_LIMIT
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
int256
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
int256
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
MINIMUM_BASE_FEE
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
int256
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
int256
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
TARGET_RESOURCE_LIMIT
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
int256
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
int256
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
_to
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
_value
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
internalType
\"
:
\"
uint64
\"
,
\"
name
\"
:
\"
_gasLimit
\"
,
\"
type
\"
:
\"
uint64
\"
},{
\"
internalType
\"
:
\"
bool
\"
,
\"
name
\"
:
\"
_isCreation
\"
,
\"
type
\"
:
\"
bool
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
_data
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
name
\"
:
\"
depositTransaction
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
payable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
donateETH
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
payable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
components
\"
:[{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
nonce
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
sender
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
target
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
value
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
gasLimit
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
data
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
internalType
\"
:
\"
structTypes.WithdrawalTransaction
\"
,
\"
name
\"
:
\"
_tx
\"
,
\"
type
\"
:
\"
tuple
\"
}],
\"
name
\"
:
\"
finalizeWithdrawalTransaction
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
name
\"
:
\"
finalizedWithdrawals
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
bool
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
bool
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
initialize
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
_l2OutputIndex
\"
,
\"
type
\"
:
\"
uint256
\"
}],
\"
name
\"
:
\"
isOutputFinalized
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
bool
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
bool
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
l2Sender
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
address
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
params
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
uint128
\"
,
\"
name
\"
:
\"
prevBaseFee
\"
,
\"
type
\"
:
\"
uint128
\"
},{
\"
internalType
\"
:
\"
uint64
\"
,
\"
name
\"
:
\"
prevBoughtGas
\"
,
\"
type
\"
:
\"
uint64
\"
},{
\"
internalType
\"
:
\"
uint64
\"
,
\"
name
\"
:
\"
prevBlockNum
\"
,
\"
type
\"
:
\"
uint64
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
components
\"
:[{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
nonce
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
sender
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
internalType
\"
:
\"
address
\"
,
\"
name
\"
:
\"
target
\"
,
\"
type
\"
:
\"
address
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
value
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
gasLimit
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
internalType
\"
:
\"
bytes
\"
,
\"
name
\"
:
\"
data
\"
,
\"
type
\"
:
\"
bytes
\"
}],
\"
internalType
\"
:
\"
structTypes.WithdrawalTransaction
\"
,
\"
name
\"
:
\"
_tx
\"
,
\"
type
\"
:
\"
tuple
\"
},{
\"
internalType
\"
:
\"
uint256
\"
,
\"
name
\"
:
\"
_l2OutputIndex
\"
,
\"
type
\"
:
\"
uint256
\"
},{
\"
components
\"
:[{
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"
version
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"
stateRoot
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"
messagePasserStorageRoot
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"
latestBlockhash
\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
internalType
\"
:
\"
structTypes.OutputRootProof
\"
,
\"
name
\"
:
\"
_outputRootProof
\"
,
\"
type
\"
:
\"
tuple
\"
},{
\"
internalType
\"
:
\"
bytes[]
\"
,
\"
name
\"
:
\"
_withdrawalProof
\"
,
\"
type
\"
:
\"
bytes[]
\"
}],
\"
name
\"
:
\"
proveWithdrawalTransaction
\"
,
\"
outputs
\"
:[],
\"
stateMutability
\"
:
\"
nonpayable
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[{
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
bytes32
\"
}],
\"
name
\"
:
\"
provenWithdrawals
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
bytes32
\"
,
\"
name
\"
:
\"
outputRoot
\"
,
\"
type
\"
:
\"
bytes32
\"
},{
\"
internalType
\"
:
\"
uint128
\"
,
\"
name
\"
:
\"
timestamp
\"
,
\"
type
\"
:
\"
uint128
\"
},{
\"
internalType
\"
:
\"
uint128
\"
,
\"
name
\"
:
\"
l2OutputIndex
\"
,
\"
type
\"
:
\"
uint128
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
inputs
\"
:[],
\"
name
\"
:
\"
version
\"
,
\"
outputs
\"
:[{
\"
internalType
\"
:
\"
string
\"
,
\"
name
\"
:
\"\"
,
\"
type
\"
:
\"
string
\"
}],
\"
stateMutability
\"
:
\"
view
\"
,
\"
type
\"
:
\"
function
\"
},{
\"
stateMutability
\"
:
\"
payable
\"
,
\"
type
\"
:
\"
receive
\"
}]"
,
Bin
:
"0x6101206040523480156200001257600080fd5b50604051620053
2738038062005327833981016040819052620000359162000261565b6000608081905260a052600160c0526001600160a01b0382166101005260e08190526200006162000069565b50506200029d565b600054610100900460ff16158080156200008a5750600054600160ff909116105b80620000ba5750620000a730620001af60201b62001ab31760201c565b158015620000ba575060005460ff166001145b620001235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000147576000805461ff0019166101001790555b603280546001600160a01b03191661dead17905562000165620001be565b8015620001ac576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff166200022b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b600080604083850312156200027557600080fd5b82516001600160a01b03811681146200028d57600080fd5b6020939093015192949293505050565b60805160a05160c05160e0516101005161502262000305600039600081816101a001528181610aa401528181610f420152818161132d015261159f0152600081816105190152611e1f01526000610ead01526000610e8401526000610e5b01526150226000f3fe6080604052600436106101625760003560e01c80638b4c40b0116100c0578063cd7c978911610074578063e965084c11610059578063e965084c14610468578063e9e05c42146104f4578063f4daa2911461050757600080fd5b8063cd7c9789146103b2578063cff0ab96146103c757600080fd5b80639bf62d82116100a55780639bf62d8214610340578063a14238e71461036d578063ca3e99ba1461039d57600080fd5b80638b4c40b0146101875780638c3152e91461032057600080fd5b806364b79208116101175780636dbffb78116100fc5780636dbffb78146102c55780638129fc1c146102f5578063867ead131461030a57600080fd5b806364b79208146102995780636bb0291e146102b057600080fd5b80634870496f116101485780634870496f1461022557806354fd4d50146102455780635c1f28271461026757600080fd5b80621c2ff61461018e57806313620abd146101ec57600080fd5b36610189576101873334620186a060006040518060200160405280600081525061053b565b005b600080fd5b34801561019a57600080fd5b506101c27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101f857600080fd5b50610204633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e3565b34801561023157600080fd5b506101876102403660046146da565b6109b3565b34801561025157600080fd5b5061025a610e54565b6040516101e39190614830565b34801561027357600080fd5b5061028b6fffffffffffffffffffffffffffffffff81565b6040519081526020016101e3565b3480156102a557600080fd5b5061028b627a120081565b3480156102bc57600080fd5b5061028b600481565b3480156102d157600080fd5b506102e56102e0366004614843565b610ef7565b60405190151581526020016101e3565b34801561030157600080fd5b50610187610fce565b34801561031657600080fd5b5061028b61271081565b34801561032c57600080fd5b5061018761033b36600461485c565b61118c565b34801561034c57600080fd5b506032546101c29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037957600080fd5b506102e5610388366004614843565b60336020526000908152604090205460ff1681565b3480156103a957600080fd5b5061028b611aa2565b3480156103be57600080fd5b5061028b600881565b3480156103d357600080fd5b5060015461042f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e3565b34801561047457600080fd5b506104c6610483366004614843565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e3565b610187610502366004614891565b61053b565b34801561051357600080fd5b5061028b7f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105f25773ffffffffffffffffffffffffffffffffffffffff8716156105f257604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b33328114610613575033731111000000000000000000000000000000001111015b6000348888888860405160200161062e95949392919061491e565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161069e9190614830565b60405180910390a450506001546000906106de907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436149b2565b905080156108125760006106f66004627a12006149f8565b6001546107219190700100000000000000000000000000000000900467ffffffffffffffff16614a60565b9050600060086107356004627a12006149f8565b6001546107559085906fffffffffffffffffffffffffffffffff16614ad4565b61075f91906149f8565b61076991906149f8565b6001549091506000906107ac906107939084906fffffffffffffffffffffffffffffffff16614b90565b6127106fffffffffffffffffffffffffffffffff611acf565b905060018411156107d3576107d06107938260086107cb6001896149b2565b611aee565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610845908490700100000000000000000000000000000000900467ffffffffffffffff16614c04565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105e9565b60015460009061094d906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616614c30565b6fffffffffffffffffffffffffffffffff169050600061097148633b9aca00611b43565b61097b9083614c68565b905060005a61098a90866149b2565b9050808211156109a6576109a66109a182846149b2565b611b5a565b5050505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105e9565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190614c9c565b519050610b3e610b3936869003860186614d01565b611b88565b8114610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105e9565b6000610bd787611be4565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c63575080604001516fffffffffffffffffffffffffffffffff1687148015610c63575080518314155b610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105e9565b610d07826040880135610d028789614d67565b611c14565b610d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105e9565b604080516060810182528481526fffffffffffffffffffffffffffffffff42811660208084019182528b831684860190815260008881526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558a830151908b0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a45050505050505050565b6060610e7f7f0000000000000000000000000000000000000000000000000000000000000000611cdb565b610ea87f0000000000000000000000000000000000000000000000000000000000000000611cdb565b610ed17f0000000000000000000000000000000000000000000000000000000000000000611cdb565b604051602001610ee393929190614deb565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fc89073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad9190614c9c565b602001516fffffffffffffffffffffffffffffffff16611e18565b92915050565b600054610100900460ff1615808015610fee5750600054600160ff909116105b806110085750303b158015611008575060005460ff166001145b611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105e9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156110f257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055611126611e4c565b801561118957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105e9565b600061124082611be4565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e00000000000000000000000000000000000060648201526084016105e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614e61565b81602001516fffffffffffffffffffffffffffffffff161015611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105e9565b6114a481602001516fffffffffffffffffffffffffffffffff16611e18565b611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161f9190614c9c565b82518151919250146116d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105e9565b6116f881602001516fffffffffffffffffffffffffffffffff16611e18565b6117aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60008381526033602052604090205460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105e9565b600083815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608084015161189290614e2090614e7a565b5a1015611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016105e9565b6020840151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604084015160009061199390614e205a61198491906149b2565b87606001518860a00151611f2f565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906119f890841515815260200190565b60405180910390a280158015611a0e5750326001145b15611a9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016105e9565b5050505050565b611ab06004627a12006149f8565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000611ae4611ade8585611f49565b83611f59565b90505b9392505050565b6000670de0b6b3a7640000611b2f611b0685836149f8565b611b1890670de0b6b3a7640000614a60565b611b2a85670de0b6b3a7640000614ad4565b611f68565b611b399086614ad4565b611ae491906149f8565b600081831015611b535781611ae7565b5090919050565b6000805a90505b825a611b6d90836149b2565b1015611b8357611b7c82614e92565b9150611b61565b505050565b60008160000151826020015183604001518460600151604051602001611bc7949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611bc7979096959101614eca565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611cd29101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611f99565b95945050505050565b606081600003611d1e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611d485780611d3281614e92565b9150611d419050600a83614c68565b9150611d22565b60008167ffffffffffffffff811115611d6357611d63614500565b6040519080825280601f01601f191660200182016040528015611d8d576020820181803683370190505b5090505b8415611e1057611da26001836149b2565b9150611daf600a86614f21565b611dba906030614e7a565b60f81b818381518110611dcf57611dcf614f35565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611e09600a86614c68565b9450611d91565b949350505050565b6000611e447f000000000000000000000000000000000000000000000000000000000000000083614e7a565b421192915050565b600054610100900460ff16611ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e9565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600080600080845160208601878a8af19695505050505050565b600081831215611b535781611ae7565b6000818312611b535781611ae7565b6000611ae7670de0b6b3a764000083611f8086611fbd565b611f8a9190614ad4565b611f9491906149f8565b612201565b600080611fa586612440565b9050611fb381868686612472565b9695505050505050565b6000808213612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b6000606061203584612499565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361223257506000919050565b680755bf798b4a1bf1e582126122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105e9565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060818051906020012060405160200161245c91815260200190565b6040516020818303038152906040529050919050565b6000611cd28461248387868661256f565b8051602091820120825192909101919091201490565b6000808211612504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060600061257c84612f8c565b905060006125898661307b565b90506000846040516020016125a091815260200190565b60405160208183030381529060405290506000805b8451811015612f035760008582815181106125d2576125d2614f35565b60200260200101519050845183111561266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016105e9565b8260000361272657805180516020918201206040516126bb9261269592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105e9565b61287d565b8051516020116127dc57805180516020918201206040516127509261269592910190815260200190565b612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105e9565b80518451602080870191909120825191909201201461287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105e9565b61288960106001614e7a565b81602001515103612a6a5784518303612a025760006128c582602001516010815181106128b8576128b8614f35565b6020026020010151613216565b90506000815111612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016105e9565b6001875161296691906149b2565b83146129f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016105e9565b9650611ae795505050505050565b6000858481518110612a1657612a16614f35565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612a4157612a41614f35565b60200260200101519050612a5481613376565b9550612a61600186614e7a565b94505050612ef0565b600281602001515103612e68576000612a828261339b565b9050600081600081518110612a9957612a99614f35565b016020015160f81c90506000612ab0600283614f64565b612abb906002614f86565b90506000612acc848360ff166133bf565b90506000612ada8a896133bf565b90506000612ae883836133f5565b905080835114612b7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016105e9565b60ff851660021480612b8f575060ff85166003145b15612d835780825114612c24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016105e9565b6000612c4088602001516001815181106128b8576128b8614f35565b90506000815111612cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016105e9565b60018d51612ce191906149b2565b8914612d6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016105e9565b9c50611ae79b505050505050505050505050565b60ff85161580612d96575060ff85166001145b15612dd557612dc28760200151600181518110612db557612db5614f35565b6020026020010151613376565b9950612dce818a614e7a565b9850612e5d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105e9565b505050505050612ef0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105e9565b5080612efb81614e92565b9150506125b5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016105e9565b805160609060008167ffffffffffffffff811115612fac57612fac614500565b604051908082528060200260200182016040528015612ff157816020015b6040805180820190915260608082526020820152815260200190600190039081612fca5790505b50905060005b8281101561307357604051806040016040528086838151811061301c5761301c614f35565b6020026020010151815260200161304b87848151811061303e5761303e614f35565b60200260200101516134a4565b81525082828151811061306057613060614f35565b6020908102919091010152600101612ff7565b509392505050565b8051606090600061308d826002614fa9565b67ffffffffffffffff8111156130a5576130a5614500565b6040519080825280601f01601f1916602001820160405280156130cf576020820181803683370190505b5090506000805b8381101561320c578581815181106130f0576130f0614f35565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff0000000000000000000000000000000000000000000000000000000000000168361314c836002614fa9565b8151811061315c5761315c614f35565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f000000000000000000000000000000000000000000000000000000000000008216836131ba836002614fa9565b6131c5906001614e7a565b815181106131d5576131d5614f35565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016130d6565b5090949350505050565b60606000806000613226856134b7565b91945092509050600081600181111561324157613241614fe6565b146132ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105e9565b6132d88284614e7a565b855114613367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105e9565b611cd285602001518484613f24565b606060208260000151106133925761338d82613216565b610fc8565b610fc882613fc5565b6060610fc86133ba83602001516000815181106128b8576128b8614f35565b61307b565b6060825182106133de5750604080516020810190915260008152610fc8565b611ae783838486516133f091906149b2565b613fdb565b6000806000835185511061340a57835161340d565b84515b90505b8082108015613494575083828151811061342c5761342c614f35565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685838151811061346b5761346b614f35565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561307357816001019150613410565b6060610fc86134b2836141b3565b61429c565b600080600080846000015111613575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b6020840151805160001a607f811161359a576000600160009450945094505050613f1d565b60b781116137a85760006135af6080836149b2565b90508087600001511161366a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105e9565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806136e357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105e9565b5060019550935060009250613f1d915050565b60bf8111613af65760006137bd60b7836149b2565b905080876000015111613878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105e9565b613a248184614e7a565b895111613ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105e9565b613ae4836001614e7a565b9750955060009450613f1d9350505050565b60f78111613bd7576000613b0b60c0836149b2565b905080876000015111613bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b600195509350849250613f1d915050565b6000613be460f7836149b2565b905080876000015111613c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105e9565b613e4b8184614e7a565b895111613f00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b613f0b836001614e7a565b9750955060019450613f1d9350505050565b9193909250565b606060008267ffffffffffffffff811115613f4157613f41614500565b6040519080825280601f01601f191660200182016040528015613f6b576020820181803683370190505b50905082600003613f7d579050611ae7565b6000613f898587614e7a565b90506020820160005b85811015613faa578281015182820152602001613f92565b85811115613fb9576000868301525b50919695505050505050565b6060610fc8826020015160008460000151613f24565b60608182601f01101561404a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b8282840110156140b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b81830184511015614123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105e9565b60608215801561414257604051915060008252602082016040526141aa565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561417b578051835260209283019201614163565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161427e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b50604080518082019091528151815260209182019181019190915290565b606060008060006142ac856134b7565b9194509250905060018160018111156142c7576142c7614fe6565b14614354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105e9565b84516143608385614e7a565b146143ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105e9565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816144065790505090506000845b87518110156144f4576000806144796040518060400160405280858d6000015161445d91906149b2565b8152602001858d602001516144729190614e7a565b90526134b7565b5091509150604051806040016040528083836144959190614e7a565b8152602001848c602001516144aa9190614e7a565b8152508585815181106144bf576144bf614f35565b60209081029190910101526144d5600185614e7a565b93506144e18183614e7a565b6144eb9084614e7a565b92505050614433565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561457657614576614500565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146145a257600080fd5b919050565b600082601f8301126145b857600080fd5b813567ffffffffffffffff8111156145d2576145d2614500565b61460360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161452f565b81815284602083860101111561461857600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561464757600080fd5b60405160c0810167ffffffffffffffff828210818311171561466b5761466b614500565b81604052829350843583526146826020860161457e565b60208401526146936040860161457e565b6040840152606085013560608401526080850135608084015260a08501359150808211156146c057600080fd5b506146cd858286016145a7565b60a0830152505092915050565b600080600080600085870360e08112156146f357600080fd5b863567ffffffffffffffff8082111561470b57600080fd5b6147178a838b01614635565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561475057600080fd5b60408901955060c089013592508083111561476a57600080fd5b828901925089601f84011261477e57600080fd5b823591508082111561478f57600080fd5b508860208260051b84010111156147a557600080fd5b959894975092955050506020019190565b60005b838110156147d15781810151838201526020016147b9565b838111156147e0576000848401525b50505050565b600081518084526147fe8160208601602086016147b6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ae760208301846147e6565b60006020828403121561485557600080fd5b5035919050565b60006020828403121561486e57600080fd5b813567ffffffffffffffff81111561488557600080fd5b611e1084828501614635565b600080600080600060a086880312156148a957600080fd5b6148b28661457e565b945060208601359350604086013567ffffffffffffffff80821682146148d757600080fd5b90935060608701359081151582146148ee57600080fd5b9092506080870135908082111561490457600080fd5b50614911888289016145a7565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516149728160498501602087016147b6565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149c4576149c4614983565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a0757614a076149c9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614a5b57614a5b614983565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614a9a57614a9a614983565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614ace57614ace614983565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614b1557614b15614983565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614b5057614b50614983565b60008712925087820587128484161615614b6c57614b6c614983565b87850587128184161615614b8257614b82614983565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614bca57614bca614983565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614bfe57614bfe614983565b50500190565b600067ffffffffffffffff808316818516808303821115614c2757614c27614983565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615614c5f57614c5f614983565b02949350505050565b600082614c7757614c776149c9565b500490565b80516fffffffffffffffffffffffffffffffff811681146145a257600080fd5b600060608284031215614cae57600080fd5b6040516060810181811067ffffffffffffffff82111715614cd157614cd1614500565b60405282518152614ce460208401614c7c565b6020820152614cf560408401614c7c565b60408201529392505050565b600060808284031215614d1357600080fd5b6040516080810181811067ffffffffffffffff82111715614d3657614d36614500565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614d8257614d82614500565b8360051b6020614d9381830161452f565b868152918501918181019036841115614dab57600080fd5b865b84811015614ddf57803586811115614dc55760008081fd5b614dd136828b016145a7565b845250918301918301614dad565b50979650505050505050565b60008451614dfd8184602089016147b6565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614e39816001850160208a016147b6565b60019201918201528351614e548160028401602088016147b6565b0160020195945050505050565b600060208284031215614e7357600080fd5b5051919050565b60008219821115614e8d57614e8d614983565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ec357614ec3614983565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f1560c08301846147e6565b98975050505050505050565b600082614f3057614f306149c9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614f7757614f776149c9565b8060ff84160691505092915050565b600060ff821660ff841680821015614fa057614fa0614983565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fe157614fe1614983
565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"
,
Bin
:
"0x6101206040523480156200001257600080fd5b50604051620053
9238038062005392833981016040819052620000359162000261565b6000608081905260a052600160c0526001600160a01b0382166101005260e08190526200006162000069565b50506200029d565b600054610100900460ff16158080156200008a5750600054600160ff909116105b80620000ba5750620000a730620001af60201b62001ab31760201c565b158015620000ba575060005460ff166001145b620001235760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff19166001179055801562000147576000805461ff0019166101001790555b603280546001600160a01b03191661dead17905562000165620001be565b8015620001ac576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6001600160a01b03163b151590565b600054610100900460ff166200022b5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b60648201526084016200011a565b60408051606081018252633b9aca0080825260006020830152436001600160401b031691909201819052600160c01b0217600155565b600080604083850312156200027557600080fd5b82516001600160a01b03811681146200028d57600080fd5b6020939093015192949293505050565b60805160a05160c05160e0516101005161508d62000305600039600081816101a001528181610aa401528181610f420152818161132d015261159f0152600081816105190152611e1f01526000610ead01526000610e8401526000610e5b015261508d6000f3fe6080604052600436106101625760003560e01c80638b4c40b0116100c0578063cd7c978911610074578063e965084c11610059578063e965084c14610468578063e9e05c42146104f4578063f4daa2911461050757600080fd5b8063cd7c9789146103b2578063cff0ab96146103c757600080fd5b80639bf62d82116100a55780639bf62d8214610340578063a14238e71461036d578063ca3e99ba1461039d57600080fd5b80638b4c40b0146101875780638c3152e91461032057600080fd5b806364b79208116101175780636dbffb78116100fc5780636dbffb78146102c55780638129fc1c146102f5578063867ead131461030a57600080fd5b806364b79208146102995780636bb0291e146102b057600080fd5b80634870496f116101485780634870496f1461022557806354fd4d50146102455780635c1f28271461026757600080fd5b80621c2ff61461018e57806313620abd146101ec57600080fd5b36610189576101873334620186a060006040518060200160405280600081525061053b565b005b600080fd5b34801561019a57600080fd5b506101c27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101f857600080fd5b50610204633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e3565b34801561023157600080fd5b50610187610240366004614745565b6109b3565b34801561025157600080fd5b5061025a610e54565b6040516101e3919061489b565b34801561027357600080fd5b5061028b6fffffffffffffffffffffffffffffffff81565b6040519081526020016101e3565b3480156102a557600080fd5b5061028b627a120081565b3480156102bc57600080fd5b5061028b600481565b3480156102d157600080fd5b506102e56102e03660046148ae565b610ef7565b60405190151581526020016101e3565b34801561030157600080fd5b50610187610fce565b34801561031657600080fd5b5061028b61271081565b34801561032c57600080fd5b5061018761033b3660046148c7565b61118c565b34801561034c57600080fd5b506032546101c29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037957600080fd5b506102e56103883660046148ae565b60336020526000908152604090205460ff1681565b3480156103a957600080fd5b5061028b611aa2565b3480156103be57600080fd5b5061028b600881565b3480156103d357600080fd5b5060015461042f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e3565b34801561047457600080fd5b506104c66104833660046148ae565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e3565b6101876105023660046148fc565b61053b565b34801561051357600080fd5b5061028b7f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105f25773ffffffffffffffffffffffffffffffffffffffff8716156105f257604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b33328114610613575033731111000000000000000000000000000000001111015b6000348888888860405160200161062e959493929190614989565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161069e919061489b565b60405180910390a450506001546000906106de907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614a1d565b905080156108125760006106f66004627a1200614a63565b6001546107219190700100000000000000000000000000000000900467ffffffffffffffff16614acb565b9050600060086107356004627a1200614a63565b6001546107559085906fffffffffffffffffffffffffffffffff16614b3f565b61075f9190614a63565b6107699190614a63565b6001549091506000906107ac906107939084906fffffffffffffffffffffffffffffffff16614bfb565b6127106fffffffffffffffffffffffffffffffff611acf565b905060018411156107d3576107d06107938260086107cb600189614a1d565b611aee565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610845908490700100000000000000000000000000000000900467ffffffffffffffff16614c6f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105e9565b60015460009061094d906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616614c9b565b6fffffffffffffffffffffffffffffffff169050600061097148633b9aca00611b43565b61097b9083614cd3565b905060005a61098a9086614a1d565b9050808211156109a6576109a66109a18284614a1d565b611b5a565b5050505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105e9565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190614d07565b519050610b3e610b3936869003860186614d6c565b611b88565b8114610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105e9565b6000610bd787611be4565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c63575080604001516fffffffffffffffffffffffffffffffff1687148015610c63575080518314155b610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105e9565b610d07826040880135610d028789614dd2565b611c14565b610d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105e9565b604080516060810182528481526fffffffffffffffffffffffffffffffff42811660208084019182528b831684860190815260008881526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558a830151908b0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a45050505050505050565b6060610e7f7f0000000000000000000000000000000000000000000000000000000000000000611cdb565b610ea87f0000000000000000000000000000000000000000000000000000000000000000611cdb565b610ed17f0000000000000000000000000000000000000000000000000000000000000000611cdb565b604051602001610ee393929190614e56565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fc89073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad9190614d07565b602001516fffffffffffffffffffffffffffffffff16611e18565b92915050565b600054610100900460ff1615808015610fee5750600054600160ff909116105b806110085750303b158015611008575060005460ff166001145b611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105e9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156110f257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055611126611e4c565b801561118957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105e9565b600061124082611be4565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e00000000000000000000000000000000000060648201526084016105e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614ecc565b81602001516fffffffffffffffffffffffffffffffff161015611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105e9565b6114a481602001516fffffffffffffffffffffffffffffffff16611e18565b611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161f9190614d07565b82518151919250146116d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105e9565b6116f881602001516fffffffffffffffffffffffffffffffff16611e18565b6117aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60008381526033602052604090205460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105e9565b600083815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608084015161189290614e2090614ee5565b5a1015611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016105e9565b6020840151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604084015160009061199390614e205a6119849190614a1d565b87606001518860a00151611f2f565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906119f890841515815260200190565b60405180910390a280158015611a0e5750326001145b15611a9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016105e9565b5050505050565b611ab06004627a1200614a63565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000611ae4611ade8585611f49565b83611f59565b90505b9392505050565b6000670de0b6b3a7640000611b2f611b068583614a63565b611b1890670de0b6b3a7640000614acb565b611b2a85670de0b6b3a7640000614b3f565b611f68565b611b399086614b3f565b611ae49190614a63565b600081831015611b535781611ae7565b5090919050565b6000805a90505b825a611b6d9083614a1d565b1015611b8357611b7c82614efd565b9150611b61565b505050565b60008160000151826020015183604001518460600151604051602001611bc7949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611bc7979096959101614f35565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611cd29101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611f99565b95945050505050565b606081600003611d1e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611d485780611d3281614efd565b9150611d419050600a83614cd3565b9150611d22565b60008167ffffffffffffffff811115611d6357611d6361456b565b6040519080825280601f01601f191660200182016040528015611d8d576020820181803683370190505b5090505b8415611e1057611da2600183614a1d565b9150611daf600a86614f8c565b611dba906030614ee5565b60f81b818381518110611dcf57611dcf614fa0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611e09600a86614cd3565b9450611d91565b949350505050565b6000611e447f000000000000000000000000000000000000000000000000000000000000000083614ee5565b421192915050565b600054610100900460ff16611ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e9565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600080600080845160208601878a8af19695505050505050565b600081831215611b535781611ae7565b6000818312611b535781611ae7565b6000611ae7670de0b6b3a764000083611f8086611fbd565b611f8a9190614b3f565b611f949190614a63565b612201565b600080611fa586612440565b9050611fb381868686612472565b9695505050505050565b6000808213612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b6000606061203584612499565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361223257506000919050565b680755bf798b4a1bf1e582126122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105e9565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060818051906020012060405160200161245c91815260200190565b6040516020818303038152906040529050919050565b6000611cd28461248387868661256f565b8051602091820120825192909101919091201490565b6000808211612504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606060008451116125dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016105e9565b60006125e784612ff7565b905060006125f4866130e6565b905060008460405160200161260b91815260200190565b60405160208183030381529060405290506000805b8451811015612f6e57600085828151811061263d5761263d614fa0565b6020026020010151905084518311156126d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016105e9565b8260000361279157805180516020918201206040516127269261270092910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61278c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105e9565b6128e8565b80515160201161284757805180516020918201206040516127bb9261270092910190815260200190565b61278c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105e9565b8051845160208087019190912082519190920120146128e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105e9565b6128f460106001614ee5565b81602001515103612ad55784518303612a6d576000612930826020015160108151811061292357612923614fa0565b6020026020010151613281565b905060008151116129c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016105e9565b600187516129d19190614a1d565b8314612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016105e9565b9650611ae795505050505050565b6000858481518110612a8157612a81614fa0565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612aac57612aac614fa0565b60200260200101519050612abf816133e1565b9550612acc600186614ee5565b94505050612f5b565b600281602001515103612ed3576000612aed82613406565b9050600081600081518110612b0457612b04614fa0565b016020015160f81c90506000612b1b600283614fcf565b612b26906002614ff1565b90506000612b37848360ff1661342a565b90506000612b458a8961342a565b90506000612b538383613460565b905080835114612be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016105e9565b60ff851660021480612bfa575060ff85166003145b15612dee5780825114612c8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016105e9565b6000612cab886020015160018151811061292357612923614fa0565b90506000815111612d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016105e9565b60018d51612d4c9190614a1d565b8914612dda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016105e9565b9c50611ae79b505050505050505050505050565b60ff85161580612e01575060ff85166001145b15612e4057612e2d8760200151600181518110612e2057612e20614fa0565b60200260200101516133e1565b9950612e39818a614ee5565b9850612ec8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105e9565b505050505050612f5b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105e9565b5080612f6681614efd565b915050612620565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016105e9565b805160609060008167ffffffffffffffff8111156130175761301761456b565b60405190808252806020026020018201604052801561305c57816020015b60408051808201909152606080825260208201528152602001906001900390816130355790505b50905060005b828110156130de57604051806040016040528086838151811061308757613087614fa0565b602002602001015181526020016130b68784815181106130a9576130a9614fa0565b602002602001015161350f565b8152508282815181106130cb576130cb614fa0565b6020908102919091010152600101613062565b509392505050565b805160609060006130f8826002615014565b67ffffffffffffffff8111156131105761311061456b565b6040519080825280601f01601f19166020018201604052801561313a576020820181803683370190505b5090506000805b838110156132775785818151811061315b5761315b614fa0565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff000000000000000000000000000000000000000000000000000000000000016836131b7836002615014565b815181106131c7576131c7614fa0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f00000000000000000000000000000000000000000000000000000000000000821683613225836002615014565b613230906001614ee5565b8151811061324057613240614fa0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613141565b5090949350505050565b6060600080600061329185613522565b9194509250905060008160018111156132ac576132ac615051565b14613339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105e9565b6133438284614ee5565b8551146133d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105e9565b611cd285602001518484613f8f565b606060208260000151106133fd576133f882613281565b610fc8565b610fc882614030565b6060610fc8613425836020015160008151811061292357612923614fa0565b6130e6565b6060825182106134495750604080516020810190915260008152610fc8565b611ae7838384865161345b9190614a1d565b614046565b60008060008351855110613475578351613478565b84515b90505b80821080156134ff575083828151811061349757613497614fa0565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168583815181106134d6576134d6614fa0565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156130de5781600101915061347b565b6060610fc861351d8361421e565b614307565b6000806000808460000151116135e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b6020840151805160001a607f8111613605576000600160009450945094505050613f88565b60b7811161381357600061361a608083614a1d565b9050808760000151116136d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105e9565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061374e57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105e9565b5060019550935060009250613f88915050565b60bf8111613b6157600061382860b783614a1d565b9050808760000151116138e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105e9565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036139c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105e9565b613a8f8184614ee5565b895111613b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105e9565b613b4f836001614ee5565b9750955060009450613f889350505050565b60f78111613c42576000613b7660c083614a1d565b905080876000015111613c31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b600195509350849250613f88915050565b6000613c4f60f783614a1d565b905080876000015111613d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613de8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613eac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105e9565b613eb68184614ee5565b895111613f6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b613f76836001614ee5565b9750955060019450613f889350505050565b9193909250565b606060008267ffffffffffffffff811115613fac57613fac61456b565b6040519080825280601f01601f191660200182016040528015613fd6576020820181803683370190505b50905082600003613fe8579050611ae7565b6000613ff48587614ee5565b90506020820160005b85811015614015578281015182820152602001613ffd565b85811115614024576000868301525b50919695505050505050565b6060610fc8826020015160008460000151613f8f565b60608182601f0110156140b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b828284011015614121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b8183018451101561418e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105e9565b6060821580156141ad5760405191506000825260208201604052614215565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141e65780518352602092830192016141ce565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b50604080518082019091528151815260209182019181019190915290565b6060600080600061431785613522565b91945092509050600181600181111561433257614332615051565b146143bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105e9565b84516143cb8385614ee5565b14614458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105e9565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816144715790505090506000845b875181101561455f576000806144e46040518060400160405280858d600001516144c89190614a1d565b8152602001858d602001516144dd9190614ee5565b9052613522565b5091509150604051806040016040528083836145009190614ee5565b8152602001848c602001516145159190614ee5565b81525085858151811061452a5761452a614fa0565b6020908102919091010152614540600185614ee5565b935061454c8183614ee5565b6145569084614ee5565b9250505061449e565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156145e1576145e161456b565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461460d57600080fd5b919050565b600082601f83011261462357600080fd5b813567ffffffffffffffff81111561463d5761463d61456b565b61466e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161459a565b81815284602083860101111561468357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156146b257600080fd5b60405160c0810167ffffffffffffffff82821081831117156146d6576146d661456b565b81604052829350843583526146ed602086016145e9565b60208401526146fe604086016145e9565b6040840152606085013560608401526080850135608084015260a085013591508082111561472b57600080fd5b5061473885828601614612565b60a0830152505092915050565b600080600080600085870360e081121561475e57600080fd5b863567ffffffffffffffff8082111561477657600080fd5b6147828a838b016146a0565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156147bb57600080fd5b60408901955060c08901359250808311156147d557600080fd5b828901925089601f8401126147e957600080fd5b82359150808211156147fa57600080fd5b508860208260051b840101111561481057600080fd5b959894975092955050506020019190565b60005b8381101561483c578181015183820152602001614824565b8381111561484b576000848401525b50505050565b60008151808452614869816020860160208601614821565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ae76020830184614851565b6000602082840312156148c057600080fd5b5035919050565b6000602082840312156148d957600080fd5b813567ffffffffffffffff8111156148f057600080fd5b611e10848285016146a0565b600080600080600060a0868803121561491457600080fd5b61491d866145e9565b945060208601359350604086013567ffffffffffffffff808216821461494257600080fd5b909350606087013590811515821461495957600080fd5b9092506080870135908082111561496f57600080fd5b5061497c88828901614612565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516149dd816049850160208701614821565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614a2f57614a2f6149ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a7257614a72614a34565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614ac657614ac66149ee565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614b0557614b056149ee565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614b3957614b396149ee565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614b8057614b806149ee565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614bbb57614bbb6149ee565b60008712925087820587128484161615614bd757614bd76149ee565b87850587128184161615614bed57614bed6149ee565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614c3557614c356149ee565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614c6957614c696149ee565b50500190565b600067ffffffffffffffff808316818516808303821115614c9257614c926149ee565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615614cca57614cca6149ee565b02949350505050565b600082614ce257614ce2614a34565b500490565b80516fffffffffffffffffffffffffffffffff8116811461460d57600080fd5b600060608284031215614d1957600080fd5b6040516060810181811067ffffffffffffffff82111715614d3c57614d3c61456b565b60405282518152614d4f60208401614ce7565b6020820152614d6060408401614ce7565b60408201529392505050565b600060808284031215614d7e57600080fd5b6040516080810181811067ffffffffffffffff82111715614da157614da161456b565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614ded57614ded61456b565b8360051b6020614dfe81830161459a565b868152918501918181019036841115614e1657600080fd5b865b84811015614e4a57803586811115614e305760008081fd5b614e3c36828b01614612565b845250918301918301614e18565b50979650505050505050565b60008451614e68818460208901614821565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614ea4816001850160208a01614821565b60019201918201528351614ebf816002840160208801614821565b0160020195945050505050565b600060208284031215614ede57600080fd5b5051919050565b60008219821115614ef857614ef86149ee565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f2e57614f2e6149ee565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f8060c0830184614851565b98975050505050505050565b600082614f9b57614f9b614a34565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614fe257614fe2614a34565b8060ff84160691505092915050565b600060ff821660ff84168082101561500b5761500b6149ee565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561504c5761504c6149ee
565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"
,
}
// OptimismPortalABI is the input ABI used to generate the binding from.
...
...
op-bindings/bindings/optimismportal_more.go
View file @
9b74fd6d
...
...
@@ -13,7 +13,7 @@ const OptimismPortalStorageLayoutJSON = "{\"storage\":[{\"astId\":1000,\"contrac
var
OptimismPortalStorageLayout
=
new
(
solc
.
StorageLayout
)
var
OptimismPortalDeployedBin
=
"0x6080604052600436106101625760003560e01c80638b4c40b0116100c0578063cd7c978911610074578063e965084c11610059578063e965084c14610468578063e9e05c42146104f4578063f4daa2911461050757600080fd5b8063cd7c9789146103b2578063cff0ab96146103c757600080fd5b80639bf62d82116100a55780639bf62d8214610340578063a14238e71461036d578063ca3e99ba1461039d57600080fd5b80638b4c40b0146101875780638c3152e91461032057600080fd5b806364b79208116101175780636dbffb78116100fc5780636dbffb78146102c55780638129fc1c146102f5578063867ead131461030a57600080fd5b806364b79208146102995780636bb0291e146102b057600080fd5b80634870496f116101485780634870496f1461022557806354fd4d50146102455780635c1f28271461026757600080fd5b80621c2ff61461018e57806313620abd146101ec57600080fd5b36610189576101873334620186a060006040518060200160405280600081525061053b565b005b600080fd5b34801561019a57600080fd5b506101c27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101f857600080fd5b50610204633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e3565b34801561023157600080fd5b50610187610240366004614
6da565b6109b3565b34801561025157600080fd5b5061025a610e54565b6040516101e39190614830565b34801561027357600080fd5b5061028b6fffffffffffffffffffffffffffffffff81565b6040519081526020016101e3565b3480156102a557600080fd5b5061028b627a120081565b3480156102bc57600080fd5b5061028b600481565b3480156102d157600080fd5b506102e56102e0366004614843565b610ef7565b60405190151581526020016101e3565b34801561030157600080fd5b50610187610fce565b34801561031657600080fd5b5061028b61271081565b34801561032c57600080fd5b5061018761033b36600461485c565b61118c565b34801561034c57600080fd5b506032546101c29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037957600080fd5b506102e5610388366004614843565b60336020526000908152604090205460ff1681565b3480156103a957600080fd5b5061028b611aa2565b3480156103be57600080fd5b5061028b600881565b3480156103d357600080fd5b5060015461042f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e3565b34801561047457600080fd5b506104c6610483366004614843565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e3565b610187610502366004614891565b61053b565b34801561051357600080fd5b5061028b7f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105f25773ffffffffffffffffffffffffffffffffffffffff8716156105f257604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b33328114610613575033731111000000000000000000000000000000001111015b6000348888888860405160200161062e95949392919061491e565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161069e9190614830565b60405180910390a450506001546000906106de907801000000000000000000000000000000000000000000000000900467ffffffffffffffff16436149b2565b905080156108125760006106f66004627a12006149f8565b6001546107219190700100000000000000000000000000000000900467ffffffffffffffff16614a60565b9050600060086107356004627a12006149f8565b6001546107559085906fffffffffffffffffffffffffffffffff16614ad4565b61075f91906149f8565b61076991906149f8565b6001549091506000906107ac906107939084906fffffffffffffffffffffffffffffffff16614b90565b6127106fffffffffffffffffffffffffffffffff611acf565b905060018411156107d3576107d06107938260086107cb6001896149b2565b611aee565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610845908490700100000000000000000000000000000000900467ffffffffffffffff16614c04565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105e9565b60015460009061094d906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616614c30565b6fffffffffffffffffffffffffffffffff169050600061097148633b9aca00611b43565b61097b9083614c68565b905060005a61098a90866149b2565b9050808211156109a6576109a66109a182846149b2565b611b5a565b5050505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105e9565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190614c9c565b519050610b3e610b3936869003860186614d01565b611b88565b8114610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105e9565b6000610bd787611be4565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c63575080604001516fffffffffffffffffffffffffffffffff1687148015610c63575080518314155b610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105e9565b610d07826040880135610d028789614d67565b611c14565b610d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105e9565b604080516060810182528481526fffffffffffffffffffffffffffffffff42811660208084019182528b831684860190815260008881526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558a830151908b0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a45050505050505050565b6060610e7f7f0000000000000000000000000000000000000000000000000000000000000000611cdb565b610ea87f0000000000000000000000000000000000000000000000000000000000000000611cdb565b610ed17f0000000000000000000000000000000000000000000000000000000000000000611cdb565b604051602001610ee393929190614deb565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fc89073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad9190614c9c565b602001516fffffffffffffffffffffffffffffffff16611e18565b92915050565b600054610100900460ff1615808015610fee5750600054600160ff909116105b806110085750303b158015611008575060005460ff166001145b611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105e9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156110f257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055611126611e4c565b801561118957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105e9565b600061124082611be4565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e00000000000000000000000000000000000060648201526084016105e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614e61565b81602001516fffffffffffffffffffffffffffffffff161015611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105e9565b6114a481602001516fffffffffffffffffffffffffffffffff16611e18565b611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161f9190614c9c565b82518151919250146116d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105e9565b6116f881602001516fffffffffffffffffffffffffffffffff16611e18565b6117aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60008381526033602052604090205460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105e9565b600083815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608084015161189290614e2090614e7a565b5a1015611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016105e9565b6020840151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604084015160009061199390614e205a61198491906149b2565b87606001518860a00151611f2f565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906119f890841515815260200190565b60405180910390a280158015611a0e5750326001145b15611a9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016105e9565b5050505050565b611ab06004627a12006149f8565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000611ae4611ade8585611f49565b83611f59565b90505b9392505050565b6000670de0b6b3a7640000611b2f611b0685836149f8565b611b1890670de0b6b3a7640000614a60565b611b2a85670de0b6b3a7640000614ad4565b611f68565b611b399086614ad4565b611ae491906149f8565b600081831015611b535781611ae7565b5090919050565b6000805a90505b825a611b6d90836149b2565b1015611b8357611b7c82614e92565b9150611b61565b505050565b60008160000151826020015183604001518460600151604051602001611bc7949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611bc7979096959101614eca565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611cd29101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611f99565b95945050505050565b606081600003611d1e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611d485780611d3281614e92565b9150611d419050600a83614c68565b9150611d22565b60008167ffffffffffffffff811115611d6357611d63614500565b6040519080825280601f01601f191660200182016040528015611d8d576020820181803683370190505b5090505b8415611e1057611da26001836149b2565b9150611daf600a86614f21565b611dba906030614e7a565b60f81b818381518110611dcf57611dcf614f35565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611e09600a86614c68565b9450611d91565b949350505050565b6000611e447f000000000000000000000000000000000000000000000000000000000000000083614e7a565b421192915050565b600054610100900460ff16611ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e9565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600080600080845160208601878a8af19695505050505050565b600081831215611b535781611ae7565b6000818312611b535781611ae7565b6000611ae7670de0b6b3a764000083611f8086611fbd565b611f8a9190614ad4565b611f9491906149f8565b612201565b600080611fa586612440565b9050611fb381868686612472565b9695505050505050565b6000808213612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b6000606061203584612499565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361223257506000919050565b680755bf798b4a1bf1e582126122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105e9565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060818051906020012060405160200161245c91815260200190565b6040516020818303038152906040529050919050565b6000611cd28461248387868661256f565b8051602091820120825192909101919091201490565b6000808211612504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b6060600061257c84612f8c565b905060006125898661307b565b90506000846040516020016125a091815260200190565b60405160208183030381529060405290506000805b8451811015612f035760008582815181106125d2576125d2614f35565b60200260200101519050845183111561266d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016105e9565b8260000361272657805180516020918201206040516126bb9261269592910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105e9565b61287d565b8051516020116127dc57805180516020918201206040516127509261269592910190815260200190565b612721576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105e9565b80518451602080870191909120825191909201201461287d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105e9565b61288960106001614e7a565b81602001515103612a6a5784518303612a025760006128c582602001516010815181106128b8576128b8614f35565b6020026020010151613216565b90506000815111612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016105e9565b6001875161296691906149b2565b83146129f4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016105e9565b9650611ae795505050505050565b6000858481518110612a1657612a16614f35565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612a4157612a41614f35565b60200260200101519050612a5481613376565b9550612a61600186614e7a565b94505050612ef0565b600281602001515103612e68576000612a828261339b565b9050600081600081518110612a9957612a99614f35565b016020015160f81c90506000612ab0600283614f64565b612abb906002614f86565b90506000612acc848360ff166133bf565b90506000612ada8a896133bf565b90506000612ae883836133f5565b905080835114612b7a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016105e9565b60ff851660021480612b8f575060ff85166003145b15612d835780825114612c24576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016105e9565b6000612c4088602001516001815181106128b8576128b8614f35565b90506000815111612cd3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016105e9565b60018d51612ce191906149b2565b8914612d6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016105e9565b9c50611ae79b505050505050505050505050565b60ff85161580612d96575060ff85166001145b15612dd557612dc28760200151600181518110612db557612db5614f35565b6020026020010151613376565b9950612dce818a614e7a565b9850612e5d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105e9565b505050505050612ef0565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105e9565b5080612efb81614e92565b9150506125b5565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016105e9565b805160609060008167ffffffffffffffff811115612fac57612fac614500565b604051908082528060200260200182016040528015612ff157816020015b6040805180820190915260608082526020820152815260200190600190039081612fca5790505b50905060005b8281101561307357604051806040016040528086838151811061301c5761301c614f35565b6020026020010151815260200161304b87848151811061303e5761303e614f35565b60200260200101516134a4565b81525082828151811061306057613060614f35565b6020908102919091010152600101612ff7565b509392505050565b8051606090600061308d826002614fa9565b67ffffffffffffffff8111156130a5576130a5614500565b6040519080825280601f01601f1916602001820160405280156130cf576020820181803683370190505b5090506000805b8381101561320c578581815181106130f0576130f0614f35565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff0000000000000000000000000000000000000000000000000000000000000168361314c836002614fa9565b8151811061315c5761315c614f35565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f000000000000000000000000000000000000000000000000000000000000008216836131ba836002614fa9565b6131c5906001614e7a565b815181106131d5576131d5614f35565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506001016130d6565b5090949350505050565b60606000806000613226856134b7565b91945092509050600081600181111561324157613241614fe6565b146132ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105e9565b6132d88284614e7a565b855114613367576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105e9565b611cd285602001518484613f24565b606060208260000151106133925761338d82613216565b610fc8565b610fc882613fc5565b6060610fc86133ba83602001516000815181106128b8576128b8614f35565b61307b565b6060825182106133de5750604080516020810190915260008152610fc8565b611ae783838486516133f091906149b2565b613fdb565b6000806000835185511061340a57835161340d565b84515b90505b8082108015613494575083828151811061342c5761342c614f35565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191685838151811061346b5761346b614f35565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b1561307357816001019150613410565b6060610fc86134b2836141b3565b61429c565b600080600080846000015111613575576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b6020840151805160001a607f811161359a576000600160009450945094505050613f1d565b60b781116137a85760006135af6080836149b2565b90508087600001511161366a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105e9565b6001838101517fff000000000000000000000000000000000000000000000000000000000000001690821415806136e357507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105e9565b5060019550935060009250613f1d915050565b60bf8111613af65760006137bd60b7836149b2565b905080876000015111613878576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613956576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613a1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105e9565b613a248184614e7a565b895111613ad9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105e9565b613ae4836001614e7a565b9750955060009450613f1d9350505050565b60f78111613bd7576000613b0b60c0836149b2565b905080876000015111613bc6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b600195509350849250613f1d915050565b6000613be460f7836149b2565b905080876000015111613c9f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613d7d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105e9565b613e4b8184614e7a565b895111613f00576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b613f0b836001614e7a565b9750955060019450613f1d9350505050565b9193909250565b606060008267ffffffffffffffff811115613f4157613f41614500565b6040519080825280601f01601f191660200182016040528015613f6b576020820181803683370190505b50905082600003613f7d579050611ae7565b6000613f898587614e7a565b90506020820160005b85811015613faa578281015182820152602001613f92565b85811115613fb9576000868301525b50919695505050505050565b6060610fc8826020015160008460000151613f24565b60608182601f01101561404a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b8282840110156140b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b81830184511015614123576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105e9565b60608215801561414257604051915060008252602082016040526141aa565b6040519150601f8416801560200281840101858101878315602002848b0101015b8183101561417b578051835260209283019201614163565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b6040805180820190915260008082526020820152600082511161427e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b50604080518082019091528151815260209182019181019190915290565b606060008060006142ac856134b7565b9194509250905060018160018111156142c7576142c7614fe6565b14614354576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105e9565b84516143608385614e7a565b146143ed576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105e9565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816144065790505090506000845b87518110156144f4576000806144796040518060400160405280858d6000015161445d91906149b2565b8152602001858d602001516144729190614e7a565b90526134b7565b5091509150604051806040016040528083836144959190614e7a565b8152602001848c602001516144aa9190614e7a565b8152508585815181106144bf576144bf614f35565b60209081029190910101526144d5600185614e7a565b93506144e18183614e7a565b6144eb9084614e7a565b92505050614433565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561457657614576614500565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff811681146145a257600080fd5b919050565b600082601f8301126145b857600080fd5b813567ffffffffffffffff8111156145d2576145d2614500565b61460360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161452f565b81815284602083860101111561461857600080fd5b816020850160208301376000918101602001919091529392505050565b600060c0828403121561464757600080fd5b60405160c0810167ffffffffffffffff828210818311171561466b5761466b614500565b81604052829350843583526146826020860161457e565b60208401526146936040860161457e565b6040840152606085013560608401526080850135608084015260a08501359150808211156146c057600080fd5b506146cd858286016145a7565b60a0830152505092915050565b600080600080600085870360e08112156146f357600080fd5b863567ffffffffffffffff8082111561470b57600080fd5b6147178a838b01614635565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08401121561475057600080fd5b60408901955060c089013592508083111561476a57600080fd5b828901925089601f84011261477e57600080fd5b823591508082111561478f57600080fd5b508860208260051b84010111156147a557600080fd5b959894975092955050506020019190565b60005b838110156147d15781810151838201526020016147b9565b838111156147e0576000848401525b50505050565b600081518084526147fe8160208601602086016147b6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ae760208301846147e6565b60006020828403121561485557600080fd5b5035919050565b60006020828403121561486e57600080fd5b813567ffffffffffffffff81111561488557600080fd5b611e1084828501614635565b600080600080600060a086880312156148a957600080fd5b6148b28661457e565b945060208601359350604086013567ffffffffffffffff80821682146148d757600080fd5b90935060608701359081151582146148ee57600080fd5b9092506080870135908082111561490457600080fd5b50614911888289016145a7565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516149728160498501602087016147b6565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000828210156149c4576149c4614983565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a0757614a076149c9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614a5b57614a5b614983565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614a9a57614a9a614983565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614ace57614ace614983565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614b1557614b15614983565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614b5057614b50614983565b60008712925087820587128484161615614b6c57614b6c614983565b87850587128184161615614b8257614b82614983565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614bca57614bca614983565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614bfe57614bfe614983565b50500190565b600067ffffffffffffffff808316818516808303821115614c2757614c27614983565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615614c5f57614c5f614983565b02949350505050565b600082614c7757614c776149c9565b500490565b80516fffffffffffffffffffffffffffffffff811681146145a257600080fd5b600060608284031215614cae57600080fd5b6040516060810181811067ffffffffffffffff82111715614cd157614cd1614500565b60405282518152614ce460208401614c7c565b6020820152614cf560408401614c7c565b60408201529392505050565b600060808284031215614d1357600080fd5b6040516080810181811067ffffffffffffffff82111715614d3657614d36614500565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614d8257614d82614500565b8360051b6020614d9381830161452f565b868152918501918181019036841115614dab57600080fd5b865b84811015614ddf57803586811115614dc55760008081fd5b614dd136828b016145a7565b845250918301918301614dad565b50979650505050505050565b60008451614dfd8184602089016147b6565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614e39816001850160208a016147b6565b60019201918201528351614e548160028401602088016147b6565b0160020195945050505050565b600060208284031215614e7357600080fd5b5051919050565b60008219821115614e8d57614e8d614983565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ec357614ec3614983565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f1560c08301846147e6565b98975050505050505050565b600082614f3057614f306149c9565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614f7757614f776149c9565b8060ff84160691505092915050565b600060ff821660ff841680821015614fa057614fa0614983565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614fe157614fe1614983
565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"
var
OptimismPortalDeployedBin
=
"0x6080604052600436106101625760003560e01c80638b4c40b0116100c0578063cd7c978911610074578063e965084c11610059578063e965084c14610468578063e9e05c42146104f4578063f4daa2911461050757600080fd5b8063cd7c9789146103b2578063cff0ab96146103c757600080fd5b80639bf62d82116100a55780639bf62d8214610340578063a14238e71461036d578063ca3e99ba1461039d57600080fd5b80638b4c40b0146101875780638c3152e91461032057600080fd5b806364b79208116101175780636dbffb78116100fc5780636dbffb78146102c55780638129fc1c146102f5578063867ead131461030a57600080fd5b806364b79208146102995780636bb0291e146102b057600080fd5b80634870496f116101485780634870496f1461022557806354fd4d50146102455780635c1f28271461026757600080fd5b80621c2ff61461018e57806313620abd146101ec57600080fd5b36610189576101873334620186a060006040518060200160405280600081525061053b565b005b600080fd5b34801561019a57600080fd5b506101c27f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156101f857600080fd5b50610204633b9aca0081565b6040516fffffffffffffffffffffffffffffffff90911681526020016101e3565b34801561023157600080fd5b50610187610240366004614
745565b6109b3565b34801561025157600080fd5b5061025a610e54565b6040516101e3919061489b565b34801561027357600080fd5b5061028b6fffffffffffffffffffffffffffffffff81565b6040519081526020016101e3565b3480156102a557600080fd5b5061028b627a120081565b3480156102bc57600080fd5b5061028b600481565b3480156102d157600080fd5b506102e56102e03660046148ae565b610ef7565b60405190151581526020016101e3565b34801561030157600080fd5b50610187610fce565b34801561031657600080fd5b5061028b61271081565b34801561032c57600080fd5b5061018761033b3660046148c7565b61118c565b34801561034c57600080fd5b506032546101c29073ffffffffffffffffffffffffffffffffffffffff1681565b34801561037957600080fd5b506102e56103883660046148ae565b60336020526000908152604090205460ff1681565b3480156103a957600080fd5b5061028b611aa2565b3480156103be57600080fd5b5061028b600881565b3480156103d357600080fd5b5060015461042f906fffffffffffffffffffffffffffffffff81169067ffffffffffffffff7001000000000000000000000000000000008204811691780100000000000000000000000000000000000000000000000090041683565b604080516fffffffffffffffffffffffffffffffff909416845267ffffffffffffffff92831660208501529116908201526060016101e3565b34801561047457600080fd5b506104c66104833660046148ae565b603460205260009081526040902080546001909101546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041683565b604080519384526fffffffffffffffffffffffffffffffff92831660208501529116908201526060016101e3565b6101876105023660046148fc565b61053b565b34801561051357600080fd5b5061028b7f000000000000000000000000000000000000000000000000000000000000000081565b8260005a905083156105f25773ffffffffffffffffffffffffffffffffffffffff8716156105f257604080517f08c379a00000000000000000000000000000000000000000000000000000000081526020600482015260248101919091527f4f7074696d69736d506f7274616c3a206d7573742073656e6420746f2061646460448201527f72657373283029207768656e206372656174696e67206120636f6e747261637460648201526084015b60405180910390fd5b33328114610613575033731111000000000000000000000000000000001111015b6000348888888860405160200161062e959493929190614989565b604051602081830303815290604052905060008973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fb3813568d9991fc951961fcb4c784893574240a28925604d09fc577c55bb7c328460405161069e919061489b565b60405180910390a450506001546000906106de907801000000000000000000000000000000000000000000000000900467ffffffffffffffff1643614a1d565b905080156108125760006106f66004627a1200614a63565b6001546107219190700100000000000000000000000000000000900467ffffffffffffffff16614acb565b9050600060086107356004627a1200614a63565b6001546107559085906fffffffffffffffffffffffffffffffff16614b3f565b61075f9190614a63565b6107699190614a63565b6001549091506000906107ac906107939084906fffffffffffffffffffffffffffffffff16614bfb565b6127106fffffffffffffffffffffffffffffffff611acf565b905060018411156107d3576107d06107938260086107cb600189614a1d565b611aee565b90505b6fffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff4316021760015550505b60018054849190601090610845908490700100000000000000000000000000000000900467ffffffffffffffff16614c6f565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550627a1200600160000160109054906101000a900467ffffffffffffffff1667ffffffffffffffff161315610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603e60248201527f5265736f757263654d65746572696e673a2063616e6e6f7420627579206d6f7260448201527f6520676173207468616e20617661696c61626c6520676173206c696d6974000060648201526084016105e9565b60015460009061094d906fffffffffffffffffffffffffffffffff1667ffffffffffffffff8616614c9b565b6fffffffffffffffffffffffffffffffff169050600061097148633b9aca00611b43565b61097b9083614cd3565b905060005a61098a9086614a1d565b9050808211156109a6576109a66109a18284614a1d565b611b5a565b5050505050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff16856040015173ffffffffffffffffffffffffffffffffffffffff1603610a72576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a20796f752063616e6e6f742073656e642060448201527f6d6573736167657320746f2074686520706f7274616c20636f6e74726163740060648201526084016105e9565b6040517fa25ae557000000000000000000000000000000000000000000000000000000008152600481018590526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa158015610b00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b249190614d07565b519050610b3e610b3936869003860186614d6c565b611b88565b8114610bcc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f7074696d69736d506f7274616c3a20696e76616c6964206f7574707574207260448201527f6f6f742070726f6f66000000000000000000000000000000000000000000000060648201526084016105e9565b6000610bd787611be4565b6000818152603460209081526040918290208251606081018452815481526001909101546fffffffffffffffffffffffffffffffff8082169383018490527001000000000000000000000000000000009091041692810192909252919250901580610c63575080604001516fffffffffffffffffffffffffffffffff1687148015610c63575080518314155b610cef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173682060448201527f68617320616c7265616479206265656e2070726f76656e00000000000000000060648201526084016105e9565b610d07826040880135610d028789614dd2565b611c14565b610d93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4f7074696d69736d506f7274616c3a20696e76616c696420776974686472617760448201527f616c20696e636c7573696f6e2070726f6f66000000000000000000000000000060648201526084016105e9565b604080516060810182528481526fffffffffffffffffffffffffffffffff42811660208084019182528b831684860190815260008881526034835286812095518655925190518416700100000000000000000000000000000000029316929092176001909301929092558a830151908b0151925173ffffffffffffffffffffffffffffffffffffffff918216939091169185917f67a6208cfcc0801d50f6cbe764733f4fddf66ac0b04442061a8a8c0cb6b63f629190a45050505050505050565b6060610e7f7f0000000000000000000000000000000000000000000000000000000000000000611cdb565b610ea87f0000000000000000000000000000000000000000000000000000000000000000611cdb565b610ed17f0000000000000000000000000000000000000000000000000000000000000000611cdb565b604051602001610ee393929190614e56565b604051602081830303815290604052905090565b6040517fa25ae55700000000000000000000000000000000000000000000000000000000815260048101829052600090610fc89073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063a25ae55790602401606060405180830381865afa158015610f89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fad9190614d07565b602001516fffffffffffffffffffffffffffffffff16611e18565b92915050565b600054610100900460ff1615808015610fee5750600054600160ff909116105b806110085750303b158015611008575060005460ff166001145b611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a656400000000000000000000000000000000000060648201526084016105e9565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156110f257600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead179055611126611e4c565b801561118957600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b60325473ffffffffffffffffffffffffffffffffffffffff1661dead14611235576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603f60248201527f4f7074696d69736d506f7274616c3a2063616e206f6e6c79207472696767657260448201527f206f6e65207769746864726177616c20706572207472616e73616374696f6e0060648201526084016105e9565b600061124082611be4565b60008181526034602090815260408083208151606081018352815481526001909101546fffffffffffffffffffffffffffffffff8082169483018590527001000000000000000000000000000000009091041691810191909152929350900361132b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206e60448201527f6f74206265656e2070726f76656e00000000000000000000000000000000000060648201526084016105e9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663887862726040518163ffffffff1660e01b8152600401602060405180830381865afa158015611396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ba9190614ecc565b81602001516fffffffffffffffffffffffffffffffff161015611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604b60248201527f4f7074696d69736d506f7274616c3a207769746864726177616c2074696d657360448201527f74616d70206c657373207468616e204c32204f7261636c65207374617274696e60648201527f672074696d657374616d70000000000000000000000000000000000000000000608482015260a4016105e9565b6114a481602001516fffffffffffffffffffffffffffffffff16611e18565b611556576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604560248201527f4f7074696d69736d506f7274616c3a2070726f76656e2077697468647261776160448201527f6c2066696e616c697a6174696f6e20706572696f6420686173206e6f7420656c60648201527f6170736564000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60408181015190517fa25ae5570000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a25ae55790602401606060405180830381865afa1580156115fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161f9190614d07565b82518151919250146116d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604960248201527f4f7074696d69736d506f7274616c3a206f757470757420726f6f742070726f7660448201527f656e206973206e6f74207468652073616d652061732063757272656e74206f7560648201527f7470757420726f6f740000000000000000000000000000000000000000000000608482015260a4016105e9565b6116f881602001516fffffffffffffffffffffffffffffffff16611e18565b6117aa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604360248201527f4f7074696d69736d506f7274616c3a206f75747075742070726f706f73616c2060448201527f66696e616c697a6174696f6e20706572696f6420686173206e6f7420656c617060648201527f7365640000000000000000000000000000000000000000000000000000000000608482015260a4016105e9565b60008381526033602052604090205460ff1615611849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f4f7074696d69736d506f7274616c3a207769746864726177616c20686173206160448201527f6c7265616479206265656e2066696e616c697a6564000000000000000000000060648201526084016105e9565b600083815260336020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055608084015161189290614e2090614ee5565b5a1015611921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603760248201527f4f7074696d69736d506f7274616c3a20696e73756666696369656e742067617360448201527f20746f2066696e616c697a65207769746864726177616c00000000000000000060648201526084016105e9565b6020840151603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909216919091179055604084015160009061199390614e205a6119849190614a1d565b87606001518860a00151611f2f565b603280547fffffffffffffffffffffffff00000000000000000000000000000000000000001661dead17905560405190915084907fdb5c7652857aa163daadd670e116628fb42e869d8ac4251ef8971d9e5727df1b906119f890841515815260200190565b60405180910390a280158015611a0e5750326001145b15611a9b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4f7074696d69736d506f7274616c3a207769746864726177616c206661696c6560448201527f640000000000000000000000000000000000000000000000000000000000000060648201526084016105e9565b5050505050565b611ab06004627a1200614a63565b81565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b6000611ae4611ade8585611f49565b83611f59565b90505b9392505050565b6000670de0b6b3a7640000611b2f611b068583614a63565b611b1890670de0b6b3a7640000614acb565b611b2a85670de0b6b3a7640000614b3f565b611f68565b611b399086614b3f565b611ae49190614a63565b600081831015611b535781611ae7565b5090919050565b6000805a90505b825a611b6d9083614a1d565b1015611b8357611b7c82614efd565b9150611b61565b505050565b60008160000151826020015183604001518460600151604051602001611bc7949392919093845260208401929092526040830152606082015260800190565b604051602081830303815290604052805190602001209050919050565b80516020808301516040808501516060860151608087015160a08801519351600097611bc7979096959101614f35565b604080516020810185905260009181018290528190606001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201209083018190529250611cd29101604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828201909152600182527f01000000000000000000000000000000000000000000000000000000000000006020830152908587611f99565b95945050505050565b606081600003611d1e57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115611d485780611d3281614efd565b9150611d419050600a83614cd3565b9150611d22565b60008167ffffffffffffffff811115611d6357611d6361456b565b6040519080825280601f01601f191660200182016040528015611d8d576020820181803683370190505b5090505b8415611e1057611da2600183614a1d565b9150611daf600a86614f8c565b611dba906030614ee5565b60f81b818381518110611dcf57611dcf614fa0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350611e09600a86614cd3565b9450611d91565b949350505050565b6000611e447f000000000000000000000000000000000000000000000000000000000000000083614ee5565b421192915050565b600054610100900460ff16611ee3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e6700000000000000000000000000000000000000000060648201526084016105e9565b60408051606081018252633b9aca00808252600060208301524367ffffffffffffffff169190920181905278010000000000000000000000000000000000000000000000000217600155565b600080600080845160208601878a8af19695505050505050565b600081831215611b535781611ae7565b6000818312611b535781611ae7565b6000611ae7670de0b6b3a764000083611f8086611fbd565b611f8a9190614b3f565b611f949190614a63565b612201565b600080611fa586612440565b9050611fb381868686612472565b9695505050505050565b6000808213612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b6000606061203584612499565b03609f8181039490941b90931c6c465772b2bbbb5f824b15207a3081018102606090811d6d0388eaa27412d5aca026815d636e018202811d6d0df99ac502031bf953eff472fdcc018202811d6d13cdffb29d51d99322bdff5f2211018202811d6d0a0f742023def783a307a986912e018202811d6d01920d8043ca89b5239253284e42018202811d6c0b7a86d7375468fac667a0a527016c29508e458543d8aa4df2abee7883018302821d6d0139601a2efabe717e604cbb4894018302821d6d02247f7a7b6594320649aa03aba1018302821d7fffffffffffffffffffffffffffffffffffffff73c0c716a594e00d54e3c4cbc9018302821d7ffffffffffffffffffffffffffffffffffffffdc7b88c420e53a9890533129f6f01830290911d7fffffffffffffffffffffffffffffffffffffff465fda27eb4d63ded474e5f832019091027ffffffffffffffff5f6af8f7b3396644f18e157960000000000000000000000000105711340daa0d5f769dba1915cef59f0815a5506027d0267a36c0c95b3975ab3ee5b203a7614a3f75373f047d803ae7b6687f2b393909302929092017d57115e47018c7177eebf7cd370a3356a1b7863008a5ae8028c72b88642840160ae1d92915050565b60007ffffffffffffffffffffffffffffffffffffffffffffffffdb731c958f34d94c1821361223257506000919050565b680755bf798b4a1bf1e582126122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4558505f4f564552464c4f57000000000000000000000000000000000000000060448201526064016105e9565b6503782dace9d9604e83901b059150600060606bb17217f7d1cf79abc9e3b39884821b056b80000000000000000000000001901d6bb17217f7d1cf79abc9e3b39881029093037fffffffffffffffffffffffffffffffffffffffdbf3ccf1604d263450f02a550481018102606090811d6d0277594991cfc85f6e2461837cd9018202811d7fffffffffffffffffffffffffffffffffffffe5adedaa1cb095af9e4da10e363c018202811d6db1bbb201f443cf962f1a1d3db4a5018202811d7ffffffffffffffffffffffffffffffffffffd38dc772608b0ae56cce01296c0eb018202811d6e05180bb14799ab47a8a8cb2a527d57016d02d16720577bd19bf614176fe9ea6c10fe68e7fd37d0007b713f765084018402831d9081019084017ffffffffffffffffffffffffffffffffffffffe2c69812cf03b0763fd454a8f7e010290911d6e0587f503bb6ea29d25fcb7401964500190910279d835ebba824c98fb31b83b2ca45c000000000000000000000000010574029d9dc38563c32e5c2f6dc192ee70ef65f9978af30260c3939093039290921c92915050565b6060818051906020012060405160200161245c91815260200190565b6040516020818303038152906040529050919050565b6000611cd28461248387868661256f565b8051602091820120825192909101919091201490565b6000808211612504576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f554e444546494e4544000000000000000000000000000000000000000000000060448201526064016105e9565b5060016fffffffffffffffffffffffffffffffff821160071b82811c67ffffffffffffffff1060061b1782811c63ffffffff1060051b1782811c61ffff1060041b1782811c60ff10600390811b90911783811c600f1060021b1783811c909110821b1791821c111790565b606060008451116125dc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d65726b6c65547269653a20656d707479206b6579000000000000000000000060448201526064016105e9565b60006125e784612ff7565b905060006125f4866130e6565b905060008460405160200161260b91815260200190565b60405160208183030381529060405290506000805b8451811015612f6e57600085828151811061263d5761263d614fa0565b6020026020010151905084518311156126d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f4d65726b6c65547269653a206b657920696e646578206578636565647320746f60448201527f74616c206b6579206c656e67746800000000000000000000000000000000000060648201526084016105e9565b8260000361279157805180516020918201206040516127269261270092910190815260200190565b604051602081830303815290604052858051602091820120825192909101919091201490565b61278c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4d65726b6c65547269653a20696e76616c696420726f6f74206861736800000060448201526064016105e9565b6128e8565b80515160201161284757805180516020918201206040516127bb9261270092910190815260200190565b61278c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f4d65726b6c65547269653a20696e76616c6964206c6172676520696e7465726e60448201527f616c20686173680000000000000000000000000000000000000000000000000060648201526084016105e9565b8051845160208087019190912082519190920120146128e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4d65726b6c65547269653a20696e76616c696420696e7465726e616c206e6f6460448201527f652068617368000000000000000000000000000000000000000000000000000060648201526084016105e9565b6128f460106001614ee5565b81602001515103612ad55784518303612a6d576000612930826020015160108151811061292357612923614fa0565b6020026020010151613281565b905060008151116129c3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603b60248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286272616e636829000000000060648201526084016105e9565b600187516129d19190614a1d565b8314612a5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286272616e63682900000000000060648201526084016105e9565b9650611ae795505050505050565b6000858481518110612a8157612a81614fa0565b602001015160f81c60f81b60f81c9050600082602001518260ff1681518110612aac57612aac614fa0565b60200260200101519050612abf816133e1565b9550612acc600186614ee5565b94505050612f5b565b600281602001515103612ed3576000612aed82613406565b9050600081600081518110612b0457612b04614fa0565b016020015160f81c90506000612b1b600283614fcf565b612b26906002614ff1565b90506000612b37848360ff1661342a565b90506000612b458a8961342a565b90506000612b538383613460565b905080835114612be5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603a60248201527f4d65726b6c65547269653a20706174682072656d61696e646572206d7573742060448201527f736861726520616c6c206e6962626c65732077697468206b657900000000000060648201526084016105e9565b60ff851660021480612bfa575060ff85166003145b15612dee5780825114612c8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4d65726b6c65547269653a206b65792072656d61696e646572206d757374206260448201527f65206964656e746963616c20746f20706174682072656d61696e64657200000060648201526084016105e9565b6000612cab886020015160018151811061292357612923614fa0565b90506000815111612d3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f4d65726b6c65547269653a2076616c7565206c656e677468206d75737420626560448201527f2067726561746572207468616e207a65726f20286c656166290000000000000060648201526084016105e9565b60018d51612d4c9190614a1d565b8914612dda576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f4d65726b6c65547269653a2076616c7565206e6f6465206d757374206265206c60448201527f617374206e6f646520696e2070726f6f6620286c65616629000000000000000060648201526084016105e9565b9c50611ae79b505050505050505050505050565b60ff85161580612e01575060ff85166001145b15612e4057612e2d8760200151600181518110612e2057612e20614fa0565b60200260200101516133e1565b9950612e39818a614ee5565b9850612ec8565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4d65726b6c65547269653a2072656365697665642061206e6f6465207769746860448201527f20616e20756e6b6e6f776e20707265666978000000000000000000000000000060648201526084016105e9565b505050505050612f5b565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f4d65726b6c65547269653a20726563656976656420616e20756e70617273656160448201527f626c65206e6f646500000000000000000000000000000000000000000000000060648201526084016105e9565b5080612f6681614efd565b915050612620565b506040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4d65726b6c65547269653a2072616e206f7574206f662070726f6f6620656c6560448201527f6d656e747300000000000000000000000000000000000000000000000000000060648201526084016105e9565b805160609060008167ffffffffffffffff8111156130175761301761456b565b60405190808252806020026020018201604052801561305c57816020015b60408051808201909152606080825260208201528152602001906001900390816130355790505b50905060005b828110156130de57604051806040016040528086838151811061308757613087614fa0565b602002602001015181526020016130b68784815181106130a9576130a9614fa0565b602002602001015161350f565b8152508282815181106130cb576130cb614fa0565b6020908102919091010152600101613062565b509392505050565b805160609060006130f8826002615014565b67ffffffffffffffff8111156131105761311061456b565b6040519080825280601f01601f19166020018201604052801561313a576020820181803683370190505b5090506000805b838110156132775785818151811061315b5761315b614fa0565b6020910101517fff000000000000000000000000000000000000000000000000000000000000008116925060041c7f0ff000000000000000000000000000000000000000000000000000000000000016836131b7836002615014565b815181106131c7576131c7614fa0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f0f00000000000000000000000000000000000000000000000000000000000000821683613225836002615014565b613230906001614ee5565b8151811061324057613240614fa0565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600101613141565b5090949350505050565b6060600080600061329185613522565b9194509250905060008160018111156132ac576132ac615051565b14613339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603960248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206279746573206973206e6f7420612064617461206974656d0000000000000060648201526084016105e9565b6133438284614ee5565b8551146133d2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603460248201527f524c505265616465723a2062797465732076616c756520636f6e7461696e732060448201527f616e20696e76616c69642072656d61696e64657200000000000000000000000060648201526084016105e9565b611cd285602001518484613f8f565b606060208260000151106133fd576133f882613281565b610fc8565b610fc882614030565b6060610fc8613425836020015160008151811061292357612923614fa0565b6130e6565b6060825182106134495750604080516020810190915260008152610fc8565b611ae7838384865161345b9190614a1d565b614046565b60008060008351855110613475578351613478565b84515b90505b80821080156134ff575083828151811061349757613497614fa0565b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168583815181106134d6576134d6614fa0565b01602001517fff0000000000000000000000000000000000000000000000000000000000000016145b156130de5781600101915061347b565b6060610fc861351d8361421e565b614307565b6000806000808460000151116135e0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b6020840151805160001a607f8111613605576000600160009450945094505050613f88565b60b7811161381357600061361a608083614a1d565b9050808760000151116136d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604e60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20737472696e67206c656e6774682060648201527f2873686f727420737472696e6729000000000000000000000000000000000000608482015260a4016105e9565b6001838101517fff0000000000000000000000000000000000000000000000000000000000000016908214158061374e57507f80000000000000000000000000000000000000000000000000000000000000007fff00000000000000000000000000000000000000000000000000000000000000821610155b613800576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a20696e76616c6964207072656669782c2073696e676c60448201527f652062797465203c203078383020617265206e6f74207072656669786564202860648201527f73686f727420737472696e672900000000000000000000000000000000000000608482015260a4016105e9565b5060019550935060009250613f88915050565b60bf8111613b6157600061382860b783614a1d565b9050808760000151116138e3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152605160248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f6620737472696e67206c656e60648201527f67746820286c6f6e6720737472696e6729000000000000000000000000000000608482015260a4016105e9565b60018301517fff000000000000000000000000000000000000000000000000000000000000001660008190036139c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e6720737472696e672900000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613a85576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f20737472696e6729000000000000000000000000000000000000000000000000608482015260a4016105e9565b613a8f8184614ee5565b895111613b44576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604c60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e6720737472696e67290000000000000000000000000000000000000000608482015260a4016105e9565b613b4f836001614ee5565b9750955060009450613f889350505050565b60f78111613c42576000613b7660c083614a1d565b905080876000015111613c31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e206c697374206c656e67746820287360648201527f686f7274206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b600195509350849250613f88915050565b6000613c4f60f783614a1d565b905080876000015111613d0a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604d60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206265203e207468616e206c656e677468206f66206c697374206c656e677460648201527f6820286c6f6e67206c6973742900000000000000000000000000000000000000608482015260a4016105e9565b60018301517fff00000000000000000000000000000000000000000000000000000000000000166000819003613de8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604860248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f74206e6f74206861766520616e79206c656164696e67207a65726f7320286c6f60648201527f6e67206c69737429000000000000000000000000000000000000000000000000608482015260a4016105e9565b600184015160088302610100031c60378111613eac576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604660248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20353520627974657320286c6f6e6760648201527f206c697374290000000000000000000000000000000000000000000000000000608482015260a4016105e9565b613eb68184614ee5565b895111613f6b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620636f6e74656e74206d757360448201527f742062652067726561746572207468616e20746f74616c206c656e677468202860648201527f6c6f6e67206c6973742900000000000000000000000000000000000000000000608482015260a4016105e9565b613f76836001614ee5565b9750955060019450613f889350505050565b9193909250565b606060008267ffffffffffffffff811115613fac57613fac61456b565b6040519080825280601f01601f191660200182016040528015613fd6576020820181803683370190505b50905082600003613fe8579050611ae7565b6000613ff48587614ee5565b90506020820160005b85811015614015578281015182820152602001613ffd565b85811115614024576000868301525b50919695505050505050565b6060610fc8826020015160008460000151613f8f565b60608182601f0110156140b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b828284011015614121576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f736c6963655f6f766572666c6f7700000000000000000000000000000000000060448201526064016105e9565b8183018451101561418e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f736c6963655f6f75744f66426f756e647300000000000000000000000000000060448201526064016105e9565b6060821580156141ad5760405191506000825260208201604052614215565b6040519150601f8416801560200281840101858101878315602002848b0101015b818310156141e65780518352602092830192016141ce565b5050858452601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016604052505b50949350505050565b604080518082019091526000808252602082015260008251116142e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604a60248201527f524c505265616465723a206c656e677468206f6620616e20524c50206974656d60448201527f206d7573742062652067726561746572207468616e207a65726f20746f20626560648201527f206465636f6461626c6500000000000000000000000000000000000000000000608482015260a4016105e9565b50604080518082019091528151815260209182019181019190915290565b6060600080600061431785613522565b91945092509050600181600181111561433257614332615051565b146143bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f524c505265616465723a206465636f646564206974656d207479706520666f7260448201527f206c697374206973206e6f742061206c697374206974656d000000000000000060648201526084016105e9565b84516143cb8385614ee5565b14614458576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f524c505265616465723a206c697374206974656d2068617320616e20696e766160448201527f6c696420646174612072656d61696e646572000000000000000000000000000060648201526084016105e9565b6040805160208082526104208201909252600091816020015b60408051808201909152600080825260208201528152602001906001900390816144715790505090506000845b875181101561455f576000806144e46040518060400160405280858d600001516144c89190614a1d565b8152602001858d602001516144dd9190614ee5565b9052613522565b5091509150604051806040016040528083836145009190614ee5565b8152602001848c602001516145159190614ee5565b81525085858151811061452a5761452a614fa0565b6020908102919091010152614540600185614ee5565b935061454c8183614ee5565b6145569084614ee5565b9250505061449e565b50815295945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156145e1576145e161456b565b604052919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461460d57600080fd5b919050565b600082601f83011261462357600080fd5b813567ffffffffffffffff81111561463d5761463d61456b565b61466e60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161459a565b81815284602083860101111561468357600080fd5b816020850160208301376000918101602001919091529392505050565b600060c082840312156146b257600080fd5b60405160c0810167ffffffffffffffff82821081831117156146d6576146d661456b565b81604052829350843583526146ed602086016145e9565b60208401526146fe604086016145e9565b6040840152606085013560608401526080850135608084015260a085013591508082111561472b57600080fd5b5061473885828601614612565b60a0830152505092915050565b600080600080600085870360e081121561475e57600080fd5b863567ffffffffffffffff8082111561477657600080fd5b6147828a838b016146a0565b97506020890135965060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0840112156147bb57600080fd5b60408901955060c08901359250808311156147d557600080fd5b828901925089601f8401126147e957600080fd5b82359150808211156147fa57600080fd5b508860208260051b840101111561481057600080fd5b959894975092955050506020019190565b60005b8381101561483c578181015183820152602001614824565b8381111561484b576000848401525b50505050565b60008151808452614869816020860160208601614821565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000611ae76020830184614851565b6000602082840312156148c057600080fd5b5035919050565b6000602082840312156148d957600080fd5b813567ffffffffffffffff8111156148f057600080fd5b611e10848285016146a0565b600080600080600060a0868803121561491457600080fd5b61491d866145e9565b945060208601359350604086013567ffffffffffffffff808216821461494257600080fd5b909350606087013590811515821461495957600080fd5b9092506080870135908082111561496f57600080fd5b5061497c88828901614612565b9150509295509295909350565b8581528460208201527fffffffffffffffff0000000000000000000000000000000000000000000000008460c01b16604082015282151560f81b6048820152600082516149dd816049850160208701614821565b919091016049019695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600082821015614a2f57614a2f6149ee565b500390565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614a7257614a72614a34565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f800000000000000000000000000000000000000000000000000000000000000083141615614ac657614ac66149ee565b500590565b6000808312837f800000000000000000000000000000000000000000000000000000000000000001831281151615614b0557614b056149ee565b837f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff018313811615614b3957614b396149ee565b50500390565b60007f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600084136000841385830485118282161615614b8057614b806149ee565b7f80000000000000000000000000000000000000000000000000000000000000006000871286820588128184161615614bbb57614bbb6149ee565b60008712925087820587128484161615614bd757614bd76149ee565b87850587128184161615614bed57614bed6149ee565b505050929093029392505050565b6000808212827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03841381151615614c3557614c356149ee565b827f8000000000000000000000000000000000000000000000000000000000000000038412811615614c6957614c696149ee565b50500190565b600067ffffffffffffffff808316818516808303821115614c9257614c926149ee565b01949350505050565b60006fffffffffffffffffffffffffffffffff80831681851681830481118215151615614cca57614cca6149ee565b02949350505050565b600082614ce257614ce2614a34565b500490565b80516fffffffffffffffffffffffffffffffff8116811461460d57600080fd5b600060608284031215614d1957600080fd5b6040516060810181811067ffffffffffffffff82111715614d3c57614d3c61456b565b60405282518152614d4f60208401614ce7565b6020820152614d6060408401614ce7565b60408201529392505050565b600060808284031215614d7e57600080fd5b6040516080810181811067ffffffffffffffff82111715614da157614da161456b565b8060405250823581526020830135602082015260408301356040820152606083013560608201528091505092915050565b600067ffffffffffffffff80841115614ded57614ded61456b565b8360051b6020614dfe81830161459a565b868152918501918181019036841115614e1657600080fd5b865b84811015614e4a57803586811115614e305760008081fd5b614e3c36828b01614612565b845250918301918301614e18565b50979650505050505050565b60008451614e68818460208901614821565b80830190507f2e000000000000000000000000000000000000000000000000000000000000008082528551614ea4816001850160208a01614821565b60019201918201528351614ebf816002840160208801614821565b0160020195945050505050565b600060208284031215614ede57600080fd5b5051919050565b60008219821115614ef857614ef86149ee565b500190565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f2e57614f2e6149ee565b5060010190565b868152600073ffffffffffffffffffffffffffffffffffffffff808816602084015280871660408401525084606083015283608083015260c060a0830152614f8060c0830184614851565b98975050505050505050565b600082614f9b57614f9b614a34565b500690565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060ff831680614fe257614fe2614a34565b8060ff84160691505092915050565b600060ff821660ff84168082101561500b5761500b6149ee565b90039392505050565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561504c5761504c6149ee
565b500290565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea164736f6c634300080f000a"
func
init
()
{
if
err
:=
json
.
Unmarshal
([]
byte
(
OptimismPortalStorageLayoutJSON
),
OptimismPortalStorageLayout
);
err
!=
nil
{
...
...
packages/contracts-bedrock/.gas-snapshot
View file @
9b74fd6d
...
...
@@ -8,7 +8,7 @@ GasBenchMark_L1StandardBridge_Finalize:test_finalizeETHWithdrawal_benchmark() (g
GasBenchMark_L2OutputOracle:test_proposeL2Output_benchmark() (gas: 88513)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark() (gas: 74998)
GasBenchMark_OptimismPortal:test_depositTransaction_benchmark_1() (gas: 36156)
GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 1672
14
)
GasBenchMark_OptimismPortal:test_proveWithdrawalTransaction_benchmark() (gas: 1672
40
)
CrossDomainMessenger_BaseGas_Test:test_baseGas_succeeds() (gas: 20098)
CrossDomainOwnableThroughPortal_Test:test_depositTransaction_crossDomainOwner_succeeds() (gas: 61806)
CrossDomainOwnable_Test:test_onlyOwner_notOwner_reverts() (gas: 10530)
...
...
@@ -133,27 +133,27 @@ LegacyERC20ETH_Test:test_mint_doesNotExist_reverts() (gas: 10649)
LegacyERC20ETH_Test:test_transferFrom_doesNotExist_reverts() (gas: 12887)
LegacyERC20ETH_Test:test_transfer_doesNotExist_reverts() (gas: 10733)
LegacyMessagePasser_Test:test_passMessageToL1_succeeds() (gas: 34518)
MerkleTrie_Test:test_get_corruptedProof_reverts() (gas: 571
0
)
MerkleTrie_Test:test_get_extraProofElements_reverts() (gas: 60
58
3)
MerkleTrie_Test:test_get_invalidDataRemainder_reverts() (gas: 358
26
)
MerkleTrie_Test:test_get_invalidInternalNodeHash_reverts() (gas: 50
761
)
MerkleTrie_Test:test_get_nonexistentKey1_reverts() (gas: 596
23
)
MerkleTrie_Test:test_get_nonexistentKey2_reverts() (gas: 2338
1
)
MerkleTrie_Test:test_get_smallerPathThanKey1_reverts() (gas: 53
47
7)
MerkleTrie_Test:test_get_smallerPathThanKey2_reverts() (gas: 5
4958
)
MerkleTrie_Test:test_get_validProof10_succeeds() (gas: 505
2
3)
MerkleTrie_Test:test_get_validProof1_succeeds() (gas: 61
595
)
MerkleTrie_Test:test_get_validProof2_succeeds() (gas: 71
510
)
MerkleTrie_Test:test_get_validProof3_succeeds() (gas: 328
01
)
MerkleTrie_Test:test_get_validProof4_succeeds() (gas: 23
575
)
MerkleTrie_Test:test_get_validProof5_succeeds() (gas: 842
14
)
MerkleTrie_Test:test_get_validProof6_succeeds() (gas: 729
50
)
MerkleTrie_Test:test_get_validProof7_succeeds() (gas: 796
71
)
MerkleTrie_Test:test_get_validProof8_succeeds() (gas: 505
02
)
MerkleTrie_Test:test_get_validProof9_succeeds() (gas: 505
45
)
MerkleTrie_Test:test_get_wrongKeyProof_reverts() (gas: 5384
4
)
MerkleTrie_Test:test_get_zeroBranchValueLength_reverts() (gas: 432
0
0)
MerkleTrie_Test:test_get_zeroLengthKey_reverts() (gas:
15863
)
MerkleTrie_Test:test_get_corruptedProof_reverts() (gas: 571
3
)
MerkleTrie_Test:test_get_extraProofElements_reverts() (gas: 60
65
3)
MerkleTrie_Test:test_get_invalidDataRemainder_reverts() (gas: 358
52
)
MerkleTrie_Test:test_get_invalidInternalNodeHash_reverts() (gas: 50
810
)
MerkleTrie_Test:test_get_nonexistentKey1_reverts() (gas: 596
71
)
MerkleTrie_Test:test_get_nonexistentKey2_reverts() (gas: 2338
5
)
MerkleTrie_Test:test_get_smallerPathThanKey1_reverts() (gas: 53
54
7)
MerkleTrie_Test:test_get_smallerPathThanKey2_reverts() (gas: 5
5006
)
MerkleTrie_Test:test_get_validProof10_succeeds() (gas: 505
9
3)
MerkleTrie_Test:test_get_validProof1_succeeds() (gas: 61
666
)
MerkleTrie_Test:test_get_validProof2_succeeds() (gas: 71
601
)
MerkleTrie_Test:test_get_validProof3_succeeds() (gas: 328
27
)
MerkleTrie_Test:test_get_validProof4_succeeds() (gas: 23
623
)
MerkleTrie_Test:test_get_validProof5_succeeds() (gas: 842
62
)
MerkleTrie_Test:test_get_validProof6_succeeds() (gas: 729
98
)
MerkleTrie_Test:test_get_validProof7_succeeds() (gas: 796
53
)
MerkleTrie_Test:test_get_validProof8_succeeds() (gas: 505
50
)
MerkleTrie_Test:test_get_validProof9_succeeds() (gas: 505
93
)
MerkleTrie_Test:test_get_wrongKeyProof_reverts() (gas: 5384
8
)
MerkleTrie_Test:test_get_zeroBranchValueLength_reverts() (gas: 432
7
0)
MerkleTrie_Test:test_get_zeroLengthKey_reverts() (gas:
3632
)
OptimismMintableERC20_Test:test_bridge_succeeds() (gas: 7643)
OptimismMintableERC20_Test:test_burn_notBridge_reverts() (gas: 11165)
OptimismMintableERC20_Test:test_burn_succeeds() (gas: 51013)
...
...
@@ -172,23 +172,23 @@ OptimismPortalUpgradeable_Test:test_initialize_cannotInitImpl_reverts() (gas: 10
OptimismPortalUpgradeable_Test:test_initialize_cannotInitProxy_reverts() (gas: 15833)
OptimismPortalUpgradeable_Test:test_params_initValuesOnProxy_succeeds() (gas: 16011)
OptimismPortalUpgradeable_Test:test_upgradeToAndCall_upgrading_succeeds() (gas: 180457)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 198
791
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 2011
10
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputRootChanges_reverts() (gas: 198
817
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifOutputTimestampIsNotFinalized_reverts() (gas: 2011
36
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalNotProven_reverts() (gas: 39656)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 1961
55
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 19
687
7)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 1768
69
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 235
32
3)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 2369
33
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 2286
14
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 879774668769616364
0
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 192
879
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_ifWithdrawalProofNotOldEnough_reverts() (gas: 1961
81
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onInsufficientGas_reverts() (gas: 19
700
7)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onRecentWithdrawal_reverts() (gas: 1768
95
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReentrancy_reverts() (gas: 235
45
3)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_onReplay_reverts() (gas: 2369
59
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_provenWithdrawalHash_succeeds() (gas: 2286
40
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_targetFails_fails() (gas: 879774668769616364
1
)
OptimismPortal_FinalizeWithdrawal_Test:test_finalizeWithdrawalTransaction_timestampLessThanL2OracleStart_reverts() (gas: 192
905
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidOutputRootProof_reverts() (gas: 83498)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidWithdrawalProof_reverts() (gas: 1352
28
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onInvalidWithdrawalProof_reverts() (gas: 1352
54
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_onSelfCall_reverts() (gas: 50732)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_succeeds() (gas: 2752
27
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 1881
57
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_succeeds() (gas: 1783
44
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProveChangedOutputRoot_succeeds() (gas: 2752
79
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_replayProve_reverts() (gas: 1881
83
)
OptimismPortal_FinalizeWithdrawal_Test:test_proveWithdrawalTransaction_validWithdrawalProof_succeeds() (gas: 1783
70
)
OptimismPortal_Test:test_constructor_succeeds() (gas: 17277)
OptimismPortal_Test:test_depositTransaction_contractCreation_reverts() (gas: 14267)
OptimismPortal_Test:test_depositTransaction_createWithZeroValueForContract_succeeds() (gas: 76662)
...
...
packages/contracts-bedrock/contracts/libraries/trie/MerkleTrie.sol
View file @
9b74fd6d
...
...
@@ -93,6 +93,8 @@ library MerkleTrie {
bytes[] memory _proof,
bytes32 _root
) internal pure returns (bytes memory) {
require(_key.length > 0, "MerkleTrie: empty key");
TrieNode[] memory proof = _parseProof(_proof);
bytes memory key = Bytes.toNibbles(_key);
bytes memory currentNodeID = abi.encodePacked(_root);
...
...
packages/contracts-bedrock/contracts/test/CommonTest.t.sol
View file @
9b74fd6d
...
...
@@ -628,6 +628,25 @@ contract FFIInterface is Test {
bytes memory result = vm.ffi(cmds);
return abi.decode(result, (uint256, uint256));
}
function getMerkleTrieFuzzCase(string memory variant)
external
returns (
bytes32,
bytes memory,
bytes memory,
bytes[] memory
)
{
string[] memory cmds = new string[](5);
cmds[0] = "./test-case-generator/fuzz";
cmds[1] = "-m";
cmds[2] = "trie";
cmds[3] = "-v";
cmds[4] = variant;
return abi.decode(vm.ffi(cmds), (bytes32, bytes, bytes, bytes[]));
}
}
// Used for testing a future upgrade beyond the current implementations.
...
...
packages/contracts-bedrock/contracts/test/MerkleTrie.t.sol
View file @
9b74fd6d
...
...
@@ -5,6 +5,10 @@ import { CommonTest } from "./CommonTest.t.sol";
import { MerkleTrie } from "../libraries/trie/MerkleTrie.sol";
contract MerkleTrie_Test is CommonTest {
function setUp() public {
_setUp();
}
function test_get_validProof1_succeeds() external {
bytes32 root = 0xd582f99275e227a1cf4284899e5ff06ee56da8859be71b553397c69151bc942f;
bytes memory key = hex"6b6579326262";
...
...
@@ -257,7 +261,7 @@ contract MerkleTrie_Test is CommonTest {
bytes[] memory proof = new bytes[](1);
proof[0] = hex"c78320f00082b443";
vm.expectRevert("MerkleTrie:
path remainder must share all nibbles with
key");
vm.expectRevert("MerkleTrie:
empty
key");
MerkleTrie.get(key, proof, root);
}
...
...
@@ -299,4 +303,119 @@ contract MerkleTrie_Test is CommonTest {
vm.expectRevert("MerkleTrie: value node must be last node in proof (leaf)");
MerkleTrie.get(key, proof, root);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_validProofs_success(bytes4) external {
// Generate a test case with a valid proof of inclusion for the k/v pair in the trie.
(bytes32 root, bytes memory key, bytes memory val, bytes[] memory proof) = ffi
.getMerkleTrieFuzzCase("valid");
// Assert that our expected value is equal to our actual value.
assertEq(val, MerkleTrie.get(key, proof, root));
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_invalidRoot_reverts(bytes4) external {
// Get a random test case with a valid trie / proof
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"valid"
);
bytes32 rootHash = keccak256(abi.encodePacked(root));
vm.expectRevert("MerkleTrie: invalid root hash");
MerkleTrie.get(key, proof, rootHash);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_extraProofElements_reverts(bytes4) external {
// Generate an invalid test case with an extra proof element attached to an otherwise
// valid proof of inclusion for the passed k/v.
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"extra_proof_elems"
);
vm.expectRevert("MerkleTrie: value node must be last node in proof (leaf)");
MerkleTrie.get(key, proof, root);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_invalidLargeInternalHash_reverts(bytes4) external {
// Generate an invalid test case where a long proof element is incorrect for the root.
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"invalid_large_internal_hash"
);
vm.expectRevert("MerkleTrie: invalid large internal hash");
MerkleTrie.get(key, proof, root);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_invalidInternalNodeHash_reverts(bytes4) external {
// Generate an invalid test case where a small proof element is incorrect for the root.
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"invalid_internal_node_hash"
);
vm.expectRevert("MerkleTrie: invalid internal node hash");
MerkleTrie.get(key, proof, root);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_corruptedProof_reverts(bytes4) external {
// Generate an invalid test case where the proof is malformed.
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"corrupted_proof"
);
vm.expectRevert("RLPReader: decoded item type for list is not a list item");
MerkleTrie.get(key, proof, root);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_invalidDataRemainder_reverts(bytes4) external {
// Generate an invalid test case where a random element of the proof has more bytes than the
// length designates within the RLP list encoding.
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"invalid_data_remainder"
);
vm.expectRevert("RLPReader: list item has an invalid data remainder");
MerkleTrie.get(key, proof, root);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_prefixedValidKey_reverts(bytes4) external {
// Get a random test case with a valid trie / proof and a valid key that is prefixed
// with random bytes
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"prefixed_valid_key"
);
// Ambiguous revert check- all that we care is that it *does* fail. This case may
// fail within different branches.
vm.expectRevert();
MerkleTrie.get(key, proof, root);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_emptyKey_reverts(bytes4) external {
// Get a random test case with a valid trie / proof and an empty key
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"empty_key"
);
vm.expectRevert("MerkleTrie: empty key");
MerkleTrie.get(key, proof, root);
}
/// @notice The `bytes4` parameter is to enable parallel fuzz runs; it is ignored.
function testFuzz_get_partialProof_reverts(bytes4) external {
// Get a random test case with a valid trie / partially correct proof
(bytes32 root, bytes memory key, , bytes[] memory proof) = ffi.getMerkleTrieFuzzCase(
"partial_proof"
);
vm.expectRevert("MerkleTrie: ran out of proof elements");
MerkleTrie.get(key, proof, root);
}
}
packages/contracts-bedrock/package.json
View file @
9b74fd6d
...
...
@@ -17,19 +17,20 @@
"build:forge"
:
"forge build"
,
"build:with-metadata"
:
"FOUNDRY_PROFILE=echidna yarn build:forge"
,
"build:differential"
:
"tsc scripts/differential-testing.ts --outDir dist --moduleResolution node --esModuleInterop"
,
"build:fuzz"
:
"go build -o test-case-generator test-case-generator/cmd/fuzz.go"
,
"prebuild"
:
"yarn ts-node scripts/verify-foundry-install.ts"
,
"build"
:
"hardhat compile && yarn autogen:artifacts && yarn build:ts && yarn typechain"
,
"build:ts"
:
"tsc -p tsconfig.build.json"
,
"autogen:artifacts"
:
"ts-node scripts/generate-artifacts.ts"
,
"deploy"
:
"hardhat deploy"
,
"test"
:
"yarn build:differential && forge test"
,
"coverage"
:
"yarn build:differential && forge coverage"
,
"coverage:lcov"
:
"yarn build:differential && forge coverage --report lcov"
,
"gas-snapshot"
:
"yarn build:differential && forge snapshot --no-match-test 'testDiff|testFuzz'"
,
"test"
:
"yarn build:differential &&
yarn build:fuzz &&
forge test"
,
"coverage"
:
"yarn build:differential &&
yarn build:fuzz &&
forge coverage"
,
"coverage:lcov"
:
"yarn build:differential &&
yarn build:fuzz &&
forge coverage --report lcov"
,
"gas-snapshot"
:
"yarn build:differential &&
yarn build:fuzz &&
forge snapshot --no-match-test 'testDiff|testFuzz'"
,
"storage-snapshot"
:
"./scripts/storage-snapshot.sh"
,
"validate-spacers"
:
"hardhat validate-spacers"
,
"slither"
:
"./scripts/slither.sh"
,
"clean"
:
"rm -rf ./dist ./artifacts ./forge-artifacts ./cache ./tsconfig.tsbuildinfo ./src/contract-artifacts.ts"
,
"clean"
:
"rm -rf ./dist ./artifacts ./forge-artifacts ./cache ./tsconfig.tsbuildinfo ./src/contract-artifacts.ts
./test-case-generator/fuzz
"
,
"lint:ts:check"
:
"eslint . --max-warnings=0"
,
"lint:forge-tests:check"
:
"ts-node scripts/forge-test-names.ts"
,
"lint:contracts:check"
:
"yarn solhint -f table 'contracts/**/*.sol' && yarn lint:forge-tests:check"
,
...
...
packages/contracts-bedrock/test-case-generator/README.md
View file @
9b74fd6d
...
...
@@ -10,6 +10,8 @@ A lightweight input fuzzing utility used for testing various Bedrock contracts.
## Usage
To build, run
`yarn build:fuzz`
from this directory or the
`contract-bedrock`
package.
To generate an abi-encoded fuzz case, pass in a mode via the
`-m`
flag as well as an optional variant via the
`-v`
flag.
### Available Modes
...
...
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