@account-abstraction/contracts
Version:
Account Abstraction (EIP 4337) contracts
1,382 lines • 134 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "EntryPointSimulations",
"sourceName": "contracts/core/EntryPointSimulations.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [
{
"internalType": "bool",
"name": "success",
"type": "bool"
},
{
"internalType": "bytes",
"name": "ret",
"type": "bytes"
}
],
"name": "DelegateAndRevert",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "opIndex",
"type": "uint256"
},
{
"internalType": "string",
"name": "reason",
"type": "string"
}
],
"name": "FailedOp",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "opIndex",
"type": "uint256"
},
{
"internalType": "string",
"name": "reason",
"type": "string"
},
{
"internalType": "bytes",
"name": "inner",
"type": "bytes"
}
],
"name": "FailedOpWithRevert",
"type": "error"
},
{
"inputs": [],
"name": "InvalidShortString",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "returnData",
"type": "bytes"
}
],
"name": "PostOpReverted",
"type": "error"
},
{
"inputs": [],
"name": "ReentrancyGuardReentrantCall",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "SenderAddressResult",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "aggregator",
"type": "address"
}
],
"name": "SignatureValidationFailed",
"type": "error"
},
{
"inputs": [
{
"internalType": "string",
"name": "str",
"type": "string"
}
],
"name": "StringTooLong",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "userOpHash",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "factory",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "paymaster",
"type": "address"
}
],
"name": "AccountDeployed",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "BeforeExecution",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "totalDeposit",
"type": "uint256"
}
],
"name": "Deposited",
"type": "event"
},
{
"anonymous": false,
"inputs": [],
"name": "EIP712DomainChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "userOpHash",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "revertReason",
"type": "bytes"
}
],
"name": "PostOpRevertReason",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "aggregator",
"type": "address"
}
],
"name": "SignatureAggregatorChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "totalStaked",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "unstakeDelaySec",
"type": "uint256"
}
],
"name": "StakeLocked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withdrawTime",
"type": "uint256"
}
],
"name": "StakeUnlocked",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "withdrawAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "StakeWithdrawn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "userOpHash",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "paymaster",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bool",
"name": "success",
"type": "bool"
},
{
"indexed": false,
"internalType": "uint256",
"name": "actualGasCost",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "actualGasUsed",
"type": "uint256"
}
],
"name": "UserOperationEvent",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "userOpHash",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"name": "UserOperationPrefundTooLow",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "userOpHash",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"indexed": false,
"internalType": "bytes",
"name": "revertReason",
"type": "bytes"
}
],
"name": "UserOperationRevertReason",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "withdrawAddress",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "Withdrawn",
"type": "event"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "unstakeDelaySec",
"type": "uint32"
}
],
"name": "addStake",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
},
{
"internalType": "bytes",
"name": "data",
"type": "bytes"
}
],
"name": "delegateAndRevert",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "depositTo",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "eip712Domain",
"outputs": [
{
"internalType": "bytes1",
"name": "fields",
"type": "bytes1"
},
{
"internalType": "string",
"name": "name",
"type": "string"
},
{
"internalType": "string",
"name": "version",
"type": "string"
},
{
"internalType": "uint256",
"name": "chainId",
"type": "uint256"
},
{
"internalType": "address",
"name": "verifyingContract",
"type": "address"
},
{
"internalType": "bytes32",
"name": "salt",
"type": "bytes32"
},
{
"internalType": "uint256[]",
"name": "extensions",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "getDepositInfo",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "deposit",
"type": "uint256"
},
{
"internalType": "bool",
"name": "staked",
"type": "bool"
},
{
"internalType": "uint112",
"name": "stake",
"type": "uint112"
},
{
"internalType": "uint32",
"name": "unstakeDelaySec",
"type": "uint32"
},
{
"internalType": "uint48",
"name": "withdrawTime",
"type": "uint48"
}
],
"internalType": "struct IStakeManager.DepositInfo",
"name": "info",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getDomainSeparatorV4",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint192",
"name": "key",
"type": "uint192"
}
],
"name": "getNonce",
"outputs": [
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getPackedUserOpTypeHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "initCode",
"type": "bytes"
}
],
"name": "getSenderAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "initCode",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "callData",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "accountGasLimits",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "preVerificationGas",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "gasFees",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "paymasterAndData",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct PackedUserOperation",
"name": "userOp",
"type": "tuple"
}
],
"name": "getUserOpHash",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "initCode",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "callData",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "accountGasLimits",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "preVerificationGas",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "gasFees",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "paymasterAndData",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct PackedUserOperation[]",
"name": "userOps",
"type": "tuple[]"
},
{
"internalType": "contract IAggregator",
"name": "aggregator",
"type": "address"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct IEntryPoint.UserOpsPerAggregator[]",
"name": "opsPerAggregator",
"type": "tuple[]"
},
{
"internalType": "address payable",
"name": "beneficiary",
"type": "address"
}
],
"name": "handleAggregatedOps",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "initCode",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "callData",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "accountGasLimits",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "preVerificationGas",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "gasFees",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "paymasterAndData",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct PackedUserOperation[]",
"name": "ops",
"type": "tuple[]"
},
{
"internalType": "address payable",
"name": "beneficiary",
"type": "address"
}
],
"name": "handleOps",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint192",
"name": "key",
"type": "uint192"
}
],
"name": "incrementNonce",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "callData",
"type": "bytes"
},
{
"components": [
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "verificationGasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "callGasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "paymasterVerificationGasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "paymasterPostOpGasLimit",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "preVerificationGas",
"type": "uint256"
},
{
"internalType": "address",
"name": "paymaster",
"type": "address"
},
{
"internalType": "uint256",
"name": "maxFeePerGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "maxPriorityFeePerGas",
"type": "uint256"
}
],
"internalType": "struct EntryPoint.MemoryUserOp",
"name": "mUserOp",
"type": "tuple"
},
{
"internalType": "bytes32",
"name": "userOpHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "prefund",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "contextOffset",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "preOpGas",
"type": "uint256"
}
],
"internalType": "struct EntryPoint.UserOpInfo",
"name": "opInfo",
"type": "tuple"
},
{
"internalType": "bytes",
"name": "context",
"type": "bytes"
}
],
"name": "innerHandleOp",
"outputs": [
{
"internalType": "uint256",
"name": "actualGasCost",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint192",
"name": "",
"type": "uint192"
}
],
"name": "nonceSequenceNumber",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "senderCreator",
"outputs": [
{
"internalType": "contract ISenderCreator",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "initCode",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "callData",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "accountGasLimits",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "preVerificationGas",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "gasFees",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "paymasterAndData",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct PackedUserOperation",
"name": "op",
"type": "tuple"
},
{
"internalType": "address",
"name": "target",
"type": "address"
},
{
"internalType": "bytes",
"name": "targetCallData",
"type": "bytes"
}
],
"name": "simulateHandleOp",
"outputs": [
{
"components": [
{
"internalType": "uint256",
"name": "preOpGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "paid",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "accountValidationData",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "paymasterValidationData",
"type": "uint256"
},
{
"internalType": "bool",
"name": "targetSuccess",
"type": "bool"
},
{
"internalType": "bytes",
"name": "targetResult",
"type": "bytes"
}
],
"internalType": "struct IEntryPointSimulations.ExecutionResult",
"name": "",
"type": "tuple"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "initCode",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "callData",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "accountGasLimits",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "preVerificationGas",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "gasFees",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "paymasterAndData",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct PackedUserOperation",
"name": "userOp",
"type": "tuple"
}
],
"name": "simulateValidation",
"outputs": [
{
"components": [
{
"components": [
{
"internalType": "uint256",
"name": "preOpGas",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "prefund",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "accountValidationData",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "paymasterValidationData",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "paymasterContext",
"type": "bytes"
}
],
"internalType": "struct IEntryPoint.ReturnInfo",
"name": "returnInfo",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "stake",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unstakeDelaySec",
"type": "uint256"
}
],
"internalType": "struct IStakeManager.StakeInfo",
"name": "senderInfo",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "stake",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unstakeDelaySec",
"type": "uint256"
}
],
"internalType": "struct IStakeManager.StakeInfo",
"name": "factoryInfo",
"type": "tuple"
},
{
"components": [
{
"internalType": "uint256",
"name": "stake",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unstakeDelaySec",
"type": "uint256"
}
],
"internalType": "struct IStakeManager.StakeInfo",
"name": "paymasterInfo",
"type": "tuple"
},
{
"components": [
{
"internalType": "address",
"name": "aggregator",
"type": "address"
},
{
"components": [
{
"internalType": "uint256",
"name": "stake",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "unstakeDelaySec",
"type": "uint256"
}
],
"internalType": "struct IStakeManager.StakeInfo",
"name": "stakeInfo",
"type": "tuple"
}
],
"internalType": "struct IEntryPointSimulations.AggregatorStakeInfo",
"name": "aggregatorInfo",
"type": "tuple"
}
],
"internalType": "struct IEntryPointSimulations.ValidationResult",
"name": "",
"type": "tuple"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "unlockStake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes",
"name": "initCode",
"type": "bytes"
},
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "bytes",
"name": "paymasterAndData",
"type": "bytes"
}
],
"name": "validateSenderAndPaymaster",
"outputs": [],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable",
"name": "withdrawAddress",
"type": "address"
}
],
"name": "withdrawStake",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable",
"name": "withdrawAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "withdrawAmount",
"type": "uint256"
}
],
"name": "withdrawTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x610180604052346101bd576040516100186040826101c1565b600781526020810190664552433433333760c81b82526040519161003d6040846101c1565b600183526020830191603160f81b8352610056816101e4565b610120526100638461037f565b61014052519020918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526100cc60c0826101c1565b5190206080523060c0526040516104f58082016001600160401b038111838210176101a95782916161a1833903905ff0801561019e57610160526103e843101561015957604051615ce990816104b8823960805181505060a05181505060c05181505060e05181505061010051815050610120518161187c015261014051816118a6015261016051815050f35b60405162461bcd60e51b815260206004820152601660248201527f73686f756c64206e6f74206265206465706c6f796564000000000000000000006044820152606490fd5b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b601f909101601f19168101906001600160401b038211908210176101a957604052565b908151602081105f1461025e575090601f81511161021e57602081519101516020821061020f571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160401b0381116101a957600254600181811c91168015610375575b602082101461036157601f811161032e575b50602092601f82116001146102cd57928192935f926102c2575b50508160011b915f199060031b1c19161760025560ff90565b015190505f806102a9565b601f1982169360025f52805f20915f5b86811061031657508360019596106102fe575b505050811b0160025560ff90565b01515f1960f88460031b161c191690555f80806102f0565b919260206001819286850151815501940192016102dd565b60025f52601f60205f20910160051c810190601f830160051c015b818110610356575061028f565b5f8155600101610349565b634e487b7160e01b5f52602260045260245ffd5b90607f169061027d565b908151602081105f146103aa575090601f81511161021e57602081519101516020821061020f571790565b6001600160401b0381116101a957600354600181811c911680156104ad575b602082101461036157601f811161047a575b50602092601f821160011461041957928192935f9261040e575b50508160011b915f199060031b1c19161760035560ff90565b015190505f806103f5565b601f1982169360035f52805f20915f5b868110610462575083600195961061044a575b505050811b0160035560ff90565b01515f1960f88460031b161c191690555f808061043c565b91926020600181928685015181550194019201610429565b60035f52601f60205f20910160051c810190601f830160051c015b8181106104a257506103db565b5f8155600101610495565b90607f16906103c956fe60806040526004361015610023575b3615610018575f80fd5b61002133613239565b005b5f5f3560e01c806242dc531461253e57806301ffc9a7146124d85780630396cb60146121a457806309ccb880146121525780630bd28e3b146120bf57806313c65a6e14612083578063154e58dc1461202a5780631b2e01b814611f995780631f5ae7bb14611dea578063205c287814611c5657806322cdde4c14611c3557806335567e1a14611b7f5780635287ce1214611a7957806370a0823114611a17578063765e827f1461197a57806384b0196e14611844578063850aaf621461178357806397b2dcb9146110075780639b249f6914610ec7578063b760faf914610e89578063bb9fe6bf14610caf578063c23a5cea14610a2c578063c3bce009146107255763dbed18e014610135575061000e565b346107225761014336612d94565b9061014f9392936138c4565b8291835b82811061050457509091610166906130e2565b9183805b8282106102795750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183928491855b8181106101d557866101af8787613c7d565b807f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d80f35b61022f6101e382848b613354565b73ffffffffffffffffffffffffffffffffffffffff610204602083016133e8565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8a80a280613394565b9088915b8083106102455750505060010161019d565b909195976001809161026d61025b8a868861314e565b6102658d8b6131bb565b51908d6139b7565b01990196019190610233565b60209061028783858a613354565b73ffffffffffffffffffffffffffffffffffffffff6102b26102a98380613394565b959093016133e8565b16885b8481106102cc57505050906001910191019061016a565b83810161030d73ffffffffffffffffffffffffffffffffffffffff6103066102f4848e6131bb565b51610300868b8a61314e565b85614a63565b9290615752565b9116850361049f5761043a5761033773ffffffffffffffffffffffffffffffffffffffff91615752565b91166103d55761034a57506001016102b5565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61050f818488613354565b9361051a8580613394565b919073ffffffffffffffffffffffffffffffffffffffff61053d602089016133e8565b1696600188146106f6578761055a575b5050019350600101610153565b806040610568920190613303565b889291923b156106f2579189916040519384927f2dd8113300000000000000000000000000000000000000000000000000000000845287604485016040600487015252606484019260648960051b860101938187907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee181360301905b8c831061068d5750505050508383037ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0160248501528493928392610628926131fb565b0381838c5af19182610674575b505061066757602487877f86a9f750000000000000000000000000000000000000000000000000000000008252600452fd5b939450849360015f61054d565b8161067e91612bd8565b61068957875f610635565b8780fd5b9295977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c9194995087929597030185528735838112156106ed5760206106d860019385839401613459565b9901950193018f9795939192899795936105e4565b508f80fd5b8980fd5b602489897f86a9f750000000000000000000000000000000000000000000000000000000008252600452fd5b80fd5b50346107225761073436612d24565b60405161074081612b1e565b60405161074c81612b1e565b83815283602082015283604082015283606082015260606080820152815260405161077681612ba0565b5f81525f6020820152602082015260405161079081612ba0565b5f81525f602082015260408201526040516107aa81612ba0565b5f81525f6020820152606082015260806107c26132d8565b9101526107cd613073565b6107d682613e1d565b6107e08183614112565b9061080573ffffffffffffffffffffffffffffffffffffffff60e085510151166152e4565b9061083e61082a73ffffffffffffffffffffffffffffffffffffffff865151166152e4565b956108336132c0565b506040810190613303565b60148110610a1257601411610a0e57926020959491928694938861088173ffffffffffffffffffffffffffffffffffffffff88976101409c503560601c166152e4565b9473ffffffffffffffffffffffffffffffffffffffff8316946080820151936060604084015193015192604051956108b887612b1e565b865289860152604085015260608401526080830152506108d66132d8565b9280151580610a03575b6109ce575b508492938361096b60808294604051906108fe82612b1e565b81528381019b8c5260408101948552606081019687528181019889526040519d848f9e928f938452519201528c61016082519101528c610180858301519101528c6101a060408301519101528c6101c06060830151910152015160a06101e08d01526102008c0190612e27565b9851805160408c0152015160608a015251805160808a0152015160a088015251805160c0880152015160e08601525173ffffffffffffffffffffffffffffffffffffffff8151166101008601520151805161012085015201516101408301520390f35b8580945061096b6080836109e4849699956152e4565b604051916109f183612ba0565b825284820152965050505093906108e5565b5060018114156108e0565b8680fd5b50509260209493928593928493886108816101409a6152e4565b50346107225760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261072257610a64612cac565b33825281602052600160408320018054906dffffffffffffffffffffffffffff8260081c16918215610c515760981c65ffffffffffff168015610bf3574210610b955780547fffffffffffffff000000000000000000000000000000000000000000000000ff1690556040805173ffffffffffffffffffffffffffffffffffffffff84811682526020820184905285948594859485949193929133917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2165af1610b2e612ef8565b5015610b375780f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b503461072257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610722573381528060205260016040822001805463ffffffff8160781c16908115610e2b5760ff1615610dcd5765ffffffffffff4216019065ffffffffffff8211610da05780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609884901b1617905560405165ffffffffffff909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261072257610ec4610ebf612cac565b613239565b80f35b50346107225760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107225760043567ffffffffffffffff8111611003576020610f1c610f73923690600401612ccf565b73ffffffffffffffffffffffffffffffffffffffff6004541690856040518096819582947f570e1a3600000000000000000000000000000000000000000000000000000000845288600485015260248401916131fb565b03925af1908115610ff857829173ffffffffffffffffffffffffffffffffffffffff9160249491610fc9575b507f6ca7b80600000000000000000000000000000000000000000000000000000000835216600452fd5b610feb915060203d602011610ff1575b610fe38183612bd8565b8101906131cf565b5f610f9f565b503d610fd9565b6040513d84823e3d90fd5b5080fd5b50346107225760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107225760043567ffffffffffffffff81116110035780600401916101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc833603011261072257611083612c89565b916044359367ffffffffffffffff851161177f576110a8606494953690600401612ccf565b919092606060a06040516110bb81612b84565b878152876020820152876040820152878382015287608082015201526110df6138c4565b6110e7613073565b6110f083613e1d565b6110fa8184614112565b9390925a91886060850151926111166040519c8d920184613303565b8360038211611777575b7fffffffff00000000000000000000000000000000000000000000000000000000167f8dd7712f00000000000000000000000000000000000000000000000000000000036116065750505061122c61134c6111ba6111ec602095868a01516040519384927f8dd7712f000000000000000000000000000000000000000000000000000000008a850152604060248501526064840190613459565b906044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612bd8565b6113206040519384927e42dc5300000000000000000000000000000000000000000000000000000000888501526102006024850152610224840190612e27565b6112ef604484018b60806101a091610120815173ffffffffffffffffffffffffffffffffffffffff8151168652602081015160208701526040810151604087015260608101516060870152838101518487015260a081015160a087015260c081015160c087015273ffffffffffffffffffffffffffffffffffffffff60e08201511660e087015261010081015161010087015201516101208501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8382030161020484015287612e27565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612bd8565b828151910182305af188519960405215611461575b5050858097986114279750819560609773ffffffffffffffffffffffffffffffffffffffff831661142b575b505050506080015195604051966113a388612b84565b875260208701978852604087019182526060870192835260808701931515845260a087019485527f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6040519687966020885251602088015251604087015251606086015251608085015251151560a08401525160c08084015260e0830190612e27565b0390f35b839598508394975081604094929394519384928337810182815203925af1926080611454612ef8565b94939050865f808061138d565b90989697508760203d146115f9575b7fdeaddead0000000000000000000000000000000000000000000000000000000081036114fc57608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b9888917fdeadaa5100000000000000000000000000000000000000000000000000000000611427999b145f14611569575061153b611546915a90612eeb565b608084015190612e84565b61155f60408401519161155885615467565b8285615365565b985b989796611361565b6115ec6115e16115f39360405160208801518851907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f4792602073ffffffffffffffffffffffffffffffffffffffff8451169301516115c461353a565b906115d460405192839283612e6a565b0390a36040525a90612eeb565b608086015190612e84565b9084613567565b98611561565b50602088803e8751611470565b61176e94508293509061164e917e42dc5300000000000000000000000000000000000000000000000000000000602061174295015261020060248601526102248501916131fb565b611711604484018860806101a091610120815173ffffffffffffffffffffffffffffffffffffffff8151168652602081015160208701526040810151604087015260608101516060870152838101518487015260a081015160a087015260c081015160c087015273ffffffffffffffffffffffffffffffffffffffff60e08201511660e087015261010081015161010087015201516101208501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8382030161020484015284612e27565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018b528a612bd8565b6020888a61134c565b508135611120565b8280fd5b50346107225760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261072257806117bc612cac565b60243567ffffffffffffffff8111611840576117dc903690600401612ccf565b90816040519283928337810184815203915af46117f7612ef8565b9061183c6040519283927f9941055400000000000000000000000000000000000000000000000000000000845215156004840152604060248401526044830190612e27565b0390fd5b5050fd5b503461072257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126107225761191e906118a07f000000000000000000000000000000000000000000000000000000000000000061550c565b906118ca7f0000000000000000000000000000000000000000000000000000000000000000615682565b90602061192c604051936118de8386612bd8565b8385525f3681376040519687967f0f00000000000000000000000000000000000000000000000000000000000000885260e08589015260e0880190612e27565b908682036040880152612e27565b904660608601523060808601528260a086015284820360c08601528080855193848152019401925b82811061196357505050500390f35b835185528695509381019392810192600101611954565b50346107225761198936612d94565b9291906119946138c4565b61199d816130e2565b916119a9838383613938565b5083927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728580a184925b8084106119e557856101af8689613c7d565b90919293600190611a0c6119fa87858861314e565b611a0488876131bb565b5190886139b7565b0194019291906119d3565b50346107225760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261072257604060209173ffffffffffffffffffffffffffffffffffffffff611a69612cac565b1681528083522054604051908152f35b50346107225760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261072257604060a09173ffffffffffffffffffffffffffffffffffffffff611acb612cac565b8260808551611ad981612b1e565b82815282602082015282878201528260608201520152168152806020522065ffffffffffff604051611b0a81612b1e565b63ffffffff60018454948584520154916dffffffffffffffffffffffffffff6020820160ff8516151581526040830190828660081c1682528660806060860195878960781c168752019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b50346107225760407fffffffffffff