0 txs
7 calls
constructor
constructor(address _application, address _currency, uint256 _feeRatePerSecond)
functions
application
viewfunction application() view returns (address)
cohortFingerprint
purefunction cohortFingerprint(address[] nodes) pure returns (bytes32)
currency
viewfunction currency() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
feeDeduction
purefunction feeDeduction(uint256, uint256) pure returns (uint256)
feeRatePerSecond
viewfunction feeRatePerSecond() view returns (uint256)
getAuthority
viewfunction getAuthority(uint32 ritualId) view returns (address)
getParticipant
viewfunction getParticipant(uint32 ritualId, address provider, bool transcript) view returns (tuple)
getParticipantFromProvider
viewfunction getParticipantFromProvider(uint32 ritualId, address provider) view returns (tuple)
getParticipants
viewfunction getParticipants(uint32 ritualId, uint256 startIndex, uint256 maxParticipants, bool includeTranscript) view returns (tuple[])
getParticipants
viewfunction getParticipants(uint32 ritualId) view returns (tuple[])
getProviderPublicKey
viewfunction getProviderPublicKey(address provider, uint256 ritualId) view returns (tuple)
getProviders
viewfunction getProviders(uint32 ritualId) view returns (address[])
getPublicKeyFromRitualId
viewfunction getPublicKeyFromRitualId(uint32 ritualId) view returns (tuple)
getRitualIdFromPublicKey
viewfunction getRitualIdFromPublicKey(tuple dkgPublicKey) view returns (uint32 ritualId)
getRitualInitiationCost
viewfunction getRitualInitiationCost(address[] providers, uint32 duration) view returns (uint256)
getRitualState
viewfunction getRitualState(uint32 ritualId) view returns (uint8)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getThresholdForRitualSize
purefunction getThresholdForRitualSize(uint16 size) pure returns (uint16)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
INITIATOR_ROLE
viewfunction INITIATOR_ROLE() view returns (bytes32)
isEncryptionAuthorized
viewfunction isEncryptionAuthorized(uint32 ritualId, bytes evidence, bytes ciphertextHeader) view returns (bool)
isInitiationPublic
viewfunction isInitiationPublic() view returns (bool)
isParticipant
viewfunction isParticipant(uint32 ritualId, address provider) view returns (bool)
isProviderPublicKeySet
viewfunction isProviderPublicKeySet(address provider) view returns (bool)
isRitualActive
viewfunction isRitualActive(uint32 ritualId) view returns (bool)
maxDkgSize
viewfunction maxDkgSize() view returns (uint16)
numberOfRituals
viewfunction numberOfRituals() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
pendingFees
viewfunction pendingFees(uint256) view returns (uint256)
rituals
viewfunction rituals(uint256) view returns (address initiator, uint32 initTimestamp, uint32 endTimestamp, uint16 totalTranscripts, uint16 totalAggregations, address authority, uint16 dkgSize, uint16 threshold, bool aggregationMismatch, address accessController, tuple publicKey, bytes aggregatedTranscript)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timeout
viewfunction timeout() view returns (uint32)
totalPendingFees
viewfunction totalPendingFees() view returns (uint256)
TREASURY_ROLE
viewfunction TREASURY_ROLE() view returns (bytes32)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(uint32 _timeout, uint16 _maxDkgSize, address _admin)
initiateRitual
nonpayablefunction initiateRitual(address[] providers, address authority, uint32 duration, address accessController) returns (uint32)
makeInitiationPublic
nonpayablefunction makeInitiationPublic()
postAggregation
nonpayablefunction postAggregation(uint32 ritualId, bytes aggregatedTranscript, tuple dkgPublicKey, bytes decryptionRequestStaticKey)
postTranscript
nonpayablefunction postTranscript(uint32 ritualId, bytes transcript)
processPendingFee
nonpayablefunction processPendingFee(uint32 ritualId) returns (uint256 refundableFee)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setMaxDkgSize
nonpayablefunction setMaxDkgSize(uint16 newSize)
setProviderPublicKey
nonpayablefunction setProviderPublicKey(tuple publicKey)
setReimbursementPool
nonpayablefunction setReimbursementPool(address pool)
setTimeout
nonpayablefunction setTimeout(uint32 newTimeout)
transferRitualAuthority
nonpayablefunction transferRitualAuthority(uint32 ritualId, address newAuthority)
withdrawTokens
nonpayablefunction withdrawTokens(address token, uint256 amount)
events
AggregationPosted
event AggregationPosted(uint32 indexed ritualId, address indexed node, bytes32 aggregatedTranscriptDigest)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
EndRitual
event EndRitual(uint32 indexed ritualId, bool successful)
Initialized
event Initialized(uint64 version)
MaxDkgSizeChanged
event MaxDkgSizeChanged(uint16 oldSize, uint16 newSize)
ParticipantPublicKeySet
event ParticipantPublicKeySet(uint32 indexed ritualId, address indexed participant, (bytes32 word0, bytes32 word1, bytes32 word2) publicKey)
ReimbursementPoolSet
event ReimbursementPoolSet(address indexed pool)
RitualAuthorityTransferred
event RitualAuthorityTransferred(uint32 indexed ritualId, address indexed previousAuthority, address indexed newAuthority)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
StartAggregationRound
event StartAggregationRound(uint32 indexed ritualId)
StartRitual
event StartRitual(uint32 indexed ritualId, address indexed authority, address[] participants)
TimeoutChanged
event TimeoutChanged(uint32 oldTimeout, uint32 newTimeout)
TranscriptPosted
event TranscriptPosted(uint32 indexed ritualId, address indexed node, bytes32 transcriptDigest)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6101006040523480156200001257600080fd5b506040516200562638038062005626833981016040819052620000359162000128565b8181600081116200007f5760405162461bcd60e51b815260206004820152601060248201526f496e76616c696420666565207261746560801b604482015260640160405180910390fd5b6001600160a01b0391821660805260a052831660c081905260408051637841064960e11b8152905163f0820c92916004808201926020929091908290030181865afa158015620000d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000f9919062000170565b6001600160601b031660e05250620001a2915050565b6001600160a01b03811681146200012557600080fd5b50565b6000806000606084860312156200013e57600080fd5b83516200014b816200010f565b60208501519093506200015e816200010f565b80925050604084015190509250925092565b6000602082840312156200018357600080fd5b81516001600160601b03811681146200019b57600080fd5b9392505050565b60805160a05160c05160e0516153fd6200022960003960006130c30152600081816104e2015281816116a5015281816118e401528181611d9701528181611e3d01528181612403015281816124a901526130ee0152600081816107a10152611b280152600081816108c701528181610b9f01528181610ec60152613c1b01526153fd6000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c806380cb8298116101e9578063c20f75eb1161010f578063d547741f116100ad578063ec9ff2511161007c578063ec9ff251146108e9578063f1e0ff19146108fc578063fad7d6b814610904578063fc9c39651461092457600080fd5b8063d547741f14610894578063d602b9fd146108a7578063dc80d104146108af578063e5a6b10f146108c257600080fd5b8063cc8463c8116100e9578063cc8463c81461082f578063cefc142914610837578063cf6eefb71461083f578063d11a57ec1461086d57600080fd5b8063c20f75eb146107f6578063c2cd3b6c14610809578063c6968ca21461081c57600080fd5b80639c48937b11610187578063a513150f11610156578063a513150f14610788578063ae02e1871461079c578063aeafcb06146107c3578063b8c45cc9146107d657600080fd5b80639c48937b14610726578063a1eda53c14610739578063a217fddf14610760578063a2b934781461076857600080fd5b80638cf95061116101c35780638cf95061146106e55780638da5cb5b146106f857806391d14854146107005780639c488a5a1461071357600080fd5b806380cb82981461069f57806384ef8ffc146106b25780638a42e63f146106ba57600080fd5b80632f2ff15d116102ce578063545c6c0a1161026c578063649a5ec71161023b578063649a5ec71461064c5780636b5478901461065f5780636b75f53e1461066757806370dea79a1461067a57600080fd5b8063545c6c0a1461060057806354d1fdb214610613578063618c542b14610626578063634e93da1461063957600080fd5b80633d796abc116102a85780633d796abc1461058f57806346f5c620146105ba5780634e62cf3f146105cd57806353f7a4b0146105ed57600080fd5b80632f2ff15d14610553578063327eec031461056657806336568abe1461057c57600080fd5b80631990e9791161034657806326e4ca821161031557806326e4ca82146104dd57806327842adb146105045780632afeecfe1461052a5780632f2eaebc1461053d57600080fd5b80631990e9791461047057806320f5458114610497578063214b02ad146104aa578063248a9ca3146104ca57600080fd5b8063068e077311610382578063068e07731461041157806306b091f91461043c5780630aa6220b14610451578063109e62ea1461045957600080fd5b806301ad0e73146103a957806301ffc9a7146103d2578063022d63fb146103f5575b600080fd5b6103bc6103b7366004614540565b610959565b6040516103c9919061461c565b60405180910390f35b6103e56103e036600461462f565b610b11565b60405190151581526020016103c9565b620697805b60405165ffffffffffff90911681526020016103c9565b61042461041f366004614659565b610b36565b6040516001600160a01b0390911681526020016103c9565b61044f61044a366004614674565b610b73565b005b61044f610cb8565b61046260025481565b6040519081526020016103c9565b6104627f6b8b15f1c11543d8280deaa7c24d12fffba6a357e4428e8c43e4234790186bff81565b6104626104a5366004614659565b610cce565b6104bd6104b8366004614659565b610ef9565b6040516103c991906146a0565b6104626104d8366004614704565b6110d3565b6104247f000000000000000000000000000000000000000000000000000000000000000081565b61051761051236600461472f565b6110f5565b60405161ffff90911681526020016103c9565b6103bc610538366004614758565b61110d565b60015461051790640100000000900461ffff1681565b61044f6105613660046147a1565b6112dd565b6104626105743660046147c6565b600092915050565b61044f61058a3660046147a1565b611309565b6105a261059d366004614704565b6113c8565b6040516103c99c9b9a999897969594939291906147e8565b61044f6105c836600461472f565b611519565b6105e06105db366004614659565b611593565b6040516103c9919061489d565b61044f6105fb3660046148ea565b611689565b61044f61060e366004614902565b61194e565b610462610621366004614982565b611a85565b61044f6106343660046149d5565b611b56565b61044f6106473660046149d5565b611c71565b61044f61065a3660046149f2565b611c85565b61044f611c99565b61044f610675366004614a5b565b611ce5565b60015461068a9063ffffffff1681565b60405163ffffffff90911681526020016103c9565b6104bd6106ad366004614aad565b612035565b610424612335565b6103e56106c83660046149d5565b6001600160a01b0316600090815260066020526040902054151590565b61044f6106f3366004614af5565b612351565b610424612947565b6103e561070e3660046147a1565b612956565b61068a610721366004614bc0565b61298e565b610462610734366004614c15565b6129e4565b610741612a17565b6040805165ffffffffffff9384168152929091166020830152016103c9565b610462600081565b610462610776366004614704565b60036020526000908152604090205481565b6001546103e590600160301b900460ff1681565b6104627f000000000000000000000000000000000000000000000000000000000000000081565b6103e56107d1366004614ce2565b612a8a565b6107e96107e4366004614659565b612b8c565b6040516103c99190614d55565b6103e5610804366004614659565b612c7b565b61068a610817366004614d76565b612cb0565b6103e561082a366004614540565b613215565b6103fa613257565b61044f6132d5565b610847613315565b604080516001600160a01b03909316835265ffffffffffff9091166020830152016103c9565b6104627fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca981565b61044f6108a23660046147a1565b613343565b61044f61336b565b61044f6108bd366004614659565b61337e565b6104247f000000000000000000000000000000000000000000000000000000000000000081565b61044f6108f7366004614540565b6133ea565b600054610462565b610917610912366004614659565b61351a565b6040516103c99190614e06565b610937610932366004614674565b61354b565b60408051825181526020808401519082015291810151908201526060016103c9565b60408051608081018252600080825260208201526060918101829052818101919091526000808463ffffffff168154811061099657610996614e2e565b9060005260206000209060070201905060006109b2828561368b565b6040805160808101825282546001600160a01b0381168252600160a01b900460ff16151560208201526001830180549193928401916109f090614e44565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1c90614e44565b8015610a695780601f10610a3e57610100808354040283529160200191610a69565b820191906000526020600020905b815481529060010190602001808311610a4c57829003601f168201915b50505050508152602001600282018054610a8290614e44565b80601f0160208091040260200160405190810160405280929190818152602001828054610aae90614e44565b8015610afb5780601f10610ad057610100808354040283529160200191610afb565b820191906000526020600020905b815481529060010190602001808311610ade57829003601f168201915b5050509190925250919450505050505b92915050565b60006001600160e01b031982166318a4c3c360e11b1480610b0b5750610b0b826136f3565b6000808263ffffffff1681548110610b5057610b50614e2e565b60009182526020909120600160079092020101546001600160a01b031692915050565b7fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca9610b9d81613728565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603610c9f576002546040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa158015610c1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c419190614e78565b610c4b9190614ea7565b821115610c9f5760405162461bcd60e51b815260206004820152601b60248201527f43616e27742077697468647261772070656e64696e672066656573000000000060448201526064015b60405180910390fd5b610cb36001600160a01b0384163384613732565b505050565b6000610cc381613728565b610ccb613791565b50565b60008060008363ffffffff1681548110610cea57610cea614e2e565b906000526020600020906007020190506000610d058261379e565b90506003816006811115610d1b57610d1b614df0565b1480610d3857506004816006811115610d3657610d36614df0565b145b80610d5457506005816006811115610d5257610d52614df0565b145b80610d7057506006816006811115610d6e57610d6e614df0565b145b610db25760405162461bcd60e51b8152602060048201526013602482015272149a5d1d585b081a5cc81b9bdd08195b991959606a1b6044820152606401610c96565b63ffffffff841660009081526003602052604090205480610e155760405162461bcd60e51b815260206004820152601f60248201527f4e6f2070656e64696e67206665657320666f7220746869732072697475616c006044820152606401610c96565b8060026000828254610e279190614ea7565b909155505063ffffffff85166000908152600360208190526040822091909155826006811115610e5957610e59614df0565b1480610e7657506004826006811115610e7457610e74614df0565b145b15610ef1578254600090610ea09063ffffffff600160a01b8204811691600160c01b900416614eba565b63ffffffff169050610eb3600083614ea7565b8454909550610eef906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911687613732565b505b505050919050565b60606000808363ffffffff1681548110610f1557610f15614e2e565b9060005260206000209060070201905080600601805480602002602001604051908101604052809291908181526020016000905b828210156110c7576000848152602090819020604080516080810182526003860290920180546001600160a01b0381168452600160a01b900460ff1615159383019390935260018301805492939291840191610fa490614e44565b80601f0160208091040260200160405190810160405280929190818152602001828054610fd090614e44565b801561101d5780601f10610ff25761010080835404028352916020019161101d565b820191906000526020600020905b81548152906001019060200180831161100057829003601f168201915b5050505050815260200160028201805461103690614e44565b80601f016020809104026020016040519081016040528092919081815260200182805461106290614e44565b80156110af5780601f10611084576101008083540402835291602001916110af565b820191906000526020600020905b81548152906001019060200180831161109257829003601f168201915b50505050508152505081526020019060010190610f49565b50505050915050919050565b6000908152600080516020615388833981519152602052604090206001015490565b6000611102600283614eed565b610b0b906001614f0e565b60408051608081018252600080825260208201526060918101829052818101919091526000808563ffffffff168154811061114a5761114a614e2e565b906000526020600020906007020190506000611166828661368b565b6040805160808101825282546001600160a01b0381168252600160a01b900460ff16151560208201526001830180549193928401916111a490614e44565b80601f01602080910402602001604051908101604052809291908181526020018280546111d090614e44565b801561121d5780601f106111f25761010080835404028352916020019161121d565b820191906000526020600020905b81548152906001019060200180831161120057829003601f168201915b5050505050815260200160028201805461123690614e44565b80601f016020809104026020016040519081016040528092919081815260200182805461126290614e44565b80156112af5780601f10611284576101008083540402835291602001916112af565b820191906000526020600020905b81548152906001019060200180831161129257829003601f168201915b5050505050815250509050836112d2576040805160208101825260008152908201525b9150505b9392505050565b816112fb57604051631fe1e13d60e11b815260040160405180910390fd5b61130582826138fc565b5050565b6000805160206153688339815191528215801561133e5750611329612335565b6001600160a01b0316826001600160a01b0316145b156113be5760008061134e613315565b90925090506001600160a01b038216151580611370575065ffffffffffff8116155b8061138357504265ffffffffffff821610155b156113ab576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610c96565b5050805465ffffffffffff60a01b191681555b610cb3838361391e565b600081815481106113d857600080fd5b6000918252602091829020600791909102018054600182015460028301546040805180820190915260038501548152600485015460801b6001600160801b031916958101959095526005840180546001600160a01b038086169850600160a01b80870463ffffffff90811699600160c01b808a0490921699600160e01b8a0461ffff9081169a600160f01b900481169986811699958104821698600160b01b82049092169794900460ff169590941693919290919061149690614e44565b80601f01602080910402602001604051908101604052809291908181526020018280546114c290614e44565b801561150f5780601f106114e45761010080835404028352916020019161150f565b820191906000526020600020905b8154815290600101906020018083116114f257829003601f168201915b505050505090508c565b600061152481613728565b6001546040805161ffff6401000000009093048316815291841660208301527f78a7068824d7a88c6fd3df9af582a9ef75dae070f53ea48608b2251080dbd81b910160405180910390a1506001805461ffff9092166401000000000265ffff0000000019909216919091179055565b60606000808363ffffffff16815481106115af576115af614e2e565b90600052602060002090600702019050600081600601805490506001600160401b038111156115e0576115e0614b94565b604051908082528060200260200182016040528015611609578160200160208202803683370190505b50905060005b60068301548110156116815782600601818154811061163057611630614e2e565b600091825260209091206003909102015482516001600160a01b039091169083908390811061166157611661614e2e565b6001600160a01b039092166020928302919091019091015260010161160f565b509392505050565b6000805460405163ded56d4560e01b81523360048201529091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ded56d4590602401602060405180830381865afa1580156116f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117189190614f29565b90506001600160a01b0381166117835760405162461bcd60e51b815260206004820152602a60248201527f4f70657261746f7220686173206e6f20626f6e642077697468207374616b696e6044820152693390383937bb34b232b960b11b6064820152608401610c96565b600060405180604001604052808463ffffffff168152602001858036038101906117ad9190614f46565b90526001600160a01b0383166000818152600660209081526040808320805460018082018355918552938390208651600490950201805463ffffffff191663ffffffff9586161781558684015180519282019290925581840151600282015590820151600390910155805189358152898301359281019290925288810135908201529293509091908516907fd6a9eae65f2798bb7380d31031efc51345c3f7e594ac11926be6e7d85cf6a1309060600160405180910390a33332146118cf5760405162461bcd60e51b815260206004820152603260248201527f4f6e6c79206f70657261746f722077697468207265616c20616464726573732060448201527163616e20736574207075626c6963206b657960701b6064820152608401610c96565b6040516325d71d9960e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634bae3b3290602401600060405180830381600087803b15801561193057600080fd5b505af1158015611944573d6000803e3d6000fd5b5050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156119935750825b90506000826001600160401b031660011480156119af5750303b155b9050811580156119bd575080155b156119db5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611a0557845460ff60401b1916600160401b1785555b6001805461ffff89166401000000000265ffffffffffff1990911663ffffffff8b1617179055611a36600087613951565b831561194457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050565b60008263ffffffff8316611ad55760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2103934ba3ab0b610323ab930ba34b7b760491b6044820152606401610c96565b60008111611b1b5760405162461bcd60e51b8152602060048201526013602482015272496e76616c69642072697475616c2073697a6560681b6044820152606401610c96565b63ffffffff8316611b4c827f0000000000000000000000000000000000000000000000000000000000000000614fa1565b6112d29190614fa1565b6000611b6181613728565b6001600160a01b0382161580611bda57506040516301fd3f7760e71b81523060048201526001600160a01b0383169063fe9fbb8090602401602060405180830381865afa158015611bb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bda9190614fb8565b611c265760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964205265696d62757273656d656e74506f6f6c000000000000006044820152606401610c96565b600580546001600160a01b0319166001600160a01b0384169081179091556040517fc472bd22bd3434e9d74366c775610f08d3f902e604ada3140aa2f2f557fcbc7190600090a25050565b6000611c7c81613728565b61130582613963565b6000611c9081613728565b611305826139d6565b6000611ca481613728565b6001805466ff0000000000001916600160301b179055610ccb7f6b8b15f1c11543d8280deaa7c24d12fffba6a357e4428e8c43e4234790186bff6000613a46565b60005a90506000808563ffffffff1681548110611d0457611d04614e2e565b6000918252602090912060079091020190506001611d218261379e565b6006811115611d3257611d32614df0565b14611d7f5760405162461bcd60e51b815260206004820152601b60248201527f4e6f742077616974696e6720666f72207472616e7363726970747300000000006044820152606401610c96565b60405163ded56d4560e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ded56d4590602401602060405180830381865afa158015611de6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0a9190614f29565b90506000611e18838361368b565b60405163c4903d5b60e01b81526001600160a01b0384811660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063c4903d5b90602401602060405180830381865afa158015611e84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea89190614fd5565b6001600160601b031611611ece5760405162461bcd60e51b8152600401610c9690614ffe565b806001018054611edd90614e44565b159050611f2c5760405162461bcd60e51b815260206004820152601e60248201527f4e6f646520616c726561647920706f73746564207472616e73637269707400006044820152606401610c96565b60008686604051611f3e929190615035565b604051908190039020905060018201611f58878983615095565b50826001600160a01b03168863ffffffff167f66568b934e848078c9787d6a66dae153eaae57f0ec3a553c11939fcdcf9c11fb83604051611f9b91815260200190565b60405180910390a38354600160e01b900461ffff1684601c611fbc83615154565b82546101009290920a61ffff81810219909316918316021790915560018601548654600160a01b9091048216600160e01b90910490911603905061202c5760405163ffffffff8916907fca79a3f8fdffa27f8c0a30733144db5a5bd2663f1f2561d8d665bf4da6a3dfbe90600090a25b61194485613a6e565b60606000808663ffffffff168154811061205157612051614e2e565b6000918252602090912060079091020160068101549091508086106120ac5760405162461bcd60e51b81526020600482015260116024820152700aee4dedcce40e6e8c2e4e840d2dcc8caf607b1b6044820152606401610c96565b84158015906120c35750806120c18688615175565b105b156120d5576120d28587615175565b90505b60006120e18783614ea7565b6001600160401b038111156120f8576120f8614b94565b60405190808252806020026020018201604052801561214c57816020015b60408051608081018252600080825260208201526060918101829052818101919091528152602001906001900390816121165790505b5090506000875b8381101561232757600085600601828154811061217257612172614e2e565b600091825260209182902060408051608081018252600390930290910180546001600160a01b038116845260ff600160a01b90910416151593830193909352600183018054929392918401916121c790614e44565b80601f01602080910402602001604051908101604052809291908181526020018280546121f390614e44565b80156122405780601f1061221557610100808354040283529160200191612240565b820191906000526020600020905b81548152906001019060200180831161222357829003601f168201915b5050505050815260200160028201805461225990614e44565b80601f016020809104026020016040519081016040528092919081815260200182805461228590614e44565b80156122d25780601f106122a7576101008083540402835291602001916122d2565b820191906000526020600020905b8154815290600101906020018083116122b557829003601f168201915b5050505050815250509050876122f5576040805160208101825260008152908201525b80848461230181615188565b95508151811061231357612313614e2e565b602090810291909101015250600101612153565b509098975050505050505050565b6000805160206153a8833981519152546001600160a01b031690565b60005a90506000808863ffffffff168154811061237057612370614e2e565b600091825260209091206007909102019050600261238d8261379e565b600681111561239e5761239e614df0565b146123eb5760405162461bcd60e51b815260206004820152601c60248201527f4e6f742077616974696e6720666f72206167677265676174696f6e73000000006044820152606401610c96565b60405163ded56d4560e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ded56d4590602401602060405180830381865afa158015612452573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124769190614f29565b90506000612484838361368b565b60405163c4903d5b60e01b81526001600160a01b0384811660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063c4903d5b90602401602060405180830381865afa1580156124f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125149190614fd5565b6001600160601b03161161253a5760405162461bcd60e51b8152600401610c9690614ffe565b8054600160a01b900460ff16156125935760405162461bcd60e51b815260206004820152601f60248201527f4e6f646520616c726561647920706f73746564206167677265676174696f6e006044820152606401610c96565b8060020180546125a290614e44565b15905061260d5760405162461bcd60e51b815260206004820152603360248201527f4e6f646520616c72656164792070726f76696465642064656372797074696f6e604482015272207265717565737420737461746963206b657960681b6064820152608401610c96565b602a85146126765760405162461bcd60e51b815260206004820152603060248201527f496e76616c6964206c656e67746820666f722064656372797074696f6e20726560448201526f717565737420737461746963206b657960801b6064820152608401610c96565b60008989604051612688929190615035565b604051908190039020825460ff60a01b1916600160a01b1783559050600282016126b3878983615095565b50826001600160a01b03168b63ffffffff167f1884446739eb06b60e314b4c3b25f08b5c7377f20538c132ce7c064f38272bac836040516126f691815260200190565b60405180910390a383600501805461270d90614e44565b905060000361273d57600584016127258a8c83615095565b50876003850161273582826151a1565b905050612812565b6040805180820190915260038501548152600485015460801b6001600160801b031916602082015261277d90612778368b90038b018b614bc0565b613af2565b15806127a15750808460050160405161279691906151d0565b604051809103902014155b156128125760018401805460ff60c01b1916600160c01b1790556000600385018190556004850180546001600160801b031916905560405190815263ffffffff8c16907fbcca4dbb1c4bb22a406b6aa7fb93ded17778d2f20c772aa043bc11b5150552789060200160405180910390a25b6001840154600160c01b900460ff16612931578354600160f01b900461ffff1684601e61283e83615154565b82546101009290920a61ffff81810219909316918316021790915560018601548654600160a01b9091048216600160f01b909104909116039050612931576128858b610cce565b50600061289f61289a368b90038b018b614bc0565b613b1d565b6040516020016128af9190615246565b6040516020818303038152906040528051906020012090508b60016128d49190615262565b600082815260076020908152604091829020805463ffffffff191663ffffffff948516179055905160018152918e16917fbcca4dbb1c4bb22a406b6aa7fb93ded17778d2f20c772aa043bc11b515055278910160405180910390a2505b61293a85613a6e565b5050505050505050505050565b6000612951612335565b905090565b6000918252600080516020615388833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008061299a83613b1d565b6040516020016129aa9190615246565b60408051601f198184030181529181528151602092830120600081815260079093529120549091506112d69060019063ffffffff16614eba565b600082826040516020016129f992919061527f565b60405160208183030381529060405280519060200120905092915050565b6000805160206153a883398151915254600090600160d01b900465ffffffffffff166000805160206153688339815191528115801590612a5f57504265ffffffffffff831610155b612a6b57600080612a81565b6001810154600160a01b900465ffffffffffff16825b92509250509091565b60008060008563ffffffff1681548110612aa657612aa6614e2e565b6000918252602090912060079091020190506005612ac38261379e565b6006811115612ad457612ad4614df0565b14612b155760405162461bcd60e51b815260206004820152601160248201527052697475616c206e6f742061637469766560781b6044820152606401610c96565b60028101546040516321751e3960e11b81526001600160a01b03909116906342ea3c7290612b4b908890889088906004016152cd565b602060405180830381865afa158015612b68573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d29190614fb8565b60408051808201909152600080825260208201526000808363ffffffff1681548110612bba57612bba614e2e565b906000526020600020906007020190506000612bd58261379e565b90506005816006811115612beb57612beb614df0565b1480612c0857506006816006811115612c0657612c06614df0565b145b612c4b5760405162461bcd60e51b8152602060048201526014602482015273149a5d1d585b081b9bdd08199a5b985b1a5e995960621b6044820152606401610c96565b50604080518082019091526003820154815260049091015460801b6001600160801b031916602082015292915050565b60008060008363ffffffff1681548110612c9757612c97614e2e565b906000526020600020906007020190506112d681613b63565b60006001600160a01b038416612cfc5760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420617574686f7269747960781b6044820152606401610c96565b600154600160301b900460ff1680612d395750612d397f6b8b15f1c11543d8280deaa7c24d12fffba6a357e4428e8c43e4234790186bff33612956565b612d855760405162461bcd60e51b815260206004820152601c60248201527f53656e6465722063616e277420696e6974696174652072697475616c000000006044820152606401610c96565b8461ffff8116600211801590612dad575060015461ffff640100000000909104811690821611155b612df95760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206e756d626572206f66206e6f6465730000000000000000006044820152606401610c96565b620151808463ffffffff161015612e4c5760405162461bcd60e51b815260206004820152601760248201527624b73b30b634b2103934ba3ab0b610323ab930ba34b7b760491b6044820152606401610c96565b60008054600181018255908052600781027f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e563810180546001600160a01b031916331781557f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e564909101805461ffff8516600160a01b026001600160b01b03199091166001600160a01b038a1617179055612ee4836110f5565b60018201805461ffff92909216600160b01b0261ffff60b01b19909216919091179055805463ffffffff428116600160a01b90810263ffffffff60a01b1990931692909217808455612f3a928992910416615262565b815463ffffffff60c01b1916600160c01b63ffffffff92909216919091021781556002810180546001600160a01b0319166001600160a01b0387161790556000805b8461ffff168110156131a757600683018054600181018255600091825260208220600390910201908c8c84818110612fb657612fb6614e2e565b9050602002016020810190612fcb91906149d5565b6001600160a01b03811660009081526006602052604090208054919250906130435760405162461bcd60e51b815260206004820152602560248201527f50726f766964657220686173206e6f7420736574207468656972207075626c6960448201526463206b657960d81b6064820152608401610c96565b816001600160a01b0316856001600160a01b0316106130a45760405162461bcd60e51b815260206004820152601860248201527f50726f766964657273206d75737420626520736f7274656400000000000000006044820152606401610c96565b60405163c4903d5b60e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000006001600160601b0316917f00000000000000000000000000000000000000000000000000000000000000009091169063c4903d5b90602401602060405180830381865afa158015613137573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061315b9190614fd5565b6001600160601b031610156131825760405162461bcd60e51b8152600401610c9690614ffe565b5081546001600160a01b0319166001600160a01b038216179091559150600101612f7c565b506131b4838b8b8a613b88565b60018201546040516001600160a01b039091169063ffffffff8516907fa4e3b0c0b125669bbe2cfcbf57b6b13b68dc908d343dde9bdf0df75081ae403f906131ff908e908e9061527f565b60405180910390a3509098975050505050505050565b60008060008463ffffffff168154811061323157613231614e2e565b90600052602060002090600702019050600061324d8285613c4f565b5095945050505050565b6000805160206153a88339815191525460009060008051602061536883398151915290600160d01b900465ffffffffffff16801580159061329f57504265ffffffffffff8216105b6132b9578154600160d01b900465ffffffffffff166132ce565b6001820154600160a01b900465ffffffffffff165b9250505090565b60006132df613315565b509050336001600160a01b0382161461330d57604051636116401160e11b8152336004820152602401610c96565b610ccb613d4c565b600080516020615368833981519152546001600160a01b03811691600160a01b90910465ffffffffffff1690565b8161336157604051631fe1e13d60e11b815260040160405180910390fd5b6113058282613de9565b600061337681613728565b610ccb613e05565b600061338981613728565b6001546040805163ffffffff928316815291841660208301527feb65c6287031cadd2d71b59499e985dddd00f14b3a8b2ce8d951da00f29995f6910160405180910390a1506001805463ffffffff191663ffffffff92909216919091179055565b6000808363ffffffff168154811061340457613404614e2e565b9060005260206000209060070201905061341d81613b63565b6134605760405162461bcd60e51b815260206004820152601460248201527352697475616c206973206e6f742061637469766560601b6044820152606401610c96565b60018101546001600160a01b03163381146134bd5760405162461bcd60e51b815260206004820152601b60248201527f53656e646572206e6f742072697475616c20617574686f7269747900000000006044820152606401610c96565b6001820180546001600160a01b0319166001600160a01b03858116918217909255604051909183169063ffffffff8716907ff3384b3f7c45bb9eb4b2b10a87553cda4b90c4d63e4c7d20f75f7bc8cc92d89c90600090a450505050565b6000610b0b60008363ffffffff168154811061353857613538614e2e565b906000526020600020906007020161379e565b60408051606081018252600080825260208083018290528284018290526001600160a01b0386168252600690529190912080545b801561362f578382613592600184614ea7565b815481106135a2576135a2614e2e565b600091825260209091206004909102015463ffffffff161161361d57816135ca600183614ea7565b815481106135da576135da614e2e565b9060005260206000209060040201600101604051806060016040529081600082015481526020016001820154815260200160028201548152505092505050610b0b565b80613627816152fe565b91505061357f565b5060405162461bcd60e51b815260206004820152602a60248201527f4e6f206b65797320666f756e64207072696f7220746f207468652070726f7669604482015269191959081c9a5d1d585b60b21b6064820152608401610c96565b600080600061369a8585613c4f565b91509150816136eb5760405162461bcd60e51b815260206004820152601e60248201527f5061727469636970616e74206e6f742070617274206f662072697475616c00006044820152606401610c96565b949350505050565b60006001600160e01b03198216637965db0b60e01b1480610b0b57506301ffc9a760e01b6001600160e01b0319831614610b0b565b610ccb8133613e10565b6040516001600160a01b03838116602483015260448201839052610cb391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613e49565b61379c600080613eac565b565b805460015460009163ffffffff600160a01b90910481169183916137c3911683615262565b90508163ffffffff166000036137dd575060009392505050565b60018401548454600160a01b90910461ffff908116600160f01b9092041603613829578354600160c01b900463ffffffff16421161381f575060059392505050565b5060069392505050565b6001840154600160c01b900460ff1615613847575060049392505050565b8063ffffffff1642111561385f575060039392505050565b60018401548454600160a01b90910461ffff908116600160e01b90920416101561388d575060019392505050565b60018401548454600160a01b90910461ffff908116600160f01b9092041610156138bb575060029392505050565b60405162461bcd60e51b8152602060048201526016602482015275416d626967756f75732072697475616c20737461746560501b6044820152606401610c96565b613905826110d3565b61390e81613728565b6139188383613f87565b50505050565b6001600160a01b03811633146139475760405163334bd91960e11b815260040160405180910390fd5b610cb38282613ff6565b61395961404f565b6113058282614098565b600061396d613257565b61397642614101565b6139809190615315565b905061398c8282614138565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b60006139e1826141c5565b6139ea42614101565b6139f49190615315565b9050613a008282613eac565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b81613a6457604051631fe1e13d60e11b815260040160405180910390fd5b611305828261420d565b6005546001600160a01b031615610ccb5760005a613a8c9083614ea7565b600554604051631eb489b760e21b8152600481018390523360248201529192506001600160a01b031690637ad226dc90604401600060405180830381600087803b158015613ad957600080fd5b505af1925050508015613aea575060015b611305575050565b805182516000911480156112d65750506020908101519101516001600160801b031990811691161490565b606081600001518260200151604051602001613b4d9291909182526001600160801b031916602082015260300190565b6040516020818303038152906040529050919050565b60006005613b708361379e565b6006811115613b8157613b81614df0565b1492915050565b6000613b95848484611a85565b905060008111613bdd5760405162461bcd60e51b8152602060048201526013602482015272125b9d985b1a59081c9a5d1d585b0818dbdcdd606a1b6044820152606401610c96565b8060026000828254613bef9190615175565b909155505063ffffffff8086166000908152600360205260409020829055613c48906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169033903090859061427016565b5050505050565b60068201546000908190808203613c6e576000601c9250925050613d45565b600080613c7c600184614ea7565b90505b808211613d395760006002613c948385615175565b613c9e9190615334565b90506000886006018281548110613cb757613cb7614e2e565b6000918252602090912060039091020180549091506001600160a01b03808a16911603613cee57600196509450613d459350505050565b80546001600160a01b03808a1691161015613d1557613d0e826001615175565b9350613d32565b81600003613d24575050613d39565b613d2f600183614ea7565b92505b5050613c7f565b6000601c945094505050505b9250929050565b600080516020615368833981519152600080613d66613315565b91509150613d7b8165ffffffffffff16151590565b1580613d8f57504265ffffffffffff821610155b15613db7576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610c96565b613dc96000613dc4612335565b613ff6565b50613dd5600083613f87565b505081546001600160d01b03191690915550565b613df2826110d3565b613dfb81613728565b6139188383613ff6565b61379c600080614138565b613e1a8282612956565b6113055760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c96565b6000613e5e6001600160a01b038416836142a9565b90508051600014158015613e83575080806020019051810190613e819190614fb8565b155b15610cb357604051635274afe760e01b81526001600160a01b0384166004820152602401610c96565b6000805160206153a88339815191525460008051602061536883398151915290600160d01b900465ffffffffffff168015613f49574265ffffffffffff82161015613f1f57600182015482546001600160d01b0316600160a01b90910465ffffffffffff16600160d01b02178255613f49565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b5060010180546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b600060008051602061536883398151915283613fec576000613fa7612335565b6001600160a01b031614613fce57604051631fe1e13d60e11b815260040160405180910390fd5b6001810180546001600160a01b0319166001600160a01b0385161790555b6136eb84846142b7565b60006000805160206153688339815191528315801561402d5750614018612335565b6001600160a01b0316836001600160a01b0316145b15614045576001810180546001600160a01b03191690555b6136eb8484614363565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661379c57604051631afcd79f60e31b815260040160405180910390fd5b6140a061404f565b6000805160206153688339815191526001600160a01b0382166140d957604051636116401160e11b815260006004820152602401610c96565b80546001600160d01b0316600160d01b65ffffffffffff851602178155613918600083613f87565b600065ffffffffffff821115614134576040516306dfcc6560e41b81526030600482015260248101839052604401610c96565b5090565b6000805160206153688339815191526000614151613315565b835465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617178455915061419190508165ffffffffffff16151590565b15613918576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a150505050565b6000806141d0613257565b90508065ffffffffffff168365ffffffffffff16116141f8576141f38382615348565b6112d6565b6112d665ffffffffffff8416620697806143df565b6000805160206153888339815191526000614227846110d3565b600085815260208490526040808220600101869055519192508491839187917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a450505050565b6040516001600160a01b0384811660248301528381166044830152606482018390526139189186918216906323b872dd9060840161375f565b60606112d6838360006143f5565b60006000805160206153888339815191526142d28484612956565b614352576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556143083390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610b0b565b6000915050610b0b565b5092915050565b600060008051602061538883398151915261437e8484612956565b15614352576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610b0b565b60008183106143ee57816112d6565b5090919050565b60608147101561441a5760405163cd78605960e01b8152306004820152602401610c96565b600080856001600160a01b031684866040516144369190615246565b60006040518083038185875af1925050503d8060008114614473576040519150601f19603f3d011682016040523d82523d6000602084013e614478565b606091505b5091509150614488868383614492565b9695505050505050565b6060826144a2576141f3826144e9565b81511580156144b957506001600160a01b0384163b155b156144e257604051639996b31560e01b81526001600160a01b0385166004820152602401610c96565b50806112d6565b8051156144f95780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b803563ffffffff8116811461452657600080fd5b919050565b6001600160a01b0381168114610ccb57600080fd5b6000806040838503121561455357600080fd5b61455c83614512565b9150602083013561456c8161452b565b809150509250929050565b60005b8381101561459257818101518382015260200161457a565b50506000910152565b600081518084526145b3816020860160208601614577565b601f01601f19169290920160200192915050565b60018060a01b03815116825260208101511515602083015260006040820151608060408501526145fa608085018261459b565b905060608301518482036060860152614613828261459b565b95945050505050565b6020815260006112d660208301846145c7565b60006020828403121561464157600080fd5b81356001600160e01b0319811681146112d657600080fd5b60006020828403121561466b57600080fd5b6112d682614512565b6000806040838503121561468757600080fd5b82356146928161452b565b946020939093013593505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156146f757603f198886030184526146e58583516145c7565b945092850192908501906001016146c9565b5092979650505050505050565b60006020828403121561471657600080fd5b5035919050565b803561ffff8116811461452657600080fd5b60006020828403121561474157600080fd5b6112d68261471d565b8015158114610ccb57600080fd5b60008060006060848603121561476d57600080fd5b61477684614512565b925060208401356147868161452b565b915060408401356147968161474a565b809150509250925092565b600080604083850312156147b457600080fd5b82359150602083013561456c8161452b565b600080604083850312156147d957600080fd5b50508035926020909101359150565b6001600160a01b038d8116825263ffffffff8d811660208401528c16604083015261ffff8b811660608401528a166080830152881660a0820152600061483460c083018961ffff169052565b61ffff871660e08301528515156101008301526001600160a01b038516610120830152835161014083015260208401516001600160801b0319166101608301526101a061018083015261488b6101a083018461459b565b9e9d5050505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156148de5783516001600160a01b0316835292840192918401916001016148b9565b50909695505050505050565b6000606082840312156148fc57600080fd5b50919050565b60008060006060848603121561491757600080fd5b61492084614512565b925061492e6020850161471d565b915060408401356147968161452b565b60008083601f84011261495057600080fd5b5081356001600160401b0381111561496757600080fd5b6020830191508360208260051b8501011115613d4557600080fd5b60008060006040848603121561499757600080fd5b83356001600160401b038111156149ad57600080fd5b6149b98682870161493e565b90945092506149cc905060208501614512565b90509250925092565b6000602082840312156149e757600080fd5b81356112d68161452b565b600060208284031215614a0457600080fd5b813565ffffffffffff811681146112d657600080fd5b60008083601f840112614a2c57600080fd5b5081356001600160401b03811115614a4357600080fd5b602083019150836020828501011115613d4557600080fd5b600080600060408486031215614a7057600080fd5b614a7984614512565b925060208401356001600160401b03811115614a9457600080fd5b614aa086828701614a1a565b9497909650939450505050565b60008060008060808587031215614ac357600080fd5b614acc85614512565b935060208501359250604085013591506060850135614aea8161474a565b939692955090935050565b60008060008060008086880360a0811215614b0f57600080fd5b614b1888614512565b965060208801356001600160401b0380821115614b3457600080fd5b614b408b838c01614a1a565b90985096508691506040603f1984011215614b5a57600080fd5b60408a01955060808a0135925080831115614b7457600080fd5b5050614b8289828a01614a1a565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b6001600160801b031981168114610ccb57600080fd5b600060408284031215614bd257600080fd5b604051604081018181106001600160401b0382111715614bf457614bf4614b94565b604052823581526020830135614c0981614baa565b60208201529392505050565b60008060208385031215614c2857600080fd5b82356001600160401b03811115614c3e57600080fd5b614c4a8582860161493e565b90969095509350505050565b600082601f830112614c6757600080fd5b81356001600160401b0380821115614c8157614c81614b94565b604051601f8301601f19908116603f01168101908282118183101715614ca957614ca9614b94565b81604052838152866020858801011115614cc257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215614cf757600080fd5b614d0084614512565b925060208401356001600160401b0380821115614d1c57600080fd5b614d2887838801614c56565b93506040860135915080821115614d3e57600080fd5b50614d4b86828701614c56565b9150509250925092565b815181526020808301516001600160801b0319169082015260408101610b0b565b600080600080600060808688031215614d8e57600080fd5b85356001600160401b03811115614da457600080fd5b614db08882890161493e565b9096509450506020860135614dc48161452b565b9250614dd260408701614512565b91506060860135614de28161452b565b809150509295509295909350565b634e487b7160e01b600052602160045260246000fd5b6020810160078310614e2857634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680614e5857607f821691505b6020821081036148fc57634e487b7160e01b600052602260045260246000fd5b600060208284031215614e8a57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b0b57610b0b614e91565b63ffffffff82811682821603908082111561435c5761435c614e91565b634e487b7160e01b600052601260045260246000fd5b600061ffff80841680614f0257614f02614ed7565b92169190910492915050565b61ffff81811683821601908082111561435c5761435c614e91565b600060208284031215614f3b57600080fd5b81516112d68161452b565b600060608284031215614f5857600080fd5b604051606081018181106001600160401b0382111715614f7a57614f7a614b94565b80604052508235815260208301356020820152604083013560408201528091505092915050565b8082028115828204841417610b0b57610b0b614e91565b600060208284031215614fca57600080fd5b81516112d68161474a565b600060208284031215614fe757600080fd5b81516001600160601b03811681146112d657600080fd5b60208082526018908201527f4e6f7420656e6f75676820617574686f72697a6174696f6e0000000000000000604082015260600190565b8183823760009101908152919050565b601f821115610cb3576000816000526020600020601f850160051c8101602086101561506e5750805b601f850160051c820191505b8181101561508d5782815560010161507a565b505050505050565b6001600160401b038311156150ac576150ac614b94565b6150c0836150ba8354614e44565b83615045565b6000601f8411600181146150f457600085156150dc5750838201355b600019600387901b1c1916600186901b178355613c48565b600083815260209020601f19861690835b828110156151255786850135825560209485019460019092019101615105565b50868210156151425760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b600061ffff80831681810361516b5761516b614e91565b6001019392505050565b80820180821115610b0b57610b0b614e91565b60006001820161519a5761519a614e91565b5060010190565b813581556001810160208301356151b781614baa565b81546001600160801b03191660809190911c1790555050565b60008083546151de81614e44565b600182811680156151f6576001811461520b5761523a565b60ff198416875282151583028701945061523a565b8760005260208060002060005b858110156152315781548a820152908401908201615218565b50505082870194505b50929695505050505050565b60008251615258818460208701614577565b9190910192915050565b63ffffffff81811683821601908082111561435c5761435c614e91565b60208082528181018390526000908460408401835b868110156152c25782356152a78161452b565b6001600160a01b031682529183019190830190600101615294565b509695505050505050565b63ffffffff841681526060602082015260006152ec606083018561459b565b8281036040840152614488818561459b565b60008161530d5761530d614e91565b506000190190565b65ffffffffffff81811683821601908082111561435c5761435c614e91565b60008261534357615343614ed7565b500490565b65ffffffffffff82811682821603908082111561435c5761435c614e9156feeef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800eef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401a264697066735822122025ccf4c67b953155d070e0f1ae0a3cfe212a3a20b5a584357e56e053b80adc0964736f6c63430008170033000000000000000000000000fa07aab78062fac4c36995bf28f6d677667973f50000000000000000000000008f3cf7ad23cd3cadbd9735aff958023239c6a063000000000000000000000000000000000000000000000000000003af2e003625