diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 82721c048..cc80bf3b4 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -103,8 +103,8 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615af0380380615af083398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6159a38061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063b771b3bc116100a9578063c974d1b611610079578063c974d1b61461046d578063d5f20ff614610475578063df93d8de14610495578063e4a63c401461049f578063fd7ac5e7146104b3575f80fd5b8063b771b3bc1461040d578063ba3a4b9714610433578063bc5fbfec14610446578063bee0a03f1461045a575f80fd5b80639e478eea116100e45780639e478eea146103c0578063a3a65e48146103d3578063a9778a7a146102ac578063afb98096146103e6575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f366004614961565b6104c6565b005b61021461022436600461499c565b6104fb565b610231600a81565b60405160ff90911681526020015b60405180910390f35b610214610256366004614961565b610782565b6102146102693660046149b3565b61078d565b61021461027c366004614a01565b610d12565b61029461028f36600461499c565b610d86565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d6366004614961565b610dda565b6102146102e9366004614a22565b610de5565b6103016102fc366004614a60565b610e8d565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614a01565b610ec2565b61030161034d366004614ac7565b61118f565b61029461036036600461499c565b6111af565b6103015f81565b61021461037a366004614961565b6111c3565b61021461038d366004614a01565b6111ee565b610231603081565b6102146103a836600461499c565b611428565b6103016103bb366004614ae2565b6114dd565b6102146103ce366004614b16565b611509565b6102146103e1366004614a22565b6115e8565b6103017f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61041b6005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461044136600461499c565b6117dd565b6103015f8051602061590e83398151915281565b61021461046836600461499c565b611a3d565b610231601481565b61048861048336600461499c565b611b7a565b60405161023f9190614bc9565b6102946202a30081565b6103015f805160206158ee83398151915281565b6103016104c1366004614c49565b611cc9565b6104d1838383611d24565b6104f657604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f8051602061594e8339815191526020526040808220815160e0810190925280545f8051602061590e83398151915293929190829060ff16600581111561054857610548614b54565b600581111561055957610559614b54565b815260200160018201805461056d90614cb4565b80601f016020809104026020016040519081016040528092919081815260200182805461059990614cb4565b80156105e45780601f106105bb576101008083540402835291602001916105e4565b820191905f5260205f20905b8154815290600101906020018083116105c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561064f5761064f614b54565b14610682575f8381526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106f9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107209190810190614df5565b6040518263ffffffff1660e01b815260040161073c9190614e26565b6020604051808303815f875af1158015610758573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077c9190614e38565b50505050565b61077c838383611d24565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061590e8339815191529060ff16156107df57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610822573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190614e38565b83602001351461086f576040516372b0a7e760e11b8152602084013560048201526024016104ed565b306108806060850160408601614e4f565b6001600160a01b0316146108c35761089e6060840160408501614e4f565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104ed565b5f6108d16060850185614e6a565b905090505f805b828163ffffffff161015610b38575f6108f46060880188614e6a565b8363ffffffff1681811061090a5761090a614eaf565b905060200281019061091c9190614ec3565b61092590614f2e565b80516040519192505f91600888019161093d91614fa9565b9081526020016040518091039020541461096d57805160405163a41f772f60e01b81526104ed9190600401614e26565b5f6002885f01358460405160200161099c92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109b691614fa9565b602060405180830381855afa1580156109d1573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109f49190614e38565b90508086600801835f0151604051610a0c9190614fa9565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a4c9082614ffe565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610acb90856150cd565b8251604051919550610adc91614fa9565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b31906150e0565b90506108d8565b50600483018190556001830154606490610b5c90600160401b900460ff1683615102565b1015610b7e57604051635943317f60e01b8152600481018290526024016104ed565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ba287612071565b604001516040518263ffffffff1660e01b8152600401610bc29190614e26565b602060405180830381865af4158015610bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c019190614e38565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c3b9190615244565b5f60405180830381865af4158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c7c9190810190614df5565b90505f600282604051610c8f9190614fa9565b602060405180830381855afa158015610caa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ccd9190614e38565b9050828114610cf95760405163baaea89d60e01b815260048101829052602481018490526044016104ed565b5050506009909201805460ff1916600117905550505050565b610d1b82612187565b610d3b576040516330efa98b60e01b8152600481018390526024016104ed565b5f610d4583611b7a565b5190506002816005811115610d5c57610d5c614b54565b14610d7c578060405163170cc93360e21b81526004016104ed9190614cec565b61077c83836121b0565b5f80610d9061244f565b60030154610d9e90846152cf565b9050801580610db357506001600160401b0381115b15610dd45760405163222d164360e21b8152600481018490526024016104ed565b92915050565b61077c838383612473565b610ded61265c565b5f610df661244f565b90505f80610e0384612693565b91509150610e1082612187565b610e1c57505050610e74565b5f8281526006840160205260409020546001600160a01b0316600482516005811115610e4a57610e4a614b54565b03610e5957610e598184612a46565b610e6f81610e6a846040015161118f565b612a70565b505050505b610e8a60015f8051602061592e83398151915255565b50565b5f610e9661265c565b610ea285858585612aa6565b9050610eba60015f8051602061592e83398151915255565b949350505050565b5f610ecb61244f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f0457610f04614b54565b6003811115610f1557610f15614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610f8b82611b7a565b9050600183516003811115610fa257610fa2614b54565b14610fc3578251604051633b0d540d60e21b81526104ed91906004016152ee565b600481516005811115610fd857610fd8614b54565b03610fee57610fe686612c0b565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61101389612071565b604001516040518263ffffffff1660e01b81526004016110339190614e26565b606060405180830381865af415801561104e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110729190615308565b509150915081841461109f57846040015160405163089938b360e11b81526004016104ed91815260200190565b806001600160401b031683606001516001600160401b031610806110d85750806001600160401b03168560a001516001600160401b0316115b1561110157604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61119861244f565b60030154610dd4906001600160401b038416615102565b5f6111b982611b7a565b6080015192915050565b6111ce838383612473565b6104f657604051635bff683f60e11b8152600481018490526024016104ed565b6111f661265c565b5f6111ff61244f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561123857611238614b54565b600381111561124957611249614b54565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112c2576112c2614b54565b146112e3578051604051633b0d540d60e21b81526104ed91906004016152ee565b60046112f28260400151611b7a565b51600581111561130457611304614b54565b14611403575f61131384612071565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016113529190614e26565b606060405180830381865af415801561136d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113919190615308565b5091509150818460400151146113bd5760405163089938b360e11b8152600481018390526024016104ed565b806001600160401b03168460c001516001600160401b031611156113ff57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5050505b61140c84612c0b565b505061142460015f8051602061592e83398151915255565b5050565b5f61143161244f565b90505f61143d83611b7a565b519050600481600581111561145457611454614b54565b14611474578060405163170cc93360e21b81526004016104ed9190614cec565b5f8381526006830160205260409020546001600160a01b031633146114ba57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104ed565b5f8381526006830160205260409020546104f6906001600160a01b031684612a46565b5f6114e661265c565b6114f1833384612dd9565b9050610dd460015f8051602061592e83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611552575080546001600160401b03808416911610155b156115705760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561159b848461301c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f8051602061590e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61161b86612071565b604001516040518263ffffffff1660e01b815260040161163b9190614e26565b6040805180830381865af4158015611655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116799190615348565b915091508061169f57604051632d07135360e01b815281151560048201526024016104ed565b5f828152600684016020526040902080546116b990614cb4565b90505f036116dd5760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078501602052604090205460ff16600581111561170357611703614b54565b14611736575f8281526007840160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b5f828152600684016020526040812061174e916148b0565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6117e661244f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561181f5761181f614b54565b600381111561183057611830614b54565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156118a9576118a9614b54565b141580156118ca57506003815160038111156118c7576118c7614b54565b14155b156118eb578051604051633b0d540d60e21b81526104ed91906004016152ee565b5f6118f98260400151611b7a565b905080606001516001600160401b03165f0361192b576040516339b894f960e21b8152600481018590526024016104ed565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361199993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af41580156119b3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119da9190810190614df5565b6040518263ffffffff1660e01b81526004016119f69190614e26565b6020604051808303815f875af1158015611a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a369190614e38565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061590e8339815191529190611a8490614cb4565b90505f03611aa85760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078301602052604090205460ff166005811115611ace57611ace614b54565b14611b01575f8281526007820160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611b3a919060040161536b565b6020604051808303815f875af1158015611b56573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f69190614e38565b611b826148e7565b5f8281525f8051602061594e833981519152602052604090819020815160e0810190925280545f8051602061590e833981519152929190829060ff166005811115611bcf57611bcf614b54565b6005811115611be057611be0614b54565b8152602001600182018054611bf490614cb4565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614cb4565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061590e833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d0c90869086906153f5565b90815260200160405180910390205491505092915050565b5f80611d2e61244f565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611d6757611d67614b54565b6003811115611d7857611d78614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611dee82611b7a565b9050600283516003811115611e0557611e05614b54565b14611e26578251604051633b0d540d60e21b81526104ed91906004016152ee565b60208301516001600160a01b03163314611ec2575f8281526006850160205260409020546001600160a01b03163314611e5f5733611495565b5f82815260068501602052604090205460a0820151611e8e91600160b01b90046001600160401b031690615404565b6001600160401b0316421015611ec25760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b600281516005811115611ed757611ed7614b54565b036120055760028401546080840151611ef9916001600160401b031690615404565b6001600160401b0316421015611f2d5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b8615611f3f57611f3d82876121b0565b505b5f8881526007850160205260409020805460ff1916600317905560608301516080820151611f78918491611f739190615424565b613036565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611fb98461320d565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061206a9350505050565b60048151600581111561201a5761201a614b54565b0361204e576120288361320d565b5f89815260088601602052604090205561204188612c0b565b600194505050505061206a565b805160405163170cc93360e21b81526104ed9190600401614cec565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156120d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120fc9190810190615444565b915091508061211e57604051636b2f19e960e01b815260040160405180910390fd5b815115612144578151604051636ba589a560e01b815260048101919091526024016104ed565b60208201516001600160a01b031615612180576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5092915050565b5f8061219161244f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156121fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122229190810190615444565b915091508061224457604051636b2f19e960e01b815260040160405180910390fd5b5f61224d61244f565b600581015484519192501461227b578251604051636ba589a560e01b815260048101919091526024016104ed565b60208301516001600160a01b0316156122b7576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b60208301516001600160a01b0316156122f3576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016123309190614e26565b6040805180830381865af415801561234a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236e91906154d4565b915091508188146123955760405163089938b360e11b8152600481018990526024016104ed565b5f8881526006840160205260409020600101546001600160401b039081169082161115612426575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612444565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061247d61244f565b90505f612489866133a4565b905061249486612187565b6124a35760019250505061206a565b5f8681526006830160205260409020546001600160a01b031633146124c85733611495565b5f86815260068301602052604090205460a08201516124f791600160b01b90046001600160401b031690615404565b6001600160401b03168160c001516001600160401b0316101561253e5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104ed565b5f85156125565761254f87866121b0565b9050612574565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125999061118f565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612602573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126269190614e38565b905080846009015f8a81526020019081526020015f205f82825461264a91906150cd565b90915550501515979650505050505050565b5f8051602061592e83398151915280546001190161268d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61269c6148e7565b5f8051602061590e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6126cf88612071565b604001516040518263ffffffff1660e01b81526004016126ef9190614e26565b6040805180830381865af4158015612709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272d9190615348565b91509150801561275457604051632d07135360e01b815281151560048201526024016104ed565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561278557612785614b54565b600581111561279657612796614b54565b81526020016001820180546127aa90614cb4565b80601f01602080910402602001604051908101604052809291908181526020018280546127d690614cb4565b80156128215780601f106127f857610100808354040283529160200191612821565b820191905f5260205f20905b81548152906001019060200180831161280457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561288c5761288c614b54565b141580156128ad57506001815160058111156128aa576128aa614b54565b14155b156128ce57805160405163170cc93360e21b81526104ed9190600401614cec565b6003815160058111156128e3576128e3614b54565b036128f157600481526128f6565b600581525b83600801816020015160405161290c9190614fa9565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561295057612950614b54565b0217905550602082015160018201906129699082614ffe565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612a0f57612a0f614b54565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612a4f61244f565b5f8381526009820160205260408120805491905590915061077c8482613688565b5f805160206158ee83398151915254611424906001600160a01b031683836136fe565b60015f8051602061592e83398151915255565b5f80612ab061244f565b600281015490915061ffff600160401b90910481169086161080612ad9575061271061ffff8616115b15612afd57604051635f12e6c360e11b815261ffff861660048201526024016104ed565b60028101546001600160401b039081169085161015612b39576040516202a06d60e11b81526001600160401b03851660048201526024016104ed565b8054831080612b4b5750806001015483115b15612b6c5760405163222d164360e21b8152600481018490526024016104ed565b5f612b768461375d565b90505f612b8282610d86565b90505f612b8f8983613780565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f612c1461244f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c4d57612c4d614b54565b6003811115612c5e57612c5e614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cfb7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d0a9190615404565b6001600160401b0316421015612d3e5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d7a838886613ca5565b91509150612d938560200151610e6a876060015161118f565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612de361244f565b90505f612df261028f8561375d565b90505f612dfe87611b7a565b9050612e0987612187565b612e29576040516330efa98b60e01b8152600481018890526024016104ed565b600281516005811115612e3e57612e3e614b54565b14612e5f57805160405163170cc93360e21b81526104ed9190600401614cec565b5f828260800151612e709190615404565b905083600201600a9054906101000a90046001600160401b03168260400151612e9991906154f7565b6001600160401b0316816001600160401b03161115612ed657604051636d51fe0560e11b81526001600160401b03821660048201526024016104ed565b5f80612ee28a84613036565b915091505f8a83604051602001612f1092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b613024613d52565b61302d82613d9d565b61142481613e17565b5f8281525f8051602061594e833981519152602052604081206002015481905f8051602061590e83398151915290600160801b90046001600160401b031661307e8582613e7f565b5f613088876140a2565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613131573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131589190810190614df5565b6040518263ffffffff1660e01b81526004016131749190614e26565b6020604051808303815f875af1158015613190573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b49190614e38565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061321761244f565b90505f6132278460400151611b7a565b90505f60038251600581111561323f5761323f614b54565b148061325d575060048251600581111561325b5761325b614b54565b145b1561326d575060c08101516132aa565b60028251600581111561328257613282614b54565b0361328e5750426132aa565b815160405163170cc93360e21b81526104ed9190600401614cec565b84608001516001600160401b0316816001600160401b0316116132d157505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906132f69061118f565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613377573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061339b9190614e38565b95945050505050565b6133ac6148e7565b5f8281525f8051602061594e8339815191526020526040808220815160e0810190925280545f8051602061590e83398151915293929190829060ff1660058111156133f9576133f9614b54565b600581111561340a5761340a614b54565b815260200160018201805461341e90614cb4565b80601f016020809104026020016040519081016040528092919081815260200182805461344a90614cb4565b80156134955780601f1061346c57610100808354040283529160200191613495565b820191905f5260205f20905b81548152906001019060200180831161347857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561350357613503614b54565b14613536575f8481526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561357a5761357a614b54565b0217905550602082015160018201906135939082614ffe565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6136318582613036565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f805160206158ee83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b1580156136e3575f80fd5b505af11580156136f5573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614117565b5f610dd4825f805160206158ee833981519152546001600160a01b031690614178565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166137c457604051637fab81e560e01b815260040160405180910390fd5b5f8051602061590e833981519152426137e36060860160408701614ac7565b6001600160401b031611158061381d57506138016202a300426150cd565b6138116060860160408701614ac7565b6001600160401b031610155b15613857576138326060850160408601614ac7565b604051635879da1360e11b81526001600160401b0390911660048201526024016104ed565b61386c6138676060860186615522565b614184565b61387c6138676080860186615522565b603061388b6020860186615536565b9050146138bd5761389f6020850185615536565b6040516326475b2f60e11b81526104ed925060040190815260200190565b6138c78480615536565b90505f036138f4576138d98480615536565b604051633e08a12560e11b81526004016104ed929190615578565b5f600882016139038680615536565b6040516139119291906153f5565b9081526020016040518091039020541461394a5761392f8480615536565b60405163a41f772f60e01b81526004016104ed929190615578565b613954835f613e7f565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016139918a80615536565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906139d9908b018b615536565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613a2260608b0160408c01614ac7565b6001600160401b03168152602001613a3d60608b018b615522565b613a469061558b565b8152602001613a5860808b018b615522565b613a619061558b565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613a8f91906156b8565b5f60405180830381865af4158015613aa9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ad0919081019061576f565b5f82815260068601602052604090209193509150613aee8282614ffe565b508160088401613afe8880615536565b604051613b0c9291906153f5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613b48908590600401614e26565b6020604051808303815f875af1158015613b64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b889190614e38565b5f8481526007860160205260409020805460ff191660011790559050613bae8780615536565b5f858152600787016020526040902060010191613bcc9190836157b2565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613c2b8880615536565b604051613c399291906153f5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613c779190614ac7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f613cb061244f565b5f86815260088201602052604081208054908290559192509081908015613d44575f87815260068501602052604090205461271090613cfa90600160a01b900461ffff1683615102565b613d0491906152cf565b915081846009015f8981526020019081526020015f205f828254613d2891906150cd565b90915550613d389050828261586b565b9250613d448984613688565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613d9b57604051631afcd79f60e31b815260040160405180910390fd5b565b613da5613d52565b613dae816142ed565b613db6614306565b610e8a60608201356080830135613dd360c0850160a08601614ac7565b613de360e0860160c0870161587e565b613df4610100870160e08801615897565b610100870135613e0c61014089016101208a01614e4f565b886101400135614316565b613e1f613d52565b5f805160206158ee8339815191526001600160a01b038216613e5f57604051637330680360e01b81526001600160a01b03831660048201526024016104ed565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061590e8339815191525f6001600160401b038084169085161115613eb357613eac8385615424565b9050613ec0565b613ebd8484615424565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f22575060018401548151613f1e916001600160401b0316906150cd565b8210155b15613f48576001600160401b038316606082015281815260408101516020820152613f67565b8281606001818151613f5a9190615404565b6001600160401b03169052505b6060810151613f779060646154f7565b602082015160018601546001600160401b039290921691613fa29190600160401b900460ff16615102565b1015613fd257606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104ed565b856001600160401b031681604001818151613fed91906150cd565b9052506040810180516001600160401b038716919061400d90839061586b565b9052506001840154604082015160649161403291600160401b90910460ff1690615102565b1015614059578060400151604051635943317f60e01b81526004016104ed91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f8051602061594e8339815191526020526040812060020180545f8051602061590e83398151915291906008906140ec90600160401b90046001600160401b03166158b7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61412b6001600160a01b038416836144fb565b905080515f1415801561414f57508080602001905181019061414d91906158d2565b155b156104f657604051635274afe760e01b81526001600160a01b03841660048201526024016104ed565b5f61206a833384614508565b6141916020820182614a22565b63ffffffff161580156141b157506141ac6020820182614e6a565b151590505b156141f8576141c36020820182614a22565b6141d06020830183614e6a565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104ed565b6142056020820182614e6a565b90506142146020830183614a22565b63ffffffff16111561422d576141c36020820182614a22565b60015b61423d6020830183614e6a565b9050811015611424576142536020830183614e6a565b61425e60018461586b565b81811061426d5761426d614eaf565b90506020020160208101906142829190614e4f565b6001600160a01b03166142986020840184614e6a565b838181106142a8576142a8614eaf565b90506020020160208101906142bd9190614e4f565b6001600160a01b031610156142e557604051630dbc8d5f60e31b815260040160405180910390fd5b600101614230565b6142f5613d52565b6142fd61466b565b610e8a81614673565b61430e613d52565b613d9b61475b565b61431e613d52565b5f61432761244f565b905061ffff8616158061433f575061271061ffff8716115b1561436357604051635f12e6c360e11b815261ffff871660048201526024016104ed565b878911156143875760405163222d164360e21b8152600481018a90526024016104ed565b60ff8516158061439a5750600a60ff8616115b156143bd5760405163170db35960e31b815260ff861660048201526024016104ed565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614424576040516202a06d60e11b81526001600160401b03881660048201526024016104ed565b835f036144445760405163a733007160e01b815260040160405180910390fd5b8161446557604051632f6bd1db60e01b8152600481018390526024016104ed565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061206a83835f614763565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561454e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145729190614e38565b90506145896001600160a01b0386168530866147f2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156145cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145f19190614e38565b90508181116146575760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104ed565b614661828261586b565b9695505050505050565b613d9b613d52565b61467b613d52565b80355f8051602061590e83398151915290815560146146a06060840160408501615897565b60ff1611806146bf57506146ba6060830160408401615897565b60ff16155b156146f3576146d46060830160408401615897565b604051634a59bbff60e11b815260ff90911660048201526024016104ed565b6147036060830160408401615897565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556147346040830160208401614ac7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612a93613d52565b6060814710156147885760405163cd78605960e01b81523060048201526024016104ed565b5f80856001600160a01b031684866040516147a39190614fa9565b5f6040518083038185875af1925050503d805f81146147dd576040519150601f19603f3d011682016040523d82523d5f602084013e6147e2565b606091505b509150915061466186838361482b565b6040516001600160a01b03848116602483015283811660448301526064820183905261077c9186918216906323b872dd9060840161372b565b6060826148405761483b82614887565b61206a565b815115801561485757506001600160a01b0384163b155b1561488057604051639996b31560e01b81526001600160a01b03851660048201526024016104ed565b508061206a565b8051156148975780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546148bc90614cb4565b5f825580601f106148cb575050565b601f0160209004905f5260205f2090810190610e8a9190614924565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614938575f8155600101614925565b5090565b8015158114610e8a575f80fd5b803563ffffffff8116811461495c575f80fd5b919050565b5f805f60608486031215614973575f80fd5b8335925060208401356149858161493c565b915061499360408501614949565b90509250925092565b5f602082840312156149ac575f80fd5b5035919050565b5f80604083850312156149c4575f80fd5b82356001600160401b038111156149d9575f80fd5b8301608081860312156149ea575f80fd5b91506149f860208401614949565b90509250929050565b5f8060408385031215614a12575f80fd5b823591506149f860208401614949565b5f60208284031215614a32575f80fd5b61206a82614949565b803561ffff8116811461495c575f80fd5b6001600160401b0381168114610e8a575f80fd5b5f805f8060808587031215614a73575f80fd5b84356001600160401b03811115614a88575f80fd5b850160a08188031215614a99575f80fd5b9350614aa760208601614a3b565b92506040850135614ab781614a4c565b9396929550929360600135925050565b5f60208284031215614ad7575f80fd5b813561206a81614a4c565b5f8060408385031215614af3575f80fd5b50508035926020909101359150565b6001600160a01b0381168114610e8a575f80fd5b5f80828403610180811215614b29575f80fd5b61016080821215614b38575f80fd5b8493508301359050614b4981614b02565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110614b7857614b78614b54565b9052565b5f5b83811015614b96578181015183820152602001614b7e565b50505f910152565b5f8151808452614bb5816020860160208601614b7c565b601f01601f19169290920160200192915050565b60208152614bdb602082018351614b68565b5f602083015160e06040840152614bf6610100840182614b9e565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614c5a575f80fd5b82356001600160401b0380821115614c70575f80fd5b818501915085601f830112614c83575f80fd5b813581811115614c91575f80fd5b866020828501011115614ca2575f80fd5b60209290920196919550909350505050565b600181811c90821680614cc857607f821691505b602082108103614ce657634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dd48284614b68565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d3057614d30614cfa565b60405290565b604080519081016001600160401b0381118282101715614d3057614d30614cfa565b604051601f8201601f191681016001600160401b0381118282101715614d8057614d80614cfa565b604052919050565b5f6001600160401b03821115614da057614da0614cfa565b50601f01601f191660200190565b5f82601f830112614dbd575f80fd5b8151614dd0614dcb82614d88565b614d58565b818152846020838601011115614de4575f80fd5b610eba826020830160208701614b7c565b5f60208284031215614e05575f80fd5b81516001600160401b03811115614e1a575f80fd5b610eba84828501614dae565b602081525f61206a6020830184614b9e565b5f60208284031215614e48575f80fd5b5051919050565b5f60208284031215614e5f575f80fd5b813561206a81614b02565b5f808335601e19843603018112614e7f575f80fd5b8301803591506001600160401b03821115614e98575f80fd5b6020019150600581901b3603821315613206575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614ed7575f80fd5b9190910192915050565b5f82601f830112614ef0575f80fd5b8135614efe614dcb82614d88565b818152846020838601011115614f12575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f3e575f80fd5b614f46614d0e565b82356001600160401b0380821115614f5c575f80fd5b614f6836838701614ee1565b83526020850135915080821115614f7d575f80fd5b50614f8a36828601614ee1565b6020830152506040830135614f9e81614a4c565b604082015292915050565b5f8251614ed7818460208701614b7c565b601f8211156104f657805f5260205f20601f840160051c81016020851015614fdf5750805b601f840160051c820191505b81811015611a36575f8155600101614feb565b81516001600160401b0381111561501757615017614cfa565b61502b816150258454614cb4565b84614fba565b602080601f83116001811461505e575f84156150475750858301515b5f19600386901b1c1916600185901b178555610fe6565b5f85815260208120601f198616915b8281101561508c5788860151825594840194600190910190840161506d565b50858210156150a957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dd457610dd46150b9565b5f63ffffffff8083168181036150f8576150f86150b9565b6001019392505050565b8082028115828204841417610dd457610dd46150b9565b5f808335601e1984360301811261512e575f80fd5b83016020810192503590506001600160401b0381111561514c575f80fd5b803603821315613206575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561523757848303601f19018952813536889003605e190181126151be575f80fd5b870160606151cc8280615119565b8287526151dc838801828461515a565b925050506151ec86830183615119565b868303888801526151fe83828461515a565b92505050604080830135925061521383614a4c565b6001600160401b039290921694909101939093529783019790830190600101615199565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561526881614b02565b6001600160a01b031660608381019190915283013536849003601e1901811261528f575f80fd5b83016020810190356001600160401b038111156152aa575f80fd5b8060051b36038213156152bb575f80fd5b60808085015261339b60a085018284615182565b5f826152e957634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061530257615302614b54565b91905290565b5f805f6060848603121561531a575f80fd5b83519250602084015161532c81614a4c565b604085015190925061533d81614a4c565b809150509250925092565b5f8060408385031215615359575f80fd5b825191506020830151614b498161493c565b5f60208083525f845461537d81614cb4565b806020870152604060018084165f811461539e57600181146153ba576153e7565b60ff19851660408a0152604084151560051b8a010195506153e7565b895f5260205f205f5b858110156153de5781548b82018601529083019088016153c3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612180576121806150b9565b6001600160401b03828116828216039080821115612180576121806150b9565b5f8060408385031215615455575f80fd5b82516001600160401b038082111561546b575f80fd5b908401906060828703121561547e575f80fd5b615486614d0e565b82518152602083015161549881614b02565b60208201526040830151828111156154ae575f80fd5b6154ba88828601614dae565b6040830152508094505050506020830151614b498161493c565b5f80604083850312156154e5575f80fd5b825191506020830151614b4981614a4c565b6001600160401b0381811683821602808216919082811461551a5761551a6150b9565b505092915050565b5f8235603e19833603018112614ed7575f80fd5b5f808335601e1984360301811261554b575f80fd5b8301803591506001600160401b03821115615564575f80fd5b602001915036819003821315613206575f80fd5b602081525f610eba60208301848661515a565b5f6040823603121561559b575f80fd5b6155a3614d36565b6155ac83614949565b81526020808401356001600160401b03808211156155c8575f80fd5b9085019036601f8301126155da575f80fd5b8135818111156155ec576155ec614cfa565b8060051b91506155fd848301614d58565b8181529183018401918481019036841115615616575f80fd5b938501935b83851015615640578435925061563083614b02565b828252938501939085019061561b565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156156ad5784516001600160a01b03168252938301936001929092019190830190615684565b509695505050505050565b60208152815160208201525f602083015160e060408401526156de610100840182614b9e565b90506040840151601f19808584030160608601526156fc8383614b9e565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261572c8383615652565b925060a08601519150808584030160c08601525061574a8282615652565b91505060c084015161576760e08501826001600160401b03169052565b509392505050565b5f8060408385031215615780575f80fd5b8251915060208301516001600160401b0381111561579c575f80fd5b6157a885828601614dae565b9150509250929050565b6001600160401b038311156157c9576157c9614cfa565b6157dd836157d78354614cb4565b83614fba565b5f601f84116001811461580e575f85156157f75750838201355b5f19600387901b1c1916600186901b178355611a36565b5f83815260208120601f198716915b8281101561583d578685013582556020948501946001909201910161581d565b5086821015615859575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610dd457610dd46150b9565b5f6020828403121561588e575f80fd5b61206a82614a3b565b5f602082840312156158a7575f80fd5b813560ff8116811461206a575f80fd5b5f6001600160401b038083168181036150f8576150f86150b9565b5f602082840312156158e2575f80fd5b815161206a8161493c56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212204a614d99bee533a9ed4ea1165f0b927bcac3c8db617e098bcd8b8c73ef58a5f964736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615eda380380615eda83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d8d8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614cd1565b61057a565b005b610256610266366004614d0c565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614cd1565b61081b565b6102566102ab366004614d23565b610827565b6102566102be366004614d71565b610dac565b6102d66102d1366004614d0c565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614da6565b610e74565b61025661032b366004614cd1565b610e87565b61025661033e366004614df4565b610e93565b610356610351366004614e32565b610f78565b604051908152602001610281565b610256610372366004614da6565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614d71565b610fb9565b6103566103b5366004614e99565b611286565b6102d66103c8366004614d0c565b6112a6565b6103565f81565b6102566103e2366004614cd1565b6112ba565b6102566103f5366004614da6565b6112c6565b610256610408366004614d71565b6112d2565b610273603081565b610256610423366004614eb4565b61150c565b610256610436366004614d0c565b6115ed565b610256610449366004614da6565b611681565b61035661045c366004614ee2565b61168d565b61025661046f366004614f02565b6116b9565b610256610482366004614df4565b611798565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d0c565b61198d565b6103565f80516020615cf883398151915281565b610256610509366004614d0c565b611be6565b610273601481565b610529610524366004614d0c565b611d23565b6040516102819190614faa565b6102d66202a30081565b6103565f80516020615cd883398151915281565b610256610562366004614eb4565b611e72565b61035661057536600461502a565b611f39565b6105868383835f611f94565b505050565b5f8181525f80516020615d388339815191526020526040808220815160e0810190925280545f80516020615cf883398151915293929190829060ff1660058111156105d8576105d8614f35565b60058111156105e9576105e9614f35565b81526020016001820180546105fd90615095565b80601f016020809104026020016040519081016040528092919081815260200182805461062990615095565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f35565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150cd565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b991908101906151d6565b6040518263ffffffff1660e01b81526004016107d59190615207565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190615219565b50505050565b6108158383835f611fc0565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615cf88339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190615219565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a6060850160408601615230565b6001600160a01b03161461095d576109386060840160408501615230565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b606085018561524b565b905090505f805b828163ffffffff161015610bd2575f61098e606088018861524b565b8363ffffffff168181106109a4576109a4615290565b90506020028101906109b691906152a4565b6109bf9061530f565b80516040519192505f9160088801916109d79161538a565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615207565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a509161538a565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e9190615219565b90508086600801835f0151604051610aa6919061538a565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae690826153df565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154ae565b8251604051919550610b769161538a565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154c1565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff16836154e3565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c876122ed565b604001516040518263ffffffff1660e01b8152600401610c5c9190615207565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190615219565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615625565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d1691908101906151d6565b90505f600282604051610d29919061538a565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d679190615219565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db582612403565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d23565b5190506002816005811115610df657610df6614f35565b14610e16578060405163170cc93360e21b815260040161071291906150cd565b610815838361242c565b5f80610e2a6126cb565b60030154610e3890846156b9565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc0565b5050505050565b6108158383835f6126ef565b610e9b612911565b5f610ea46126cb565b90505f80610eb184612948565b91509150610ebe82612403565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f35565b03610f4357610f438185612cfb565b610f5982610f548560400151611286565b612d25565b50505050505b610f7560015f80516020615d1883398151915255565b50565b5f610f81612911565b610f8d85858585612d5b565b9050610fa560015f80516020615d1883398151915255565b949350505050565b61081584848484612ec0565b5f610fc26126cb565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f35565b600381111561100c5761100c614f35565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d23565b905060018351600381111561109957611099614f35565b146110ba578251604051633b0d540d60e21b815261071291906004016156d8565b6004815160058111156110cf576110cf614f35565b036110e5576110dd86612eec565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a896122ed565b604001516040518263ffffffff1660e01b815260040161112a9190615207565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116991906156f2565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f6126cb565b60030154610e6e906001600160401b0384166154e3565b5f6112b082611d23565b6080015192915050565b6105868383835f612ec0565b610e80848484846126ef565b6112da612911565b5f6112e36126cb565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f35565b600381111561132d5761132d614f35565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f35565b146113c7578051604051633b0d540d60e21b815261071291906004016156d8565b60046113d68260400151611d23565b5160058111156113e8576113e8614f35565b146114e7575f6113f7846122ed565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615207565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147591906156f2565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612eec565b505061150860015f80516020615d1883398151915255565b5050565b5f6115156126cb565b90506001600160a01b0382166115495760405163caa903f960e01b81526001600160a01b0383166004820152602401610712565b5f8381526006820160205260409020546001600160a01b0316331461158f57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115be575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f66126cb565b90505f61160283611d23565b519050600481600581111561161957611619614f35565b14611639578060405163170cc93360e21b815260040161071291906150cd565b5f8381526006830160205260409020546001600160a01b0316331461165e573361156a565b5f838152600683016020526040902054610586906001600160a01b031684612cfb565b61081584848484611f94565b5f611696612911565b6116a18333846130f9565b9050610e6e60015f80516020615d1883398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611702575080546001600160401b03808416911610155b156117205760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174b848461333e565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615cf88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cb866122ed565b604001516040518263ffffffff1660e01b81526004016117eb9190615207565b6040805180830381865af4158015611805573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118299190615732565b915091508061184f57604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186990615095565b90505f0361188d5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b3576118b3614f35565b146118e6575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff16906004016150cd565b5f82815260068401602052604081206118fe91614c20565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6119966126cb565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119cf576119cf614f35565b60038111156119e0576119e0614f35565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5957611a59614f35565b14158015611a7a5750600381516003811115611a7757611a77614f35565b14155b15611a9b578051604051633b0d540d60e21b815261071291906004016156d8565b5f611aa98260400151611d23565b905080606001516001600160401b03165f03611adb576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8a91908101906151d6565b6040518263ffffffff1660e01b8152600401611ba69190615207565b6020604051808303815f875af1158015611bc2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190615219565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615cf88339815191529190611c2d90615095565b90505f03611c515760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7757611c77614f35565b14611caa575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff16906004016150cd565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce39190600401615755565b6020604051808303815f875af1158015611cff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105869190615219565b611d2b614c57565b5f8281525f80516020615d38833981519152602052604090819020815160e0810190925280545f80516020615cf8833981519152929190829060ff166005811115611d7857611d78614f35565b6005811115611d8957611d89614f35565b8152602001600182018054611d9d90615095565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc990615095565b8015611e145780601f10611deb57610100808354040283529160200191611e14565b820191905f5260205f20905b815481529060010190602001808311611df757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea45760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611ead6126cb565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edb573361156a565b336001600160a01b03831603611f0a575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615cf8833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7c90869086906157df565b90815260200160405180910390205491505092915050565b611fa084848484611fc0565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fca6126cb565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200357612003614f35565b600381111561201457612014614f35565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208a82611d23565b90506002835160038111156120a1576120a1614f35565b146120c2578251604051633b0d540d60e21b815261071291906004016156d8565b60208301516001600160a01b0316331461215e575f8281526006850160205260409020546001600160a01b031633146120fb573361156a565b5f82815260068501602052604090205460a082015161212a91600160b01b90046001600160401b0316906157ee565b6001600160401b031642101561215e5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217357612173614f35565b036122955760028401546080840151612195916001600160401b0316906157ee565b6001600160401b03164210156121c95760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121db576121d9828861242c565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161221491849161220f919061580e565b613358565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561225784888c61352f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fa59350505050565b6004815160058111156122aa576122aa614f35565b036122d1576122ba83878b61352f565b506122c489612eec565b6001945050505050610fa5565b805160405163170cc93360e21b815261071291906004016150cd565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612351573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612378919081019061582e565b915091508061239a57604051636b2f19e960e01b815260040160405180910390fd5b8151156123c0578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b0316156123fc576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f8061240d6126cb565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612477573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261249e919081019061582e565b91509150806124c057604051636b2f19e960e01b815260040160405180910390fd5b5f6124c96126cb565b60058101548451919250146124f7578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b031615612533576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b03161561256f576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125ac9190615207565b6040805180830381865af41580156125c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ea91906158be565b915091508188146126115760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b0390811690821611156126a2575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26126c0565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126f96126cb565b90505f61270587613714565b905061271087612403565b61271f57600192505050610fa5565b5f8781526006830160205260409020546001600160a01b03163314612744573361156a565b5f87815260068301602052604090205460a082015161277391600160b01b90046001600160401b0316906157ee565b6001600160401b03168160c001516001600160401b031610156127ba5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f86156127d2576127cb888761242c565b90506127f0565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061281590611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561287e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a29190615219565b90508084600a015f8b81526020019081526020015f205f8282546128c691906154ae565b90915550506001600160a01b03861615612903575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d1883398151915280546001190161294257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612951614c57565b5f80516020615cf88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612984886122ed565b604001516040518263ffffffff1660e01b81526004016129a49190615207565b6040805180830381865af41580156129be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e29190615732565b915091508015612a0957604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612a3a57612a3a614f35565b6005811115612a4b57612a4b614f35565b8152602001600182018054612a5f90615095565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8b90615095565b8015612ad65780601f10612aad57610100808354040283529160200191612ad6565b820191905f5260205f20905b815481529060010190602001808311612ab957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b4157612b41614f35565b14158015612b625750600181516005811115612b5f57612b5f614f35565b14155b15612b8357805160405163170cc93360e21b815261071291906004016150cd565b600381516005811115612b9857612b98614f35565b03612ba65760048152612bab565b600581525b836008018160200151604051612bc1919061538a565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c0557612c05614f35565b021790555060208201516001820190612c1e90826153df565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc457612cc4614f35565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d046126cb565b5f838152600a820160205260408120805491905590915061081584826139f8565b5f80516020615cd883398151915254611508906001600160a01b03168383613a6e565b60015f80516020615d1883398151915255565b5f80612d656126cb565b600281015490915061ffff600160401b90910481169086161080612d8e575061271061ffff8616115b15612db257604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612dee576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e005750806001015483115b15612e215760405163222d164360e21b815260048101849052602401610712565b5f612e2b84613acd565b90505f612e3782610e20565b90505f612e448983613af0565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612ecc848484846126ef565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612ef56126cb565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f2e57612f2e614f35565b6003811115612f3f57612f3f614f35565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fdc7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612feb91906157ee565b6001600160401b031642101561301f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b03168061306f5750602082015161308d565b5f858152600985016020526040902080546001600160a01b03191690555b5f8061309a838886614015565b915091506130b38560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131036126cb565b90505f6131126102d185613acd565b90505f61311e87611d23565b905061312987612403565b613149576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561315e5761315e614f35565b1461317f57805160405163170cc93360e21b815261071291906004016150cd565b5f82826080015161319091906157ee565b905083600201600a9054906101000a90046001600160401b031682604001516131b991906158e1565b6001600160401b0316816001600160401b031611156131f657604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806132028a84613358565b915091505f8a8360405160200161323092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133466140c2565b61334f8261410d565b61150881614187565b5f8281525f80516020615d38833981519152602052604081206002015481905f80516020615cf883398151915290600160801b90046001600160401b03166133a085826141ef565b5f6133aa87614412565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613453573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347a91908101906151d6565b6040518263ffffffff1660e01b81526004016134969190615207565b6020604051808303815f875af11580156134b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d69190615219565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806135396126cb565b90505f6135498660400151611d23565b90505f60038251600581111561356157613561614f35565b148061357f575060048251600581111561357d5761357d614f35565b145b1561358f575060c08101516135cc565b6002825160058111156135a4576135a4614f35565b036135b05750426135cc565b815160405163170cc93360e21b815261071291906004016150cd565b86608001516001600160401b0316816001600160401b0316116135f4575f9350505050613337565b600483015460608801515f916001600160a01b031690634f22429f9061361990611286565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136be9190615219565b5f878152600886016020526040902081905590506001600160a01b038716156126c0575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61371c614c57565b5f8281525f80516020615d388339815191526020526040808220815160e0810190925280545f80516020615cf883398151915293929190829060ff16600581111561376957613769614f35565b600581111561377a5761377a614f35565b815260200160018201805461378e90615095565b80601f01602080910402602001604051908101604052809291908181526020018280546137ba90615095565b80156138055780601f106137dc57610100808354040283529160200191613805565b820191905f5260205f20905b8154815290600101906020018083116137e857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561387357613873614f35565b146138a6575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150cd565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156138ea576138ea614f35565b02179055506020820151600182019061390390826153df565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139a18582613358565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615cd883398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a53575f80fd5b505af1158015613a65573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614487565b5f610e6e825f80516020615cd8833981519152546001600160a01b0316906144e8565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b3457604051637fab81e560e01b815260040160405180910390fd5b5f80516020615cf883398151915242613b536060860160408701614e99565b6001600160401b0316111580613b8d5750613b716202a300426154ae565b613b816060860160408701614e99565b6001600160401b031610155b15613bc757613ba26060850160408601614e99565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613bdc613bd7606086018661590c565b6144f4565b613bec613bd7608086018661590c565b6030613bfb6020860186615920565b905014613c2d57613c0f6020850185615920565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c378480615920565b90505f03613c6457613c498480615920565b604051633e08a12560e11b8152600401610712929190615962565b5f60088201613c738680615920565b604051613c819291906157df565b90815260200160405180910390205414613cba57613c9f8480615920565b60405163a41f772f60e01b8152600401610712929190615962565b613cc4835f6141ef565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d018a80615920565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d49908b018b615920565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613d9260608b0160408c01614e99565b6001600160401b03168152602001613dad60608b018b61590c565b613db690615975565b8152602001613dc860808b018b61590c565b613dd190615975565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613dff9190615aa2565b5f60405180830381865af4158015613e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e409190810190615b59565b5f82815260068601602052604090209193509150613e5e82826153df565b508160088401613e6e8880615920565b604051613e7c9291906157df565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eb8908590600401615207565b6020604051808303815f875af1158015613ed4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ef89190615219565b5f8481526007860160205260409020805460ff191660011790559050613f1e8780615920565b5f858152600787016020526040902060010191613f3c919083615b9c565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613f9b8880615920565b604051613fa99291906157df565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613fe79190614e99565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f6140206126cb565b5f868152600882016020526040812080549082905591925090819080156140b4575f8781526006850160205260409020546127109061406a90600160a01b900461ffff16836154e3565b61407491906156b9565b91508184600a015f8981526020019081526020015f205f82825461409891906154ae565b909155506140a890508282615c55565b92506140b489846139f8565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661410b57604051631afcd79f60e31b815260040160405180910390fd5b565b6141156140c2565b61411e8161465d565b614126614676565b610f756060820135608083013561414360c0850160a08601614e99565b61415360e0860160c08701615c68565b614164610100870160e08801615c81565b61010087013561417c61014089016101208a01615230565b886101400135614686565b61418f6140c2565b5f80516020615cd88339815191526001600160a01b0382166141cf57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615cf88339815191525f6001600160401b0380841690851611156142235761421c838561580e565b9050614230565b61422d848461580e565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061429257506001840154815161428e916001600160401b0316906154ae565b8210155b156142b8576001600160401b0383166060820152818152604081015160208201526142d7565b82816060018181516142ca91906157ee565b6001600160401b03169052505b60608101516142e79060646158e1565b602082015160018601546001600160401b0392909216916143129190600160401b900460ff166154e3565b101561434257606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161435d91906154ae565b9052506040810180516001600160401b038716919061437d908390615c55565b905250600184015460408201516064916143a291600160401b90910460ff16906154e3565b10156143c9578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d388339815191526020526040812060020180545f80516020615cf8833981519152919060089061445c90600160401b90046001600160401b0316615ca1565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61449b6001600160a01b0384168361486b565b905080515f141580156144bf5750808060200190518101906144bd9190615cbc565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f613337833384614878565b6145016020820182614df4565b63ffffffff16158015614521575061451c602082018261524b565b151590505b15614568576145336020820182614df4565b614540602083018361524b565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b614575602082018261524b565b90506145846020830183614df4565b63ffffffff16111561459d576145336020820182614df4565b60015b6145ad602083018361524b565b9050811015611508576145c3602083018361524b565b6145ce600184615c55565b8181106145dd576145dd615290565b90506020020160208101906145f29190615230565b6001600160a01b0316614608602084018461524b565b8381811061461857614618615290565b905060200201602081019061462d9190615230565b6001600160a01b0316101561465557604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145a0565b6146656140c2565b61466d6149db565b610f75816149e3565b61467e6140c2565b61410b614acb565b61468e6140c2565b5f6146976126cb565b905061ffff861615806146af575061271061ffff8716115b156146d357604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156146f75760405163222d164360e21b8152600481018a9052602401610712565b60ff8516158061470a5750600a60ff8616115b1561472d5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614794576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147b45760405163a733007160e01b815260040160405180910390fd5b816147d557604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333783835f614ad3565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e29190615219565b90506148f96001600160a01b038616853086614b62565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561493d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149619190615219565b90508181116149c75760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b6149d18282615c55565b9695505050505050565b61410b6140c2565b6149eb6140c2565b80355f80516020615cf88339815191529081556014614a106060840160408501615c81565b60ff161180614a2f5750614a2a6060830160408401615c81565b60ff16155b15614a6357614a446060830160408401615c81565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614a736060830160408401615c81565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa46040830160208401614e99565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d486140c2565b606081471015614af85760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b13919061538a565b5f6040518083038185875af1925050503d805f8114614b4d576040519150601f19603f3d011682016040523d82523d5f602084013e614b52565b606091505b50915091506149d1868383614b9b565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613a9b565b606082614bb057614bab82614bf7565b613337565b8151158015614bc757506001600160a01b0384163b155b15614bf057604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b5080613337565b805115614c075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c2c90615095565b5f825580601f10614c3b575050565b601f0160209004905f5260205f2090810190610f759190614c94565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ca8575f8155600101614c95565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614ccc575f80fd5b919050565b5f805f60608486031215614ce3575f80fd5b833592506020840135614cf581614cac565b9150614d0360408501614cb9565b90509250925092565b5f60208284031215614d1c575f80fd5b5035919050565b5f8060408385031215614d34575f80fd5b82356001600160401b03811115614d49575f80fd5b830160808186031215614d5a575f80fd5b9150614d6860208401614cb9565b90509250929050565b5f8060408385031215614d82575f80fd5b82359150614d6860208401614cb9565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614db9575f80fd5b843593506020850135614dcb81614cac565b9250614dd960408601614cb9565b91506060850135614de981614d92565b939692955090935050565b5f60208284031215614e04575f80fd5b61333782614cb9565b803561ffff81168114614ccc575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e45575f80fd5b84356001600160401b03811115614e5a575f80fd5b850160a08188031215614e6b575f80fd5b9350614e7960208601614e0d565b92506040850135614e8981614e1e565b9396929550929360600135925050565b5f60208284031215614ea9575f80fd5b813561333781614e1e565b5f8060408385031215614ec5575f80fd5b823591506020830135614ed781614d92565b809150509250929050565b5f8060408385031215614ef3575f80fd5b50508035926020909101359150565b5f80828403610180811215614f15575f80fd5b61016080821215614f24575f80fd5b8493508301359050614ed781614d92565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5957614f59614f35565b9052565b5f5b83811015614f77578181015183820152602001614f5f565b50505f910152565b5f8151808452614f96816020860160208601614f5d565b601f01601f19169290920160200192915050565b60208152614fbc602082018351614f49565b5f602083015160e06040840152614fd7610100840182614f7f565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f806020838503121561503b575f80fd5b82356001600160401b0380821115615051575f80fd5b818501915085601f830112615064575f80fd5b813581811115615072575f80fd5b866020828501011115615083575f80fd5b60209290920196919550909350505050565b600181811c908216806150a957607f821691505b6020821081036150c757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f49565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715615111576151116150db565b60405290565b604080519081016001600160401b0381118282101715615111576151116150db565b604051601f8201601f191681016001600160401b0381118282101715615161576151616150db565b604052919050565b5f6001600160401b03821115615181576151816150db565b50601f01601f191660200190565b5f82601f83011261519e575f80fd5b81516151b16151ac82615169565b615139565b8181528460208386010111156151c5575f80fd5b610fa5826020830160208701614f5d565b5f602082840312156151e6575f80fd5b81516001600160401b038111156151fb575f80fd5b610fa58482850161518f565b602081525f6133376020830184614f7f565b5f60208284031215615229575f80fd5b5051919050565b5f60208284031215615240575f80fd5b813561333781614d92565b5f808335601e19843603018112615260575f80fd5b8301803591506001600160401b03821115615279575f80fd5b6020019150600581901b3603821315613528575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152b8575f80fd5b9190910192915050565b5f82601f8301126152d1575f80fd5b81356152df6151ac82615169565b8181528460208386010111156152f3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561531f575f80fd5b6153276150ef565b82356001600160401b038082111561533d575f80fd5b615349368387016152c2565b8352602085013591508082111561535e575f80fd5b5061536b368286016152c2565b602083015250604083013561537f81614e1e565b604082015292915050565b5f82516152b8818460208701614f5d565b601f82111561058657805f5260205f20601f840160051c810160208510156153c05750805b601f840160051c820191505b81811015610e80575f81556001016153cc565b81516001600160401b038111156153f8576153f86150db565b61540c816154068454615095565b8461539b565b602080601f83116001811461543f575f84156154285750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b8281101561546d5788860151825594840194600190910190840161544e565b508582101561548a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e61549a565b5f63ffffffff8083168181036154d9576154d961549a565b6001019392505050565b8082028115828204841417610e6e57610e6e61549a565b5f808335601e1984360301811261550f575f80fd5b83016020810192503590506001600160401b0381111561552d575f80fd5b803603821315613528575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561561857848303601f19018952813536889003605e1901811261559f575f80fd5b870160606155ad82806154fa565b8287526155bd838801828461553b565b925050506155cd868301836154fa565b868303888801526155df83828461553b565b9250505060408083013592506155f483614e1e565b6001600160401b03929092169490910193909352978301979083019060010161557a565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561564981614d92565b6001600160a01b031660608381019190915283013536849003601e19018112615670575f80fd5b83016020810190356001600160401b0381111561568b575f80fd5b8060051b360382131561569c575f80fd5b6080808501526156b060a085018284615563565b95945050505050565b5f826156d357634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106156ec576156ec614f35565b91905290565b5f805f60608486031215615704575f80fd5b83519250602084015161571681614e1e565b604085015190925061572781614e1e565b809150509250925092565b5f8060408385031215615743575f80fd5b825191506020830151614ed781614cac565b5f60208083525f845461576781615095565b806020870152604060018084165f811461578857600181146157a4576157d1565b60ff19851660408a0152604084151560051b8a010195506157d1565b895f5260205f205f5b858110156157c85781548b82018601529083019088016157ad565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156123fc576123fc61549a565b6001600160401b038281168282160390808211156123fc576123fc61549a565b5f806040838503121561583f575f80fd5b82516001600160401b0380821115615855575f80fd5b9084019060608287031215615868575f80fd5b6158706150ef565b82518152602083015161588281614d92565b6020820152604083015182811115615898575f80fd5b6158a48882860161518f565b6040830152508094505050506020830151614ed781614cac565b5f80604083850312156158cf575f80fd5b825191506020830151614ed781614e1e565b6001600160401b038181168382160280821691908281146159045761590461549a565b505092915050565b5f8235603e198336030181126152b8575f80fd5b5f808335601e19843603018112615935575f80fd5b8301803591506001600160401b0382111561594e575f80fd5b602001915036819003821315613528575f80fd5b602081525f610fa560208301848661553b565b5f60408236031215615985575f80fd5b61598d615117565b61599683614cb9565b81526020808401356001600160401b03808211156159b2575f80fd5b9085019036601f8301126159c4575f80fd5b8135818111156159d6576159d66150db565b8060051b91506159e7848301615139565b8181529183018401918481019036841115615a00575f80fd5b938501935b83851015615a2a5784359250615a1a83614d92565b8282529385019390850190615a05565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615a975784516001600160a01b03168252938301936001929092019190830190615a6e565b509695505050505050565b60208152815160208201525f602083015160e06040840152615ac8610100840182614f7f565b90506040840151601f1980858403016060860152615ae68383614f7f565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b168383615a3c565b925060a08601519150808584030160c086015250615b348282615a3c565b91505060c0840151615b5160e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b6a575f80fd5b8251915060208301516001600160401b03811115615b86575f80fd5b615b928582860161518f565b9150509250929050565b6001600160401b03831115615bb357615bb36150db565b615bc783615bc18354615095565b8361539b565b5f601f841160018114615bf8575f8515615be15750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c275786850135825560209485019460019092019101615c07565b5086821015615c43575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e61549a565b5f60208284031215615c78575f80fd5b61333782614e0d565b5f60208284031215615c91575f80fd5b813560ff81168114613337575f80fd5b5f6001600160401b038083168181036154d9576154d961549a565b5f60208284031215615ccc575f80fd5b815161333781614cac56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220739557ece6fbc602cf663c4eabac849599304d27839ef65e75744434c52506d964736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -804,6 +804,48 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) WeightTo return _ERC20TokenStakingManager.Contract.WeightToValue(&_ERC20TokenStakingManager.CallOpts, weight) } +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ChangeDelegatorRewardRecipient(opts *bind.TransactOpts, delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "changeDelegatorRewardRecipient", delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ChangeValidatorRewardRecipient(opts *bind.TransactOpts, validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "changeValidatorRewardRecipient", validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + // ClaimDelegationFees is a paid mutator transaction binding the contract method 0x93e24598. // // Solidity: function claimDelegationFees(bytes32 validationID) returns() @@ -930,6 +972,27 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Forc return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. // // Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -951,6 +1014,27 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Forc return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // Initialize is a paid mutator transaction binding the contract method 0x9e478eea. // // Solidity: function initialize(((bytes32,uint64,uint8),uint256,uint256,uint64,uint16,uint8,uint256,address,bytes32) settings, address token) returns() @@ -1014,25 +1098,67 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Init return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } // InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 020b6ddb7..3e2b81b16 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -103,8 +103,8 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161580238038061580283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6156b58061014d5f395ff3fe6080604052600436106101f1575f3560e01c806376f7862111610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f146105a0578063c974d1b6146105b3578063d5f20ff6146105c7578063df93d8de146105f3578063fd7ac5e714610609575f80fd5b8063b771b3bc14610528578063ba3a4b9714610542578063bc5fbfec14610561578063bee0a03f14610581575f80fd5b8063a3a65e48116100d8578063a3a65e48146104c3578063a9778a7a14610345578063af2f5feb146104e2578063afb98096146104f5575f80fd5b806376f786211461045257806380dd672f146104715780638280a25a1461049057806393e24598146104a4575f80fd5b8063329c3e121161018957806360305d621161015957806360305d62146103ab57806360ad7784146103d457806362065856146103f357806366435abf14610420578063732214f81461043f575f80fd5b8063329c3e121461031357806335455ded146103455780633a1cfff61461036d578063467ef06f1461038c575f80fd5b80631ec44724116101c45780631ec447241461027f57806320d91b7a1461029e57806325e1c776146102bd5780632e2194d8146102dc575f80fd5b80630118acc4146101f55780630322ed98146102165780630ba512d114610235578063151d30d114610254575b5f80fd5b348015610200575f80fd5b5061021461020f3660046146f9565b610628565b005b348015610221575f80fd5b50610214610230366004614734565b61065d565b348015610240575f80fd5b5061021461024f36600461474b565b6108e4565b34801561025f575f80fd5b50610268600a81565b60405160ff90911681526020015b60405180910390f35b34801561028a575f80fd5b506102146102993660046146f9565b6109c1565b3480156102a9575f80fd5b506102146102b8366004614762565b6109cc565b3480156102c8575f80fd5b506102146102d73660046147b0565b610f51565b3480156102e7575f80fd5b506102fb6102f6366004614734565b610fc5565b6040516001600160401b039091168152602001610276565b34801561031e575f80fd5b5061032d6001600160991b0181565b6040516001600160a01b039091168152602001610276565b348015610350575f80fd5b5061035a61271081565b60405161ffff9091168152602001610276565b348015610378575f80fd5b506102146103873660046146f9565b611019565b348015610397575f80fd5b506102146103a63660046147d1565b611024565b3480156103b6575f80fd5b506103bf601481565b60405163ffffffff9091168152602001610276565b3480156103df575f80fd5b506102146103ee3660046147b0565b6110cc565b3480156103fe575f80fd5b5061041261040d3660046147fe565b611399565b604051908152602001610276565b34801561042b575f80fd5b506102fb61043a366004614734565b6113b9565b34801561044a575f80fd5b506104125f81565b34801561045d575f80fd5b5061021461046c3660046146f9565b6113cd565b34801561047c575f80fd5b5061021461048b3660046147b0565b6113f8565b34801561049b575f80fd5b50610268603081565b3480156104af575f80fd5b506102146104be366004614734565b611632565b3480156104ce575f80fd5b506102146104dd3660046147d1565b6116e7565b6104126104f036600461482a565b6118dc565b348015610500575f80fd5b506104127f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610533575f80fd5b5061032d6005600160991b0181565b34801561054d575f80fd5b5061021461055c366004614734565b611910565b34801561056c575f80fd5b506104125f8051602061562083398151915281565b34801561058c575f80fd5b5061021461059b366004614734565b611b70565b6104126105ae366004614734565b611cad565b3480156105be575f80fd5b50610268601481565b3480156105d2575f80fd5b506105e66105e1366004614734565b611cde565b6040516102769190614900565b3480156105fe575f80fd5b506102fb6202a30081565b348015610614575f80fd5b50610412610623366004614980565b611e2d565b610633838383611e88565b61065857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206156608339815191526020526040808220815160e0810190925280545f8051602061562083398151915293929190829060ff1660058111156106aa576106aa61488b565b60058111156106bb576106bb61488b565b81526020016001820180546106cf906149eb565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb906149eb565b80156107465780601f1061071d57610100808354040283529160200191610746565b820191905f5260205f20905b81548152906001019060200180831161072957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156107b1576107b161488b565b146107e4575f8381526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561085b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108829190810190614b2e565b6040518263ffffffff1660e01b815260040161089e9190614b5f565b6020604051808303815f875af11580156108ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108de9190614b71565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061092d575080546001600160401b03808416911610155b1561094b5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610975836121ce565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6108de838383611e88565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f805160206156208339815191529060ff1615610a1e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a859190614b71565b836020013514610aae576040516372b0a7e760e11b81526020840135600482015260240161064f565b30610abf6060850160408601614b9c565b6001600160a01b031614610b0257610add6060840160408501614b9c565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161064f565b5f610b106060850185614bb7565b905090505f805b828163ffffffff161015610d77575f610b336060880188614bb7565b8363ffffffff16818110610b4957610b49614bfc565b9050602002810190610b5b9190614c10565b610b6490614c7b565b80516040519192505f916008880191610b7c91614cf6565b90815260200160405180910390205414610bac57805160405163a41f772f60e01b815261064f9190600401614b5f565b5f6002885f013584604051602001610bdb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610bf591614cf6565b602060405180830381855afa158015610c10573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c339190614b71565b90508086600801835f0151604051610c4b9190614cf6565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610c8b9082614d4b565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610d0a9085614e1a565b8251604051919550610d1b91614cf6565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610d7090614e2d565b9050610b17565b50600483018190556001830154606490610d9b90600160401b900460ff1683614e4f565b1015610dbd57604051635943317f60e01b81526004810182905260240161064f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610de1876121df565b604001516040518263ffffffff1660e01b8152600401610e019190614b5f565b602060405180830381865af4158015610e1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e409190614b71565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610e7a9190614f91565b5f60405180830381865af4158015610e94573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ebb9190810190614b2e565b90505f600282604051610ece9190614cf6565b602060405180830381855afa158015610ee9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f0c9190614b71565b9050828114610f385760405163baaea89d60e01b8152600481018290526024810184905260440161064f565b5050506009909201805460ff1916600117905550505050565b610f5a826122f5565b610f7a576040516330efa98b60e01b81526004810183905260240161064f565b5f610f8483611cde565b5190506002816005811115610f9b57610f9b61488b565b14610fbb578060405163170cc93360e21b815260040161064f9190614a1d565b6108de838361231e565b5f80610fcf6125bd565b60030154610fdd908461501c565b9050801580610ff257506001600160401b0381115b156110135760405163222d164360e21b81526004810184905260240161064f565b92915050565b6108de8383836125e1565b61102c6127ca565b5f6110356125bd565b90505f8061104284612801565b9150915061104f826122f5565b61105b575050506110b3565b5f8281526006840160205260409020546001600160a01b03166004825160058111156110895761108961488b565b03611098576110988184612bb4565b6110ae816110a98460400151611399565b612bde565b505050505b6110c960015f8051602061564083398151915255565b50565b5f6110d56125bd565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561110e5761110e61488b565b600381111561111f5761111f61488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61119582611cde565b90506001835160038111156111ac576111ac61488b565b146111cd578251604051633b0d540d60e21b815261064f919060040161503b565b6004815160058111156111e2576111e261488b565b036111f8576111f086612c04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61121d896121df565b604001516040518263ffffffff1660e01b815260040161123d9190614b5f565b606060405180830381865af4158015611258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127c9190615055565b50915091508184146112a957846040015160405163089938b360e11b815260040161064f91815260200190565b806001600160401b031683606001516001600160401b031610806112e25750806001600160401b03168560a001516001600160401b0316115b1561130b57604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6113a26125bd565b60030154611013906001600160401b038416614e4f565b5f6113c382611cde565b6080015192915050565b6113d88383836125e1565b61065857604051635bff683f60e11b81526004810184905260240161064f565b6114006127ca565b5f6114096125bd565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114425761144261488b565b60038111156114535761145361488b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114cc576114cc61488b565b146114ed578051604051633b0d540d60e21b815261064f919060040161503b565b60046114fc8260400151611cde565b51600581111561150e5761150e61488b565b1461160d575f61151d846121df565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161155c9190614b5f565b606060405180830381865af4158015611577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159b9190615055565b5091509150818460400151146115c75760405163089938b360e11b81526004810183905260240161064f565b806001600160401b03168460c001516001600160401b0316111561160957604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5050505b61161684612c04565b505061162e60015f8051602061564083398151915255565b5050565b5f61163b6125bd565b90505f61164783611cde565b519050600481600581111561165e5761165e61488b565b1461167e578060405163170cc93360e21b815260040161064f9190614a1d565b5f8381526006830160205260409020546001600160a01b031633146116c457335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161064f565b5f838152600683016020526040902054610658906001600160a01b031684612bb4565b5f805160206156208339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61171a866121df565b604001516040518263ffffffff1660e01b815260040161173a9190614b5f565b6040805180830381865af4158015611754573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611778919061508a565b915091508061179e57604051632d07135360e01b8152811515600482015260240161064f565b5f828152600684016020526040902080546117b8906149eb565b90505f036117dc5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078501602052604090205460ff1660058111156118025761180261488b565b14611835575f8281526007840160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b5f828152600684016020526040812061184d9161464d565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6118e56127ca565b6118f184848434612dd2565b905061190960015f8051602061564083398151915255565b9392505050565b5f6119196125bd565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119525761195261488b565b60038111156119635761196361488b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119dc576119dc61488b565b141580156119fd57506003815160038111156119fa576119fa61488b565b14155b15611a1e578051604051633b0d540d60e21b815261064f919060040161503b565b5f611a2c8260400151611cde565b905080606001516001600160401b03165f03611a5e576040516339b894f960e21b81526004810185905260240161064f565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611acc93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611ae6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b0d9190810190614b2e565b6040518263ffffffff1660e01b8152600401611b299190614b5f565b6020604051808303815f875af1158015611b45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b699190614b71565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f805160206156208339815191529190611bb7906149eb565b90505f03611bdb5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078301602052604090205460ff166005811115611c0157611c0161488b565b14611c34575f8281526007820160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611c6d91906004016150b8565b6020604051808303815f875af1158015611c89573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106589190614b71565b5f611cb66127ca565b611cc1823334612f2c565b9050611cd960015f8051602061564083398151915255565b919050565b611ce6614684565b5f8281525f80516020615660833981519152602052604090819020815160e0810190925280545f80516020615620833981519152929190829060ff166005811115611d3357611d3361488b565b6005811115611d4457611d4461488b565b8152602001600182018054611d58906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d84906149eb565b8015611dcf5780601f10611da657610100808354040283529160200191611dcf565b820191905f5260205f20905b815481529060010190602001808311611db257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615620833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611e709086908690615142565b90815260200160405180910390205491505092915050565b5f80611e926125bd565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611ecb57611ecb61488b565b6003811115611edc57611edc61488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611f5282611cde565b9050600283516003811115611f6957611f6961488b565b14611f8a578251604051633b0d540d60e21b815261064f919060040161503b565b60208301516001600160a01b03163314612026575f8281526006850160205260409020546001600160a01b03163314611fc3573361169f565b5f82815260068501602052604090205460a0820151611ff291600160b01b90046001600160401b031690615151565b6001600160401b03164210156120265760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b60028151600581111561203b5761203b61488b565b03612169576002840154608084015161205d916001600160401b031690615151565b6001600160401b03164210156120915760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b86156120a3576120a1828761231e565b505b5f8881526007850160205260409020805460ff19166003179055606083015160808201516120dc9184916120d79190615171565b61316c565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561211d84613343565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506119099350505050565b60048151600581111561217e5761217e61488b565b036121b25761218c83613343565b5f8981526008860160205260409020556121a588612c04565b6001945050505050611909565b805160405163170cc93360e21b815261064f9190600401614a1d565b6121d66134da565b6110c981613525565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612243573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261226a9190810190615191565b915091508061228c57604051636b2f19e960e01b815260040160405180910390fd5b8151156122b2578151604051636ba589a560e01b8152600481019190915260240161064f565b60208201516001600160a01b0316156122ee576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5092915050565b5f806122ff6125bd565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612369573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123909190810190615191565b91509150806123b257604051636b2f19e960e01b815260040160405180910390fd5b5f6123bb6125bd565b60058101548451919250146123e9578251604051636ba589a560e01b8152600481019190915260240161064f565b60208301516001600160a01b031615612425576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b60208301516001600160a01b031615612461576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161249e9190614b5f565b6040805180830381865af41580156124b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124dc9190615221565b915091508188146125035760405163089938b360e11b81526004810189905260240161064f565b5f8881526006840160205260409020600101546001600160401b039081169082161115612594575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26125b2565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806125eb6125bd565b90505f6125f78661359f565b9050612602866122f5565b61261157600192505050611909565b5f8681526006830160205260409020546001600160a01b03163314612636573361169f565b5f86815260068301602052604090205460a082015161266591600160b01b90046001600160401b031690615151565b6001600160401b03168160c001516001600160401b031610156126ac5760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161064f565b5f85156126c4576126bd878661231e565b90506126e2565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061270790611399565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612770573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127949190614b71565b905080846009015f8a81526020019081526020015f205f8282546127b89190614e1a565b90915550501515979650505050505050565b5f805160206156408339815191528054600119016127fb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61280a614684565b5f805160206156208339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61283d886121df565b604001516040518263ffffffff1660e01b815260040161285d9190614b5f565b6040805180830381865af4158015612877573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289b919061508a565b9150915080156128c257604051632d07135360e01b8152811515600482015260240161064f565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156128f3576128f361488b565b60058111156129045761290461488b565b8152602001600182018054612918906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054612944906149eb565b801561298f5780601f106129665761010080835404028352916020019161298f565b820191905f5260205f20905b81548152906001019060200180831161297257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156129fa576129fa61488b565b14158015612a1b5750600181516005811115612a1857612a1861488b565b14155b15612a3c57805160405163170cc93360e21b815261064f9190600401614a1d565b600381516005811115612a5157612a5161488b565b03612a5f5760048152612a64565b600581525b836008018160200151604051612a7a9190614cf6565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612abe57612abe61488b565b021790555060208201516001820190612ad79082614d4b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b7d57612b7d61488b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612bbd6125bd565b5f838152600982016020526040812080549190559091506108de8482613883565b61162e6001600160a01b038316826138e1565b60015f8051602061564083398151915255565b5f612c0d6125bd565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c4657612c4661488b565b6003811115612c5757612c5761488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d039190615151565b6001600160401b0316421015612d375760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d73838886613974565b91509150612d8c85602001516110a98760600151611399565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612ddc6125bd565b600281015490915061ffff600160401b90910481169086161080612e05575061271061ffff8616115b15612e2957604051635f12e6c360e11b815261ffff8616600482015260240161064f565b60028101546001600160401b039081169085161015612e65576040516202a06d60e11b81526001600160401b038516600482015260240161064f565b8054831080612e775750806001015483115b15612e985760405163222d164360e21b81526004810184905260240161064f565b825f612ea382610fc5565b90505f612eb08983613a21565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f80612f366125bd565b90505f612f4284610fc5565b90505f612f4e87611cde565b9050612f59876122f5565b612f79576040516330efa98b60e01b81526004810188905260240161064f565b600281516005811115612f8e57612f8e61488b565b14612faf57805160405163170cc93360e21b815261064f9190600401614a1d565b5f828260800151612fc09190615151565b905083600201600a9054906101000a90046001600160401b03168260400151612fe99190615244565b6001600160401b0316816001600160401b0316111561302657604051636d51fe0560e11b81526001600160401b038216600482015260240161064f565b5f806130328a8461316c565b915091505f8a8360405160200161306092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f80516020615660833981519152602052604081206002015481905f8051602061562083398151915290600160801b90046001600160401b03166131b48582613f46565b5f6131be87614169565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613267573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261328e9190810190614b2e565b6040518263ffffffff1660e01b81526004016132aa9190614b5f565b6020604051808303815f875af11580156132c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ea9190614b71565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061334d6125bd565b90505f61335d8460400151611cde565b90505f6003825160058111156133755761337561488b565b148061339357506004825160058111156133915761339161488b565b145b156133a3575060c08101516133e0565b6002825160058111156133b8576133b861488b565b036133c45750426133e0565b815160405163170cc93360e21b815261064f9190600401614a1d565b84608001516001600160401b0316816001600160401b03161161340757505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061342c90611399565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156134ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d19190614b71565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352357604051631afcd79f60e31b815260040160405180910390fd5b565b61352d6134da565b613536816141de565b61353e6141f7565b6110c96060820135608083013561355b60c0850160a086016147fe565b61356b60e0860160c0870161526f565b61357c610100870160e08801615288565b61010087013561359461014089016101208a01614b9c565b886101400135614207565b6135a7614684565b5f8281525f805160206156608339815191526020526040808220815160e0810190925280545f8051602061562083398151915293929190829060ff1660058111156135f4576135f461488b565b60058111156136055761360561488b565b8152602001600182018054613619906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054613645906149eb565b80156136905780601f1061366757610100808354040283529160200191613690565b820191905f5260205f20905b81548152906001019060200180831161367357829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156136fe576136fe61488b565b14613731575f8481526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156137755761377561488b565b02179055506020820151600182019061378e9082614d4b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61382c858261316c565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b1580156138cf575f80fd5b505af11580156111f0573d5f803e3d5ffd5b804710156139045760405163cd78605960e01b815230600482015260240161064f565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461394d576040519150601f19603f3d011682016040523d82523d5f602084013e613952565b606091505b505090508061065857604051630a12f52160e11b815260040160405180910390fd5b5f805f61397f6125bd565b5f86815260088201602052604081208054908290559192509081908015613a13575f878152600685016020526040902054612710906139c990600160a01b900461ffff1683614e4f565b6139d3919061501c565b915081846009015f8981526020019081526020015f205f8282546139f79190614e1a565b90915550613a07905082826152a8565b9250613a138984613883565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613a6557604051637fab81e560e01b815260040160405180910390fd5b5f8051602061562083398151915242613a8460608601604087016147fe565b6001600160401b0316111580613abe5750613aa26202a30042614e1a565b613ab260608601604087016147fe565b6001600160401b031610155b15613af857613ad360608501604086016147fe565b604051635879da1360e11b81526001600160401b03909116600482015260240161064f565b613b0d613b0860608601866152bb565b6143ec565b613b1d613b0860808601866152bb565b6030613b2c60208601866152cf565b905014613b5e57613b4060208501856152cf565b6040516326475b2f60e11b815261064f925060040190815260200190565b613b6884806152cf565b90505f03613b9557613b7a84806152cf565b604051633e08a12560e11b815260040161064f929190615311565b5f60088201613ba486806152cf565b604051613bb2929190615142565b90815260200160405180910390205414613beb57613bd084806152cf565b60405163a41f772f60e01b815260040161064f929190615311565b613bf5835f613f46565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613c328a806152cf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613c7a908b018b6152cf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613cc360608b0160408c016147fe565b6001600160401b03168152602001613cde60608b018b6152bb565b613ce790615324565b8152602001613cf960808b018b6152bb565b613d0290615324565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613d309190615451565b5f60405180830381865af4158015613d4a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d719190810190615508565b5f82815260068601602052604090209193509150613d8f8282614d4b565b508160088401613d9f88806152cf565b604051613dad929190615142565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613de9908590600401614b5f565b6020604051808303815f875af1158015613e05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e299190614b71565b5f8481526007860160205260409020805460ff191660011790559050613e4f87806152cf565b5f858152600787016020526040902060010191613e6d91908361554b565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ecc88806152cf565b604051613eda929190615142565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613f1891906147fe565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805160206156208339815191525f6001600160401b038084169085161115613f7a57613f738385615171565b9050613f87565b613f848484615171565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613fe9575060018401548151613fe5916001600160401b031690614e1a565b8210155b1561400f576001600160401b03831660608201528181526040810151602082015261402e565b82816060018181516140219190615151565b6001600160401b03169052505b606081015161403e906064615244565b602082015160018601546001600160401b0392909216916140699190600160401b900460ff16614e4f565b101561409957606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161064f565b856001600160401b0316816040018181516140b49190614e1a565b9052506040810180516001600160401b03871691906140d49083906152a8565b905250600184015460408201516064916140f991600160401b90910460ff1690614e4f565b1015614120578060400151604051635943317f60e01b815260040161064f91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206156608339815191526020526040812060020180545f8051602061562083398151915291906008906141b390600160401b90046001600160401b0316615604565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6141e66134da565b6141ee614555565b6110c98161455d565b6141ff6134da565b613523614645565b61420f6134da565b5f6142186125bd565b905061ffff86161580614230575061271061ffff8716115b1561425457604051635f12e6c360e11b815261ffff8716600482015260240161064f565b878911156142785760405163222d164360e21b8152600481018a905260240161064f565b60ff8516158061428b5750600a60ff8616115b156142ae5760405163170db35960e31b815260ff8616600482015260240161064f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614315576040516202a06d60e11b81526001600160401b038816600482015260240161064f565b835f036143355760405163a733007160e01b815260040160405180910390fd5b8161435657604051632f6bd1db60e01b81526004810183905260240161064f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6143f960208201826147d1565b63ffffffff1615801561441957506144146020820182614bb7565b151590505b156144605761442b60208201826147d1565b6144386020830183614bb7565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161064f565b61446d6020820182614bb7565b905061447c60208301836147d1565b63ffffffff1611156144955761442b60208201826147d1565b60015b6144a56020830183614bb7565b905081101561162e576144bb6020830183614bb7565b6144c66001846152a8565b8181106144d5576144d5614bfc565b90506020020160208101906144ea9190614b9c565b6001600160a01b03166145006020840184614bb7565b8381811061451057614510614bfc565b90506020020160208101906145259190614b9c565b6001600160a01b0316101561454d57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614498565b6135236134da565b6145656134da565b80355f80516020615620833981519152908155601461458a6060840160408501615288565b60ff1611806145a957506145a46060830160408401615288565b60ff16155b156145dd576145be6060830160408401615288565b604051634a59bbff60e11b815260ff909116600482015260240161064f565b6145ed6060830160408401615288565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561461e60408301602084016147fe565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612bf16134da565b508054614659906149eb565b5f825580601f10614668575050565b601f0160209004905f5260205f20908101906110c991906146c1565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156146d5575f81556001016146c2565b5090565b80151581146110c9575f80fd5b803563ffffffff81168114611cd9575f80fd5b5f805f6060848603121561470b575f80fd5b83359250602084013561471d816146d9565b915061472b604085016146e6565b90509250925092565b5f60208284031215614744575f80fd5b5035919050565b5f610160828403121561475c575f80fd5b50919050565b5f8060408385031215614773575f80fd5b82356001600160401b03811115614788575f80fd5b830160808186031215614799575f80fd5b91506147a7602084016146e6565b90509250929050565b5f80604083850312156147c1575f80fd5b823591506147a7602084016146e6565b5f602082840312156147e1575f80fd5b611909826146e6565b6001600160401b03811681146110c9575f80fd5b5f6020828403121561480e575f80fd5b8135611909816147ea565b803561ffff81168114611cd9575f80fd5b5f805f6060848603121561483c575f80fd5b83356001600160401b03811115614851575f80fd5b840160a08187031215614862575f80fd5b925061487060208501614819565b91506040840135614880816147ea565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106148af576148af61488b565b9052565b5f5b838110156148cd5781810151838201526020016148b5565b50505f910152565b5f81518084526148ec8160208601602086016148b3565b601f01601f19169290920160200192915050565b6020815261491260208201835161489f565b5f602083015160e0604084015261492d6101008401826148d5565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614991575f80fd5b82356001600160401b03808211156149a7575f80fd5b818501915085601f8301126149ba575f80fd5b8135818111156149c8575f80fd5b8660208285010111156149d9575f80fd5b60209290920196919550909350505050565b600181811c908216806149ff57607f821691505b60208210810361475c57634e487b7160e01b5f52602260045260245ffd5b60208101611013828461489f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614a6157614a61614a2b565b60405290565b604080519081016001600160401b0381118282101715614a6157614a61614a2b565b604051601f8201601f191681016001600160401b0381118282101715614ab157614ab1614a2b565b604052919050565b5f6001600160401b03821115614ad157614ad1614a2b565b50601f01601f191660200190565b5f82601f830112614aee575f80fd5b8151614b01614afc82614ab9565b614a89565b818152846020838601011115614b15575f80fd5b614b268260208301602087016148b3565b949350505050565b5f60208284031215614b3e575f80fd5b81516001600160401b03811115614b53575f80fd5b614b2684828501614adf565b602081525f61190960208301846148d5565b5f60208284031215614b81575f80fd5b5051919050565b6001600160a01b03811681146110c9575f80fd5b5f60208284031215614bac575f80fd5b813561190981614b88565b5f808335601e19843603018112614bcc575f80fd5b8301803591506001600160401b03821115614be5575f80fd5b6020019150600581901b360382131561333c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c24575f80fd5b9190910192915050565b5f82601f830112614c3d575f80fd5b8135614c4b614afc82614ab9565b818152846020838601011115614c5f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614c8b575f80fd5b614c93614a3f565b82356001600160401b0380821115614ca9575f80fd5b614cb536838701614c2e565b83526020850135915080821115614cca575f80fd5b50614cd736828601614c2e565b6020830152506040830135614ceb816147ea565b604082015292915050565b5f8251614c248184602087016148b3565b601f82111561065857805f5260205f20601f840160051c81016020851015614d2c5750805b601f840160051c820191505b81811015611b69575f8155600101614d38565b81516001600160401b03811115614d6457614d64614a2b565b614d7881614d7284546149eb565b84614d07565b602080601f831160018114614dab575f8415614d945750858301515b5f19600386901b1c1916600185901b1785556111f0565b5f85815260208120601f198616915b82811015614dd957888601518255948401946001909101908401614dba565b5085821015614df657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561101357611013614e06565b5f63ffffffff808316818103614e4557614e45614e06565b6001019392505050565b808202811582820484141761101357611013614e06565b5f808335601e19843603018112614e7b575f80fd5b83016020810192503590506001600160401b03811115614e99575f80fd5b80360382131561333c575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614f8457848303601f19018952813536889003605e19018112614f0b575f80fd5b87016060614f198280614e66565b828752614f298388018284614ea7565b92505050614f3986830183614e66565b86830388880152614f4b838284614ea7565b925050506040808301359250614f60836147ea565b6001600160401b039290921694909101939093529783019790830190600101614ee6565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614fb581614b88565b6001600160a01b031660608381019190915283013536849003601e19018112614fdc575f80fd5b83016020810190356001600160401b03811115614ff7575f80fd5b8060051b3603821315615008575f80fd5b6080808501526134d160a085018284614ecf565b5f8261503657634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061504f5761504f61488b565b91905290565b5f805f60608486031215615067575f80fd5b835192506020840151615079816147ea565b6040850151909250614880816147ea565b5f806040838503121561509b575f80fd5b8251915060208301516150ad816146d9565b809150509250929050565b5f60208083525f84546150ca816149eb565b806020870152604060018084165f81146150eb576001811461510757615134565b60ff19851660408a0152604084151560051b8a01019550615134565b895f5260205f205f5b8581101561512b5781548b8201860152908301908801615110565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156122ee576122ee614e06565b6001600160401b038281168282160390808211156122ee576122ee614e06565b5f80604083850312156151a2575f80fd5b82516001600160401b03808211156151b8575f80fd5b90840190606082870312156151cb575f80fd5b6151d3614a3f565b8251815260208301516151e581614b88565b60208201526040830151828111156151fb575f80fd5b61520788828601614adf565b60408301525080945050505060208301516150ad816146d9565b5f8060408385031215615232575f80fd5b8251915060208301516150ad816147ea565b6001600160401b0381811683821602808216919082811461526757615267614e06565b505092915050565b5f6020828403121561527f575f80fd5b61190982614819565b5f60208284031215615298575f80fd5b813560ff81168114611909575f80fd5b8181038181111561101357611013614e06565b5f8235603e19833603018112614c24575f80fd5b5f808335601e198436030181126152e4575f80fd5b8301803591506001600160401b038211156152fd575f80fd5b60200191503681900382131561333c575f80fd5b602081525f614b26602083018486614ea7565b5f60408236031215615334575f80fd5b61533c614a67565b615345836146e6565b81526020808401356001600160401b0380821115615361575f80fd5b9085019036601f830112615373575f80fd5b81358181111561538557615385614a2b565b8060051b9150615396848301614a89565b81815291830184019184810190368411156153af575f80fd5b938501935b838510156153d957843592506153c983614b88565b82825293850193908501906153b4565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156154465784516001600160a01b0316825293830193600192909201919083019061541d565b509695505050505050565b60208152815160208201525f602083015160e060408401526154776101008401826148d5565b90506040840151601f198085840301606086015261549583836148d5565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526154c583836153eb565b925060a08601519150808584030160c0860152506154e382826153eb565b91505060c084015161550060e08501826001600160401b03169052565b509392505050565b5f8060408385031215615519575f80fd5b8251915060208301516001600160401b03811115615535575f80fd5b61554185828601614adf565b9150509250929050565b6001600160401b0383111561556257615562614a2b565b6155768361557083546149eb565b83614d07565b5f601f8411600181146155a7575f85156155905750838201355b5f19600387901b1c1916600186901b178355611b69565b5f83815260208120601f198716915b828110156155d657868501358255602094850194600190920191016155b6565b50868210156155f2575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b03808316818103614e4557614e45614e0656fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220de40f94c45d799a0c81760e977d26dedbd7c141afde158ee6a5bfc819a96d8dd64736f6c63430008190033", + ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x608060405234801561000f575f80fd5b50604051615c39380380615c3983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615aec8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614abe565b610724565b005b348015610263575f80fd5b50610256610272366004614af9565b610735565b348015610282575f80fd5b50610256610291366004614b10565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614abe565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b27565b610aae565b34801561030a575f80fd5b50610256610319366004614b75565b611033565b348015610329575f80fd5b5061033d610338366004614af9565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614baa565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614abe565b61110e565b3480156103f8575f80fd5b50610256610407366004614bf8565b61111a565b348015610417575f80fd5b50610256610426366004614baa565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614b75565b61120b565b34801561047e575f80fd5b5061049261048d366004614c25565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614af9565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614abe565b61150c565b3480156104fc575f80fd5b5061025661050b366004614baa565b611518565b34801561051b575f80fd5b5061025661052a366004614b75565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c40565b61175e565b34801561056d575f80fd5b5061025661057c366004614af9565b61183f565b34801561058c575f80fd5b5061025661059b366004614baa565b6118d3565b3480156105ab575f80fd5b506102566105ba366004614bf8565b6118df565b6104926105cd366004614c7f565b611ad4565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614af9565b611b08565b348015610649575f80fd5b506104925f80516020615a5783398151915281565b348015610669575f80fd5b50610256610678366004614af9565b611d61565b61049261068b366004614af9565b611e9e565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614af9565b611ecf565b6040516102b89190614d55565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c40565b61201e565b348015610710575f80fd5b5061049261071f366004614dd5565b6120e5565b6107308383835f612140565b505050565b5f8181525f80516020615a978339815191526020526040808220815160e0810190925280545f80516020615a5783398151915293929190829060ff16600581111561078257610782614ce0565b600581111561079357610793614ce0565b81526020016001820180546107a790614e40565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e40565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614ce0565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e72565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614f7b565b6040518263ffffffff1660e01b815260040161097f9190614fac565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614fbe565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a578339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614fbe565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601614fd5565b6001600160a01b031614610be457610bbf6060840160408501614fd5565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf26060850185614ff0565b905090505f805b828163ffffffff161015610e59575f610c156060880188614ff0565b8363ffffffff16818110610c2b57610c2b615035565b9050602002810190610c3d9190615049565b610c46906150b4565b80516040519192505f916008880191610c5e9161512f565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fac565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd79161512f565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614fbe565b90508086600801835f0151604051610d2d919061512f565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d9082615184565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615253565b8251604051919550610dfd9161512f565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e5290615266565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff1683615288565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec3876124b2565b604001516040518263ffffffff1660e01b8152600401610ee39190614fac565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614fbe565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c91906153ca565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614f7b565b90505f600282604051610fb0919061512f565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614fbe565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c826125c8565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ecf565b519050600281600581111561107d5761107d614ce0565b1461109d578060405163170cc93360e21b81526004016108bc9190614e72565b6109bf83836125f1565b5f806110b1612890565b600301546110bf908461545e565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217d565b5050505050565b6109bf8383835f6128b4565b611122612ad6565b5f61112b612890565b90505f8061113884612b0d565b91509150611145826125c8565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614ce0565b036111ca576111ca8185612ec0565b6111e0826111db85604001516114d8565b612eea565b50505050505b6111fc60015f80516020615a7783398151915255565b50565b6109bf84848484612f10565b5f611214612890565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614ce0565b600381111561125e5761125e614ce0565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ecf565b90506001835160038111156112eb576112eb614ce0565b1461130c578251604051633b0d540d60e21b81526108bc919060040161547d565b60048151600581111561132157611321614ce0565b036113375761132f86612f3c565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c896124b2565b604001516040518263ffffffff1660e01b815260040161137c9190614fac565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb9190615497565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e1612890565b600301546110f5906001600160401b038416615288565b5f61150282611ecf565b6080015192915050565b6107308383835f612f10565b611107848484846128b4565b61152c612ad6565b5f611535612890565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614ce0565b600381111561157f5761157f614ce0565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614ce0565b14611619578051604051633b0d540d60e21b81526108bc919060040161547d565b60046116288260400151611ecf565b51600581111561163a5761163a614ce0565b14611739575f611649846124b2565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fac565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c79190615497565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612f3c565b505061175a60015f80516020615a7783398151915255565b5050565b5f611767612890565b90506001600160a01b03821661179b5760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117e157335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611810575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f611848612890565b90505f61185483611ecf565b519050600481600581111561186b5761186b614ce0565b1461188b578060405163170cc93360e21b81526004016108bc9190614e72565b5f8381526006830160205260409020546001600160a01b031633146118b057336117bc565b5f838152600683016020526040902054610730906001600160a01b031684612ec0565b6109bf84848484612140565b5f80516020615a578339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611912866124b2565b604001516040518263ffffffff1660e01b81526004016119329190614fac565b6040805180830381865af415801561194c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197091906154cc565b915091508061199657604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b090614e40565b90505f036119d45760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fa576119fa614ce0565b14611a2d575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e72565b5f8281526006840160205260408120611a4591614a12565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611add612ad6565b611ae984848434613149565b9050611b0160015f80516020615a7783398151915255565b9392505050565b5f611b11612890565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4a57611b4a614ce0565b6003811115611b5b57611b5b614ce0565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd457611bd4614ce0565b14158015611bf55750600381516003811115611bf257611bf2614ce0565b14155b15611c16578051604051633b0d540d60e21b81526108bc919060040161547d565b5f611c248260400151611ecf565b905080606001516001600160401b03165f03611c56576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cde573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d059190810190614f7b565b6040518263ffffffff1660e01b8152600401611d219190614fac565b6020604051808303815f875af1158015611d3d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614fbe565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a578339815191529190611da890614e40565b90505f03611dcc5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df257611df2614ce0565b14611e25575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e72565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5e91906004016154ef565b6020604051808303815f875af1158015611e7a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614fbe565b5f611ea7612ad6565b611eb28233346132a3565b9050611eca60015f80516020615a7783398151915255565b919050565b611ed7614a49565b5f8281525f80516020615a97833981519152602052604090819020815160e0810190925280545f80516020615a57833981519152929190829060ff166005811115611f2457611f24614ce0565b6005811115611f3557611f35614ce0565b8152602001600182018054611f4990614e40565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7590614e40565b8015611fc05780601f10611f9757610100808354040283529160200191611fc0565b820191905f5260205f20905b815481529060010190602001808311611fa357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120505760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f612059612890565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208757336117bc565b336001600160a01b038316036120b6575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a57833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08906121289086908690615579565b90815260200160405180910390205491505092915050565b61214c8484848461217d565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b6121746134e3565b6111fc8161352e565b5f80612187612890565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c0576121c0614ce0565b60038111156121d1576121d1614ce0565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224782611ecf565b905060028351600381111561225e5761225e614ce0565b1461227f578251604051633b0d540d60e21b81526108bc919060040161547d565b60208301516001600160a01b0316331461231b575f8281526006850160205260409020546001600160a01b031633146122b857336117bc565b5f82815260068501602052604090205460a08201516122e791600160b01b90046001600160401b031690615588565b6001600160401b031642101561231b5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233057612330614ce0565b036124525760028401546080840151612352916001600160401b031690615588565b6001600160401b03164210156123865760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123985761239682886125f1565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d19184916123cc91906155a8565b6135a8565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561241484888c61377f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124aa9350505050565b60048151600581111561246757612467614ce0565b0361248e5761247783878b61377f565b5061248189612f3c565b60019450505050506124aa565b805160405163170cc93360e21b81526108bc9190600401614e72565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612516573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261253d91908101906155c8565b915091508061255f57604051636b2f19e960e01b815260040160405180910390fd5b815115612585578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b0316156125c1576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125d2612890565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561263c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261266391908101906155c8565b915091508061268557604051636b2f19e960e01b815260040160405180910390fd5b5f61268e612890565b60058101548451919250146126bc578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126f8576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b031615612734576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127719190614fac565b6040805180830381865af415801561278b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127af9190615658565b915091508188146127d65760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612867575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612885565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128be612890565b90505f6128ca87613964565b90506128d5876125c8565b6128e4576001925050506124aa565b5f8781526006830160205260409020546001600160a01b0316331461290957336117bc565b5f87815260068301602052604090205460a082015161293891600160b01b90046001600160401b031690615588565b6001600160401b03168160c001516001600160401b0316101561297f5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129975761299088876125f1565b90506129b5565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906129da906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a679190614fbe565b90508084600a015f8b81526020019081526020015f205f828254612a8b9190615253565b90915550506001600160a01b03861615612ac8575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615a77833981519152805460011901612b0757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b16614a49565b5f80516020615a578339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b49886124b2565b604001516040518263ffffffff1660e01b8152600401612b699190614fac565b6040805180830381865af4158015612b83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba791906154cc565b915091508015612bce57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612bff57612bff614ce0565b6005811115612c1057612c10614ce0565b8152602001600182018054612c2490614e40565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5090614e40565b8015612c9b5780601f10612c7257610100808354040283529160200191612c9b565b820191905f5260205f20905b815481529060010190602001808311612c7e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d0657612d06614ce0565b14158015612d275750600181516005811115612d2457612d24614ce0565b14155b15612d4857805160405163170cc93360e21b81526108bc9190600401614e72565b600381516005811115612d5d57612d5d614ce0565b03612d6b5760048152612d70565b600581525b836008018160200151604051612d86919061512f565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612dca57612dca614ce0565b021790555060208201516001820190612de39082615184565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e8957612e89614ce0565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ec9612890565b5f838152600a82016020526040812080549190559091506109bf8482613c48565b61175a6001600160a01b03831682613ca6565b60015f80516020615a7783398151915255565b612f1c848484846128b4565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f45612890565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f7e57612f7e614ce0565b6003811115612f8f57612f8f614ce0565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061302c7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161303b9190615588565b6001600160401b031642101561306f5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130bf575060208201516130dd565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130ea838886613d39565b9150915061310385602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613153612890565b600281015490915061ffff600160401b9091048116908616108061317c575061271061ffff8616115b156131a057604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131dc576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131ee5750806001015483115b1561320f5760405163222d164360e21b8152600481018490526024016108bc565b825f61321a826110a7565b90505f6132278983613de6565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f806132ad612890565b90505f6132b9846110a7565b90505f6132c587611ecf565b90506132d0876125c8565b6132f0576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561330557613305614ce0565b1461332657805160405163170cc93360e21b81526108bc9190600401614e72565b5f8282608001516133379190615588565b905083600201600a9054906101000a90046001600160401b03168260400151613360919061567b565b6001600160401b0316816001600160401b0316111561339d57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133a98a846135a8565b915091505f8a836040516020016133d792919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352c57604051631afcd79f60e31b815260040160405180910390fd5b565b6135366134e3565b61353f8161430b565b613547614324565b6111fc6060820135608083013561356460c0850160a08601614c25565b61357460e0860160c087016156a6565b613585610100870160e088016156bf565b61010087013561359d61014089016101208a01614fd5565b886101400135614334565b5f8281525f80516020615a97833981519152602052604081206002015481905f80516020615a5783398151915290600160801b90046001600160401b03166135f08582614519565b5f6135fa8761473c565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136a3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136ca9190810190614f7b565b6040518263ffffffff1660e01b81526004016136e69190614fac565b6020604051808303815f875af1158015613702573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137269190614fbe565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f80613789612890565b90505f6137998660400151611ecf565b90505f6003825160058111156137b1576137b1614ce0565b14806137cf57506004825160058111156137cd576137cd614ce0565b145b156137df575060c081015161381c565b6002825160058111156137f4576137f4614ce0565b0361380057504261381c565b815160405163170cc93360e21b81526108bc9190600401614e72565b86608001516001600160401b0316816001600160401b031611613844575f9350505050611b01565b600483015460608801515f916001600160a01b031690634f22429f90613869906114d8565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390e9190614fbe565b5f878152600886016020526040902081905590506001600160a01b03871615612885575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61396c614a49565b5f8281525f80516020615a978339815191526020526040808220815160e0810190925280545f80516020615a5783398151915293929190829060ff1660058111156139b9576139b9614ce0565b60058111156139ca576139ca614ce0565b81526020016001820180546139de90614e40565b80601f0160208091040260200160405190810160405280929190818152602001828054613a0a90614e40565b8015613a555780601f10613a2c57610100808354040283529160200191613a55565b820191905f5260205f20905b815481529060010190602001808311613a3857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613ac357613ac3614ce0565b14613af6575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e72565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b3a57613b3a614ce0565b021790555060208201516001820190613b539082615184565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bf185826135a8565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c94575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613cc95760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d12576040519150601f19603f3d011682016040523d82523d5f602084013e613d17565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d44612890565b5f86815260088201602052604081208054908290559192509081908015613dd8575f87815260068501602052604090205461271090613d8e90600160a01b900461ffff1683615288565b613d98919061545e565b91508184600a015f8981526020019081526020015f205f828254613dbc9190615253565b90915550613dcc905082826156df565b9250613dd88984613c48565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e2a57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a5783398151915242613e496060860160408701614c25565b6001600160401b0316111580613e835750613e676202a30042615253565b613e776060860160408701614c25565b6001600160401b031610155b15613ebd57613e986060850160408601614c25565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613ed2613ecd60608601866156f2565b6147b1565b613ee2613ecd60808601866156f2565b6030613ef16020860186615706565b905014613f2357613f056020850185615706565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f2d8480615706565b90505f03613f5a57613f3f8480615706565b604051633e08a12560e11b81526004016108bc929190615748565b5f60088201613f698680615706565b604051613f77929190615579565b90815260200160405180910390205414613fb057613f958480615706565b60405163a41f772f60e01b81526004016108bc929190615748565b613fba835f614519565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ff78a80615706565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061403f908b018b615706565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408860608b0160408c01614c25565b6001600160401b031681526020016140a360608b018b6156f2565b6140ac9061575b565b81526020016140be60808b018b6156f2565b6140c79061575b565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016140f59190615888565b5f60405180830381865af415801561410f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052614136919081019061593f565b5f828152600686016020526040902091935091506141548282615184565b5081600884016141648880615706565b604051614172929190615579565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141ae908590600401614fac565b6020604051808303815f875af11580156141ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ee9190614fbe565b5f8481526007860160205260409020805460ff1916600117905590506142148780615706565b5f858152600787016020526040902060010191614232919083615982565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142918880615706565b60405161429f929190615579565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906142dd9190614c25565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6143136134e3565b61431b61491a565b6111fc81614922565b61432c6134e3565b61352c614a0a565b61433c6134e3565b5f614345612890565b905061ffff8616158061435d575061271061ffff8716115b1561438157604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143a55760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143b85750600a60ff8616115b156143db5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614442576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144625760405163a733007160e01b815260040160405180910390fd5b8161448357604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a578339815191525f6001600160401b03808416908516111561454d5761454683856155a8565b905061455a565b61455784846155a8565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145bc5750600184015481516145b8916001600160401b031690615253565b8210155b156145e2576001600160401b038316606082015281815260408101516020820152614601565b82816060018181516145f49190615588565b6001600160401b03169052505b606081015161461190606461567b565b602082015160018601546001600160401b03929092169161463c9190600160401b900460ff16615288565b101561466c57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146879190615253565b9052506040810180516001600160401b03871691906146a79083906156df565b905250600184015460408201516064916146cc91600160401b90910460ff1690615288565b10156146f3578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615a978339815191526020526040812060020180545f80516020615a57833981519152919060089061478690600160401b90046001600160401b0316615a3b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147be6020820182614bf8565b63ffffffff161580156147de57506147d96020820182614ff0565b151590505b15614825576147f06020820182614bf8565b6147fd6020830183614ff0565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148326020820182614ff0565b90506148416020830183614bf8565b63ffffffff16111561485a576147f06020820182614bf8565b60015b61486a6020830183614ff0565b905081101561175a576148806020830183614ff0565b61488b6001846156df565b81811061489a5761489a615035565b90506020020160208101906148af9190614fd5565b6001600160a01b03166148c56020840184614ff0565b838181106148d5576148d5615035565b90506020020160208101906148ea9190614fd5565b6001600160a01b0316101561491257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161485d565b61352c6134e3565b61492a6134e3565b80355f80516020615a57833981519152908155601461494f60608401604085016156bf565b60ff16118061496e575061496960608301604084016156bf565b60ff16155b156149a25761498360608301604084016156bf565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149b260608301604084016156bf565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e36040830160208401614c25565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612efd6134e3565b508054614a1e90614e40565b5f825580601f10614a2d575050565b601f0160209004905f5260205f20908101906111fc9190614a86565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614a9a575f8155600101614a87565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611eca575f80fd5b5f805f60608486031215614ad0575f80fd5b833592506020840135614ae281614a9e565b9150614af060408501614aab565b90509250925092565b5f60208284031215614b09575f80fd5b5035919050565b5f6101608284031215614b21575f80fd5b50919050565b5f8060408385031215614b38575f80fd5b82356001600160401b03811115614b4d575f80fd5b830160808186031215614b5e575f80fd5b9150614b6c60208401614aab565b90509250929050565b5f8060408385031215614b86575f80fd5b82359150614b6c60208401614aab565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bbd575f80fd5b843593506020850135614bcf81614a9e565b9250614bdd60408601614aab565b91506060850135614bed81614b96565b939692955090935050565b5f60208284031215614c08575f80fd5b611b0182614aab565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c35575f80fd5b8135611b0181614c11565b5f8060408385031215614c51575f80fd5b823591506020830135614c6381614b96565b809150509250929050565b803561ffff81168114611eca575f80fd5b5f805f60608486031215614c91575f80fd5b83356001600160401b03811115614ca6575f80fd5b840160a08187031215614cb7575f80fd5b9250614cc560208501614c6e565b91506040840135614cd581614c11565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d0457614d04614ce0565b9052565b5f5b83811015614d22578181015183820152602001614d0a565b50505f910152565b5f8151808452614d41816020860160208601614d08565b601f01601f19169290920160200192915050565b60208152614d67602082018351614cf4565b5f602083015160e06040840152614d82610100840182614d2a565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614de6575f80fd5b82356001600160401b0380821115614dfc575f80fd5b818501915085601f830112614e0f575f80fd5b813581811115614e1d575f80fd5b866020828501011115614e2e575f80fd5b60209290920196919550909350505050565b600181811c90821680614e5457607f821691505b602082108103614b2157634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614cf4565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614eb657614eb6614e80565b60405290565b604080519081016001600160401b0381118282101715614eb657614eb6614e80565b604051601f8201601f191681016001600160401b0381118282101715614f0657614f06614e80565b604052919050565b5f6001600160401b03821115614f2657614f26614e80565b50601f01601f191660200190565b5f82601f830112614f43575f80fd5b8151614f56614f5182614f0e565b614ede565b818152846020838601011115614f6a575f80fd5b6124aa826020830160208701614d08565b5f60208284031215614f8b575f80fd5b81516001600160401b03811115614fa0575f80fd5b6124aa84828501614f34565b602081525f611b016020830184614d2a565b5f60208284031215614fce575f80fd5b5051919050565b5f60208284031215614fe5575f80fd5b8135611b0181614b96565b5f808335601e19843603018112615005575f80fd5b8301803591506001600160401b0382111561501e575f80fd5b6020019150600581901b3603821315613778575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261505d575f80fd5b9190910192915050565b5f82601f830112615076575f80fd5b8135615084614f5182614f0e565b818152846020838601011115615098575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150c4575f80fd5b6150cc614e94565b82356001600160401b03808211156150e2575f80fd5b6150ee36838701615067565b83526020850135915080821115615103575f80fd5b5061511036828601615067565b602083015250604083013561512481614c11565b604082015292915050565b5f825161505d818460208701614d08565b601f82111561073057805f5260205f20601f840160051c810160208510156151655750805b601f840160051c820191505b81811015611107575f8155600101615171565b81516001600160401b0381111561519d5761519d614e80565b6151b1816151ab8454614e40565b84615140565b602080601f8311600181146151e4575f84156151cd5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b82811015615212578886015182559484019460019091019084016151f3565b508582101561522f57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f561523f565b5f63ffffffff80831681810361527e5761527e61523f565b6001019392505050565b80820281158282048414176110f5576110f561523f565b5f808335601e198436030181126152b4575f80fd5b83016020810192503590506001600160401b038111156152d2575f80fd5b803603821315613778575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153bd57848303601f19018952813536889003605e19018112615344575f80fd5b87016060615352828061529f565b82875261536283880182846152e0565b925050506153728683018361529f565b868303888801526153848382846152e0565b92505050604080830135925061539983614c11565b6001600160401b03929092169490910193909352978301979083019060010161531f565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356153ee81614b96565b6001600160a01b031660608381019190915283013536849003601e19018112615415575f80fd5b83016020810190356001600160401b03811115615430575f80fd5b8060051b3603821315615441575f80fd5b60808085015261545560a085018284615308565b95945050505050565b5f8261547857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061549157615491614ce0565b91905290565b5f805f606084860312156154a9575f80fd5b8351925060208401516154bb81614c11565b6040850151909250614cd581614c11565b5f80604083850312156154dd575f80fd5b825191506020830151614c6381614a9e565b5f60208083525f845461550181614e40565b806020870152604060018084165f8114615522576001811461553e5761556b565b60ff19851660408a0152604084151560051b8a0101955061556b565b895f5260205f205f5b858110156155625781548b8201860152908301908801615547565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156125c1576125c161523f565b6001600160401b038281168282160390808211156125c1576125c161523f565b5f80604083850312156155d9575f80fd5b82516001600160401b03808211156155ef575f80fd5b9084019060608287031215615602575f80fd5b61560a614e94565b82518152602083015161561c81614b96565b6020820152604083015182811115615632575f80fd5b61563e88828601614f34565b6040830152508094505050506020830151614c6381614a9e565b5f8060408385031215615669575f80fd5b825191506020830151614c6381614c11565b6001600160401b0381811683821602808216919082811461569e5761569e61523f565b505092915050565b5f602082840312156156b6575f80fd5b611b0182614c6e565b5f602082840312156156cf575f80fd5b813560ff81168114611b01575f80fd5b818103818111156110f5576110f561523f565b5f8235603e1983360301811261505d575f80fd5b5f808335601e1984360301811261571b575f80fd5b8301803591506001600160401b03821115615734575f80fd5b602001915036819003821315613778575f80fd5b602081525f6124aa6020830184866152e0565b5f6040823603121561576b575f80fd5b615773614ebc565b61577c83614aab565b81526020808401356001600160401b0380821115615798575f80fd5b9085019036601f8301126157aa575f80fd5b8135818111156157bc576157bc614e80565b8060051b91506157cd848301614ede565b81815291830184019184810190368411156157e6575f80fd5b938501935b83851015615810578435925061580083614b96565b82825293850193908501906157eb565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561587d5784516001600160a01b03168252938301936001929092019190830190615854565b509695505050505050565b60208152815160208201525f602083015160e060408401526158ae610100840182614d2a565b90506040840151601f19808584030160608601526158cc8383614d2a565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526158fc8383615822565b925060a08601519150808584030160c08601525061591a8282615822565b91505060c084015161593760e08501826001600160401b03169052565b509392505050565b5f8060408385031215615950575f80fd5b8251915060208301516001600160401b0381111561596c575f80fd5b61597885828601614f34565b9150509250929050565b6001600160401b0383111561599957615999614e80565b6159ad836159a78354614e40565b83615140565b5f601f8411600181146159de575f85156159c75750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a0d57868501358255602094850194600190920191016159ed565b5086821015615a29575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361527e5761527e61523f56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220e0be08be7afae9cc49d0e5059e3bc22dddc5eb6562f582a600aa7c3f0d66e21464736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -804,6 +804,48 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) Weight return _NativeTokenStakingManager.Contract.WeightToValue(&_NativeTokenStakingManager.CallOpts, weight) } +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ChangeDelegatorRewardRecipient(opts *bind.TransactOpts, delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "changeDelegatorRewardRecipient", delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ChangeValidatorRewardRecipient(opts *bind.TransactOpts, validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "changeValidatorRewardRecipient", validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + // ClaimDelegationFees is a paid mutator transaction binding the contract method 0x93e24598. // // Solidity: function claimDelegationFees(bytes32 validationID) returns() @@ -930,6 +972,27 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Fo return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. // // Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -951,6 +1014,27 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Fo return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // Initialize is a paid mutator transaction binding the contract method 0x0ba512d1. // // Solidity: function initialize(((bytes32,uint64,uint8),uint256,uint256,uint64,uint16,uint8,uint256,address,bytes32) settings) returns() @@ -1014,25 +1098,67 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) In return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } // InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 4e6472ffd..4243b850b 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -65,8 +65,10 @@ abstract contract PoSValidatorManager is mapping(bytes32 delegationID => Delegator) _delegatorStakes; /// @notice Maps the delegation ID to its pending staking rewards. mapping(bytes32 delegationID => uint256) _redeemableDelegatorRewards; + mapping(bytes32 delegationID => address) _delegatorRewardRecipients; /// @notice Maps the validation ID to its pending staking rewards. mapping(bytes32 validationID => uint256) _redeemableValidatorRewards; + mapping(bytes32 validationID => address) _rewardRecipients; } // solhint-enable private-vars-leading-underscore @@ -84,6 +86,7 @@ abstract contract PoSValidatorManager is error InvalidDelegationID(bytes32 delegationID); error InvalidDelegatorStatus(DelegatorStatus status); error InvalidNonce(uint64 nonce); + error InvalidRewardRecipient(address rewardRecipient); error InvalidStakeAmount(uint256 stakeAmount); error InvalidMinStakeDuration(uint64 minStakeDuration); error InvalidStakeMultiplier(uint8 maximumStakeMultiplier); @@ -213,7 +216,36 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - if (!_initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex)) { + _initializeEndValidationWithCheck( + validationID, includeUptimeProof, messageIndex, address(0) + ); + } + + /** + * @notice See {IPoSValidatorManager-initializeEndValidation}. + */ + function initializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + _initializeEndValidationWithCheck( + validationID, includeUptimeProof, messageIndex, rewardRecipient + ); + } + + function _initializeEndValidationWithCheck( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) internal { + if ( + !_initializeEndPoSValidation( + validationID, includeUptimeProof, messageIndex, rewardRecipient + ) + ) { revert ValidatorIneligibleForRewards(validationID); } } @@ -227,7 +259,62 @@ abstract contract PoSValidatorManager is uint32 messageIndex ) external { // Ignore the return value here to force end validation, regardless of possible missed rewards - _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex); + _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, address(0)); + } + + /** + * @notice See {IPoSValidatorManager-forceInitializeEndValidation}. + */ + function forceInitializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + // Ignore the return value here to force end validation, regardless of possible missed rewards + _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, rewardRecipient); + } + + function changeValidatorRewardRecipient( + bytes32 validationID, + address rewardRecipient + ) external { + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + if (rewardRecipient == address(0)) { + revert InvalidRewardRecipient(rewardRecipient); + } + + if ($._posValidatorInfo[validationID].owner != _msgSender()) { + revert UnauthorizedOwner(_msgSender()); + } + + if (rewardRecipient == _msgSender()) { + delete $._rewardRecipients[validationID]; + } else { + $._rewardRecipients[validationID] = rewardRecipient; + } + } + + function changeDelegatorRewardRecipient( + bytes32 delegationID, + address rewardRecipient + ) external { + if (rewardRecipient == address(0)) { + revert InvalidRewardRecipient(rewardRecipient); + } + + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + if ($._delegatorStakes[delegationID].owner != _msgSender()) { + revert UnauthorizedOwner(_msgSender()); + } + + if (rewardRecipient == _msgSender()) { + delete $._delegatorRewardRecipients[delegationID]; + } else { + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + } } /** @@ -238,7 +325,8 @@ abstract contract PoSValidatorManager is function _initializeEndPoSValidation( bytes32 validationID, bool includeUptimeProof, - uint32 messageIndex + uint32 messageIndex, + address rewardRecipient ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); @@ -278,6 +366,11 @@ abstract contract PoSValidatorManager is uptimeSeconds: uptimeSeconds }); $._redeemableValidatorRewards[validationID] += reward; + + if (rewardRecipient != address(0)) { + $._rewardRecipients[validationID] = rewardRecipient; + } + return (reward > 0); } @@ -296,9 +389,18 @@ abstract contract PoSValidatorManager is } address owner = $._posValidatorInfo[validationID].owner; + + address rewardRecipient = $._rewardRecipients[validationID]; + + if (rewardRecipient == address(0)) { + rewardRecipient = owner; + } else { + delete $._rewardRecipients[validationID]; + } + // The validator can either be Completed or Invalidated here. We only grant rewards for Completed. if (validator.status == ValidatorStatus.Completed) { - _withdrawValidationRewards(owner, validationID); + _withdrawValidationRewards(rewardRecipient, validationID); } // The stake is unlocked whether the validation period is completed or invalidated. @@ -526,7 +628,36 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - if (!_initializeEndDelegation(delegationID, includeUptimeProof, messageIndex)) { + _initializeEndDelegationWithCheck( + delegationID, includeUptimeProof, messageIndex, address(0) + ); + } + + /** + * @notice See {IPoSValidatorManager-initializeEndDelegation}. + */ + function initializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + _initializeEndDelegationWithCheck( + delegationID, includeUptimeProof, messageIndex, rewardRecipient + ); + } + + function _initializeEndDelegationWithCheck( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) internal { + if ( + !_initializeEndDelegation( + delegationID, includeUptimeProof, messageIndex, rewardRecipient + ) + ) { revert DelegatorIneligibleForRewards(delegationID); } } @@ -540,7 +671,20 @@ abstract contract PoSValidatorManager is uint32 messageIndex ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex); + _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); + } + + /** + * @notice See {IPoSValidatorManager-forceInitializeEndDelegation}. + */ + function forceInitializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + // Ignore the return value here to force end delegation, regardless of possible missed rewards + _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); } /** @@ -551,7 +695,8 @@ abstract contract PoSValidatorManager is function _initializeEndDelegation( bytes32 delegationID, bool includeUptimeProof, - uint32 messageIndex + uint32 messageIndex, + address rewardRecipient ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); @@ -598,8 +743,8 @@ abstract contract PoSValidatorManager is ($._delegatorStakes[delegationID].endingNonce,) = _setValidatorWeight(validationID, validator.weight - delegator.weight); - uint256 reward = _calculateDelegationReward(delegator); - $._redeemableDelegatorRewards[delegationID] = reward; + uint256 reward = + _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); emit DelegatorRemovalInitialized({ delegationID: delegationID, @@ -607,8 +752,7 @@ abstract contract PoSValidatorManager is }); return (reward > 0); } else if (validator.status == ValidatorStatus.Completed) { - $._redeemableDelegatorRewards[delegationID] = _calculateDelegationReward(delegator); - + _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); _completeEndDelegation(delegationID); // If the validator has completed, then no further uptimes may be submitted, so we always // end the delegation. @@ -619,11 +763,12 @@ abstract contract PoSValidatorManager is } /// @dev Calculates the reward owed to the delegator based on the state of the delegator and its corresponding validator. - function _calculateDelegationReward(Delegator memory delegator) - private - view - returns (uint256) - { + /// then set the reward and reward recipient in the storage. + function _calculateAndSetDelegationReward( + Delegator memory delegator, + address rewardRecipient, + bytes32 delegationID + ) private returns (uint256) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Validator memory validator = getValidator(delegator.validationID); @@ -646,13 +791,21 @@ abstract contract PoSValidatorManager is return 0; } - return $._rewardCalculator.calculateReward({ + uint256 reward = $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(delegator.weight), validatorStartTime: validator.startedAt, stakingStartTime: delegator.startedAt, stakingEndTime: delegationEndTime, uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds }); + + $._redeemableDelegatorRewards[delegationID] = reward; + + if (rewardRecipient != address(0)) { + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + } + + return reward; } /** @@ -738,7 +891,13 @@ abstract contract PoSValidatorManager is // Once this function completes, the delegation is completed so we can clear it from state now. delete $._delegatorStakes[delegationID]; - address rewardRecipient = delegator.owner; + address rewardRecipient = $._delegatorRewardRecipients[delegationID]; + + if (rewardRecipient == address(0)) { + rewardRecipient = delegator.owner; + } else { + delete $._delegatorRewardRecipients[delegationID]; + } (uint256 delegationRewards, uint256 validatorFees) = _withdrawDelegationRewards(rewardRecipient, delegationID, validationID); diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index d5b4944a1..c4c5b7bb4 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -151,6 +151,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-initializeEndValidation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards + */ + function initializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Begins the process of ending an active validation period, but does not revert if the latest known uptime * is not sufficient to collect uptime-based rewards. This function is used to exit the validator set when rewards are @@ -168,6 +179,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-forceInitializeEndValidation} for details of the first three parameters + * @param recipientAddress Address to receive the rewards. + */ + function forceInitializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Completes the delegator registration process by submitting an acknowledgement of the registration of a * validationID from the P-Chain. After this function is called, the validator's weight is updated in the contract state. @@ -202,6 +224,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-initializeEndDelegation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards. + */ + function initializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Begins the process of removing a delegator from a validation period, but does not revert if the delegation is not eligible for rewards. * The delegator must have been previously registered with the given validationID. For the purposes of computing delegation rewards, @@ -222,6 +255,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-forceInitializeEndDelegation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards. + */ + function forceInitializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Resubmits a delegator registration or delegator end message to be sent to the P-Chain. * Only necessary if the original message can't be delivered due to validator churn. @@ -247,4 +291,18 @@ interface IPoSValidatorManager is IValidatorManager { * @param validationID The ID of the validation period being ended. */ function claimDelegationFees(bytes32 validationID) external; + + /** + * @notice Changes the address of the recipient of the validator's rewards for a validation period. This method can be called any time before {completeEndValidation}. + * @param validationID The ID of the validation period being ended. + * @param recipient The address to receive the rewards. + */ + function changeValidatorRewardRecipient(bytes32 validationID, address recipient) external; + + /** + * @notice Changes the address of the recipient of the delegator's rewards for a delegation period. This method can be called any time before {completeEndDelegation}. + * @param delegationID The ID of the validation period being ended. + * @param recipient The address to receive the rewards. + */ + function changeDelegatorRewardRecipient(bytes32 delegationID, address recipient) external; } diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 4d65cec90..d0a61e615 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -70,11 +70,19 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initializeValidatorRegistration(input, weight); } - function _initializeEndValidation(bytes32 validationID, bool) internal virtual override { + function _initializeEndValidation( + bytes32 validationID, + bool, + address + ) internal virtual override { return app.initializeEndValidation(validationID); } - function _forceInitializeEndValidation(bytes32 validationID, bool) internal virtual override { + function _forceInitializeEndValidation( + bytes32 validationID, + bool, + address + ) internal virtual override { return app.initializeEndValidation(validationID); } diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 8ca198cc9..b9db028be 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -366,7 +366,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -383,7 +384,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -402,7 +404,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -422,7 +425,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -440,13 +444,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedNonce: 1 }); + address validatorOwner = address(this); + _endValidationWithChecks({ validationID: validationID, - validatorOwner: address(this), + validatorOwner: validatorOwner, completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: delegatorRegistrationTime + 1, validatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: validatorOwner }); uint64 invalidEndTime = delegatorRegistrationTime + DEFAULT_CHURN_PERIOD - 1; @@ -463,7 +470,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -494,7 +502,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: true + force: true, + rewardRecipient: address(0) }); } @@ -511,7 +520,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: false, - force: true + force: true, + rewardRecipient: address(0) }); } @@ -528,7 +538,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, DEFAULT_WEIGHT); @@ -597,16 +608,18 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testClaimDelegationFees() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); _endDefaultValidatorWithChecks(validationID, 2); // Validator is Completed, so this will also complete the delegation. _initializeEndDelegation({ - sender: address(this), + sender: DEFAULT_DELEGATOR_ADDRESS, delegationID: delegationID, - endDelegationTimestamp: DEFAULT_COMPLETION_TIMESTAMP, - includeUptime: false, - force: false + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient }); uint256 expectedTotalReward = rewardCalculator.calculateReward({ @@ -623,6 +636,204 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.claimDelegationFees(validationID); } + function testCompleteEndDelegationWithNonDelegatorRewardRecipient() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: rewardRecipient + }); + } + + function testChangeDelegatorRewardRecipientWithNullAddress() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address newRewardRecipient = address(0); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + + vm.expectRevert( + abi.encodeWithSelector( + PoSValidatorManager.InvalidRewardRecipient.selector, newRewardRecipient + ) + ); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, newRewardRecipient); + } + + function testChangeDelegatorRewardRecipientByNonDelegator() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address badActor = address(43); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(badActor); + + vm.expectRevert( + abi.encodeWithSelector(PoSValidatorManager.UnauthorizedOwner.selector, badActor) + ); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, badActor); + } + + function testChangeDelegatorRewardRecipientBackToSelf() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, DEFAULT_DELEGATOR_ADDRESS); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: DEFAULT_DELEGATOR_ADDRESS + }); + } + + function testChangeDelegatorRewardRecipient() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address newRewardRecipient = address(43); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + posValidatorManager.changeDelegatorRewardRecipient(delegationID, newRewardRecipient); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: newRewardRecipient + }); + } + // Delegator registration is not allowed when Validator is pending removed. function testInitializeDelegatorRegistrationValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); @@ -733,7 +944,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint64 validationEndTime = DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP + 1; @@ -751,16 +963,31 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { force: false }); + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: validationEndTime - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + address delegator = DEFAULT_DELEGATOR_ADDRESS; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: _defaultDelegatorExpectedTotalReward(), - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: 0, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: delegator }); } @@ -859,7 +1086,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _endDefaultValidatorWithChecks(validationID, 3); @@ -921,7 +1149,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT, expectedNonce: 3, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _initializeEndDelegationValidatorActiveWithChecks({ validationID: validationID, @@ -932,7 +1161,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 4, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); // Complete ending delegator2 with delegator1's nonce @@ -983,7 +1213,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT, expectedNonce: 3, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _initializeEndDelegationValidatorActiveWithChecks({ validationID: validationID, @@ -994,22 +1225,30 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 4, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint256 expectedTotalReward = _defaultDelegatorExpectedTotalReward(); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + address delegator = DEFAULT_DELEGATOR_ADDRESS; + // Complete delegation1 by delivering the weight update from nonce 4 (delegator2's nonce) _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID1, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 4 + expectedNonce: 4, + rewardRecipient: delegator }); } @@ -1037,12 +1276,191 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); + address validatorOwner = address(this); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: validatorOwner, + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: validatorOwner + }); + } + + function testCompleteEndValidationWithNonValidatorRewardRecipient() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + address validatorOwner = address(this); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: validatorOwner, + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: rewardRecipient + }); + } + + function testChangeValidatorRewardRecipient() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(43); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + _completeEndValidationWithChecks({ validationID: validationID, validatorOwner: address(this), expectedReward: expectedReward, - validatorWeight: DEFAULT_WEIGHT + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: newRecipient + }); + } + + function testChangeValidatorRewardRecipientBackToSelf() public { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(this); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + address validatorOwner = address(this); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: validatorOwner, + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: validatorOwner + }); + } + + function testChangeValidatorRewardRecipientWithNullAddress() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(0); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + vm.expectRevert( + abi.encodeWithSelector( + PoSValidatorManager.InvalidRewardRecipient.selector, newRecipient + ) + ); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + } + + function testChangeValidatorRewardRecipientByNonValidator() public { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address badActor = address(43); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient }); + + vm.prank(badActor); + + vm.expectRevert( + abi.encodeWithSelector(PoSValidatorManager.UnauthorizedOwner.selector, badActor) + ); + + posValidatorManager.changeValidatorRewardRecipient(validationID, badActor); } function testInitializeEndValidation() public virtual override { @@ -1098,7 +1516,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, true); + _initializeEndValidation(validationID, true, address(0)); } function testInitializeEndValidationWithoutNewUptime() public { @@ -1127,7 +1545,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, false); + _initializeEndValidation(validationID, false, address(0)); } function testInitializeEndValidationInsufficientUptime() public { @@ -1152,7 +1570,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeEndValidation(validationID, true); + _initializeEndValidation(validationID, true, address(0)); } function testSubmitUptimeProofPoaValidator() public { @@ -1207,7 +1625,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, false); + _initializeEndValidation(validationID, false, address(0)); uint256 balanceBefore = _getStakeAssetBalance(address(this)); @@ -1295,7 +1713,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(this) }); bytes memory setValidatorWeightPayload = @@ -1371,7 +1790,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID: validationID, validatorOwner: address(this), expectedReward: expectedReward, - validatorWeight: DEFAULT_WEIGHT + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: address(this) }); vm.warp(DEFAULT_COMPLETION_TIMESTAMP + 1 + DEFAULT_MINIMUM_STAKE_DURATION); @@ -1475,7 +1895,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _forceInitializeEndValidation(validationID, true); + _forceInitializeEndValidation(validationID, true, address(0)); } function testValueToWeightTruncated() public { @@ -1530,16 +1950,22 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function _initializeEndValidation( bytes32 validationID, - bool includeUptime + bool includeUptime, + address recipientAddress ) internal virtual override { - posValidatorManager.initializeEndValidation(validationID, includeUptime, 0); + posValidatorManager.initializeEndValidation( + validationID, includeUptime, 0, recipientAddress + ); } function _forceInitializeEndValidation( bytes32 validationID, - bool includeUptime + bool includeUptime, + address recipientAddress ) internal virtual override { - posValidatorManager.forceInitializeEndValidation(validationID, includeUptime, 0); + posValidatorManager.forceInitializeEndValidation( + validationID, includeUptime, 0, recipientAddress + ); } function _initializeDelegatorRegistration( @@ -1666,21 +2092,26 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(this) }); uint256 expectedTotalReward = _defaultDelegatorExpectedTotalReward(); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: address(this) }); } @@ -1720,7 +2151,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 expectedValidatorWeight, uint64 expectedNonce, bool includeUptime, - bool force + bool force, + address rewardRecipient ) internal { bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage( validationID, expectedNonce, expectedValidatorWeight @@ -1746,7 +2178,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { includeUptime: includeUptime, force: force, setValidatorWeightPayload: setValidatorWeightPayload, - uptimePayload: uptimeMsg + uptimePayload: uptimeMsg, + rewardRecipient: rewardRecipient }); } @@ -1757,14 +2190,22 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bool includeUptime, bool force, bytes memory setValidatorWeightPayload, - bytes memory uptimePayload + bytes memory uptimePayload, + address rewardRecipient ) internal { _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); if (includeUptime) { _mockGetUptimeWarpMessage(uptimePayload, true); } - _initializeEndDelegation(sender, delegationID, endDelegationTimestamp, includeUptime, force); + _initializeEndDelegation({ + sender: sender, + delegationID: delegationID, + endDelegationTimestamp: endDelegationTimestamp, + includeUptime: includeUptime, + force: force, + rewardRecipient: rewardRecipient + }); } function _initializeEndDelegation( @@ -1772,14 +2213,19 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID, uint64 endDelegationTimestamp, bool includeUptime, - bool force + bool force, + address rewardRecipient ) internal { vm.warp(endDelegationTimestamp); vm.prank(sender); if (force) { - posValidatorManager.forceInitializeEndDelegation(delegationID, includeUptime, 0); + posValidatorManager.forceInitializeEndDelegation( + delegationID, includeUptime, 0, rewardRecipient + ); } else { - posValidatorManager.initializeEndDelegation(delegationID, includeUptime, 0); + posValidatorManager.initializeEndDelegation( + delegationID, includeUptime, 0, rewardRecipient + ); } } @@ -1790,18 +2236,21 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, validatorWeight: DEFAULT_WEIGHT, - expectedNonce: expectedNonce + expectedNonce: expectedNonce, + rewardRecipient: address(this) }); } function _endDefaultValidator(bytes32 validationID, uint64 expectedNonce) internal { + address validatorOwner = address(this); _endValidationWithChecks({ validationID: validationID, - validatorOwner: address(this), + validatorOwner: validatorOwner, completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, validatorWeight: DEFAULT_WEIGHT, - expectedNonce: expectedNonce + expectedNonce: expectedNonce, + rewardRecipient: validatorOwner }); } @@ -1811,7 +2260,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 completeRegistrationTimestamp, uint64 completionTimestamp, uint64 validatorWeight, - uint64 expectedNonce + uint64 expectedNonce, + address rewardRecipient ) internal { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, expectedNonce, 0); @@ -1839,7 +2289,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID: validationID, validatorOwner: validatorOwner, expectedReward: expectedReward, - validatorWeight: validatorWeight + validatorWeight: validatorWeight, + rewardRecipient: rewardRecipient }); } @@ -1847,7 +2298,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID, address validatorOwner, uint256 expectedReward, - uint64 validatorWeight + uint64 validatorWeight, + address rewardRecipient ) internal { bytes memory subnetValidatorRegistrationMessage = ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false); @@ -1855,21 +2307,33 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit ValidationPeriodEnded(validationID, ValidatorStatus.Completed); uint256 balanceBefore = _getStakeAssetBalance(validatorOwner); + uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); _expectStakeUnlock(validatorOwner, _weightToValue(validatorWeight)); - _expectRewardIssuance(validatorOwner, expectedReward); + _expectRewardIssuance(rewardRecipient, expectedReward); _completeEndValidation(subnetValidatorRegistrationMessage); - assertEq( - _getStakeAssetBalance(validatorOwner), - balanceBefore + _weightToValue(validatorWeight) + expectedReward - ); + if (rewardRecipient == validatorOwner) { + assertEq( + _getStakeAssetBalance(validatorOwner), + balanceBefore + _weightToValue(validatorWeight) + expectedReward + ); + } else { + assertEq( + _getStakeAssetBalance(validatorOwner), + balanceBefore + _weightToValue(validatorWeight) + ); + + assertEq( + _getStakeAssetBalance(rewardRecipient), + rewardRecipientBalanceBefore + expectedReward + ); + } } function _completeEndValidation(bytes memory subnetValidatorRegistrationMessage) internal { _mockGetPChainWarpMessage(subnetValidatorRegistrationMessage, true); - posValidatorManager.completeEndValidation(0); } @@ -1878,14 +2342,13 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID, address delegator, uint64 delegatorWeight, - uint256 expectedTotalReward, - uint64 delegationFeeBips, + uint256 expectedValidatorFees, + uint256 expectedDelegatorReward, uint64 validatorWeight, uint64 expectedValidatorWeight, - uint64 expectedNonce + uint64 expectedNonce, + address rewardRecipient ) internal { - uint256 expectedValidatorFees = (expectedTotalReward * delegationFeeBips) / 10000; - uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; bytes memory weightUpdateMessage = ValidatorMessages.packL1ValidatorWeightMessage( validationID, expectedNonce, validatorWeight ); @@ -1895,17 +2358,30 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); uint256 balanceBefore = _getStakeAssetBalance(delegator); + uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); _expectStakeUnlock(delegator, _weightToValue(delegatorWeight)); - _expectRewardIssuance(delegator, expectedDelegatorReward); + _expectRewardIssuance(rewardRecipient, expectedDelegatorReward); _completeEndDelegation(delegationID, weightUpdateMessage); assertEq(posValidatorManager.getWeight(validationID), expectedValidatorWeight); - assertEq( - _getStakeAssetBalance(delegator), - balanceBefore + _weightToValue(delegatorWeight) + expectedDelegatorReward - ); + + if (rewardRecipient == delegator) { + assertEq( + _getStakeAssetBalance(delegator), + balanceBefore + _weightToValue(delegatorWeight) + expectedDelegatorReward + ); + } else { + assertEq( + _getStakeAssetBalance(delegator), balanceBefore + _weightToValue(delegatorWeight) + ); + + assertEq( + _getStakeAssetBalance(rewardRecipient), + rewardRecipientBalanceBefore + expectedDelegatorReward + ); + } } function _completeEndDelegation( @@ -1929,7 +2405,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint256 expectedTotalReward = rewardCalculator.calculateReward({ @@ -1940,16 +2417,22 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: 0 }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + address delegator = DEFAULT_DELEGATOR_ADDRESS; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: delegator }); } @@ -1984,4 +2467,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeBlockchainID: DEFAULT_SOURCE_BLOCKCHAIN_ID }); } + + function _calculateValidatorFeesFromDelegator( + uint256 totalReward, + uint64 delegationFeeBips + ) internal pure returns (uint256) { + return totalReward * delegationFeeBips / 10000; + } } diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 1f4f49963..2785825fe 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -316,7 +316,7 @@ abstract contract ValidatorManagerTest is Test { bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0))); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); - _forceInitializeEndValidation(validationID, false); + _forceInitializeEndValidation(validationID, false, address(0)); } function testCumulativeChurnRegistration() public { @@ -389,7 +389,8 @@ abstract contract ValidatorManagerTest is Test { _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) + churnThreshold ) ); - _initializeEndValidation(validationID, false); + + _initializeEndValidation(validationID, false, address(0)); } function testValidatorManagerStorageSlot() public view { @@ -491,9 +492,31 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceInitializeEndValidation(validationID, includeUptime); + _forceInitializeEndValidation(validationID, includeUptime, address(0)); + } else { + _initializeEndValidation(validationID, includeUptime, address(0)); + } + } + + function _initializeEndValidation( + bytes32 validationID, + uint64 completionTimestamp, + bytes memory setWeightMessage, + bool includeUptime, + bytes memory uptimeMessage, + bool force, + address recipientAddress + ) internal { + _mockSendWarpMessage(setWeightMessage, bytes32(0)); + if (includeUptime) { + _mockGetUptimeWarpMessage(uptimeMessage, true); + } + + vm.warp(completionTimestamp); + if (force) { + _forceInitializeEndValidation(validationID, includeUptime, recipientAddress); } else { - _initializeEndValidation(validationID, includeUptime); + _initializeEndValidation(validationID, includeUptime, recipientAddress); } } @@ -581,11 +604,16 @@ abstract contract ValidatorManagerTest is Test { uint64 weight ) internal virtual returns (bytes32); - function _initializeEndValidation(bytes32 validationID, bool includeUptime) internal virtual; + function _initializeEndValidation( + bytes32 validationID, + bool includeUptime, + address rewardRecipient + ) internal virtual; function _forceInitializeEndValidation( bytes32 validationID, - bool includeUptime + bool includeUptime, + address rewardRecipient ) internal virtual; function _setUp() internal virtual returns (IValidatorManager); diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 754f6a367..23a99bcb4 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -1059,7 +1059,7 @@ func InitializeEndNativeValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeEndValidation( + tx, err := stakingManager.InitializeEndValidation0( opts, validationID, false, @@ -1161,7 +1161,7 @@ func InitializeEndERC20Validation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeEndValidation( + tx, err := stakingManager.InitializeEndValidation0( opts, validationID, false,