0 txs
1.4k calls
constructor
constructor(address pufferModuleBeacon, address restakingOperatorBeacon, address pufferProtocol)
functions
authority
viewfunction authority() view returns (address)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
PUFFER_MODULE_BEACON
viewfunction PUFFER_MODULE_BEACON() view returns (address)
PUFFER_PROTOCOL
viewfunction PUFFER_PROTOCOL() view returns (address)
PUFFER_VAULT
viewfunction PUFFER_VAULT() view returns (address)
RESTAKING_OPERATOR_BEACON
viewfunction RESTAKING_OPERATOR_BEACON() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
callCompleteQueuedWithdrawals
nonpayablefunction callCompleteQueuedWithdrawals(bytes32 moduleName, tuple[] withdrawals, address[][] tokens, bool[] receiveAsTokens)
callDelegateTo
nonpayablefunction callDelegateTo(bytes32 moduleName, address operator, tuple approverSignatureAndExpiry, bytes32 approverSalt)
callDeregisterOperatorFromAVS
nonpayablefunction callDeregisterOperatorFromAVS(address restakingOperator, tuple deregistrationParams)
callQueueWithdrawals
nonpayablefunction callQueueWithdrawals(bytes32 moduleName, uint256 sharesAmount)
callRegisterOperatorToAVS
nonpayablefunction callRegisterOperatorToAVS(address restakingOperator, tuple registrationParams)
callSetClaimerFor
nonpayablefunction callSetClaimerFor(address moduleOrReOp, address claimer)
callSetProofSubmitter
nonpayablefunction callSetProofSubmitter(bytes32 moduleName, address proofSubmitter)
callUndelegate
nonpayablefunction callUndelegate(bytes32 moduleName) returns (bytes32[] withdrawalRoot)
createNewPufferModule
nonpayablefunction createNewPufferModule(bytes32 moduleName) returns (address)
createNewRestakingOperator
nonpayablefunction createNewRestakingOperator(string metadataURI, uint32 allocationDelay) returns (address)
customExternalCall
payablefunction customExternalCall(address restakingOperator, address target, bytes customCalldata) payable
initialize
nonpayablefunction initialize(address accessManager)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
transferRewardsToTheVault
nonpayablefunction transferRewardsToTheVault(address[] modules, uint256[] rewardsAmounts)
updateAVSRegistrationSignatureProof
nonpayablefunction updateAVSRegistrationSignatureProof(address restakingOperator, bytes32 digestHash, address signer)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AuthorityUpdated
event AuthorityUpdated(address authority)
AVSRegistrationSignatureProofUpdated
event AVSRegistrationSignatureProofUpdated(address indexed restakingOperator, bytes32 digestHash, address signer)
ClaimerSet
event ClaimerSet(address indexed rewardsReceiver, address indexed claimer)
CompletedQueuedWithdrawals
event CompletedQueuedWithdrawals(bytes32 indexed moduleName, uint256 sharesWithdrawn)
CustomCallSucceeded
event CustomCallSucceeded(address indexed restakingOperator, address target, bytes customCalldata, bytes response)
Initialized
event Initialized(uint64 version)
ProofSubmitterSet
event ProofSubmitterSet(bytes32 indexed moduleName, address indexed proofSubmitter)
PufferModuleDelegated
event PufferModuleDelegated(bytes32 indexed moduleName, address operator)
PufferModuleUndelegated
event PufferModuleUndelegated(bytes32 indexed moduleName)
RestakingOperatorCreated
event RestakingOperatorCreated(address indexed restakingOperator)
RestakingOperatorDeregisteredFromAVS
event RestakingOperatorDeregisteredFromAVS(address indexed restakingOperator, address indexed avs, uint32[] operatorSetId)
RestakingOperatorRegisteredToAVS
event RestakingOperatorRegisteredToAVS(address indexed restakingOperator, address indexed avs, uint32[] operatorSetId, bytes data)
Upgraded
event Upgraded(address indexed implementation)
WithdrawalsQueued
event WithdrawalsQueued(bytes32 indexed moduleName, uint256 shareAmount, bytes32 withdrawalRoot)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AddressEmptyCode
error AddressEmptyCode(address target)
Create2EmptyBytecode
error Create2EmptyBytecode()
Create2FailedDeployment
error Create2FailedDeployment()
Create2InsufficientBalance
error Create2InsufficientBalance(uint256 balance, uint256 needed)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
ForbiddenModuleName
error ForbiddenModuleName()
InvalidAmount
error InvalidAmount()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
Unauthorized
error Unauthorized()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x61012060405230608052348015610014575f5ffd5b5060405161335f38038061335f8339810160408190526100339161018e565b6001600160a01b0380841660a05282811660c052811660e081905260408051630f9a2c2560e21b81529051633e68b094916004808201926020929091908290030181865afa158015610087573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100ab91906101d8565b6001600160a01b0316610100526100c06100c8565b5050506101fa565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156101185760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101775780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6001600160a01b0381168114610177575f5ffd5b5f5f5f606084860312156101a0575f5ffd5b83516101ab8161017a565b60208501519093506101bc8161017a565b60408501519092506101cd8161017a565b809150509250925092565b5f602082840312156101e8575f5ffd5b81516101f38161017a565b9392505050565b60805160a05160c05160e051610100516130db6102845f395f8181610187015261072201525f8181610347015281816104e9015281816107f401528181610e1a0152818161102401528181611248015261143501525f818161022b015261095a01525f818161031401526112df01525f818161167a015281816116a301526117ed01526130db5ff3fe60806040526004361061014a575f3560e01c8063972546f8116100b3578063bf7e214f1161006d578063bf7e214f14610416578063c14093291461042a578063c4d66de814610449578063c7d1f67f14610468578063d82752c814610487578063e78eeca2146104a6575f5ffd5b8063972546f814610336578063a06dee4314610369578063a4136b5414610388578063a6cee53d146103a7578063ad3cb1cc146103ba578063af3c04b9146103f7575f5ffd5b806358d539e11161010457806358d539e11461024d5780635c92f1261461027957806364a9f89f146102985780637a9e5e4b146102b75780638fb36037146102d657806396b4515714610303575f5ffd5b80633e670adb146101555780633e68b094146101765780634516bfa7146101c65780634f1ef286146101e557806352d1902d146101f85780635648c4611461021a575f5ffd5b3661015157005b5f5ffd5b348015610160575f5ffd5b5061017461016f366004611c78565b6104c5565b005b348015610181575f5ffd5b506101a97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020015b60405180910390f35b3480156101d1575f5ffd5b506101746101e0366004611ced565b6105ee565b6101746101f3366004611dc1565b610797565b348015610203575f5ffd5b5061020c6107b6565b6040519081526020016101bd565b348015610225575f5ffd5b506101a97f000000000000000000000000000000000000000000000000000000000000000081565b348015610258575f5ffd5b5061026c610267366004611e4d565b6107d1565b6040516101bd9190611e64565b348015610284575f5ffd5b506101a9610293366004611eff565b6108fd565b3480156102a3575f5ffd5b506101746102b2366004611f51565b610a42565b3480156102c2575f5ffd5b506101746102d1366004611f7d565b610adc565b3480156102e1575f5ffd5b506102ea610b63565b6040516001600160e01b031990911681526020016101bd565b34801561030e575f5ffd5b506101a97f000000000000000000000000000000000000000000000000000000000000000081565b348015610341575f5ffd5b506101a97f000000000000000000000000000000000000000000000000000000000000000081565b348015610374575f5ffd5b50610174610383366004611fae565b610b99565b348015610393575f5ffd5b506101746103a2366004611fae565b610c6e565b6101746103b5366004611ffa565b610d2b565b3480156103c5575f5ffd5b506103ea604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101bd919061207c565b348015610402575f5ffd5b5061017461041136600461208e565b610df9565b348015610421575f5ffd5b506101a9610fe8565b348015610435575f5ffd5b50610174610444366004612133565b611003565b348015610454575f5ffd5b50610174610463366004611f7d565b611130565b348015610473575f5ffd5b506101a9610482366004611e4d565b61123c565b348015610492575f5ffd5b506101746104a1366004612193565b611364565b3480156104b1575f5ffd5b506101746104c03660046121c7565b611414565b6104d1335b5f36611579565b6040516322dbefbb60e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa158015610536573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061055a91906121e7565b60405163d06d558760e01b81526001600160a01b0384811660048301529192509082169063d06d5587906024015f604051808303815f87803b15801561059e575f5ffd5b505af11580156105b0573d5f5f3e3d5ffd5b50506040516001600160a01b03851692508591507f7f89a4fee8344b6c81af28f87562de8054623bc99874a118c25adad8f83bc7ae905f90a3505050565b6105f7336104ca565b5f805b8481101561071f575f86868381811061061557610615612202565b905060200201602081019061062a9190611f7d565b6001600160a01b0316636dbf2fa03087878681811061064b5761064b612202565b6040516001600160e01b031960e087901b1681526001600160a01b0390941660048501526020029190910135602483015250606060448201525f60648201526084015f604051808303815f875af11580156106a8573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526106cf9190810190612270565b509050806106f05760405163162908e360e11b815260040160405180910390fd5b84848381811061070257610702612202565b905060200201358361071491906122b3565b9250506001016105fa565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663152111f7826040518263ffffffff1660e01b81526004015f604051808303818588803b158015610779575f5ffd5b505af115801561078b573d5f5f3e3d5ffd5b50505050505050505050565b61079f61166f565b6107a882611715565b6107b28282611721565b5050565b5f6107bf6117e2565b505f5160206130865f395f51905f5290565b60606107dc336104ca565b6040516322dbefbb60e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa158015610841573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086591906121e7565b9050806001600160a01b031663eff7c5036040518163ffffffff1660e01b81526004015f604051808303815f875af11580156108a3573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108ca91908101906122d2565b60405190925083907f4651591b511cac27601595cefbb19b2f0a04ec7b9348230f44a1309b9d70a8c9905f90a250919050565b5f610907336104ca565b5f610a025f868660405160200161091f9291906123a4565b604051602081830303815290604052805190602001206040518060200161094590611c4c565b601f1982820381018352601f909101166040527f0000000000000000000000000000000000000000000000000000000000000000610981610fe8565b8a8a8a60405160240161099794939291906123bf565b60408051601f19818403018152918152602080830180516001600160e01b0316635a17631960e11b17905290516109d0939291016123fa565b60408051601f19818403018152908290526109ee9291602001612434565b60405160208183030381529060405261182b565b6040519091506001600160a01b038216907fc7178e96e72aa500a37cafe2999b91040f28d3d3a83e64eb3b6166345e804291905f90a290505b9392505050565b610a4b336104ca565b604051633f8d8ef560e21b81526001600160a01b03828116600483015283169063fe363bd4906024015f604051808303815f87803b158015610a8b575f5ffd5b505af1158015610a9d573d5f5f3e3d5ffd5b50506040516001600160a01b038085169350851691507f4925eafc82d0c4d67889898eeed64b18488ab19811e61620f387026dec126a28905f90a35050565b33610ae5610fe8565b6001600160a01b0316816001600160a01b031614610b255760405162d1953b60e31b81526001600160a01b03821660048201526024015b60405180910390fd5b816001600160a01b03163b5f03610b5a576040516361798f2f60e11b81526001600160a01b0383166004820152602401610b1c565b6107b2826118a9565b5f5160206130665f395f51905f5280545f9190600160a01b900460ff16610b8a575f610b93565b638fb3603760e01b5b91505090565b610ba2336104ca565b60405163c91f2eab60e01b81526001600160a01b0383169063c91f2eab90610bce908490600401612512565b5f604051808303815f87803b158015610be5575f5ffd5b505af1158015610bf7573d5f5f3e3d5ffd5b50610c09925050506020820182611f7d565b6001600160a01b039081169083167fe47a1be2e87cd0d8e7deac93187c98c837de2096e1f048141ab6e377d30d648a610c456020850185612586565b610c5260408701876125cb565b604051610c62949392919061260d565b60405180910390a35050565b610c77336104ca565b60405163e44f6bc160e01b81526001600160a01b0383169063e44f6bc190610ca3908490600401612633565b5f604051808303815f87803b158015610cba575f5ffd5b505af1158015610ccc573d5f5f3e3d5ffd5b50610ce1925050506040820160208301611f7d565b6001600160a01b039081169083167fd3a1da1a6a02235e5cee67b27f99931e657829be79f720ae8bfe10bd80bcd5ae610d1d6040850185612586565b604051610c62929190612693565b610d34336104ca565b5f846001600160a01b03166358fa420c348686866040518563ffffffff1660e01b8152600401610d66939291906126a6565b5f6040518083038185885af1158015610d81573d5f5f3e3d5ffd5b50505050506040513d5f823e601f3d908101601f19168201604052610da991908101906126d3565b9050846001600160a01b03167fb7733a8fd1263c835b901d11878a19c9a8cba9ba7db83ccd7f7a42364071509f85858585604051610dea9493929190612704565b60405180910390a25050505050565b610e02336104ca565b6040516322dbefbb60e01b8152600481018890525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa158015610e67573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8b91906121e7565b604051639435bb4360e01b81529091506001600160a01b03821690639435bb4390610ec4908a908a908a908a908a908a9060040161286f565b5f604051808303815f87803b158015610edb575f5ffd5b505af1158015610eed573d5f5f3e3d5ffd5b505f9250829150505b87811015610fa2575f5b898983818110610f1257610f12612202565b9050602002810190610f2491906129bc565b610f329060c0810190612586565b9050811015610f9957898983818110610f4d57610f4d612202565b9050602002810190610f5f91906129bc565b610f6d9060c0810190612586565b82818110610f7d57610f7d612202565b9050602002013583610f8f91906122b3565b9250600101610f00565b50600101610ef6565b50887f46ca5934f7ca805e7fbdc05e90e3ecbea495c41e35ba48e24f053c0c3d25af1e82604051610fd591815260200190565b60405180910390a2505050505050505050565b5f5160206130665f395f51905f52546001600160a01b031690565b61100c336104ca565b6040516322dbefbb60e01b8152600481018590525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa158015611071573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109591906121e7565b604051630bed00f960e21b81529091506001600160a01b03821690632fb403e4906110c8908790879087906004016129da565b5f604051808303815f87803b1580156110df575f5ffd5b505af11580156110f1573d5f5f3e3d5ffd5b50506040516001600160a01b03871681528792507ffa610363b3f4985bba03612919e946ac0bccf11c8e067255de41e530f8cc09979150602001610dea565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156111745750825b90505f826001600160401b0316600114801561118f5750303b155b90508115801561119d575080155b156111bb5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156111e557845460ff60401b1916600160401b1785555b6111ee86611909565b831561123457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611285576040516282b42960e81b815260040160405180910390fd5b6c4e4f5f56414c494441544f525360981b82036112b55760405163d6cccd9b60e01b815260040160405180910390fd5b61135c5f83604051806020016112ca90611c4c565b601f1982820381018352601f909101166040527f000000000000000000000000000000000000000000000000000000000000000086611307610fe8565b60405160248101929092526001600160a01b0316604482015260640160408051601f19818403018152918152602080830180516001600160e01b0316631a4438cd60e21b17905290516109d0939291016123fa565b90505b919050565b61136d336104ca565b604051633801a64360e11b8152600481018390526001600160a01b0382811660248301528416906370034c86906044015f604051808303815f87803b1580156113b4575f5ffd5b505af11580156113c6573d5f5f3e3d5ffd5b5050604080518581526001600160a01b038581166020830152871693507f3a6a179c72e503b78f992c3aa1a8d451c366c446c086cee5a811a3d03445a62f92500160405180910390a2505050565b61141d336104ca565b6040516322dbefbb60e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa158015611482573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a691906121e7565b60405163852aa33d60e01b8152600481018490529091505f906001600160a01b0383169063852aa33d906024015f604051808303815f875af11580156114ee573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261151591908101906122d2565b9050837ffa1bd67700189b28b5a9085170838266813878ca3237b31a33358644a22a2f0e84835f8151811061154c5761154c612202565b602002602001015160405161156b929190918252602082015260400190565b60405180910390a250505050565b5f5160206130665f395f51905f525f806115b1611594610fe8565b87306115a360045f8a8c612a25565b6115ac91612a4c565b61191a565b91509150816112345763ffffffff81161561164c57825460ff60a01b1916600160a01b1783556115df610fe8565b6001600160a01b03166394c7d7ee8787876040518463ffffffff1660e01b815260040161160e939291906126a6565b5f604051808303815f87803b158015611625575f5ffd5b505af1158015611637573d5f5f3e3d5ffd5b5050845460ff60a01b19168555506112349050565b60405162d1953b60e31b81526001600160a01b0387166004820152602401610b1c565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806116f557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166116e95f5160206130865f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156117135760405163703e46dd60e11b815260040160405180910390fd5b565b61171e336104ca565b50565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561177b575060408051601f3d908101601f1916820190925261177891810190612a84565b60015b6117a357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b1c565b5f5160206130865f395f51905f5281146117d357604051632a87526960e21b815260048101829052602401610b1c565b6117dd8383611a22565b505050565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117135760405163703e46dd60e11b815260040160405180910390fd5b5f834710156118565760405163392efb2b60e21b815247600482015260248101859052604401610b1c565b81515f0361187757604051631328927760e21b815260040160405180910390fd5b8282516020840186f590506001600160a01b038116610a3b57604051633a0ba96160e11b815260040160405180910390fd5b5f5160206130665f395f51905f5280546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b611911611a77565b61171e81611ac0565b6040516001600160a01b03848116602483015283811660448301526001600160e01b0319831660648301525f9182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b179052516119889190612a9b565b5f60405180830381855afa9150503d805f81146119c0576040519150601f19603f3d011682016040523d82523d5f602084013e6119c5565b606091505b50915091508115611a175760408151106119f757808060200190518101906119ed9190612aa6565b9094509250611a17565b6020815110611a175780806020019051810190611a149190612ad3565b93505b505094509492505050565b611a2b82611ad1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611a6f576117dd8282611b34565b6107b2611ba8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661171357604051631afcd79f60e31b815260040160405180910390fd5b611ac8611a77565b61171e816118a9565b806001600160a01b03163b5f03611b0657604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b1c565b5f5160206130865f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051611b509190612a9b565b5f60405180830381855af49150503d805f8114611b88576040519150601f19603f3d011682016040523d82523d5f602084013e611b8d565b606091505b5091509150611b9d858383611bc7565b925050505b92915050565b34156117135760405163b398979f60e01b815260040160405180910390fd5b606082611bdc57611bd782611c23565b610a3b565b8151158015611bf357506001600160a01b0384163b155b15611c1c57604051639996b31560e01b81526001600160a01b0385166004820152602401610b1c565b5080610a3b565b805115611c335780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b61057780612aef83390190565b6001600160a01b038116811461171e575f5ffd5b803561135f81611c59565b5f5f60408385031215611c89575f5ffd5b823591506020830135611c9b81611c59565b809150509250929050565b5f5f83601f840112611cb6575f5ffd5b5081356001600160401b03811115611ccc575f5ffd5b6020830191508360208260051b8501011115611ce6575f5ffd5b9250929050565b5f5f5f5f60408587031215611d00575f5ffd5b84356001600160401b03811115611d15575f5ffd5b611d2187828801611ca6565b90955093505060208501356001600160401b03811115611d3f575f5ffd5b611d4b87828801611ca6565b95989497509550505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715611d9357611d93611d57565b604052919050565b5f6001600160401b03821115611db357611db3611d57565b50601f01601f191660200190565b5f5f60408385031215611dd2575f5ffd5b8235611ddd81611c59565b915060208301356001600160401b03811115611df7575f5ffd5b8301601f81018513611e07575f5ffd5b8035611e1a611e1582611d9b565b611d6b565b818152866020838501011115611e2e575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215611e5d575f5ffd5b5035919050565b602080825282518282018190525f918401906040840190835b81811015611e9b578351835260209384019390920191600101611e7d565b509095945050505050565b5f5f83601f840112611eb6575f5ffd5b5081356001600160401b03811115611ecc575f5ffd5b602083019150836020828501011115611ce6575f5ffd5b63ffffffff8116811461171e575f5ffd5b803561135f81611ee3565b5f5f5f60408486031215611f11575f5ffd5b83356001600160401b03811115611f26575f5ffd5b611f3286828701611ea6565b9094509250506020840135611f4681611ee3565b809150509250925092565b5f5f60408385031215611f62575f5ffd5b8235611f6d81611c59565b91506020830135611c9b81611c59565b5f60208284031215611f8d575f5ffd5b8135610a3b81611c59565b5f60608284031215611fa8575f5ffd5b50919050565b5f5f60408385031215611fbf575f5ffd5b8235611fca81611c59565b915060208301356001600160401b03811115611fe4575f5ffd5b611ff085828601611f98565b9150509250929050565b5f5f5f5f6060858703121561200d575f5ffd5b843561201881611c59565b9350602085013561202881611c59565b925060408501356001600160401b03811115612042575f5ffd5b611d4b87828801611ea6565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610a3b602083018461204e565b5f5f5f5f5f5f5f6080888a0312156120a4575f5ffd5b8735965060208801356001600160401b038111156120c0575f5ffd5b6120cc8a828b01611ca6565b90975095505060408801356001600160401b038111156120ea575f5ffd5b6120f68a828b01611ca6565b90955093505060608801356001600160401b03811115612114575f5ffd5b6121208a828b01611ca6565b989b979a50959850939692959293505050565b5f5f5f5f60808587031215612146575f5ffd5b84359350602085013561215881611c59565b925060408501356001600160401b03811115612172575f5ffd5b850160408188031215612183575f5ffd5b9396929550929360600135925050565b5f5f5f606084860312156121a5575f5ffd5b83356121b081611c59565b9250602084013591506040840135611f4681611c59565b5f5f604083850312156121d8575f5ffd5b50508035926020909101359150565b5f602082840312156121f7575f5ffd5b8151610a3b81611c59565b634e487b7160e01b5f52603260045260245ffd5b801515811461171e575f5ffd5b5f82601f830112612232575f5ffd5b8151612240611e1582611d9b565b818152846020838601011115612254575f5ffd5b8160208501602083015e5f918101602001919091529392505050565b5f5f60408385031215612281575f5ffd5b825161228c81612216565b60208401519092506001600160401b038111156122a7575f5ffd5b611ff085828601612223565b80820180821115611ba257634e487b7160e01b5f52601160045260245ffd5b5f602082840312156122e2575f5ffd5b81516001600160401b038111156122f7575f5ffd5b8201601f81018413612307575f5ffd5b80516001600160401b0381111561232057612320611d57565b8060051b61233060208201611d6b565b9182526020818401810192908101908784111561234b575f5ffd5b6020850194505b8385101561237157845180835260209586019590935090910190612352565b979650505050505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6123b760208301848661237c565b949350505050565b6001600160a01b03851681526060602082018190525f906123e3908301858761237c565b905063ffffffff8316604083015295945050505050565b6001600160a01b03831681526040602082018190525f906123b79083018461204e565b5f81518060208401855e5f93019283525090919050565b5f6123b7612442838661241d565b8461241d565b5f5f8335601e1984360301811261245d575f5ffd5b83016020810192503590506001600160401b0381111561247b575f5ffd5b8060051b3603821315611ce6575f5ffd5b8183526020830192505f815f5b848110156124c75781356124ac81611ee3565b63ffffffff1686526020958601959190910190600101612499565b5093949350505050565b5f5f8335601e198436030181126124e6575f5ffd5b83016020810192503590506001600160401b03811115612504575f5ffd5b803603821315611ce6575f5ffd5b602081525f823561252281611c59565b6001600160a01b031660208381019190915261254090840184612448565b6060604085015261255560808501828461248c565b91505061256560408501856124d1565b848303601f1901606086015261257c83828461237c565b9695505050505050565b5f5f8335601e1984360301811261259b575f5ffd5b8301803591506001600160401b038211156125b4575f5ffd5b6020019150600581901b3603821315611ce6575f5ffd5b5f5f8335601e198436030181126125e0575f5ffd5b8301803591506001600160401b038211156125f9575f5ffd5b602001915036819003821315611ce6575f5ffd5b604081525f61262060408301868861248c565b828103602084015261237181858761237c565b602081525f823561264381611c59565b6001600160a01b031660208381019190915283013561266181611c59565b6001600160a01b031660408381019190915261267f90840184612448565b606080850152611b9d60808501828461248c565b602081525f6123b760208301848661248c565b6001600160a01b03841681526040602082018190525f906126ca908301848661237c565b95945050505050565b5f602082840312156126e3575f5ffd5b81516001600160401b038111156126f8575f5ffd5b6123b784828501612223565b6001600160a01b03851681526060602082018190525f90612728908301858761237c565b8281036040840152612371818561204e565b8183526020830192505f815f5b848110156124c757813561275a81611c59565b6001600160a01b031686526020958601959190910190600101612747565b8183525f6001600160fb1b0383111561278f575f5ffd5b8260051b80836020870137939093016020019392505050565b5f8383855260208501945060208460051b820101835f5b8681101561282c57838303601f190188526127da8287612448565b808552602085015f5b828110156128135783356127f681611c59565b6001600160a01b03168252602093840193909101906001016127e3565b5060209a8b019a909550939093019250506001016127bf565b50909695505050505050565b8183526020830192505f815f5b848110156124c757813561285881612216565b151586526020958601959190910190600101612845565b606080825281018690525f6080600588901b83018101908301898360de1936839003015b8b82101561298357868503607f1901845282358181126128b1575f5ffd5b8d0180356128be81611c59565b6001600160a01b0316865260208101356128d781611c59565b6001600160a01b031660208701526128f160408201611c6d565b6001600160a01b031660408701526060818101359087015261291560808201611ef4565b63ffffffff16608087015261292d60a0820182612448565b60e060a089015261294260e08901828461273a565b91505061295260c0830183612448565b925087820360c0890152612967828483612778565b9750505050602083019250602084019350600182019150612893565b50505050828103602084015261299a8187896127a8565b905082810360408401526129af818587612838565b9998505050505050505050565b5f823560de198336030181126129d0575f5ffd5b9190910192915050565b6001600160a01b0384168152606060208201525f6129f884806124d1565b60406060850152612a0d60a08501828461237c565b60209690960135608085015250505060400152919050565b5f5f85851115612a33575f5ffd5b83861115612a3f575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015612a7d576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f60208284031215612a94575f5ffd5b5051919050565b5f610a3b828461241d565b5f5f60408385031215612ab7575f5ffd5b8251612ac281612216565b6020840151909250611c9b81611ee3565b5f60208284031215612ae3575f5ffd5b8151610a3b8161221656fe60a060405260405161057738038061057783398101604081905261002291610354565b61002c828261003e565b506001600160a01b0316608052610445565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610416565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610416565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f5f846001600160a01b031684604051610225919061042f565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461033b575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610365575f5ffd5b61036e83610325565b60208401519092506001600160401b03811115610389575f5ffd5b8301601f81018513610399575f5ffd5b80516001600160401b038111156103b2576103b2610340565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103e0576103e0610340565b6040528181528282016020018710156103f7575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f60208284031215610426575f5ffd5b6102f582610325565b5f82518060208501845e5f920191825250919050565b60805161011b61045c5f395f601d015261011b5ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f5f375f5f365f845af43d5f5f3e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f5ffd5b81516001600160a01b038116811460de575f5ffd5b939250505056fea2646970667358221220149fb9401558b48fab186ff9b2601c0832107619ee1089ad7c45c0ba5a2bab7364736f6c634300081c0033f3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220db40616fba679e3ba855565740f55bbb860319fed29719737556a50dcc7b11d164736f6c634300081c0033000000000000000000000000dd38a5a7789c74fc7f64556fc772343658eebb040000000000000000000000006756b856dd3843c84249a6a31850cb56db824c4b000000000000000000000000f7b6b32492c2e13799d921e84202450131bd238b