diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index c6cd32649..f366e5583 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -91,7 +91,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ADDRESS_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDelegationFees\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"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\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]},{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"contractIERC20Mintable\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"delegationAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"disableOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}]},{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorSet\",\"inputs\":[{\"name\":\"subnetConversionData\",\"type\":\"tuple\",\"internalType\":\"structSubnetConversionData\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialValidators\",\"type\":\"tuple[]\",\"internalType\":\"structInitialValidator[]\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}]},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitUptimeProof\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewards\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"fees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InitialValidatorCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressEmptyCode\",\"inputs\":[{\"name\":\"target\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"DelegatorIneligibleForRewards\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBLSKeyLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidBLSPublicKey\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCodecID\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationFee\",\"inputs\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationID\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumDelegatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitializationStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMaximumChurnPercentage\",\"inputs\":[{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageLength\",\"inputs\":[{\"name\":\"actual\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"expected\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMinStakeDuration\",\"inputs\":[{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNodeID\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidNonce\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidPChainOwnerThreshold\",\"inputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addressesLength\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidRegistrationExpiry\",\"inputs\":[{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeAmount\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeMultiplier\",\"inputs\":[{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSubnetConversionID\",\"inputs\":[{\"name\":\"encodedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expectedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidTokenAddress\",\"inputs\":[{\"name\":\"tokenAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidValidationID\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerAddress\",\"inputs\":[{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerBlockchainID\",\"inputs\":[{\"name\":\"blockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWarpOriginSenderAddress\",\"inputs\":[{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpSourceChainID\",\"inputs\":[{\"name\":\"sourceChainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"MaxChurnRateExceeded\",\"inputs\":[{\"name\":\"churnAmount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MaxWeightExceeded\",\"inputs\":[{\"name\":\"newValidatorWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MinStakeDurationNotPassed\",\"inputs\":[{\"name\":\"endTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"NodeAlreadyRegistered\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PChainOwnerAddressesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"SafeERC20FailedOperation\",\"inputs\":[{\"name\":\"token\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnauthorizedOwner\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnexpectedRegistrationStatus\",\"inputs\":[{\"name\":\"validRegistration\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"type\":\"error\",\"name\":\"ValidatorIneligibleForRewards\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ValidatorNotPoS\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615f8b380380615f8b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e3e8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c806376f7862111610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff614610444578063df93d8de14610464578063e4a63c401461046e578063f09969ae14610482578063fd7ac5e714610495575f80fd5b8063ba3a4b9714610402578063bc5fbfec14610415578063bee0a03f14610429578063c974d1b61461043c575f80fd5b80639e1bc4ef116100e45780639e1bc4ef146103a2578063a3a65e48146103b5578063afb98096146103c8578063b771b3bc146103dc575f80fd5b806376f78621146103615780638280a25a1461037457806393e245981461037c57806398f3e2b41461038f575f80fd5b80633a1cfff61161018a57806360305d621161015a57806360305d6214610317578063620658561461033457806366435abf14610347578063732214f81461035a575f80fd5b80633a1cfff6146102bd578063467ef06f146102d05780634bee0040146102e35780635297fae614610304575f80fd5b806320d91b7a116101c557806320d91b7a1461025057806325e1c776146102635780632e2194d81461027657806335455ded146102a1575f80fd5b80630118acc4146101f65780630322ed981461020b578063151d30d11461021e5780631ec447241461023d575b5f80fd5b61020961020436600461505c565b6104a8565b005b610209610219366004615097565b6104dd565b610226600a81565b60405160ff90911681526020015b60405180910390f35b61020961024b36600461505c565b6106eb565b61020961025e3660046150ae565b6106f6565b6102096102713660046150fc565b610be2565b610289610284366004615097565b610c56565b6040516001600160401b039091168152602001610234565b6102aa61271081565b60405161ffff9091168152602001610234565b6102096102cb36600461505c565b610c6c565b6102096102de36600461511d565b610c77565b6102f66102f136600461515d565b610d39565b604051908152602001610234565b6102096103123660046151c2565b610d6e565b61031f601481565b60405163ffffffff9091168152602001610234565b6102f66103423660046151ea565b610fd9565b610289610355366004615097565b610ff2565b6102f65f81565b61020961036f36600461505c565b611006565b610226603081565b61020961038a366004615097565b611031565b61020961039d3660046151c2565b6110fc565b6102f66103b0366004615203565b6112d4565b6102096103c336600461511d565b611300565b6102f65f80516020615db283398151915281565b6103ea6005600160991b0181565b6040516001600160a01b039091168152602001610234565b610209610410366004615097565b611489565b6102f65f80516020615dd283398151915281565b610209610437366004615097565b611672565b610226601481565b610457610452366004615097565b6117af565b6040516102349190615298565b6102896202a30081565b6102f65f80516020615d9283398151915281565b61020961049036600461532c565b6118fe565b6102f66104a336600461536a565b6119dd565b6104b3838383611a38565b6104d857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f80516020615e128339815191526020526040808220815160e0810190925280545f80516020615dd283398151915293929190829060ff16600581111561052a5761052a615223565b600581111561053b5761053b615223565b815260200160018201805461054f906153d5565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906153d5565b80156105c65780601f1061059d576101008083540402835291602001916105c6565b820191905f5260205f20905b8154815290600101906020018083116105a957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561063157610631615223565b14610664575f8381526007830160205260409081902054905163170cc93360e21b81526104cf9160ff169060040161540d565b6005600160991b016001600160a01b031663ee5b48eb6106898584606001515f611d46565b6040518263ffffffff1660e01b81526004016106a5919061541b565b6020604051808303815f875af11580156106c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e5919061542d565b50505050565b6106e5838383611a38565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615dd28339815191529060ff161561074857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107af919061542d565b8360200135146107d8576040516372b0a7e760e11b8152602084013560048201526024016104cf565b306107e96060850160408601615444565b6001600160a01b03161461082c576108076060840160408501615444565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104cf565b5f61083a606085018561545f565b905090505f805b828163ffffffff161015610b22575f61085d606088018861545f565b8363ffffffff16818110610873576108736154a4565b905060200281019061088591906154b8565b61088e906155dc565b80516040519192505f9160088801916108a691615655565b908152602001604051809103902054146108d657805160405163a41f772f60e01b81526104cf919060040161541b565b5f6002885f01358460405160200161090592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261091f91615655565b602060405180830381855afa15801561093a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061095d919061542d565b90508086600801835f01516040516109759190615655565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff191660018360058111156109f7576109f7615223565b021790555060208201516001820190610a1090826156aa565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff191692841692909217909155830151610ab5911685615779565b8251604051919550610ac691615655565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1b9061578c565b9050610841565b50600483018190555f610b40610b3786611d95565b60400151611eab565b90505f610b4c87612038565b90505f600282604051610b5f9190615655565b602060405180830381855afa158015610b7a573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b9d919061542d565b9050828114610bc957604051631872fc8d60e01b815260048101829052602481018490526044016104cf565b5050506009909201805460ff1916600117905550505050565b610beb82612212565b610c0b576040516330efa98b60e01b8152600481018390526024016104cf565b5f610c15836117af565b5190506002816005811115610c2c57610c2c615223565b14610c4c578060405163170cc93360e21b81526004016104cf919061540d565b6106e5838361224d565b5f610c6664e8d4a51000836157ae565b92915050565b6106e58383836124c7565b610c7f6126c0565b5f80516020615db28339815191525f80610c98846126f7565b91509150610ca582612212565b610cb157505050610d20565b5f82815260048085016020526040909120546001600160a01b03169082516005811115610ce057610ce0615223565b03610d05575f83815260078501602052604081208054919055610d038282612a35565b505b610d1b81610d168460400151610fd9565b612aab565b505050505b610d3660015f80516020615df283398151915255565b50565b5f610d426126c0565b610d4e85858585612ae1565b9050610d6660015f80516020615df283398151915255565b949350505050565b5f8181525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db283398151915293929190829060ff166003811115610dbb57610dbb615223565b6003811115610dcc57610dcc615223565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610e42826117af565b9050600183516003811115610e5957610e59615223565b14610e7a578251604051633b0d540d60e21b81526104cf91906004016157cd565b600481516005811115610e8f57610e8f615223565b03610ea557610e9d85612cba565b505050505050565b5f80610ebc610eb389611d95565b60400151612ea1565b5091509150818414610ee957846040015160405163089938b360e11b81526004016104cf91815260200190565b806001600160401b031683606001516001600160401b03161080610f225750806001600160401b03168560a001516001600160401b0316115b15610f4b57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cf565b5f878152600587016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610c666001600160401b03831664e8d4a510006157e7565b5f610ffc826117af565b6080015192915050565b6110118383836124c7565b6104d857604051635bff683f60e11b8152600481018490526024016104cf565b5f80516020615db28339815191525f611049836117af565b519050600481600581111561106057611060615223565b14611080578060405163170cc93360e21b81526004016104cf919061540d565b5f8381526004830160205260409020546001600160a01b031633146110c657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104cf565b5f838152600783016020908152604080832080549084905560048601909252909120546106e5906001600160a01b031682612a35565b6111046126c0565b5f8181525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db283398151915293929190829060ff16600381111561115157611151615223565b600381111561116257611162615223565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156111db576111db615223565b146111fc578051604051633b0d540d60e21b81526104cf91906004016157cd565b600461120b82604001516117af565b51600581111561121d5761121d615223565b146112af575f61122c85611d95565b90505f8061123d8360400151612ea1565b5091509150818460400151146112695760405163089938b360e11b8152600481018390526024016104cf565b806001600160401b03168460c001516001600160401b031611156112ab57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cf565b5050505b6112b883612cba565b50506112d060015f80516020615df283398151915255565b5050565b5f6112dd6126c0565b6112e88333846130f7565b9050610c6660015f80516020615df283398151915255565b5f80516020615dd28339815191525f8061132561131c85611d95565b604001516133cf565b915091508061134b57604051632d07135360e01b815281151560048201526024016104cf565b5f82815260068401602052604090208054611365906153d5565b90505f036113895760405163089938b360e11b8152600481018390526024016104cf565b60015f83815260078501602052604090205460ff1660058111156113af576113af615223565b146113e2575f8281526007840160205260409081902054905163170cc93360e21b81526104cf9160ff169060040161540d565b5f82815260068401602052604081206113fa91614fab565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db283398151915293929190829060ff1660038111156114d6576114d6615223565b60038111156114e7576114e7615223565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561156057611560615223565b14158015611581575060038151600381111561157e5761157e615223565b14155b156115a2578051604051633b0d540d60e21b81526104cf91906004016157cd565b5f6115b082604001516117af565b905080606001516001600160401b03165f036115e2576040516339b894f960e21b8152600481018590526024016104cf565b6005600160991b016001600160a01b031663ee5b48eb61160f846040015184606001518560800151611d46565b6040518263ffffffff1660e01b815260040161162b919061541b565b6020604051808303815f875af1158015611647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061166b919061542d565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615dd283398151915291906116b9906153d5565b90505f036116dd5760405163089938b360e11b8152600481018390526024016104cf565b60015f83815260078301602052604090205460ff16600581111561170357611703615223565b14611736575f8281526007820160205260409081902054905163170cc93360e21b81526104cf9160ff169060040161540d565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161176f91906004016157fe565b6020604051808303815f875af115801561178b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d8919061542d565b6117b7614fe2565b5f8281525f80516020615e12833981519152602052604090819020815160e0810190925280545f80516020615dd2833981519152929190829060ff16600581111561180457611804615223565b600581111561181557611815615223565b8152602001600182018054611829906153d5565b80601f0160208091040260200160405190810160405280929190818152602001828054611855906153d5565b80156118a05780601f10611877576101008083540402835291602001916118a0565b820191905f5260205f20905b81548152906001019060200180831161188357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611947575080546001600160401b03808416911610155b156119655760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611990848461358b565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f80516020615dd2833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611a209086908690615888565b90815260200160405180910390205491505092915050565b5f8381525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db28339815191529284929091829060ff166003811115611a8657611a86615223565b6003811115611a9757611a97615223565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611b0d826117af565b9050600283516003811115611b2457611b24615223565b14611b45578251604051633b0d540d60e21b81526104cf91906004016157cd565b60208301516001600160a01b03163314611be8575f828152600485016020526040902054336001600160a01b0390911603611be2575f82815260048501602052604090205460a0820151611ba991600160b01b90046001600160401b031690615897565b6001600160401b0316421015611bdd5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104cf565b611be8565b336110a1565b600281516005811115611bfd57611bfd615223565b03611cda578615611c1457611c12828761224d565b505b5f8881526005850160205260409020805460ff1916600317905560608301516080820151611c4d918491611c4891906158b7565b6135a5565b505f898152600586016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611c8e846136fc565b5f8a81526006870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a315159450611d3f9350505050565b600481516005811115611cef57611cef615223565b03611d2357611cfd836136fc565b5f898152600686016020526040902055611d1688612cba565b6001945050505050611d3f565b805160405163170cc93360e21b81526104cf919060040161540d565b9392505050565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611df9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e2091908101906158e2565b9150915080611e4257604051636b2f19e960e01b815260040160405180910390fd5b815115611e68578151604051636ba589a560e01b815260048101919091526024016104cf565b60208201516001600160a01b031615611ea4576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104cf565b5092915050565b5f8151602614611ee057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016104cf565b5f805b6002811015611f2f57611ef78160016159b4565b611f029060086157e7565b61ffff16848281518110611f1857611f186154a4565b016020015160f81c901b9190911790600101611ee3565b5061ffff811615611f595760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015611fb457611f708160036159b4565b611f7b9060086157e7565b63ffffffff1685611f8d836002615779565b81518110611f9d57611f9d6154a4565b016020015160f81c901b9190911790600101611f5c565b5063ffffffff811615611fda57604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561202f57611ff181601f6159b4565b611ffc9060086157e7565b86612008836006615779565b81518110612018576120186154a4565b016020015160f81c901b9190911790600101611fdd565b50949350505050565b60605f8083356020850135601461205487870160408901615444565b612061606089018961545f565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b6120e7606085018561545f565b9050811015611ea457816120fe606086018661545f565b8381811061210e5761210e6154a4565b905060200281019061212091906154b8565b61212a90806159c7565b9050612139606087018761545f565b84818110612149576121496154a4565b905060200281019061215b91906154b8565b61216590806159c7565b612172606089018961545f565b86818110612182576121826154a4565b905060200281019061219491906154b8565b6121a29060208101906159c7565b6121af60608b018b61545f565b888181106121bf576121bf6154a4565b90506020028101906121d191906154b8565b6121e29060608101906040016151ea565b6040516020016121f89796959493929190615a09565b60408051601f1981840301815291905291506001016120da565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612298573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122bf91908101906158e2565b91509150806122e157604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612324573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612348919061542d565b82511461236e578151604051636ba589a560e01b815260048101919091526024016104cf565b60208201516001600160a01b0316156123aa576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104cf565b5f806123b984604001516138a8565b915091508187146123e05760405163089938b360e11b8152600481018890526024016104cf565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020600101545f80516020615db2833981519152906001600160401b03908116908316111561249d575f888152600482016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26124bc565b5f8881526004820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f80516020615db2833981519152816124e086613a99565b90506124eb86612212565b6124fa57600192505050611d3f565b5f8681526004830160205260409020546001600160a01b0316331461251f57336110a1565b5f86815260048301602052604090205460a082015161254e91600160b01b90046001600160401b031690615897565b6001600160401b03168160c001516001600160401b031610156125955760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104cf565b5f85156125ad576125a6878661224d565b90506125cb565b505f8681526004830160205260409020600101546001600160401b03165b600383015460408301515f916001600160a01b03169063778c06b5906125f090610fd9565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b0391821660248401819052604484015281166064830152851660848201525f60a4820181905260c482015260e401602060405180830381865afa158015612666573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268a919061542d565b905080846007015f8a81526020019081526020015f205f8282546126ae9190615779565b90915550501515979650505050505050565b5f80516020615df28339815191528054600119016126f157604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612700614fe2565b5f80516020615dd28339815191525f8061271c61131c87611d95565b91509150801561274357604051632d07135360e01b815281151560048201526024016104cf565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561277457612774615223565b600581111561278557612785615223565b8152602001600182018054612799906153d5565b80601f01602080910402602001604051908101604052809291908181526020018280546127c5906153d5565b80156128105780601f106127e757610100808354040283529160200191612810565b820191905f5260205f20905b8154815290600101906020018083116127f357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561287b5761287b615223565b1415801561289c575060018151600581111561289957612899615223565b14155b156128bd57805160405163170cc93360e21b81526104cf919060040161540d565b6003815160058111156128d2576128d2615223565b036128e057600481526128e5565b600581525b8360080181602001516040516128fb9190615655565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561293f5761293f615223565b02179055506020820151600182019061295890826156aa565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156129fe576129fe615223565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f80516020615d9283398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612a90575f80fd5b505af1158015612aa2573d5f803e3d5ffd5b50505050505050565b5f80516020615d92833981519152546112d0906001600160a01b03168383613d7d565b60015f80516020615df283398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615db283398151915290600160401b900461ffff9081169086161080612b35575061271061ffff8616115b15612b5957604051635f12e6c360e11b815261ffff861660048201526024016104cf565b60028101546001600160401b039081169085161015612b95576040516202a06d60e11b81526001600160401b03851660048201526024016104cf565b8054831080612ba75750806001015483115b15612bc85760405163222d164360e21b8152600481018490526024016104cf565b5f612bd284613ddc565b90505f612bde82610c56565b90505f612beb8983613dff565b90506040518060800160405280612bff3390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526004909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b03199094169516949094179190911798909816178155910151600190910180549190951667ffffffffffffffff19909116179093555090915050949350505050565b5f8181525f80516020615d728339815191526020526040808220815160e0810190925280545f80516020615db283398151915293929190829060ff166003811115612d0757612d07615223565b6003811115612d1857612d18615223565b8152815461010090046001600160a01b03166020808301919091526001808401546040808501919091526002948501546001600160401b038082166060870152600160401b820481166080870152600160801b8204811660a0870152600160c01b9091041660c090940193909352848301515f89815260058901845284812080546001600160a81b03191681559283018190559190940181905560068701909152908120805490829055929350909190808215612e46575f84815260048701602052604090205461271090612df890600160a01b900461ffff16856157e7565b612e0291906157ae565b915081866007015f8681526020019081526020015f205f828254612e269190615779565b90915550612e36905082846159b4565b9050612e46856020015182612a35565b612e5b8560200151610d168760600151610fd9565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612ed857835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016104cf565b5f805b6002811015612f2757612eef8160016159b4565b612efa9060086157e7565b61ffff16868281518110612f1057612f106154a4565b016020015160f81c901b9190911790600101612edb565b5061ffff811615612f515760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015612fac57612f688160036159b4565b612f739060086157e7565b63ffffffff1687612f85836002615779565b81518110612f9557612f956154a4565b016020015160f81c901b9190911790600101612f54565b5063ffffffff8116600314612fd457604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561302957612feb81601f6159b4565b612ff69060086157e7565b88613002836006615779565b81518110613012576130126154a4565b016020015160f81c901b9190911790600101612fd7565b505f805b6008811015613088576130418160076159b4565b61304c9060086157e7565b6001600160401b031689613061836026615779565b81518110613071576130716154a4565b016020015160f81c901b919091179060010161302d565b505f805b60088110156130e7576130a08160076159b4565b6130ab9060086157e7565b6001600160401b03168a6130c083602e615779565b815181106130d0576130d06154a4565b016020015160f81c901b919091179060010161308c565b5091989097509095509350505050565b5f5f80516020615db28339815191528161311361028485613ddc565b90505f61311f876117af565b905061312a87612212565b61314a576040516330efa98b60e01b8152600481018890526024016104cf565b60028151600581111561315f5761315f615223565b1461318057805160405163170cc93360e21b81526104cf919060040161540d565b5f8282608001516131919190615897565b905083600201600a9054906101000a90046001600160401b031682604001516131ba9190615a72565b6001600160401b0316816001600160401b031611156131f757604051636d51fe0560e11b81526001600160401b03821660048201526024016104cf565b5f806132038a846135a5565b915091505f8a8360405160200161323192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260058b01909152902081518154829060ff191660018360038111156132c4576132c4615223565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f80825160271461340557825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044016104cf565b5f805b60028110156134545761341c8160016159b4565b6134279060086157e7565b61ffff1685828151811061343d5761343d6154a4565b016020015160f81c901b9190911790600101613408565b5061ffff81161561347e5760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b60048110156134d9576134958160036159b4565b6134a09060086157e7565b63ffffffff16866134b2836002615779565b815181106134c2576134c26154a4565b016020015160f81c901b9190911790600101613481565b5063ffffffff811660021461350157604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156135565761351881601f6159b4565b6135239060086157e7565b8761352f836006615779565b8151811061353f5761353f6154a4565b016020015160f81c901b9190911790600101613504565b505f8660268151811061356b5761356b6154a4565b016020015191976001600160f81b03199092161515965090945050505050565b613593614377565b61359c826143c2565b6112d081614430565b5f8281525f80516020615e12833981519152602052604081206002015481905f80516020615dd283398151915290600160801b90046001600160401b03166135ed8582614498565b5f6135f787614672565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6136478a858b611d46565b6040518263ffffffff1660e01b8152600401613663919061541b565b6020604051808303815f875af115801561367f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136a3919061542d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f80516020615db283398151915290505f61371c84604001516117af565b90505f60038251600581111561373457613734615223565b1480613752575060048251600581111561375057613750615223565b145b15613762575060c081015161379f565b60028251600581111561377757613777615223565b0361378357504261379f565b815160405163170cc93360e21b81526104cf919060040161540d565b84608001516001600160401b0316816001600160401b0316116137c657505f949350505050565b600383015460608601516001600160a01b039091169063778c06b5906137eb90610fd9565b60a085015160808901516040808b01515f90815260048a810160205282822060010154925160e088901b6001600160e01b0319168152908101959095526001600160401b0393841660248601529183166044850152828716606485015291909116608483015260a4820181905260c482015260e401602060405180830381865afa15801561387b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061389f919061542d565b95945050505050565b5f808251602e146138de57825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016104cf565b5f805b600281101561392d576138f58160016159b4565b6139009060086157e7565b61ffff16858281518110613916576139166154a4565b016020015160f81c901b91909117906001016138e1565b5061ffff8116156139575760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b60048110156139b25761396e8160036159b4565b6139799060086157e7565b63ffffffff168661398b836002615779565b8151811061399b5761399b6154a4565b016020015160f81c901b919091179060010161395a565b5063ffffffff8116156139d857604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613a2d576139ef81601f6159b4565b6139fa9060086157e7565b87613a06836006615779565b81518110613a1657613a166154a4565b016020015160f81c901b91909117906001016139db565b505f805b6008811015613a8c57613a458160076159b4565b613a509060086157e7565b6001600160401b031688613a65836026615779565b81518110613a7557613a756154a4565b016020015160f81c901b9190911790600101613a31565b5090969095509350505050565b613aa1614fe2565b5f8281525f80516020615e128339815191526020526040808220815160e0810190925280545f80516020615dd283398151915293929190829060ff166005811115613aee57613aee615223565b6005811115613aff57613aff615223565b8152602001600182018054613b13906153d5565b80601f0160208091040260200160405190810160405280929190818152602001828054613b3f906153d5565b8015613b8a5780601f10613b6157610100808354040283529160200191613b8a565b820191905f5260205f20905b815481529060010190602001808311613b6d57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613bf857613bf8615223565b14613c2b575f8481526007830160205260409081902054905163170cc93360e21b81526104cf9160ff169060040161540d565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613c6f57613c6f615223565b021790555060208201516001820190613c8890826156aa565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613d2685826135a5565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104d891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146e7565b5f610c66825f80516020615d92833981519152546001600160a01b031690614748565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e4357604051637fab81e560e01b815260040160405180910390fd5b5f80516020615dd283398151915242613e6260608601604087016151ea565b6001600160401b0316111580613e9c5750613e806202a30042615779565b613e9060608601604087016151ea565b6001600160401b031610155b15613ed657613eb160608501604086016151ea565b604051635879da1360e11b81526001600160401b0390911660048201526024016104cf565b613eeb613ee66060860186615a9d565b6148a1565b613efb613ee66080860186615a9d565b6030613f0a60208601866159c7565b905014613f3c57613f1e60208501856159c7565b6040516326475b2f60e11b81526104cf925060040190815260200190565b613f4684806159c7565b90505f03613f7357613f5884806159c7565b604051633e08a12560e11b81526004016104cf929190615ab1565b5f60088201613f8286806159c7565b604051613f90929190615888565b90815260200160405180910390205414613fc957613fae84806159c7565b60405163a41f772f60e01b81526004016104cf929190615ab1565b613fd3835f614498565b6040805160e08101909152815481525f9081906140df9060208101613ff889806159c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614040908a018a6159c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408960608a0160408b016151ea565b6001600160401b031681526020016140a460608a018a615a9d565b6140ad90615adf565b81526020016140bf60808a018a615a9d565b6140c890615adf565b8152602001876001600160401b0316815250614a0a565b5f828152600686016020526040902091935091506140fd82826156aa565b50816008840161410d88806159c7565b60405161411b929190615888565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061415790859060040161541b565b6020604051808303815f875af1158015614173573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614197919061542d565b6040805160e0810190915290915080600181526020016141b789806159c7565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561424657614246615223565b02179055506020820151600182019061425f90826156aa565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055806142fd88806159c7565b60405161430b929190615888565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061434991906151ea565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166143c057604051631afcd79f60e31b815260040160405180910390fd5b565b6143ca614377565b6143d381614bf7565b6143db614c10565b610d36606082013560808301356143f860c0850160a086016151ea565b61440860e0860160c08701615ba6565b614419610100870160e08801615bbf565b61442b61012088016101008901615444565b614c20565b614438614377565b5f80516020615d928339815191526001600160a01b03821661447857604051637330680360e01b81526001600160a01b03831660048201526024016104cf565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615dd28339815191525f6001600160401b0380841690851611156144cc576144c583856158b7565b90506144d9565b6144d684846158b7565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061453b575060018401548151614537916001600160401b031690615779565b8210155b15614561576001600160401b038316606082015281815260408101516020820152614580565b82816060018181516145739190615897565b6001600160401b03169052505b6060810151614590906064615a72565b602082015160018601546001600160401b0392909216916145bb9190600160401b900460ff166157e7565b10156145eb57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104cf565b856001600160401b0316816040018181516146069190615779565b9052506040810180516001600160401b03871691906146269083906159b4565b905250805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615e128339815191526020526040812060020180545f80516020615dd283398151915291906008906146bc90600160401b90046001600160401b0316615bdf565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6146fb6001600160a01b03841683614d4f565b905080515f1415801561471f57508080602001905181019061471d9190615bfa565b155b156104d857604051635274afe760e01b81526001600160a01b03841660048201526024016104cf565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561478e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147b2919061542d565b90506147c96001600160a01b038516333086614d5c565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa15801561480d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614831919061542d565b90508181116148975760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104cf565b61389f82826159b4565b6148ae602082018261511d565b63ffffffff161580156148ce57506148c9602082018261545f565b151590505b15614915576148e0602082018261511d565b6148ed602083018361545f565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104cf565b614922602082018261545f565b9050614931602083018361511d565b63ffffffff16111561494a576148e0602082018261511d565b60015b61495a602083018361545f565b90508110156112d057614970602083018361545f565b61497b6001846159b4565b81811061498a5761498a6154a4565b905060200201602081019061499f9190615444565b6001600160a01b03166149b5602084018461545f565b838181106149c5576149c56154a4565b90506020020160208101906149da9190615444565b6001600160a01b03161015614a0257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161494d565b5f6060826040015151603014614a335760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614a74988a986001989297929690959094909390929101615c15565b60405160208183030381529060405290505f5b84608001516020015151811015614ae657818560800151602001518281518110614ab357614ab36154a4565b6020026020010151604051602001614acc929190615ccf565b60408051601f198184030181529190529150600101614a87565b5060a0840151805160209182015151604051614b06938593929101615d05565b60405160208183030381529060405290505f5b8460a001516020015151811015614b7857818560a00151602001518281518110614b4557614b456154a4565b6020026020010151604051602001614b5e929190615ccf565b60408051601f198184030181529190529150600101614b19565b5060c0840151604051614b8f918391602001615d40565b6040516020818303038152906040529050600281604051614bb09190615655565b602060405180830381855afa158015614bcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614bee919061542d565b94909350915050565b614bff614377565b614c07614d95565b610d3681614d9d565b614c18614377565b6143c0614e85565b614c28614377565b5f80516020615db283398151915261ffff84161580614c4c575061271061ffff8516115b15614c7057604051635f12e6c360e11b815261ffff851660048201526024016104cf565b85871115614c945760405163222d164360e21b8152600481018890526024016104cf565b60ff83161580614ca75750600a60ff8416115b15614cca5760405163170db35960e31b815260ff841660048201526024016104cf565b95865560018601949094556002850180546001600160401b039490941669ffffffffffffffffffff1990941693909317600160401b61ffff93909316929092029190911767ffffffffffffffff60501b191660ff91909116600160501b02179055600390910180546001600160a01b0319166001600160a01b03909216919091179055565b6060611d3f83835f614e8d565b6040516001600160a01b0384811660248301528381166044830152606482018390526106e59186918216906323b872dd90608401613daa565b6143c0614377565b614da5614377565b80355f80516020615dd28339815191529081556014614dca6060840160408501615bbf565b60ff161180614de95750614de46060830160408401615bbf565b60ff16155b15614e1d57614dfe6060830160408401615bbf565b604051634a59bbff60e11b815260ff90911660048201526024016104cf565b614e2d6060830160408401615bbf565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614e5e60408301602084016151ea565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ace614377565b606081471015614eb25760405163cd78605960e01b81523060048201526024016104cf565b5f80856001600160a01b03168486604051614ecd9190615655565b5f6040518083038185875af1925050503d805f8114614f07576040519150601f19603f3d011682016040523d82523d5f602084013e614f0c565b606091505b5091509150614f1c868383614f26565b9695505050505050565b606082614f3b57614f3682614f82565b611d3f565b8151158015614f5257506001600160a01b0384163b155b15614f7b57604051639996b31560e01b81526001600160a01b03851660048201526024016104cf565b5080611d3f565b805115614f925780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614fb7906153d5565b5f825580601f10614fc6575050565b601f0160209004905f5260205f2090810190610d36919061501f565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115615033575f8155600101615020565b5090565b8015158114610d36575f80fd5b803563ffffffff81168114615057575f80fd5b919050565b5f805f6060848603121561506e575f80fd5b83359250602084013561508081615037565b915061508e60408501615044565b90509250925092565b5f602082840312156150a7575f80fd5b5035919050565b5f80604083850312156150bf575f80fd5b82356001600160401b038111156150d4575f80fd5b8301608081860312156150e5575f80fd5b91506150f360208401615044565b90509250929050565b5f806040838503121561510d575f80fd5b823591506150f360208401615044565b5f6020828403121561512d575f80fd5b611d3f82615044565b803561ffff81168114615057575f80fd5b80356001600160401b0381168114615057575f80fd5b5f805f8060808587031215615170575f80fd5b84356001600160401b03811115615185575f80fd5b850160a08188031215615196575f80fd5b93506151a460208601615136565b92506151b260408601615147565b9396929550929360600135925050565b5f80604083850312156151d3575f80fd5b6151dc83615044565b946020939093013593505050565b5f602082840312156151fa575f80fd5b611d3f82615147565b5f8060408385031215615214575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b6006811061524757615247615223565b9052565b5f5b8381101561526557818101518382015260200161524d565b50505f910152565b5f815180845261528481602086016020860161524b565b601f01601f19169290920160200192915050565b602081526152aa602082018351615237565b5f602083015160e060408401526152c561010084018261526d565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610d36575f80fd5b5f8082840361014081121561533f575f80fd5b6101208082121561534e575f80fd5b849350830135905061535f81615318565b809150509250929050565b5f806020838503121561537b575f80fd5b82356001600160401b0380821115615391575f80fd5b818501915085601f8301126153a4575f80fd5b8135818111156153b2575f80fd5b8660208285010111156153c3575f80fd5b60209290920196919550909350505050565b600181811c908216806153e957607f821691505b60208210810361540757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610c668284615237565b602081525f611d3f602083018461526d565b5f6020828403121561543d575f80fd5b5051919050565b5f60208284031215615454575f80fd5b8135611d3f81615318565b5f808335601e19843603018112615474575f80fd5b8301803591506001600160401b0382111561548d575f80fd5b6020019150600581901b36038213156136f5575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126154cc575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561550c5761550c6154d6565b60405290565b604080519081016001600160401b038111828210171561550c5761550c6154d6565b604051601f8201601f191681016001600160401b038111828210171561555c5761555c6154d6565b604052919050565b5f6001600160401b0382111561557c5761557c6154d6565b50601f01601f191660200190565b5f82601f830112615599575f80fd5b81356155ac6155a782615564565b615534565b8181528460208386010111156155c0575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156155ec575f80fd5b6155f46154ea565b82356001600160401b038082111561560a575f80fd5b6156163683870161558a565b8352602085013591508082111561562b575f80fd5b506156383682860161558a565b60208301525061564a60408401615147565b604082015292915050565b5f82516154cc81846020870161524b565b601f8211156104d857805f5260205f20601f840160051c8101602085101561568b5750805b601f840160051c820191505b8181101561166b575f8155600101615697565b81516001600160401b038111156156c3576156c36154d6565b6156d7816156d184546153d5565b84615666565b602080601f83116001811461570a575f84156156f35750858301515b5f19600386901b1c1916600185901b178555610e9d565b5f85815260208120601f198616915b8281101561573857888601518255948401946001909101908401615719565b508582101561575557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c6657610c66615765565b5f63ffffffff8083168181036157a4576157a4615765565b6001019392505050565b5f826157c857634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157e1576157e1615223565b91905290565b8082028115828204841417610c6657610c66615765565b5f60208083525f8454615810816153d5565b806020870152604060018084165f8114615831576001811461584d5761587a565b60ff19851660408a0152604084151560051b8a0101955061587a565b895f5260205f205f5b858110156158715781548b8201860152908301908801615856565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115611ea457611ea4615765565b6001600160401b03828116828216039080821115611ea457611ea4615765565b805161505781615037565b5f80604083850312156158f3575f80fd5b82516001600160401b0380821115615909575f80fd5b908401906060828703121561591c575f80fd5b6159246154ea565b8251815260208084015161593781615318565b8282015260408401518381111561594c575f80fd5b80850194505087601f850112615960575f80fd5b835192506159706155a784615564565b8381528882858701011115615983575f80fd5b6159928483830184880161524b565b806040840152508195506159a78188016158d7565b9450505050509250929050565b81810381811115610c6657610c66615765565b5f808335601e198436030181126159dc575f80fd5b8301803591506001600160401b038211156159f5575f80fd5b6020019150368190038213156136f5575f80fd5b5f8851615a1a818460208d0161524b565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b6001600160401b03818116838216028082169190828114615a9557615a95615765565b505092915050565b5f8235603e198336030181126154cc575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215615aef575f80fd5b615af7615512565b615b0083615044565b81526020808401356001600160401b0380821115615b1c575f80fd5b9085019036601f830112615b2e575f80fd5b813581811115615b4057615b406154d6565b8060051b9150615b51848301615534565b8181529183018401918481019036841115615b6a575f80fd5b938501935b83851015615b945784359250615b8483615318565b8282529385019390850190615b6f565b94860194909452509295945050505050565b5f60208284031215615bb6575f80fd5b611d3f82615136565b5f60208284031215615bcf575f80fd5b813560ff81168114611d3f575f80fd5b5f6001600160401b038083168181036157a4576157a4615765565b5f60208284031215615c0a575f80fd5b8151611d3f81615037565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651615c5b81602a850160208b0161524b565b865190830190615c7281602a840160208b0161524b565b60c087901b6001600160c01b031916602a9290910191820152615ca4603282018660e01b6001600160e01b0319169052565b615cbd603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615ce081846020880161524b565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f8451615d1681846020890161524b565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615d5181846020880161524b565b60c09390931b6001600160c01b031916919092019081526008019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d056e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + Bin: "0x608060405234801561000f575f80fd5b50604051615f70380380615f7083398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e238061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101f2575f3560e01c806376f7862111610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff614610444578063df93d8de14610464578063e4a63c401461046e578063f09969ae14610482578063fd7ac5e714610495575f80fd5b8063ba3a4b9714610402578063bc5fbfec14610415578063bee0a03f14610429578063c974d1b61461043c575f80fd5b80639e1bc4ef116100e45780639e1bc4ef146103a2578063a3a65e48146103b5578063afb98096146103c8578063b771b3bc146103dc575f80fd5b806376f78621146103615780638280a25a1461037457806393e245981461037c57806398f3e2b41461038f575f80fd5b80633a1cfff61161018a57806360305d621161015a57806360305d6214610317578063620658561461033457806366435abf14610347578063732214f81461035a575f80fd5b80633a1cfff6146102bd578063467ef06f146102d05780634bee0040146102e35780635297fae614610304575f80fd5b806320d91b7a116101c557806320d91b7a1461025057806325e1c776146102635780632e2194d81461027657806335455ded146102a1575f80fd5b80630118acc4146101f65780630322ed981461020b578063151d30d11461021e5780631ec447241461023d575b5f80fd5b610209610204366004615041565b6104a8565b005b61020961021936600461507c565b6104dd565b610226600a81565b60405160ff90911681526020015b60405180910390f35b61020961024b366004615041565b6106eb565b61020961025e366004615093565b6106f6565b6102096102713660046150e1565b610be2565b61028961028436600461507c565b610c56565b6040516001600160401b039091168152602001610234565b6102aa61271081565b60405161ffff9091168152602001610234565b6102096102cb366004615041565b610c6c565b6102096102de366004615102565b610c77565b6102f66102f1366004615142565b610d39565b604051908152602001610234565b6102096103123660046151a7565b610d6e565b61031f601481565b60405163ffffffff9091168152602001610234565b6102f66103423660046151cf565b610fd9565b61028961035536600461507c565b610ff2565b6102f65f81565b61020961036f366004615041565b611006565b610226603081565b61020961038a36600461507c565b611031565b61020961039d3660046151a7565b6110fc565b6102f66103b03660046151e8565b6112d4565b6102096103c3366004615102565b611300565b6102f65f80516020615d9783398151915281565b6103ea6005600160991b0181565b6040516001600160a01b039091168152602001610234565b61020961041036600461507c565b611489565b6102f65f80516020615db783398151915281565b61020961043736600461507c565b611672565b610226601481565b61045761045236600461507c565b6117af565b604051610234919061527d565b6102896202a30081565b6102f65f80516020615d7783398151915281565b610209610490366004615311565b6118fe565b6102f66104a336600461534f565b6119dd565b6104b3838383611a38565b6104d857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f80516020615df78339815191526020526040808220815160e0810190925280545f80516020615db783398151915293929190829060ff16600581111561052a5761052a615208565b600581111561053b5761053b615208565b815260200160018201805461054f906153ba565b80601f016020809104026020016040519081016040528092919081815260200182805461057b906153ba565b80156105c65780601f1061059d576101008083540402835291602001916105c6565b820191905f5260205f20905b8154815290600101906020018083116105a957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561063157610631615208565b14610664575f8381526007830160205260409081902054905163170cc93360e21b81526104cf9160ff16906004016153f2565b6005600160991b016001600160a01b031663ee5b48eb6106898584606001515f611d46565b6040518263ffffffff1660e01b81526004016106a59190615400565b6020604051808303815f875af11580156106c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106e59190615412565b50505050565b6106e5838383611a38565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615db78339815191529060ff161561074857604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561078b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107af9190615412565b8360200135146107d8576040516372b0a7e760e11b8152602084013560048201526024016104cf565b306107e96060850160408601615429565b6001600160a01b03161461082c576108076060840160408501615429565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104cf565b5f61083a6060850185615444565b905090505f805b828163ffffffff161015610b22575f61085d6060880188615444565b8363ffffffff1681811061087357610873615489565b9050602002810190610885919061549d565b61088e906155c1565b80516040519192505f9160088801916108a69161563a565b908152602001604051809103902054146108d657805160405163a41f772f60e01b81526104cf9190600401615400565b5f6002885f01358460405160200161090592919091825260e01b6001600160e01b031916602082015260240190565b60408051601f198184030181529082905261091f9161563a565b602060405180830381855afa15801561093a573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061095d9190615412565b90508086600801835f0151604051610975919061563a565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff191660018360058111156109f7576109f7615208565b021790555060208201516001820190610a10908261568f565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff191692841692909217909155830151610ab591168561575e565b8251604051919550610ac69161563a565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1b90615771565b9050610841565b50600483018190555f610b40610b3786611d95565b60400151611eab565b90505f610b4c87612038565b90505f600282604051610b5f919061563a565b602060405180830381855afa158015610b7a573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b9d9190615412565b9050828114610bc957604051631872fc8d60e01b815260048101829052602481018490526044016104cf565b5050506009909201805460ff1916600117905550505050565b610beb82612212565b610c0b576040516330efa98b60e01b8152600481018390526024016104cf565b5f610c15836117af565b5190506002816005811115610c2c57610c2c615208565b14610c4c578060405163170cc93360e21b81526004016104cf91906153f2565b6106e5838361224d565b5f610c6664e8d4a5100083615793565b92915050565b6106e58383836124c7565b610c7f6126b3565b5f80516020615d978339815191525f80610c98846126ea565b91509150610ca582612212565b610cb157505050610d20565b5f82815260048085016020526040909120546001600160a01b03169082516005811115610ce057610ce0615208565b03610d05575f83815260078501602052604081208054919055610d038282612a28565b505b610d1b81610d168460400151610fd9565b612a9e565b505050505b610d3660015f80516020615dd783398151915255565b50565b5f610d426126b3565b610d4e85858585612ad4565b9050610d6660015f80516020615dd783398151915255565b949350505050565b5f8181525f80516020615d578339815191526020526040808220815160e0810190925280545f80516020615d9783398151915293929190829060ff166003811115610dbb57610dbb615208565b6003811115610dcc57610dcc615208565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610e42826117af565b9050600183516003811115610e5957610e59615208565b14610e7a578251604051633b0d540d60e21b81526104cf91906004016157b2565b600481516005811115610e8f57610e8f615208565b03610ea557610e9d85612cad565b505050505050565b5f80610ebc610eb389611d95565b60400151612e94565b5091509150818414610ee957846040015160405163089938b360e11b81526004016104cf91815260200190565b806001600160401b031683606001516001600160401b03161080610f225750806001600160401b03168560a001516001600160401b0316115b15610f4b57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cf565b5f878152600587016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610c666001600160401b03831664e8d4a510006157cc565b5f610ffc826117af565b6080015192915050565b6110118383836124c7565b6104d857604051635bff683f60e11b8152600481018490526024016104cf565b5f80516020615d978339815191525f611049836117af565b519050600481600581111561106057611060615208565b14611080578060405163170cc93360e21b81526004016104cf91906153f2565b5f8381526004830160205260409020546001600160a01b031633146110c657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104cf565b5f838152600783016020908152604080832080549084905560048601909252909120546106e5906001600160a01b031682612a28565b6111046126b3565b5f8181525f80516020615d578339815191526020526040808220815160e0810190925280545f80516020615d9783398151915293929190829060ff16600381111561115157611151615208565b600381111561116257611162615208565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156111db576111db615208565b146111fc578051604051633b0d540d60e21b81526104cf91906004016157b2565b600461120b82604001516117af565b51600581111561121d5761121d615208565b146112af575f61122c85611d95565b90505f8061123d8360400151612e94565b5091509150818460400151146112695760405163089938b360e11b8152600481018390526024016104cf565b806001600160401b03168460c001516001600160401b031611156112ab57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104cf565b5050505b6112b883612cad565b50506112d060015f80516020615dd783398151915255565b5050565b5f6112dd6126b3565b6112e88333846130ea565b9050610c6660015f80516020615dd783398151915255565b5f80516020615db78339815191525f8061132561131c85611d95565b604001516133c2565b915091508061134b57604051632d07135360e01b815281151560048201526024016104cf565b5f82815260068401602052604090208054611365906153ba565b90505f036113895760405163089938b360e11b8152600481018390526024016104cf565b60015f83815260078501602052604090205460ff1660058111156113af576113af615208565b146113e2575f8281526007840160205260409081902054905163170cc93360e21b81526104cf9160ff16906004016153f2565b5f82815260068401602052604081206113fa91614f90565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f80516020615d578339815191526020526040808220815160e0810190925280545f80516020615d9783398151915293929190829060ff1660038111156114d6576114d6615208565b60038111156114e7576114e7615208565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561156057611560615208565b14158015611581575060038151600381111561157e5761157e615208565b14155b156115a2578051604051633b0d540d60e21b81526104cf91906004016157b2565b5f6115b082604001516117af565b905080606001516001600160401b03165f036115e2576040516339b894f960e21b8152600481018590526024016104cf565b6005600160991b016001600160a01b031663ee5b48eb61160f846040015184606001518560800151611d46565b6040518263ffffffff1660e01b815260040161162b9190615400565b6020604051808303815f875af1158015611647573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061166b9190615412565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615db783398151915291906116b9906153ba565b90505f036116dd5760405163089938b360e11b8152600481018390526024016104cf565b60015f83815260078301602052604090205460ff16600581111561170357611703615208565b14611736575f8281526007820160205260409081902054905163170cc93360e21b81526104cf9160ff16906004016153f2565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb9161176f91906004016157e3565b6020604051808303815f875af115801561178b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104d89190615412565b6117b7614fc7565b5f8281525f80516020615df7833981519152602052604090819020815160e0810190925280545f80516020615db7833981519152929190829060ff16600581111561180457611804615208565b600581111561181557611815615208565b8152602001600182018054611829906153ba565b80601f0160208091040260200160405190810160405280929190818152602001828054611855906153ba565b80156118a05780601f10611877576101008083540402835291602001916118a0565b820191905f5260205f20905b81548152906001019060200180831161188357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611947575080546001600160401b03808416911610155b156119655760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611990848461357e565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f80516020615db7833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611a20908690869061586d565b90815260200160405180910390205491505092915050565b5f8381525f80516020615d578339815191526020526040808220815160e0810190925280545f80516020615d978339815191529284929091829060ff166003811115611a8657611a86615208565b6003811115611a9757611a97615208565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611b0d826117af565b9050600283516003811115611b2457611b24615208565b14611b45578251604051633b0d540d60e21b81526104cf91906004016157b2565b60208301516001600160a01b03163314611be8575f828152600485016020526040902054336001600160a01b0390911603611be2575f82815260048501602052604090205460a0820151611ba991600160b01b90046001600160401b03169061587c565b6001600160401b0316421015611bdd5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104cf565b611be8565b336110a1565b600281516005811115611bfd57611bfd615208565b03611cda578615611c1457611c12828761224d565b505b5f8881526005850160205260409020805460ff1916600317905560608301516080820151611c4d918491611c48919061589c565b613598565b505f898152600586016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611c8e846136ef565b5f8a81526006870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a315159450611d3f9350505050565b600481516005811115611cef57611cef615208565b03611d2357611cfd836136ef565b5f898152600686016020526040902055611d1688612cad565b6001945050505050611d3f565b805160405163170cc93360e21b81526104cf91906004016153f2565b9392505050565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611df9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e2091908101906158c7565b9150915080611e4257604051636b2f19e960e01b815260040160405180910390fd5b815115611e68578151604051636ba589a560e01b815260048101919091526024016104cf565b60208201516001600160a01b031615611ea4576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104cf565b5092915050565b5f8151602614611ee057815160405163cc92daa160e01b815263ffffffff9091166004820152602660248201526044016104cf565b5f805b6002811015611f2f57611ef7816001615999565b611f029060086157cc565b61ffff16848281518110611f1857611f18615489565b016020015160f81c901b9190911790600101611ee3565b5061ffff811615611f595760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015611fb457611f70816003615999565b611f7b9060086157cc565b63ffffffff1685611f8d83600261575e565b81518110611f9d57611f9d615489565b016020015160f81c901b9190911790600101611f5c565b5063ffffffff811615611fda57604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561202f57611ff181601f615999565b611ffc9060086157cc565b8661200883600661575e565b8151811061201857612018615489565b016020015160f81c901b9190911790600101611fdd565b50949350505050565b60605f8083356020850135601461205487870160408901615429565b6120616060890189615444565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b6120e76060850185615444565b9050811015611ea457816120fe6060860186615444565b8381811061210e5761210e615489565b9050602002810190612120919061549d565b61212a90806159ac565b90506121396060870187615444565b8481811061214957612149615489565b905060200281019061215b919061549d565b61216590806159ac565b6121726060890189615444565b8681811061218257612182615489565b9050602002810190612194919061549d565b6121a29060208101906159ac565b6121af60608b018b615444565b888181106121bf576121bf615489565b90506020028101906121d1919061549d565b6121e29060608101906040016151cf565b6040516020016121f897969594939291906159ee565b60408051601f1981840301815291905291506001016120da565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612298573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122bf91908101906158c7565b91509150806122e157604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612324573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123489190615412565b82511461236e578151604051636ba589a560e01b815260048101919091526024016104cf565b60208201516001600160a01b0316156123aa576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104cf565b5f806123b9846040015161388d565b915091508187146123e05760405163089938b360e11b8152600481018890526024016104cf565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020600101545f80516020615d97833981519152906001600160401b03908116908316111561249d575f888152600482016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26124bc565b5f8881526004820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f80516020615d97833981519152816124e086613a7e565b90506124eb86612212565b6124fa57600192505050611d3f565b5f8681526004830160205260409020546001600160a01b0316331461251f57336110a1565b5f86815260048301602052604090205460a082015161254e91600160b01b90046001600160401b03169061587c565b6001600160401b03168160c001516001600160401b031610156125955760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104cf565b5f85156125ad576125a6878661224d565b90506125cb565b505f8681526004830160205260409020600101546001600160401b03165b600383015460408301515f916001600160a01b031690634f22429f906125f090610fd9565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612659573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267d9190615412565b905080846007015f8a81526020019081526020015f205f8282546126a1919061575e565b90915550501515979650505050505050565b5f80516020615dd78339815191528054600119016126e457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6126f3614fc7565b5f80516020615db78339815191525f8061270f61131c87611d95565b91509150801561273657604051632d07135360e01b815281151560048201526024016104cf565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561276757612767615208565b600581111561277857612778615208565b815260200160018201805461278c906153ba565b80601f01602080910402602001604051908101604052809291908181526020018280546127b8906153ba565b80156128035780601f106127da57610100808354040283529160200191612803565b820191905f5260205f20905b8154815290600101906020018083116127e657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561286e5761286e615208565b1415801561288f575060018151600581111561288c5761288c615208565b14155b156128b057805160405163170cc93360e21b81526104cf91906004016153f2565b6003815160058111156128c5576128c5615208565b036128d357600481526128d8565b600581525b8360080181602001516040516128ee919061563a565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561293257612932615208565b02179055506020820151600182019061294b908261568f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055805160058111156129f1576129f1615208565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f80516020615d7783398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612a83575f80fd5b505af1158015612a95573d5f803e3d5ffd5b50505050505050565b5f80516020615d77833981519152546112d0906001600160a01b03168383613d62565b60015f80516020615dd783398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615d9783398151915290600160401b900461ffff9081169086161080612b28575061271061ffff8616115b15612b4c57604051635f12e6c360e11b815261ffff861660048201526024016104cf565b60028101546001600160401b039081169085161015612b88576040516202a06d60e11b81526001600160401b03851660048201526024016104cf565b8054831080612b9a5750806001015483115b15612bbb5760405163222d164360e21b8152600481018490526024016104cf565b5f612bc584613dc1565b90505f612bd182610c56565b90505f612bde8983613de4565b90506040518060800160405280612bf23390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526004909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b03199094169516949094179190911798909816178155910151600190910180549190951667ffffffffffffffff19909116179093555090915050949350505050565b5f8181525f80516020615d578339815191526020526040808220815160e0810190925280545f80516020615d9783398151915293929190829060ff166003811115612cfa57612cfa615208565b6003811115612d0b57612d0b615208565b8152815461010090046001600160a01b03166020808301919091526001808401546040808501919091526002948501546001600160401b038082166060870152600160401b820481166080870152600160801b8204811660a0870152600160c01b9091041660c090940193909352848301515f89815260058901845284812080546001600160a81b03191681559283018190559190940181905560068701909152908120805490829055929350909190808215612e39575f84815260048701602052604090205461271090612deb90600160a01b900461ffff16856157cc565b612df59190615793565b915081866007015f8681526020019081526020015f205f828254612e19919061575e565b90915550612e2990508284615999565b9050612e39856020015182612a28565b612e4e8560200151610d168760600151610fd9565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612ecb57835160405163cc92daa160e01b815263ffffffff9091166004820152603660248201526044016104cf565b5f805b6002811015612f1a57612ee2816001615999565b612eed9060086157cc565b61ffff16868281518110612f0357612f03615489565b016020015160f81c901b9190911790600101612ece565b5061ffff811615612f445760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b6004811015612f9f57612f5b816003615999565b612f669060086157cc565b63ffffffff1687612f7883600261575e565b81518110612f8857612f88615489565b016020015160f81c901b9190911790600101612f47565b5063ffffffff8116600314612fc757604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561301c57612fde81601f615999565b612fe99060086157cc565b88612ff583600661575e565b8151811061300557613005615489565b016020015160f81c901b9190911790600101612fca565b505f805b600881101561307b57613034816007615999565b61303f9060086157cc565b6001600160401b03168961305483602661575e565b8151811061306457613064615489565b016020015160f81c901b9190911790600101613020565b505f805b60088110156130da57613093816007615999565b61309e9060086157cc565b6001600160401b03168a6130b383602e61575e565b815181106130c3576130c3615489565b016020015160f81c901b919091179060010161307f565b5091989097509095509350505050565b5f5f80516020615d978339815191528161310661028485613dc1565b90505f613112876117af565b905061311d87612212565b61313d576040516330efa98b60e01b8152600481018890526024016104cf565b60028151600581111561315257613152615208565b1461317357805160405163170cc93360e21b81526104cf91906004016153f2565b5f828260800151613184919061587c565b905083600201600a9054906101000a90046001600160401b031682604001516131ad9190615a57565b6001600160401b0316816001600160401b031611156131ea57604051636d51fe0560e11b81526001600160401b03821660048201526024016104cf565b5f806131f68a84613598565b915091505f8a8360405160200161322492919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260058b01909152902081518154829060ff191660018360038111156132b7576132b7615208565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f8082516027146133f857825160405163cc92daa160e01b815263ffffffff9091166004820152602760248201526044016104cf565b5f805b60028110156134475761340f816001615999565b61341a9060086157cc565b61ffff1685828151811061343057613430615489565b016020015160f81c901b91909117906001016133fb565b5061ffff8116156134715760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b60048110156134cc57613488816003615999565b6134939060086157cc565b63ffffffff16866134a583600261575e565b815181106134b5576134b5615489565b016020015160f81c901b9190911790600101613474565b5063ffffffff81166002146134f457604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156135495761350b81601f615999565b6135169060086157cc565b8761352283600661575e565b8151811061353257613532615489565b016020015160f81c901b91909117906001016134f7565b505f8660268151811061355e5761355e615489565b016020015191976001600160f81b03199092161515965090945050505050565b61358661435c565b61358f826143a7565b6112d081614415565b5f8281525f80516020615df7833981519152602052604081206002015481905f80516020615db783398151915290600160801b90046001600160401b03166135e0858261447d565b5f6135ea87614657565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb61363a8a858b611d46565b6040518263ffffffff1660e01b81526004016136569190615400565b6020604051808303815f875af1158015613672573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136969190615412565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f80516020615d9783398151915290505f61370f84604001516117af565b90505f60038251600581111561372757613727615208565b1480613745575060048251600581111561374357613743615208565b145b15613755575060c0810151613792565b60028251600581111561376a5761376a615208565b03613776575042613792565b815160405163170cc93360e21b81526104cf91906004016153f2565b84608001516001600160401b0316816001600160401b0316116137b957505f949350505050565b600383015460608601516001600160a01b0390911690634f22429f906137de90610fd9565b60a085015160808901516040808b01515f90815260048a81016020529082902060010154915160e087901b6001600160e01b0319168152908101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613860573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138849190615412565b95945050505050565b5f808251602e146138c357825160405163cc92daa160e01b815263ffffffff9091166004820152602e60248201526044016104cf565b5f805b6002811015613912576138da816001615999565b6138e59060086157cc565b61ffff168582815181106138fb576138fb615489565b016020015160f81c901b91909117906001016138c6565b5061ffff81161561393c5760405163407b587360e01b815261ffff821660048201526024016104cf565b5f805b600481101561399757613953816003615999565b61395e9060086157cc565b63ffffffff168661397083600261575e565b8151811061398057613980615489565b016020015160f81c901b919091179060010161393f565b5063ffffffff8116156139bd57604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613a12576139d481601f615999565b6139df9060086157cc565b876139eb83600661575e565b815181106139fb576139fb615489565b016020015160f81c901b91909117906001016139c0565b505f805b6008811015613a7157613a2a816007615999565b613a359060086157cc565b6001600160401b031688613a4a83602661575e565b81518110613a5a57613a5a615489565b016020015160f81c901b9190911790600101613a16565b5090969095509350505050565b613a86614fc7565b5f8281525f80516020615df78339815191526020526040808220815160e0810190925280545f80516020615db783398151915293929190829060ff166005811115613ad357613ad3615208565b6005811115613ae457613ae4615208565b8152602001600182018054613af8906153ba565b80601f0160208091040260200160405190810160405280929190818152602001828054613b24906153ba565b8015613b6f5780601f10613b4657610100808354040283529160200191613b6f565b820191905f5260205f20905b815481529060010190602001808311613b5257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613bdd57613bdd615208565b14613c10575f8481526007830160205260409081902054905163170cc93360e21b81526104cf9160ff16906004016153f2565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613c5457613c54615208565b021790555060208201516001820190613c6d908261568f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613d0b8582613598565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104d891859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506146cc565b5f610c66825f80516020615d77833981519152546001600160a01b03169061472d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e2857604051637fab81e560e01b815260040160405180910390fd5b5f80516020615db783398151915242613e4760608601604087016151cf565b6001600160401b0316111580613e815750613e656202a3004261575e565b613e7560608601604087016151cf565b6001600160401b031610155b15613ebb57613e9660608501604086016151cf565b604051635879da1360e11b81526001600160401b0390911660048201526024016104cf565b613ed0613ecb6060860186615a82565b614886565b613ee0613ecb6080860186615a82565b6030613eef60208601866159ac565b905014613f2157613f0360208501856159ac565b6040516326475b2f60e11b81526104cf925060040190815260200190565b613f2b84806159ac565b90505f03613f5857613f3d84806159ac565b604051633e08a12560e11b81526004016104cf929190615a96565b5f60088201613f6786806159ac565b604051613f7592919061586d565b90815260200160405180910390205414613fae57613f9384806159ac565b60405163a41f772f60e01b81526004016104cf929190615a96565b613fb8835f61447d565b6040805160e08101909152815481525f9081906140c49060208101613fdd89806159ac565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614025908a018a6159ac565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161406e60608a0160408b016151cf565b6001600160401b0316815260200161408960608a018a615a82565b61409290615ac4565b81526020016140a460808a018a615a82565b6140ad90615ac4565b8152602001876001600160401b03168152506149ef565b5f828152600686016020526040902091935091506140e2828261568f565b5081600884016140f288806159ac565b60405161410092919061586d565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061413c908590600401615400565b6020604051808303815f875af1158015614158573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061417c9190615412565b6040805160e08101909152909150806001815260200161419c89806159ac565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561422b5761422b615208565b021790555060208201516001820190614244908261568f565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055806142e288806159ac565b6040516142f092919061586d565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061432e91906151cf565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166143a557604051631afcd79f60e31b815260040160405180910390fd5b565b6143af61435c565b6143b881614bdc565b6143c0614bf5565b610d36606082013560808301356143dd60c0850160a086016151cf565b6143ed60e0860160c08701615b8b565b6143fe610100870160e08801615ba4565b61441061012088016101008901615429565b614c05565b61441d61435c565b5f80516020615d778339815191526001600160a01b03821661445d57604051637330680360e01b81526001600160a01b03831660048201526024016104cf565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615db78339815191525f6001600160401b0380841690851611156144b1576144aa838561589c565b90506144be565b6144bb848461589c565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061452057506001840154815161451c916001600160401b03169061575e565b8210155b15614546576001600160401b038316606082015281815260408101516020820152614565565b8281606001818151614558919061587c565b6001600160401b03169052505b6060810151614575906064615a57565b602082015160018601546001600160401b0392909216916145a09190600160401b900460ff166157cc565b10156145d057606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104cf565b856001600160401b0316816040018181516145eb919061575e565b9052506040810180516001600160401b038716919061460b908390615999565b905250805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615df78339815191526020526040812060020180545f80516020615db783398151915291906008906146a190600160401b90046001600160401b0316615bc4565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6146e06001600160a01b03841683614d34565b905080515f141580156147045750808060200190518101906147029190615bdf565b155b156104d857604051635274afe760e01b81526001600160a01b03841660048201526024016104cf565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa158015614773573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147979190615412565b90506147ae6001600160a01b038516333086614d41565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa1580156147f2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148169190615412565b905081811161487c5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104cf565b6138848282615999565b6148936020820182615102565b63ffffffff161580156148b357506148ae6020820182615444565b151590505b156148fa576148c56020820182615102565b6148d26020830183615444565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104cf565b6149076020820182615444565b90506149166020830183615102565b63ffffffff16111561492f576148c56020820182615102565b60015b61493f6020830183615444565b90508110156112d0576149556020830183615444565b614960600184615999565b81811061496f5761496f615489565b90506020020160208101906149849190615429565b6001600160a01b031661499a6020840184615444565b838181106149aa576149aa615489565b90506020020160208101906149bf9190615429565b6001600160a01b031610156149e757604051630dbc8d5f60e31b815260040160405180910390fd5b600101614932565b5f6060826040015151603014614a185760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614a59988a986001989297929690959094909390929101615bfa565b60405160208183030381529060405290505f5b84608001516020015151811015614acb57818560800151602001518281518110614a9857614a98615489565b6020026020010151604051602001614ab1929190615cb4565b60408051601f198184030181529190529150600101614a6c565b5060a0840151805160209182015151604051614aeb938593929101615cea565b60405160208183030381529060405290505f5b8460a001516020015151811015614b5d57818560a00151602001518281518110614b2a57614b2a615489565b6020026020010151604051602001614b43929190615cb4565b60408051601f198184030181529190529150600101614afe565b5060c0840151604051614b74918391602001615d25565b6040516020818303038152906040529050600281604051614b95919061563a565b602060405180830381855afa158015614bb0573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614bd39190615412565b94909350915050565b614be461435c565b614bec614d7a565b610d3681614d82565b614bfd61435c565b6143a5614e6a565b614c0d61435c565b5f80516020615d9783398151915261ffff84161580614c31575061271061ffff8516115b15614c5557604051635f12e6c360e11b815261ffff851660048201526024016104cf565b85871115614c795760405163222d164360e21b8152600481018890526024016104cf565b60ff83161580614c8c5750600a60ff8416115b15614caf5760405163170db35960e31b815260ff841660048201526024016104cf565b95865560018601949094556002850180546001600160401b039490941669ffffffffffffffffffff1990941693909317600160401b61ffff93909316929092029190911767ffffffffffffffff60501b191660ff91909116600160501b02179055600390910180546001600160a01b0319166001600160a01b03909216919091179055565b6060611d3f83835f614e72565b6040516001600160a01b0384811660248301528381166044830152606482018390526106e59186918216906323b872dd90608401613d8f565b6143a561435c565b614d8a61435c565b80355f80516020615db78339815191529081556014614daf6060840160408501615ba4565b60ff161180614dce5750614dc96060830160408401615ba4565b60ff16155b15614e0257614de36060830160408401615ba4565b604051634a59bbff60e11b815260ff90911660048201526024016104cf565b614e126060830160408401615ba4565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614e4360408301602084016151cf565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ac161435c565b606081471015614e975760405163cd78605960e01b81523060048201526024016104cf565b5f80856001600160a01b03168486604051614eb2919061563a565b5f6040518083038185875af1925050503d805f8114614eec576040519150601f19603f3d011682016040523d82523d5f602084013e614ef1565b606091505b5091509150614f01868383614f0b565b9695505050505050565b606082614f2057614f1b82614f67565b611d3f565b8151158015614f3757506001600160a01b0384163b155b15614f6057604051639996b31560e01b81526001600160a01b03851660048201526024016104cf565b5080611d3f565b805115614f775780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614f9c906153ba565b5f825580601f10614fab575050565b601f0160209004905f5260205f2090810190610d369190615004565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115615018575f8155600101615005565b5090565b8015158114610d36575f80fd5b803563ffffffff8116811461503c575f80fd5b919050565b5f805f60608486031215615053575f80fd5b8335925060208401356150658161501c565b915061507360408501615029565b90509250925092565b5f6020828403121561508c575f80fd5b5035919050565b5f80604083850312156150a4575f80fd5b82356001600160401b038111156150b9575f80fd5b8301608081860312156150ca575f80fd5b91506150d860208401615029565b90509250929050565b5f80604083850312156150f2575f80fd5b823591506150d860208401615029565b5f60208284031215615112575f80fd5b611d3f82615029565b803561ffff8116811461503c575f80fd5b80356001600160401b038116811461503c575f80fd5b5f805f8060808587031215615155575f80fd5b84356001600160401b0381111561516a575f80fd5b850160a0818803121561517b575f80fd5b93506151896020860161511b565b92506151976040860161512c565b9396929550929360600135925050565b5f80604083850312156151b8575f80fd5b6151c183615029565b946020939093013593505050565b5f602082840312156151df575f80fd5b611d3f8261512c565b5f80604083850312156151f9575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b6006811061522c5761522c615208565b9052565b5f5b8381101561524a578181015183820152602001615232565b50505f910152565b5f8151808452615269816020860160208601615230565b601f01601f19169290920160200192915050565b6020815261528f60208201835161521c565b5f602083015160e060408401526152aa610100840182615252565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610d36575f80fd5b5f80828403610140811215615324575f80fd5b61012080821215615333575f80fd5b8493508301359050615344816152fd565b809150509250929050565b5f8060208385031215615360575f80fd5b82356001600160401b0380821115615376575f80fd5b818501915085601f830112615389575f80fd5b813581811115615397575f80fd5b8660208285010111156153a8575f80fd5b60209290920196919550909350505050565b600181811c908216806153ce57607f821691505b6020821081036153ec57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610c66828461521c565b602081525f611d3f6020830184615252565b5f60208284031215615422575f80fd5b5051919050565b5f60208284031215615439575f80fd5b8135611d3f816152fd565b5f808335601e19843603018112615459575f80fd5b8301803591506001600160401b03821115615472575f80fd5b6020019150600581901b36038213156136e8575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126154b1575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156154f1576154f16154bb565b60405290565b604080519081016001600160401b03811182821017156154f1576154f16154bb565b604051601f8201601f191681016001600160401b0381118282101715615541576155416154bb565b604052919050565b5f6001600160401b03821115615561576155616154bb565b50601f01601f191660200190565b5f82601f83011261557e575f80fd5b813561559161558c82615549565b615519565b8181528460208386010111156155a5575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156155d1575f80fd5b6155d96154cf565b82356001600160401b03808211156155ef575f80fd5b6155fb3683870161556f565b83526020850135915080821115615610575f80fd5b5061561d3682860161556f565b60208301525061562f6040840161512c565b604082015292915050565b5f82516154b1818460208701615230565b601f8211156104d857805f5260205f20601f840160051c810160208510156156705750805b601f840160051c820191505b8181101561166b575f815560010161567c565b81516001600160401b038111156156a8576156a86154bb565b6156bc816156b684546153ba565b8461564b565b602080601f8311600181146156ef575f84156156d85750858301515b5f19600386901b1c1916600185901b178555610e9d565b5f85815260208120601f198616915b8281101561571d578886015182559484019460019091019084016156fe565b508582101561573a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610c6657610c6661574a565b5f63ffffffff8083168181036157895761578961574a565b6001019392505050565b5f826157ad57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157c6576157c6615208565b91905290565b8082028115828204841417610c6657610c6661574a565b5f60208083525f84546157f5816153ba565b806020870152604060018084165f811461581657600181146158325761585f565b60ff19851660408a0152604084151560051b8a0101955061585f565b895f5260205f205f5b858110156158565781548b820186015290830190880161583b565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115611ea457611ea461574a565b6001600160401b03828116828216039080821115611ea457611ea461574a565b805161503c8161501c565b5f80604083850312156158d8575f80fd5b82516001600160401b03808211156158ee575f80fd5b9084019060608287031215615901575f80fd5b6159096154cf565b8251815260208084015161591c816152fd565b82820152604084015183811115615931575f80fd5b80850194505087601f850112615945575f80fd5b8351925061595561558c84615549565b8381528882858701011115615968575f80fd5b61597784838301848801615230565b8060408401525081955061598c8188016158bc565b9450505050509250929050565b81810381811115610c6657610c6661574a565b5f808335601e198436030181126159c1575f80fd5b8301803591506001600160401b038211156159da575f80fd5b6020019150368190038213156136e8575f80fd5b5f88516159ff818460208d01615230565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b6001600160401b03818116838216028082169190828114615a7a57615a7a61574a565b505092915050565b5f8235603e198336030181126154b1575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215615ad4575f80fd5b615adc6154f7565b615ae583615029565b81526020808401356001600160401b0380821115615b01575f80fd5b9085019036601f830112615b13575f80fd5b813581811115615b2557615b256154bb565b8060051b9150615b36848301615519565b8181529183018401918481019036841115615b4f575f80fd5b938501935b83851015615b795784359250615b69836152fd565b8282529385019390850190615b54565b94860194909452509295945050505050565b5f60208284031215615b9b575f80fd5b611d3f8261511b565b5f60208284031215615bb4575f80fd5b813560ff81168114611d3f575f80fd5b5f6001600160401b038083168181036157895761578961574a565b5f60208284031215615bef575f80fd5b8151611d3f8161501c565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b166026840152508651615c4081602a850160208b01615230565b865190830190615c5781602a840160208b01615230565b60c087901b6001600160c01b031916602a9290910191820152615c89603282018660e01b6001600160e01b0319169052565b615ca2603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615cc5818460208801615230565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f8451615cfb818460208901615230565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615d36818460208801615230565b60c09390931b6001600160c01b031916919092019081526008019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d056e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go b/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go index d343cda87..bffaf0a66 100644 --- a/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go +++ b/abi-bindings/go/validator-manager/ExampleRewardCalculator/ExampleRewardCalculator.go @@ -31,8 +31,8 @@ var ( // ExampleRewardCalculatorMetaData contains all meta data concerning the ExampleRewardCalculator contract. var ExampleRewardCalculatorMetaData = &bind.MetaData{ - ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"rewardBasisPoints_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"SECONDS_IN_YEAR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPTIME_REWARDS_THRESHOLD_PERCENTAGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateReward\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"validatorStartTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakingStartTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakingEndTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"uptimeSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rewardBasisPoints\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"}]", - Bin: "0x60a0604052348015600e575f80fd5b50604051610357380380610357833981016040819052602b91603b565b6001600160401b03166080526066565b5f60208284031215604a575f80fd5b81516001600160401b0381168114605f575f80fd5b9392505050565b6080516102d36100845f395f8181609e015261013a01526102d35ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80635dcc93911461004e578063778c06b51461006c578063afba878a1461007f578063bb65b24214610099575b5f80fd5b6100596301e1338081565b6040519081526020015b60405180910390f35b61005961007a3660046101b6565b6100d9565b610087605081565b60405160ff9091168152602001610063565b6100c07f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff9091168152602001610063565b5f60506100e68887610236565b6100f0919061025e565b67ffffffffffffffff1661010585606461025e565b67ffffffffffffffff16101561011c57505f61018f565b6127106301e1338061012e8888610236565b67ffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168b61016e919061028a565b610178919061028a565b61018291906102a7565b61018c91906102a7565b90505b979650505050505050565b803567ffffffffffffffff811681146101b1575f80fd5b919050565b5f805f805f805f60e0888a0312156101cc575f80fd5b873596506101dc6020890161019a565b95506101ea6040890161019a565b94506101f86060890161019a565b93506102066080890161019a565b925060a0880135915060c0880135905092959891949750929550565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff82811682821603908082111561025757610257610222565b5092915050565b67ffffffffffffffff81811683821602808216919082811461028257610282610222565b505092915050565b80820281158282048414176102a1576102a1610222565b92915050565b5f826102c157634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000819000a", + ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"rewardBasisPoints_\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"SECONDS_IN_YEAR\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"UPTIME_REWARDS_THRESHOLD_PERCENTAGE\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"calculateReward\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"validatorStartTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakingStartTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"stakingEndTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"uptimeSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"rewardBasisPoints\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"}]", + Bin: "0x60a0604052348015600e575f80fd5b50604051610343380380610343833981016040819052602b91603b565b6001600160401b03166080526066565b5f60208284031215604a575f80fd5b81516001600160401b0381168114605f575f80fd5b9392505050565b6080516102bf6100845f395f8181609e015261013a01526102bf5ff3fe608060405234801561000f575f80fd5b506004361061004a575f3560e01c80634f22429f1461004e5780635dcc939114610074578063afba878a1461007f578063bb65b24214610099575b5f80fd5b61006161005c3660046101b4565b6100d9565b6040519081526020015b60405180910390f35b6100616301e1338081565b610087605081565b60405160ff909116815260200161006b565b6100c07f000000000000000000000000000000000000000000000000000000000000000081565b60405167ffffffffffffffff909116815260200161006b565b5f60506100e68685610222565b6100f0919061024a565b67ffffffffffffffff1661010583606461024a565b67ffffffffffffffff16101561011c57505f61018f565b6127106301e1338061012e8686610222565b67ffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168961016e9190610276565b6101789190610276565b6101829190610293565b61018c9190610293565b90505b95945050505050565b803567ffffffffffffffff811681146101af575f80fd5b919050565b5f805f805f60a086880312156101c8575f80fd5b853594506101d860208701610198565b93506101e660408701610198565b92506101f460608701610198565b915061020260808701610198565b90509295509295909350565b634e487b7160e01b5f52601160045260245ffd5b67ffffffffffffffff8281168282160390808211156102435761024361020e565b5092915050565b67ffffffffffffffff81811683821602808216919082811461026e5761026e61020e565b505092915050565b808202811582820484141761028d5761028d61020e565b92915050565b5f826102ad57634e487b7160e01b5f52601260045260245ffd5b50049056fea164736f6c6343000819000a", } // ExampleRewardCalculatorABI is the input ABI used to generate the binding from. @@ -264,12 +264,12 @@ func (_ExampleRewardCalculator *ExampleRewardCalculatorCallerSession) UPTIMEREWA return _ExampleRewardCalculator.Contract.UPTIMEREWARDSTHRESHOLDPERCENTAGE(&_ExampleRewardCalculator.CallOpts) } -// CalculateReward is a free data retrieval call binding the contract method 0x778c06b5. +// CalculateReward is a free data retrieval call binding the contract method 0x4f22429f. // -// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds, uint256 , uint256 ) view returns(uint256) -func (_ExampleRewardCalculator *ExampleRewardCalculatorCaller) CalculateReward(opts *bind.CallOpts, stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64, arg5 *big.Int, arg6 *big.Int) (*big.Int, error) { +// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds) view returns(uint256) +func (_ExampleRewardCalculator *ExampleRewardCalculatorCaller) CalculateReward(opts *bind.CallOpts, stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64) (*big.Int, error) { var out []interface{} - err := _ExampleRewardCalculator.contract.Call(opts, &out, "calculateReward", stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds, arg5, arg6) + err := _ExampleRewardCalculator.contract.Call(opts, &out, "calculateReward", stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds) if err != nil { return *new(*big.Int), err @@ -281,18 +281,18 @@ func (_ExampleRewardCalculator *ExampleRewardCalculatorCaller) CalculateReward(o } -// CalculateReward is a free data retrieval call binding the contract method 0x778c06b5. +// CalculateReward is a free data retrieval call binding the contract method 0x4f22429f. // -// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds, uint256 , uint256 ) view returns(uint256) -func (_ExampleRewardCalculator *ExampleRewardCalculatorSession) CalculateReward(stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64, arg5 *big.Int, arg6 *big.Int) (*big.Int, error) { - return _ExampleRewardCalculator.Contract.CalculateReward(&_ExampleRewardCalculator.CallOpts, stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds, arg5, arg6) +// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds) view returns(uint256) +func (_ExampleRewardCalculator *ExampleRewardCalculatorSession) CalculateReward(stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64) (*big.Int, error) { + return _ExampleRewardCalculator.Contract.CalculateReward(&_ExampleRewardCalculator.CallOpts, stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds) } -// CalculateReward is a free data retrieval call binding the contract method 0x778c06b5. +// CalculateReward is a free data retrieval call binding the contract method 0x4f22429f. // -// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds, uint256 , uint256 ) view returns(uint256) -func (_ExampleRewardCalculator *ExampleRewardCalculatorCallerSession) CalculateReward(stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64, arg5 *big.Int, arg6 *big.Int) (*big.Int, error) { - return _ExampleRewardCalculator.Contract.CalculateReward(&_ExampleRewardCalculator.CallOpts, stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds, arg5, arg6) +// Solidity: function calculateReward(uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, uint64 uptimeSeconds) view returns(uint256) +func (_ExampleRewardCalculator *ExampleRewardCalculatorCallerSession) CalculateReward(stakeAmount *big.Int, validatorStartTime uint64, stakingStartTime uint64, stakingEndTime uint64, uptimeSeconds uint64) (*big.Int, error) { + return _ExampleRewardCalculator.Contract.CalculateReward(&_ExampleRewardCalculator.CallOpts, stakeAmount, validatorStartTime, stakingStartTime, stakingEndTime, uptimeSeconds) } // RewardBasisPoints is a free data retrieval call binding the contract method 0xbb65b242. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 9bff585a9..89657a5c3 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -91,7 +91,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"type\":\"constructor\",\"inputs\":[{\"name\":\"init\",\"type\":\"uint8\",\"internalType\":\"enumICMInitializable\"}],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"ADDRESS_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint16\",\"internalType\":\"uint16\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"uint8\",\"internalType\":\"uint8\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"NATIVE_MINTER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractINativeMinter\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"WARP_MESSENGER\",\"inputs\":[],\"outputs\":[{\"name\":\"\",\"type\":\"address\",\"internalType\":\"contractIWarpMessenger\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"claimDelegationFees\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeDelegatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndDelegation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeEndValidation\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"completeValidatorRegistration\",\"inputs\":[{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"forceInitializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"getValidator\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"tuple\",\"internalType\":\"structValidator\",\"components\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"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\":\"uint64\"}]}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"getWeight\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"initialize\",\"inputs\":[{\"name\":\"settings\",\"type\":\"tuple\",\"internalType\":\"structPoSValidatorManagerSettings\",\"components\":[{\"name\":\"baseSettings\",\"type\":\"tuple\",\"internalType\":\"structValidatorManagerSettings\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"name\":\"minimumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"maximumStakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"minimumStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"},{\"name\":\"rewardCalculator\",\"type\":\"address\",\"internalType\":\"contractIRewardCalculator\"}]}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeDelegatorRegistration\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeEndDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeEndValidation\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"includeUptimeProof\",\"type\":\"bool\",\"internalType\":\"bool\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"initializeValidatorRegistration\",\"inputs\":[{\"name\":\"registrationInput\",\"type\":\"tuple\",\"internalType\":\"structValidatorRegistrationInput\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"},{\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]},{\"name\":\"disableOwner\",\"type\":\"tuple\",\"internalType\":\"structPChainOwner\",\"components\":[{\"name\":\"threshold\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"addresses\",\"type\":\"address[]\",\"internalType\":\"address[]\"}]}]},{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"},{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"payable\"},{\"type\":\"function\",\"name\":\"initializeValidatorSet\",\"inputs\":[{\"name\":\"subnetConversionData\",\"type\":\"tuple\",\"internalType\":\"structSubnetConversionData\",\"components\":[{\"name\":\"subnetID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"},{\"name\":\"initialValidators\",\"type\":\"tuple[]\",\"internalType\":\"structInitialValidator[]\",\"components\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"blsPublicKey\",\"type\":\"bytes\",\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]}]},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"registeredValidators\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}],\"outputs\":[{\"name\":\"\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"stateMutability\":\"view\"},{\"type\":\"function\",\"name\":\"resendEndValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendRegisterValidatorMessage\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"resendUpdateDelegation\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"submitUptimeProof\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"messageIndex\",\"type\":\"uint32\",\"internalType\":\"uint32\"}],\"outputs\":[],\"stateMutability\":\"nonpayable\"},{\"type\":\"function\",\"name\":\"valueToWeight\",\"inputs\":[{\"name\":\"value\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"stateMutability\":\"pure\"},{\"type\":\"function\",\"name\":\"weightToValue\",\"inputs\":[{\"name\":\"weight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}],\"outputs\":[{\"name\":\"\",\"type\":\"uint256\",\"internalType\":\"uint256\"}],\"stateMutability\":\"pure\"},{\"type\":\"event\",\"name\":\"DelegationEnded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"rewards\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"fees\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorAdded\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"delegatorAddress\",\"type\":\"address\",\"indexed\":true,\"internalType\":\"address\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"delegatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRegistered\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"startTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"DelegatorRemovalInitialized\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"InitialValidatorCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"Initialized\",\"inputs\":[{\"name\":\"version\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"UptimeUpdated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"uptime\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodCreated\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nodeID\",\"type\":\"bytes\",\"indexed\":true,\"internalType\":\"bytes\"},{\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodEnded\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"status\",\"type\":\"uint8\",\"indexed\":true,\"internalType\":\"enumValidatorStatus\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidationPeriodRegistered\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"timestamp\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorRemovalInitialized\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"weight\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"},{\"name\":\"endTime\",\"type\":\"uint256\",\"indexed\":false,\"internalType\":\"uint256\"}],\"anonymous\":false},{\"type\":\"event\",\"name\":\"ValidatorWeightUpdate\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"indexed\":true,\"internalType\":\"bytes32\"},{\"name\":\"nonce\",\"type\":\"uint64\",\"indexed\":true,\"internalType\":\"uint64\"},{\"name\":\"validatorWeight\",\"type\":\"uint64\",\"indexed\":false,\"internalType\":\"uint64\"},{\"name\":\"setWeightMessageID\",\"type\":\"bytes32\",\"indexed\":false,\"internalType\":\"bytes32\"}],\"anonymous\":false},{\"type\":\"error\",\"name\":\"AddressInsufficientBalance\",\"inputs\":[{\"name\":\"account\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"DelegatorIneligibleForRewards\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"FailedInnerCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidBLSKeyLength\",\"inputs\":[{\"name\":\"length\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidBLSPublicKey\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidCodecID\",\"inputs\":[{\"name\":\"id\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationFee\",\"inputs\":[{\"name\":\"delegationFeeBips\",\"type\":\"uint16\",\"internalType\":\"uint16\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegationID\",\"inputs\":[{\"name\":\"delegationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidDelegatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumDelegatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidInitialization\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidInitializationStatus\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMaximumChurnPercentage\",\"inputs\":[{\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageLength\",\"inputs\":[{\"name\":\"actual\",\"type\":\"uint32\",\"internalType\":\"uint32\"},{\"name\":\"expected\",\"type\":\"uint32\",\"internalType\":\"uint32\"}]},{\"type\":\"error\",\"name\":\"InvalidMessageType\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidMinStakeDuration\",\"inputs\":[{\"name\":\"minStakeDuration\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidNodeID\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"InvalidNonce\",\"inputs\":[{\"name\":\"nonce\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidPChainOwnerThreshold\",\"inputs\":[{\"name\":\"threshold\",\"type\":\"uint256\",\"internalType\":\"uint256\"},{\"name\":\"addressesLength\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidRegistrationExpiry\",\"inputs\":[{\"name\":\"registrationExpiry\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeAmount\",\"inputs\":[{\"name\":\"stakeAmount\",\"type\":\"uint256\",\"internalType\":\"uint256\"}]},{\"type\":\"error\",\"name\":\"InvalidStakeMultiplier\",\"inputs\":[{\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\",\"internalType\":\"uint8\"}]},{\"type\":\"error\",\"name\":\"InvalidSubnetConversionID\",\"inputs\":[{\"name\":\"encodedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"},{\"name\":\"expectedSubnetConversionID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidationID\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerAddress\",\"inputs\":[{\"name\":\"validatorManagerAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorManagerBlockchainID\",\"inputs\":[{\"name\":\"blockchainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"InvalidValidatorStatus\",\"inputs\":[{\"name\":\"status\",\"type\":\"uint8\",\"internalType\":\"enumValidatorStatus\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpMessage\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"InvalidWarpOriginSenderAddress\",\"inputs\":[{\"name\":\"senderAddress\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"InvalidWarpSourceChainID\",\"inputs\":[{\"name\":\"sourceChainID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"MaxChurnRateExceeded\",\"inputs\":[{\"name\":\"churnAmount\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MaxWeightExceeded\",\"inputs\":[{\"name\":\"newValidatorWeight\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"MinStakeDurationNotPassed\",\"inputs\":[{\"name\":\"endTime\",\"type\":\"uint64\",\"internalType\":\"uint64\"}]},{\"type\":\"error\",\"name\":\"NodeAlreadyRegistered\",\"inputs\":[{\"name\":\"nodeID\",\"type\":\"bytes\",\"internalType\":\"bytes\"}]},{\"type\":\"error\",\"name\":\"NotInitializing\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"PChainOwnerAddressesNotSorted\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"ReentrancyGuardReentrantCall\",\"inputs\":[]},{\"type\":\"error\",\"name\":\"UnauthorizedOwner\",\"inputs\":[{\"name\":\"sender\",\"type\":\"address\",\"internalType\":\"address\"}]},{\"type\":\"error\",\"name\":\"UnexpectedRegistrationStatus\",\"inputs\":[{\"name\":\"validRegistration\",\"type\":\"bool\",\"internalType\":\"bool\"}]},{\"type\":\"error\",\"name\":\"ValidatorIneligibleForRewards\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]},{\"type\":\"error\",\"name\":\"ValidatorNotPoS\",\"inputs\":[{\"name\":\"validationID\",\"type\":\"bytes32\",\"internalType\":\"bytes32\"}]}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615c96380380615c9683398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b498061014d5f395ff3fe6080604052600436106101e6575f3560e01c8063732214f811610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f14610582578063c974d1b614610595578063d5f20ff6146105a9578063df93d8de146105d5578063fd7ac5e7146105eb575f80fd5b8063b771b3bc1461050a578063ba3a4b9714610524578063bc5fbfec14610543578063bee0a03f14610563575f80fd5b806398f3e2b4116100d857806398f3e2b414610499578063a3a65e48146104b8578063af2f5feb146104d7578063afb98096146104ea575f80fd5b8063732214f81461043457806376f78621146104475780638280a25a1461046657806393e245981461047a575f80fd5b8063329c3e121161017e5780635297fae61161014e5780635297fae6146103a057806360305d62146103bf57806362065856146103e857806366435abf14610415575f80fd5b8063329c3e121461030857806335455ded1461033a5780633a1cfff614610362578063467ef06f14610381575f80fd5b806320d91b7a116101b957806320d91b7a1461027457806320e555651461029357806325e1c776146102b25780632e2194d8146102d1575f80fd5b80630118acc4146101ea5780630322ed981461020b578063151d30d11461022a5780631ec4472414610255575b5f80fd5b3480156101f5575f80fd5b50610209610204366004614e00565b61060a565b005b348015610216575f80fd5b50610209610225366004614e3b565b61063f565b348015610235575f80fd5b5061023e600a81565b60405160ff90911681526020015b60405180910390f35b348015610260575f80fd5b5061020961026f366004614e00565b61084d565b34801561027f575f80fd5b5061020961028e366004614e52565b610858565b34801561029e575f80fd5b506102096102ad366004614ea0565b610d44565b3480156102bd575f80fd5b506102096102cc366004614eb7565b610e21565b3480156102dc575f80fd5b506102f06102eb366004614e3b565b610e95565b6040516001600160401b03909116815260200161024c565b348015610313575f80fd5b506103226001600160991b0181565b6040516001600160a01b03909116815260200161024c565b348015610345575f80fd5b5061034f61271081565b60405161ffff909116815260200161024c565b34801561036d575f80fd5b5061020961037c366004614e00565b610eab565b34801561038c575f80fd5b5061020961039b366004614ed8565b610eb6565b3480156103ab575f80fd5b506102096103ba366004614ef1565b610f78565b3480156103ca575f80fd5b506103d3601481565b60405163ffffffff909116815260200161024c565b3480156103f3575f80fd5b50610407610402366004614f2f565b6111e3565b60405190815260200161024c565b348015610420575f80fd5b506102f061042f366004614e3b565b6111fc565b34801561043f575f80fd5b506104075f81565b348015610452575f80fd5b50610209610461366004614e00565b611210565b348015610471575f80fd5b5061023e603081565b348015610485575f80fd5b50610209610494366004614e3b565b61123b565b3480156104a4575f80fd5b506102096104b3366004614ef1565b611306565b3480156104c3575f80fd5b506102096104d2366004614ed8565b6114de565b6104076104e5366004614f59565b611667565b3480156104f5575f80fd5b506104075f80516020615abd83398151915281565b348015610515575f80fd5b506103226005600160991b0181565b34801561052f575f80fd5b5061020961053e366004614e3b565b61169b565b34801561054e575f80fd5b506104075f80516020615add83398151915281565b34801561056e575f80fd5b5061020961057d366004614e3b565b611884565b610407610590366004614e3b565b6119c1565b3480156105a0575f80fd5b5061023e601481565b3480156105b4575f80fd5b506105c86105c3366004614e3b565b6119f2565b60405161024c9190615022565b3480156105e0575f80fd5b506102f06202a30081565b3480156105f6575f80fd5b506104076106053660046150a2565b611b41565b610615838383611b9c565b61063a57604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f80516020615b1d8339815191526020526040808220815160e0810190925280545f80516020615add83398151915293929190829060ff16600581111561068c5761068c614fad565b600581111561069d5761069d614fad565b81526020016001820180546106b19061510d565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd9061510d565b80156107285780601f106106ff57610100808354040283529160200191610728565b820191905f5260205f20905b81548152906001019060200180831161070b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079357610793614fad565b146107c6575f8381526007830160205260409081902054905163170cc93360e21b81526106319160ff169060040161513f565b6005600160991b016001600160a01b031663ee5b48eb6107eb8584606001515f611ea3565b6040518263ffffffff1660e01b8152600401610807919061514d565b6020604051808303815f875af1158015610823573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610847919061515f565b50505050565b610847838383611b9c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615add8339815191529060ff16156108aa57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ed573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610911919061515f565b83602001351461093a576040516372b0a7e760e11b815260208401356004820152602401610631565b3061094b606085016040860161518a565b6001600160a01b03161461098e57610969606084016040850161518a565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610631565b5f61099c60608501856151a5565b905090505f805b828163ffffffff161015610c84575f6109bf60608801886151a5565b8363ffffffff168181106109d5576109d56151ea565b90506020028101906109e791906151fe565b6109f090615322565b80516040519192505f916008880191610a089161539b565b90815260200160405180910390205414610a3857805160405163a41f772f60e01b8152610631919060040161514d565b5f6002885f013584604051602001610a6792919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a819161539b565b602060405180830381855afa158015610a9c573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610abf919061515f565b90508086600801835f0151604051610ad7919061539b565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff19166001836005811115610b5957610b59614fad565b021790555060208201516001820190610b7290826153f0565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff191692841692909217909155830151610c179116856154bf565b8251604051919550610c289161539b565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c7d906154d2565b90506109a3565b50600483018190555f610ca2610c9986611ef2565b60400151612008565b90505f610cae87612195565b90505f600282604051610cc1919061539b565b602060405180830381855afa158015610cdc573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cff919061515f565b9050828114610d2b57604051631872fc8d60e01b81526004810182905260248101849052604401610631565b5050506009909201805460ff1916600117905550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610d8d575080546001600160401b03808416911610155b15610dab5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610dd58361236f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610e2a82612380565b610e4a576040516330efa98b60e01b815260048101839052602401610631565b5f610e54836119f2565b5190506002816005811115610e6b57610e6b614fad565b14610e8b578060405163170cc93360e21b8152600401610631919061513f565b61084783836123bb565b5f610ea564e8d4a51000836154f4565b92915050565b610847838383612635565b610ebe61282e565b5f80516020615abd8339815191525f80610ed784612865565b91509150610ee482612380565b610ef057505050610f5f565b5f82815260048085016020526040909120546001600160a01b03169082516005811115610f1f57610f1f614fad565b03610f44575f83815260078501602052604081208054919055610f428282612ba3565b505b610f5a81610f5584604001516111e3565b612c01565b505050505b610f7560015f80516020615afd83398151915255565b50565b5f8181525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd83398151915293929190829060ff166003811115610fc557610fc5614fad565b6003811115610fd657610fd6614fad565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61104c826119f2565b905060018351600381111561106357611063614fad565b14611084578251604051633b0d540d60e21b81526106319190600401615513565b60048151600581111561109957611099614fad565b036110af576110a785612c27565b505050505050565b5f806110c66110bd89611ef2565b60400151612e0e565b50915091508184146110f357846040015160405163089938b360e11b815260040161063191815260200190565b806001600160401b031683606001516001600160401b0316108061112c5750806001600160401b03168560a001516001600160401b0316115b1561115557604051632e19bc2d60e11b81526001600160401b0382166004820152602401610631565b5f878152600587016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610ea56001600160401b03831664e8d4a5100061552d565b5f611206826119f2565b6080015192915050565b61121b838383612635565b61063a57604051635bff683f60e11b815260048101849052602401610631565b5f80516020615abd8339815191525f611253836119f2565b519050600481600581111561126a5761126a614fad565b1461128a578060405163170cc93360e21b8152600401610631919061513f565b5f8381526004830160205260409020546001600160a01b031633146112d057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610631565b5f83815260078301602090815260408083208054908490556004860190925290912054610847906001600160a01b031682612ba3565b61130e61282e565b5f8181525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd83398151915293929190829060ff16600381111561135b5761135b614fad565b600381111561136c5761136c614fad565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113e5576113e5614fad565b14611406578051604051633b0d540d60e21b81526106319190600401615513565b600461141582604001516119f2565b51600581111561142757611427614fad565b146114b9575f61143685611ef2565b90505f806114478360400151612e0e565b5091509150818460400151146114735760405163089938b360e11b815260048101839052602401610631565b806001600160401b03168460c001516001600160401b031611156114b557604051632e19bc2d60e11b81526001600160401b0382166004820152602401610631565b5050505b6114c283612c27565b50506114da60015f80516020615afd83398151915255565b5050565b5f80516020615add8339815191525f806115036114fa85611ef2565b60400151613064565b915091508061152957604051632d07135360e01b81528115156004820152602401610631565b5f828152600684016020526040902080546115439061510d565b90505f036115675760405163089938b360e11b815260048101839052602401610631565b60015f83815260078501602052604090205460ff16600581111561158d5761158d614fad565b146115c0575f8281526007840160205260409081902054905163170cc93360e21b81526106319160ff169060040161513f565b5f82815260068401602052604081206115d891614d54565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f61167061282e565b61167c84848434613220565b905061169460015f80516020615afd83398151915255565b9392505050565b5f8181525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd83398151915293929190829060ff1660038111156116e8576116e8614fad565b60038111156116f9576116f9614fad565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561177257611772614fad565b14158015611793575060038151600381111561179057611790614fad565b14155b156117b4578051604051633b0d540d60e21b81526106319190600401615513565b5f6117c282604001516119f2565b905080606001516001600160401b03165f036117f4576040516339b894f960e21b815260048101859052602401610631565b6005600160991b016001600160a01b031663ee5b48eb611821846040015184606001518560800151611ea3565b6040518263ffffffff1660e01b815260040161183d919061514d565b6020604051808303815f875af1158015611859573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187d919061515f565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615add83398151915291906118cb9061510d565b90505f036118ef5760405163089938b360e11b815260048101839052602401610631565b60015f83815260078301602052604090205460ff16600581111561191557611915614fad565b14611948575f8281526007820160205260409081902054905163170cc93360e21b81526106319160ff169060040161513f565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916119819190600401615544565b6020604051808303815f875af115801561199d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063a919061515f565b5f6119ca61282e565b6119d58233346133ee565b90506119ed60015f80516020615afd83398151915255565b919050565b6119fa614d8b565b5f8281525f80516020615b1d833981519152602052604090819020815160e0810190925280545f80516020615add833981519152929190829060ff166005811115611a4757611a47614fad565b6005811115611a5857611a58614fad565b8152602001600182018054611a6c9061510d565b80601f0160208091040260200160405190810160405280929190818152602001828054611a989061510d565b8015611ae35780601f10611aba57610100808354040283529160200191611ae3565b820191905f5260205f20905b815481529060010190602001808311611ac657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615add833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611b8490869086906155ce565b90815260200160405180910390205491505092915050565b5f8381525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd8339815191529284929091829060ff166003811115611bea57611bea614fad565b6003811115611bfb57611bfb614fad565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611c71826119f2565b9050600283516003811115611c8857611c88614fad565b14611ca9578251604051633b0d540d60e21b81526106319190600401615513565b60208301516001600160a01b03163314611d4c575f828152600485016020526040902054336001600160a01b0390911603611d46575f82815260048501602052604090205460a0820151611d0d91600160b01b90046001600160401b0316906155dd565b6001600160401b0316421015611d415760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610631565b611d4c565b336112ab565b600281516005811115611d6157611d61614fad565b03611e3e578615611d7857611d7682876123bb565b505b5f8881526005850160205260409020805460ff1916600317905560608301516080820151611db1918491611dac91906155fd565b6136c3565b505f898152600586016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611df28461381a565b5f8a81526006870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506116949350505050565b600481516005811115611e5357611e53614fad565b03611e8757611e618361381a565b5f898152600686016020526040902055611e7a88612c27565b6001945050505050611694565b805160405163170cc93360e21b8152610631919060040161513f565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611f56573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f7d9190810190615628565b9150915080611f9f57604051636b2f19e960e01b815260040160405180910390fd5b815115611fc5578151604051636ba589a560e01b81526004810191909152602401610631565b60208201516001600160a01b031615612001576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610631565b5092915050565b5f815160261461203d57815160405163cc92daa160e01b815263ffffffff909116600482015260266024820152604401610631565b5f805b600281101561208c576120548160016156fa565b61205f90600861552d565b61ffff16848281518110612075576120756151ea565b016020015160f81c901b9190911790600101612040565b5061ffff8116156120b65760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015612111576120cd8160036156fa565b6120d890600861552d565b63ffffffff16856120ea8360026154bf565b815181106120fa576120fa6151ea565b016020015160f81c901b91909117906001016120b9565b5063ffffffff81161561213757604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561218c5761214e81601f6156fa565b61215990600861552d565b866121658360066154bf565b81518110612175576121756151ea565b016020015160f81c901b919091179060010161213a565b50949350505050565b60605f808335602085013560146121b18787016040890161518a565b6121be60608901896151a5565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b61224460608501856151a5565b9050811015612001578161225b60608601866151a5565b8381811061226b5761226b6151ea565b905060200281019061227d91906151fe565b612287908061570d565b905061229660608701876151a5565b848181106122a6576122a66151ea565b90506020028101906122b891906151fe565b6122c2908061570d565b6122cf60608901896151a5565b868181106122df576122df6151ea565b90506020028101906122f191906151fe565b6122ff90602081019061570d565b61230c60608b018b6151a5565b8881811061231c5761231c6151ea565b905060200281019061232e91906151fe565b61233f906060810190604001614f2f565b604051602001612355979695949392919061574f565b60408051601f198184030181529190529150600101612237565b6123776139c6565b610f7581613a11565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612406573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261242d9190810190615628565b915091508061244f57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612492573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b6919061515f565b8251146124dc578151604051636ba589a560e01b81526004810191909152602401610631565b60208201516001600160a01b031615612518576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610631565b5f806125278460400151613a7f565b9150915081871461254e5760405163089938b360e11b815260048101889052602401610631565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020600101545f80516020615abd833981519152906001600160401b03908116908316111561260b575f888152600482016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261262a565b5f8881526004820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f80516020615abd8339815191528161264e86613c70565b905061265986612380565b61266857600192505050611694565b5f8681526004830160205260409020546001600160a01b0316331461268d57336112ab565b5f86815260048301602052604090205460a08201516126bc91600160b01b90046001600160401b0316906155dd565b6001600160401b03168160c001516001600160401b031610156127035760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610631565b5f851561271b5761271487866123bb565b9050612739565b505f8681526004830160205260409020600101546001600160401b03165b600383015460408301515f916001600160a01b03169063778c06b59061275e906111e3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b0391821660248401819052604484015281166064830152851660848201525f60a4820181905260c482015260e401602060405180830381865afa1580156127d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127f8919061515f565b905080846007015f8a81526020019081526020015f205f82825461281c91906154bf565b90915550501515979650505050505050565b5f80516020615afd83398151915280546001190161285f57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61286e614d8b565b5f80516020615add8339815191525f8061288a6114fa87611ef2565b9150915080156128b157604051632d07135360e01b81528115156004820152602401610631565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156128e2576128e2614fad565b60058111156128f3576128f3614fad565b81526020016001820180546129079061510d565b80601f01602080910402602001604051908101604052809291908181526020018280546129339061510d565b801561297e5780601f106129555761010080835404028352916020019161297e565b820191905f5260205f20905b81548152906001019060200180831161296157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156129e9576129e9614fad565b14158015612a0a5750600181516005811115612a0757612a07614fad565b14155b15612a2b57805160405163170cc93360e21b8152610631919060040161513f565b600381516005811115612a4057612a40614fad565b03612a4e5760048152612a53565b600581525b836008018160200151604051612a69919061539b565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612aad57612aad614fad565b021790555060208201516001820190612ac690826153f0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b6c57612b6c614fad565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612bef575f80fd5b505af11580156110a7573d5f803e3d5ffd5b6114da6001600160a01b03831682613f54565b60015f80516020615afd83398151915255565b5f8181525f80516020615a9d8339815191526020526040808220815160e0810190925280545f80516020615abd83398151915293929190829060ff166003811115612c7457612c74614fad565b6003811115612c8557612c85614fad565b8152815461010090046001600160a01b03166020808301919091526001808401546040808501919091526002948501546001600160401b038082166060870152600160401b820481166080870152600160801b8204811660a0870152600160c01b9091041660c090940193909352848301515f89815260058901845284812080546001600160a81b03191681559283018190559190940181905560068701909152908120805490829055929350909190808215612db3575f84815260048701602052604090205461271090612d6590600160a01b900461ffff168561552d565b612d6f91906154f4565b915081866007015f8681526020019081526020015f205f828254612d9391906154bf565b90915550612da3905082846156fa565b9050612db3856020015182612ba3565b612dc88560200151610f5587606001516111e3565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612e4557835160405163cc92daa160e01b815263ffffffff909116600482015260366024820152604401610631565b5f805b6002811015612e9457612e5c8160016156fa565b612e6790600861552d565b61ffff16868281518110612e7d57612e7d6151ea565b016020015160f81c901b9190911790600101612e48565b5061ffff811615612ebe5760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015612f1957612ed58160036156fa565b612ee090600861552d565b63ffffffff1687612ef28360026154bf565b81518110612f0257612f026151ea565b016020015160f81c901b9190911790600101612ec1565b5063ffffffff8116600314612f4157604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015612f9657612f5881601f6156fa565b612f6390600861552d565b88612f6f8360066154bf565b81518110612f7f57612f7f6151ea565b016020015160f81c901b9190911790600101612f44565b505f805b6008811015612ff557612fae8160076156fa565b612fb990600861552d565b6001600160401b031689612fce8360266154bf565b81518110612fde57612fde6151ea565b016020015160f81c901b9190911790600101612f9a565b505f805b60088110156130545761300d8160076156fa565b61301890600861552d565b6001600160401b03168a61302d83602e6154bf565b8151811061303d5761303d6151ea565b016020015160f81c901b9190911790600101612ff9565b5091989097509095509350505050565b5f80825160271461309a57825160405163cc92daa160e01b815263ffffffff909116600482015260276024820152604401610631565b5f805b60028110156130e9576130b18160016156fa565b6130bc90600861552d565b61ffff168582815181106130d2576130d26151ea565b016020015160f81c901b919091179060010161309d565b5061ffff8116156131135760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b600481101561316e5761312a8160036156fa565b61313590600861552d565b63ffffffff16866131478360026154bf565b81518110613157576131576151ea565b016020015160f81c901b9190911790600101613116565b5063ffffffff811660021461319657604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156131eb576131ad81601f6156fa565b6131b890600861552d565b876131c48360066154bf565b815181106131d4576131d46151ea565b016020015160f81c901b9190911790600101613199565b505f86602681518110613200576132006151ea565b016020015191976001600160f81b03199092161515965090945050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615abd83398151915290600160401b900461ffff9081169086161080613274575061271061ffff8616115b1561329857604051635f12e6c360e11b815261ffff86166004820152602401610631565b60028101546001600160401b0390811690851610156132d4576040516202a06d60e11b81526001600160401b0385166004820152602401610631565b80548310806132e65750806001015483115b156133075760405163222d164360e21b815260048101849052602401610631565b825f61331282610e95565b90505f61331f8983613fe7565b905060405180608001604052806133333390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526004909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b03199094169516949094179190911798909816178155910151600190910180549190951667ffffffffffffffff19909116179093555090915050949350505050565b5f5f80516020615abd8339815191528161340784610e95565b90505f613413876119f2565b905061341e87612380565b61343e576040516330efa98b60e01b815260048101889052602401610631565b60028151600581111561345357613453614fad565b1461347457805160405163170cc93360e21b8152610631919060040161513f565b5f82826080015161348591906155dd565b905083600201600a9054906101000a90046001600160401b031682604001516134ae91906157b8565b6001600160401b0316816001600160401b031611156134eb57604051636d51fe0560e11b81526001600160401b0382166004820152602401610631565b5f806134f78a846136c3565b915091505f8a8360405160200161352592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260058b01909152902081518154829060ff191660018360038111156135b8576135b8614fad565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f8281525f80516020615b1d833981519152602052604081206002015481905f80516020615add83398151915290600160801b90046001600160401b031661370b858261455f565b5f61371587614739565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6137658a858b611ea3565b6040518263ffffffff1660e01b8152600401613781919061514d565b6020604051808303815f875af115801561379d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137c1919061515f565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f80516020615abd83398151915290505f61383a84604001516119f2565b90505f60038251600581111561385257613852614fad565b1480613870575060048251600581111561386e5761386e614fad565b145b15613880575060c08101516138bd565b60028251600581111561389557613895614fad565b036138a15750426138bd565b815160405163170cc93360e21b8152610631919060040161513f565b84608001516001600160401b0316816001600160401b0316116138e457505f949350505050565b600383015460608601516001600160a01b039091169063778c06b590613909906111e3565b60a085015160808901516040808b01515f90815260048a810160205282822060010154925160e088901b6001600160e01b0319168152908101959095526001600160401b0393841660248601529183166044850152828716606485015291909116608483015260a4820181905260c482015260e401602060405180830381865afa158015613999573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139bd919061515f565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613a0f57604051631afcd79f60e31b815260040160405180910390fd5b565b613a196139c6565b613a22816147ae565b613a2a6147c7565b610f7560608201356080830135613a4760c0850160a08601614f2f565b613a5760e0860160c087016157e3565b613a68610100870160e088016157fc565b613a7a6101208801610100890161518a565b6147d7565b5f808251602e14613ab557825160405163cc92daa160e01b815263ffffffff9091166004820152602e6024820152604401610631565b5f805b6002811015613b0457613acc8160016156fa565b613ad790600861552d565b61ffff16858281518110613aed57613aed6151ea565b016020015160f81c901b9190911790600101613ab8565b5061ffff811615613b2e5760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015613b8957613b458160036156fa565b613b5090600861552d565b63ffffffff1686613b628360026154bf565b81518110613b7257613b726151ea565b016020015160f81c901b9190911790600101613b31565b5063ffffffff811615613baf57604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613c0457613bc681601f6156fa565b613bd190600861552d565b87613bdd8360066154bf565b81518110613bed57613bed6151ea565b016020015160f81c901b9190911790600101613bb2565b505f805b6008811015613c6357613c1c8160076156fa565b613c2790600861552d565b6001600160401b031688613c3c8360266154bf565b81518110613c4c57613c4c6151ea565b016020015160f81c901b9190911790600101613c08565b5090969095509350505050565b613c78614d8b565b5f8281525f80516020615b1d8339815191526020526040808220815160e0810190925280545f80516020615add83398151915293929190829060ff166005811115613cc557613cc5614fad565b6005811115613cd657613cd6614fad565b8152602001600182018054613cea9061510d565b80601f0160208091040260200160405190810160405280929190818152602001828054613d169061510d565b8015613d615780601f10613d3857610100808354040283529160200191613d61565b820191905f5260205f20905b815481529060010190602001808311613d4457829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613dcf57613dcf614fad565b14613e02575f8481526007830160205260409081902054905163170cc93360e21b81526106319160ff169060040161513f565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613e4657613e46614fad565b021790555060208201516001820190613e5f90826153f0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613efd85826136c3565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b80471015613f775760405163cd78605960e01b8152306004820152602401610631565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fc0576040519150601f19603f3d011682016040523d82523d5f602084013e613fc5565b606091505b505090508061063a57604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff1661402b57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615add8339815191524261404a6060860160408701614f2f565b6001600160401b031611158061408457506140686202a300426154bf565b6140786060860160408701614f2f565b6001600160401b031610155b156140be576140996060850160408601614f2f565b604051635879da1360e11b81526001600160401b039091166004820152602401610631565b6140d36140ce606086018661581c565b614906565b6140e36140ce608086018661581c565b60306140f2602086018661570d565b90501461412457614106602085018561570d565b6040516326475b2f60e11b8152610631925060040190815260200190565b61412e848061570d565b90505f0361415b57614140848061570d565b604051633e08a12560e11b8152600401610631929190615830565b5f6008820161416a868061570d565b6040516141789291906155ce565b908152602001604051809103902054146141b157614196848061570d565b60405163a41f772f60e01b8152600401610631929190615830565b6141bb835f61455f565b6040805160e08101909152815481525f9081906142c790602081016141e0898061570d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614228908a018a61570d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161427160608a0160408b01614f2f565b6001600160401b0316815260200161428c60608a018a61581c565b6142959061585e565b81526020016142a760808a018a61581c565b6142b09061585e565b8152602001876001600160401b0316815250614a6f565b5f828152600686016020526040902091935091506142e582826153f0565b5081600884016142f5888061570d565b6040516143039291906155ce565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061433f90859060040161514d565b6020604051808303815f875af115801561435b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061437f919061515f565b6040805160e08101909152909150806001815260200161439f898061570d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561442e5761442e614fad565b02179055506020820151600182019061444790826153f0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055806144e5888061570d565b6040516144f39291906155ce565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906145319190614f2f565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f80516020615add8339815191525f6001600160401b0380841690851611156145935761458c83856155fd565b90506145a0565b61459d84846155fd565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806146025750600184015481516145fe916001600160401b0316906154bf565b8210155b15614628576001600160401b038316606082015281815260408101516020820152614647565b828160600181815161463a91906155dd565b6001600160401b03169052505b60608101516146579060646157b8565b602082015160018601546001600160401b0392909216916146829190600160401b900460ff1661552d565b10156146b257606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610631565b856001600160401b0316816040018181516146cd91906154bf565b9052506040810180516001600160401b03871691906146ed9083906156fa565b905250805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615b1d8339815191526020526040812060020180545f80516020615add833981519152919060089061478390600160401b90046001600160401b0316615925565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147b66139c6565b6147be614c5c565b610f7581614c64565b6147cf6139c6565b613a0f614d4c565b6147df6139c6565b5f80516020615abd83398151915261ffff84161580614803575061271061ffff8516115b1561482757604051635f12e6c360e11b815261ffff85166004820152602401610631565b8587111561484b5760405163222d164360e21b815260048101889052602401610631565b60ff8316158061485e5750600a60ff8416115b156148815760405163170db35960e31b815260ff84166004820152602401610631565b95865560018601949094556002850180546001600160401b039490941669ffffffffffffffffffff1990941693909317600160401b61ffff93909316929092029190911767ffffffffffffffff60501b191660ff91909116600160501b02179055600390910180546001600160a01b0319166001600160a01b03909216919091179055565b6149136020820182614ed8565b63ffffffff16158015614933575061492e60208201826151a5565b151590505b1561497a576149456020820182614ed8565b61495260208301836151a5565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610631565b61498760208201826151a5565b90506149966020830183614ed8565b63ffffffff1611156149af576149456020820182614ed8565b60015b6149bf60208301836151a5565b90508110156114da576149d560208301836151a5565b6149e06001846156fa565b8181106149ef576149ef6151ea565b9050602002016020810190614a04919061518a565b6001600160a01b0316614a1a60208401846151a5565b83818110614a2a57614a2a6151ea565b9050602002016020810190614a3f919061518a565b6001600160a01b03161015614a6757604051630dbc8d5f60e31b815260040160405180910390fd5b6001016149b2565b5f6060826040015151603014614a985760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614ad9988a986001989297929690959094909390929101615940565b60405160208183030381529060405290505f5b84608001516020015151811015614b4b57818560800151602001518281518110614b1857614b186151ea565b6020026020010151604051602001614b319291906159fa565b60408051601f198184030181529190529150600101614aec565b5060a0840151805160209182015151604051614b6b938593929101615a30565b60405160208183030381529060405290505f5b8460a001516020015151811015614bdd57818560a00151602001518281518110614baa57614baa6151ea565b6020026020010151604051602001614bc39291906159fa565b60408051601f198184030181529190529150600101614b7e565b5060c0840151604051614bf4918391602001615a6b565b6040516020818303038152906040529050600281604051614c15919061539b565b602060405180830381855afa158015614c30573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614c53919061515f565b94909350915050565b613a0f6139c6565b614c6c6139c6565b80355f80516020615add8339815191529081556014614c9160608401604085016157fc565b60ff161180614cb05750614cab60608301604084016157fc565b60ff16155b15614ce457614cc560608301604084016157fc565b604051634a59bbff60e11b815260ff9091166004820152602401610631565b614cf460608301604084016157fc565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614d256040830160208401614f2f565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c146139c6565b508054614d609061510d565b5f825580601f10614d6f575050565b601f0160209004905f5260205f2090810190610f759190614dc8565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ddc575f8155600101614dc9565b5090565b8015158114610f75575f80fd5b803563ffffffff811681146119ed575f80fd5b5f805f60608486031215614e12575f80fd5b833592506020840135614e2481614de0565b9150614e3260408501614ded565b90509250925092565b5f60208284031215614e4b575f80fd5b5035919050565b5f8060408385031215614e63575f80fd5b82356001600160401b03811115614e78575f80fd5b830160808186031215614e89575f80fd5b9150614e9760208401614ded565b90509250929050565b5f6101208284031215614eb1575f80fd5b50919050565b5f8060408385031215614ec8575f80fd5b82359150614e9760208401614ded565b5f60208284031215614ee8575f80fd5b61169482614ded565b5f8060408385031215614f02575f80fd5b614f0b83614ded565b946020939093013593505050565b80356001600160401b03811681146119ed575f80fd5b5f60208284031215614f3f575f80fd5b61169482614f19565b803561ffff811681146119ed575f80fd5b5f805f60608486031215614f6b575f80fd5b83356001600160401b03811115614f80575f80fd5b840160a08187031215614f91575f80fd5b9250614f9f60208501614f48565b9150614e3260408501614f19565b634e487b7160e01b5f52602160045260245ffd5b60068110614fd157614fd1614fad565b9052565b5f5b83811015614fef578181015183820152602001614fd7565b50505f910152565b5f815180845261500e816020860160208601614fd5565b601f01601f19169290920160200192915050565b60208152615034602082018351614fc1565b5f602083015160e0604084015261504f610100840182614ff7565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150b3575f80fd5b82356001600160401b03808211156150c9575f80fd5b818501915085601f8301126150dc575f80fd5b8135818111156150ea575f80fd5b8660208285010111156150fb575f80fd5b60209290920196919550909350505050565b600181811c9082168061512157607f821691505b602082108103614eb157634e487b7160e01b5f52602260045260245ffd5b60208101610ea58284614fc1565b602081525f6116946020830184614ff7565b5f6020828403121561516f575f80fd5b5051919050565b6001600160a01b0381168114610f75575f80fd5b5f6020828403121561519a575f80fd5b813561169481615176565b5f808335601e198436030181126151ba575f80fd5b8301803591506001600160401b038211156151d3575f80fd5b6020019150600581901b3603821315613813575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615212575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156152525761525261521c565b60405290565b604080519081016001600160401b03811182821017156152525761525261521c565b604051601f8201601f191681016001600160401b03811182821017156152a2576152a261521c565b604052919050565b5f6001600160401b038211156152c2576152c261521c565b50601f01601f191660200190565b5f82601f8301126152df575f80fd5b81356152f26152ed826152aa565b61527a565b818152846020838601011115615306575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615332575f80fd5b61533a615230565b82356001600160401b0380821115615350575f80fd5b61535c368387016152d0565b83526020850135915080821115615371575f80fd5b5061537e368286016152d0565b60208301525061539060408401614f19565b604082015292915050565b5f8251615212818460208701614fd5565b601f82111561063a57805f5260205f20601f840160051c810160208510156153d15750805b601f840160051c820191505b8181101561187d575f81556001016153dd565b81516001600160401b038111156154095761540961521c565b61541d81615417845461510d565b846153ac565b602080601f831160018114615450575f84156154395750858301515b5f19600386901b1c1916600185901b1785556110a7565b5f85815260208120601f198616915b8281101561547e5788860151825594840194600190910190840161545f565b508582101561549b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ea557610ea56154ab565b5f63ffffffff8083168181036154ea576154ea6154ab565b6001019392505050565b5f8261550e57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061552757615527614fad565b91905290565b8082028115828204841417610ea557610ea56154ab565b5f60208083525f84546155568161510d565b806020870152604060018084165f81146155775760018114615593576155c0565b60ff19851660408a0152604084151560051b8a010195506155c0565b895f5260205f205f5b858110156155b75781548b820186015290830190880161559c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612001576120016154ab565b6001600160401b03828116828216039080821115612001576120016154ab565b80516119ed81614de0565b5f8060408385031215615639575f80fd5b82516001600160401b038082111561564f575f80fd5b9084019060608287031215615662575f80fd5b61566a615230565b8251815260208084015161567d81615176565b82820152604084015183811115615692575f80fd5b80850194505087601f8501126156a6575f80fd5b835192506156b66152ed846152aa565b83815288828587010111156156c9575f80fd5b6156d884838301848801614fd5565b806040840152508195506156ed81880161561d565b9450505050509250929050565b81810381811115610ea557610ea56154ab565b5f808335601e19843603018112615722575f80fd5b8301803591506001600160401b0382111561573b575f80fd5b602001915036819003821315613813575f80fd5b5f8851615760818460208d01614fd5565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b6001600160401b038181168382160280821691908281146157db576157db6154ab565b505092915050565b5f602082840312156157f3575f80fd5b61169482614f48565b5f6020828403121561580c575f80fd5b813560ff81168114611694575f80fd5b5f8235603e19833603018112615212575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f6040823603121561586e575f80fd5b615876615258565b61587f83614ded565b81526020808401356001600160401b038082111561589b575f80fd5b9085019036601f8301126158ad575f80fd5b8135818111156158bf576158bf61521c565b8060051b91506158d084830161527a565b81815291830184019184810190368411156158e9575f80fd5b938501935b83851015615913578435925061590383615176565b82825293850193908501906158ee565b94860194909452509295945050505050565b5f6001600160401b038083168181036154ea576154ea6154ab565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b16602684015250865161598681602a850160208b01614fd5565b86519083019061599d81602a840160208b01614fd5565b60c087901b6001600160c01b031916602a92909101918201526159cf603282018660e01b6001600160e01b0319169052565b6159e8603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f8351615a0b818460208801614fd5565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f8451615a41818460208901614fd5565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615a7c818460208801614fd5565b60c09390931b6001600160c01b031916919092019081526008019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d054317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", + Bin: "0x608060405234801561000f575f80fd5b50604051615c7b380380615c7b83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b2e8061014d5f395ff3fe6080604052600436106101e6575f3560e01c8063732214f811610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f14610582578063c974d1b614610595578063d5f20ff6146105a9578063df93d8de146105d5578063fd7ac5e7146105eb575f80fd5b8063b771b3bc1461050a578063ba3a4b9714610524578063bc5fbfec14610543578063bee0a03f14610563575f80fd5b806398f3e2b4116100d857806398f3e2b414610499578063a3a65e48146104b8578063af2f5feb146104d7578063afb98096146104ea575f80fd5b8063732214f81461043457806376f78621146104475780638280a25a1461046657806393e245981461047a575f80fd5b8063329c3e121161017e5780635297fae61161014e5780635297fae6146103a057806360305d62146103bf57806362065856146103e857806366435abf14610415575f80fd5b8063329c3e121461030857806335455ded1461033a5780633a1cfff614610362578063467ef06f14610381575f80fd5b806320d91b7a116101b957806320d91b7a1461027457806320e555651461029357806325e1c776146102b25780632e2194d8146102d1575f80fd5b80630118acc4146101ea5780630322ed981461020b578063151d30d11461022a5780631ec4472414610255575b5f80fd5b3480156101f5575f80fd5b50610209610204366004614de5565b61060a565b005b348015610216575f80fd5b50610209610225366004614e20565b61063f565b348015610235575f80fd5b5061023e600a81565b60405160ff90911681526020015b60405180910390f35b348015610260575f80fd5b5061020961026f366004614de5565b61084d565b34801561027f575f80fd5b5061020961028e366004614e37565b610858565b34801561029e575f80fd5b506102096102ad366004614e85565b610d44565b3480156102bd575f80fd5b506102096102cc366004614e9c565b610e21565b3480156102dc575f80fd5b506102f06102eb366004614e20565b610e95565b6040516001600160401b03909116815260200161024c565b348015610313575f80fd5b506103226001600160991b0181565b6040516001600160a01b03909116815260200161024c565b348015610345575f80fd5b5061034f61271081565b60405161ffff909116815260200161024c565b34801561036d575f80fd5b5061020961037c366004614de5565b610eab565b34801561038c575f80fd5b5061020961039b366004614ebd565b610eb6565b3480156103ab575f80fd5b506102096103ba366004614ed6565b610f78565b3480156103ca575f80fd5b506103d3601481565b60405163ffffffff909116815260200161024c565b3480156103f3575f80fd5b50610407610402366004614f14565b6111e3565b60405190815260200161024c565b348015610420575f80fd5b506102f061042f366004614e20565b6111fc565b34801561043f575f80fd5b506104075f81565b348015610452575f80fd5b50610209610461366004614de5565b611210565b348015610471575f80fd5b5061023e603081565b348015610485575f80fd5b50610209610494366004614e20565b61123b565b3480156104a4575f80fd5b506102096104b3366004614ed6565b611306565b3480156104c3575f80fd5b506102096104d2366004614ebd565b6114de565b6104076104e5366004614f3e565b611667565b3480156104f5575f80fd5b506104075f80516020615aa283398151915281565b348015610515575f80fd5b506103226005600160991b0181565b34801561052f575f80fd5b5061020961053e366004614e20565b61169b565b34801561054e575f80fd5b506104075f80516020615ac283398151915281565b34801561056e575f80fd5b5061020961057d366004614e20565b611884565b610407610590366004614e20565b6119c1565b3480156105a0575f80fd5b5061023e601481565b3480156105b4575f80fd5b506105c86105c3366004614e20565b6119f2565b60405161024c9190615007565b3480156105e0575f80fd5b506102f06202a30081565b3480156105f6575f80fd5b50610407610605366004615087565b611b41565b610615838383611b9c565b61063a57604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f80516020615b028339815191526020526040808220815160e0810190925280545f80516020615ac283398151915293929190829060ff16600581111561068c5761068c614f92565b600581111561069d5761069d614f92565b81526020016001820180546106b1906150f2565b80601f01602080910402602001604051908101604052809291908181526020018280546106dd906150f2565b80156107285780601f106106ff57610100808354040283529160200191610728565b820191905f5260205f20905b81548152906001019060200180831161070b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079357610793614f92565b146107c6575f8381526007830160205260409081902054905163170cc93360e21b81526106319160ff1690600401615124565b6005600160991b016001600160a01b031663ee5b48eb6107eb8584606001515f611ea3565b6040518263ffffffff1660e01b81526004016108079190615132565b6020604051808303815f875af1158015610823573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108479190615144565b50505050565b610847838383611b9c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615ac28339815191529060ff16156108aa57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109119190615144565b83602001351461093a576040516372b0a7e760e11b815260208401356004820152602401610631565b3061094b606085016040860161516f565b6001600160a01b03161461098e57610969606084016040850161516f565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610631565b5f61099c606085018561518a565b905090505f805b828163ffffffff161015610c84575f6109bf606088018861518a565b8363ffffffff168181106109d5576109d56151cf565b90506020028101906109e791906151e3565b6109f090615307565b80516040519192505f916008880191610a0891615380565b90815260200160405180910390205414610a3857805160405163a41f772f60e01b81526106319190600401615132565b5f6002885f013584604051602001610a6792919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a8191615380565b602060405180830381855afa158015610a9c573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610abf9190615144565b90508086600801835f0151604051610ad79190615380565b90815260408051602092819003830181209390935560e0830181526002835284518284015284810180516001600160401b03908116858401525f60608601819052915181166080860152421660a085015260c0840181905284815260078a01909252902081518154829060ff19166001836005811115610b5957610b59614f92565b021790555060208201516001820190610b7290826153d5565b506040828101516002830180546060860151608087015160a08801516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909301516003909201805467ffffffffffffffff191692841692909217909155830151610c179116856154a4565b8251604051919550610c2891615380565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c7d906154b7565b90506109a3565b50600483018190555f610ca2610c9986611ef2565b60400151612008565b90505f610cae87612195565b90505f600282604051610cc19190615380565b602060405180830381855afa158015610cdc573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cff9190615144565b9050828114610d2b57604051631872fc8d60e01b81526004810182905260248101849052604401610631565b5050506009909201805460ff1916600117905550505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610d8d575080546001600160401b03808416911610155b15610dab5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610dd58361236f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b610e2a82612380565b610e4a576040516330efa98b60e01b815260048101839052602401610631565b5f610e54836119f2565b5190506002816005811115610e6b57610e6b614f92565b14610e8b578060405163170cc93360e21b81526004016106319190615124565b61084783836123bb565b5f610ea564e8d4a51000836154d9565b92915050565b610847838383612635565b610ebe612821565b5f80516020615aa28339815191525f80610ed784612858565b91509150610ee482612380565b610ef057505050610f5f565b5f82815260048085016020526040909120546001600160a01b03169082516005811115610f1f57610f1f614f92565b03610f44575f83815260078501602052604081208054919055610f428282612b96565b505b610f5a81610f5584604001516111e3565b612bf4565b505050505b610f7560015f80516020615ae283398151915255565b50565b5f8181525f80516020615a828339815191526020526040808220815160e0810190925280545f80516020615aa283398151915293929190829060ff166003811115610fc557610fc5614f92565b6003811115610fd657610fd6614f92565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61104c826119f2565b905060018351600381111561106357611063614f92565b14611084578251604051633b0d540d60e21b815261063191906004016154f8565b60048151600581111561109957611099614f92565b036110af576110a785612c1a565b505050505050565b5f806110c66110bd89611ef2565b60400151612e01565b50915091508184146110f357846040015160405163089938b360e11b815260040161063191815260200190565b806001600160401b031683606001516001600160401b0316108061112c5750806001600160401b03168560a001516001600160401b0316115b1561115557604051632e19bc2d60e11b81526001600160401b0382166004820152602401610631565b5f878152600587016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff000000000000000019909216919091179091559151918252859189917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f610ea56001600160401b03831664e8d4a51000615512565b5f611206826119f2565b6080015192915050565b61121b838383612635565b61063a57604051635bff683f60e11b815260048101849052602401610631565b5f80516020615aa28339815191525f611253836119f2565b519050600481600581111561126a5761126a614f92565b1461128a578060405163170cc93360e21b81526004016106319190615124565b5f8381526004830160205260409020546001600160a01b031633146112d057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610631565b5f83815260078301602090815260408083208054908490556004860190925290912054610847906001600160a01b031682612b96565b61130e612821565b5f8181525f80516020615a828339815191526020526040808220815160e0810190925280545f80516020615aa283398151915293929190829060ff16600381111561135b5761135b614f92565b600381111561136c5761136c614f92565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113e5576113e5614f92565b14611406578051604051633b0d540d60e21b815261063191906004016154f8565b600461141582604001516119f2565b51600581111561142757611427614f92565b146114b9575f61143685611ef2565b90505f806114478360400151612e01565b5091509150818460400151146114735760405163089938b360e11b815260048101839052602401610631565b806001600160401b03168460c001516001600160401b031611156114b557604051632e19bc2d60e11b81526001600160401b0382166004820152602401610631565b5050505b6114c283612c1a565b50506114da60015f80516020615ae283398151915255565b5050565b5f80516020615ac28339815191525f806115036114fa85611ef2565b60400151613057565b915091508061152957604051632d07135360e01b81528115156004820152602401610631565b5f82815260068401602052604090208054611543906150f2565b90505f036115675760405163089938b360e11b815260048101839052602401610631565b60015f83815260078501602052604090205460ff16600581111561158d5761158d614f92565b146115c0575f8281526007840160205260409081902054905163170cc93360e21b81526106319160ff1690600401615124565b5f82815260068401602052604081206115d891614d39565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611670612821565b61167c84848434613213565b905061169460015f80516020615ae283398151915255565b9392505050565b5f8181525f80516020615a828339815191526020526040808220815160e0810190925280545f80516020615aa283398151915293929190829060ff1660038111156116e8576116e8614f92565b60038111156116f9576116f9614f92565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561177257611772614f92565b14158015611793575060038151600381111561179057611790614f92565b14155b156117b4578051604051633b0d540d60e21b815261063191906004016154f8565b5f6117c282604001516119f2565b905080606001516001600160401b03165f036117f4576040516339b894f960e21b815260048101859052602401610631565b6005600160991b016001600160a01b031663ee5b48eb611821846040015184606001518560800151611ea3565b6040518263ffffffff1660e01b815260040161183d9190615132565b6020604051808303815f875af1158015611859573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061187d9190615144565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615ac283398151915291906118cb906150f2565b90505f036118ef5760405163089938b360e11b815260048101839052602401610631565b60015f83815260078301602052604090205460ff16600581111561191557611915614f92565b14611948575f8281526007820160205260409081902054905163170cc93360e21b81526106319160ff1690600401615124565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb916119819190600401615529565b6020604051808303815f875af115801561199d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061063a9190615144565b5f6119ca612821565b6119d58233346133e1565b90506119ed60015f80516020615ae283398151915255565b919050565b6119fa614d70565b5f8281525f80516020615b02833981519152602052604090819020815160e0810190925280545f80516020615ac2833981519152929190829060ff166005811115611a4757611a47614f92565b6005811115611a5857611a58614f92565b8152602001600182018054611a6c906150f2565b80601f0160208091040260200160405190810160405280929190818152602001828054611a98906150f2565b8015611ae35780601f10611aba57610100808354040283529160200191611ae3565b820191905f5260205f20905b815481529060010190602001808311611ac657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615ac2833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611b8490869086906155b3565b90815260200160405180910390205491505092915050565b5f8381525f80516020615a828339815191526020526040808220815160e0810190925280545f80516020615aa28339815191529284929091829060ff166003811115611bea57611bea614f92565b6003811115611bfb57611bfb614f92565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611c71826119f2565b9050600283516003811115611c8857611c88614f92565b14611ca9578251604051633b0d540d60e21b815261063191906004016154f8565b60208301516001600160a01b03163314611d4c575f828152600485016020526040902054336001600160a01b0390911603611d46575f82815260048501602052604090205460a0820151611d0d91600160b01b90046001600160401b0316906155c2565b6001600160401b0316421015611d415760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610631565b611d4c565b336112ab565b600281516005811115611d6157611d61614f92565b03611e3e578615611d7857611d7682876123bb565b505b5f8881526005850160205260409020805460ff1916600317905560608301516080820151611db1918491611dac91906155e2565b6136b6565b505f898152600586016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611df28461380d565b5f8a81526006870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506116949350505050565b600481516005811115611e5357611e53614f92565b03611e8757611e618361380d565b5f898152600686016020526040902055611e7a88612c1a565b6001945050505050611694565b805160405163170cc93360e21b81526106319190600401615124565b604080515f6020820152600360e01b602282015260268101949094526001600160c01b031960c093841b811660468601529190921b16604e830152805180830360360181526056909201905290565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015611f56573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f7d919081019061560d565b9150915080611f9f57604051636b2f19e960e01b815260040160405180910390fd5b815115611fc5578151604051636ba589a560e01b81526004810191909152602401610631565b60208201516001600160a01b031615612001576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610631565b5092915050565b5f815160261461203d57815160405163cc92daa160e01b815263ffffffff909116600482015260266024820152604401610631565b5f805b600281101561208c576120548160016156df565b61205f906008615512565b61ffff16848281518110612075576120756151cf565b016020015160f81c901b9190911790600101612040565b5061ffff8116156120b65760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015612111576120cd8160036156df565b6120d8906008615512565b63ffffffff16856120ea8360026154a4565b815181106120fa576120fa6151cf565b016020015160f81c901b91909117906001016120b9565b5063ffffffff81161561213757604051635b60892f60e01b815260040160405180910390fd5b5f805b602081101561218c5761214e81601f6156df565b612159906008615512565b866121658360066154a4565b81518110612175576121756151cf565b016020015160f81c901b919091179060010161213a565b50949350505050565b60605f808335602085013560146121b18787016040890161516f565b6121be606089018961518a565b60405160f09790971b6001600160f01b0319166020880152602287019590955250604285019290925260e090811b6001600160e01b0319908116606286015260609290921b6bffffffffffffffffffffffff191660668501529190911b16607a820152607e0160405160208183030381529060405290505f5b612244606085018561518a565b9050811015612001578161225b606086018661518a565b8381811061226b5761226b6151cf565b905060200281019061227d91906151e3565b61228790806156f2565b9050612296606087018761518a565b848181106122a6576122a66151cf565b90506020028101906122b891906151e3565b6122c290806156f2565b6122cf606089018961518a565b868181106122df576122df6151cf565b90506020028101906122f191906151e3565b6122ff9060208101906156f2565b61230c60608b018b61518a565b8881811061231c5761231c6151cf565b905060200281019061232e91906151e3565b61233f906060810190604001614f14565b6040516020016123559796959493929190615734565b60408051601f198184030181529190529150600101612237565b6123776139ab565b610f75816139f6565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612406573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261242d919081019061560d565b915091508061244f57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612492573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b69190615144565b8251146124dc578151604051636ba589a560e01b81526004810191909152602401610631565b60208201516001600160a01b031615612518576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610631565b5f806125278460400151613a64565b9150915081871461254e5760405163089938b360e11b815260048101889052602401610631565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0460205260409020600101545f80516020615aa2833981519152906001600160401b03908116908316111561260b575f888152600482016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261262a565b5f8881526004820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f80516020615aa28339815191528161264e86613c55565b905061265986612380565b61266857600192505050611694565b5f8681526004830160205260409020546001600160a01b0316331461268d57336112ab565b5f86815260048301602052604090205460a08201516126bc91600160b01b90046001600160401b0316906155c2565b6001600160401b03168160c001516001600160401b031610156127035760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610631565b5f851561271b5761271487866123bb565b9050612739565b505f8681526004830160205260409020600101546001600160401b03165b600383015460408301515f916001600160a01b031690634f22429f9061275e906111e3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156127c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127eb9190615144565b905080846007015f8a81526020019081526020015f205f82825461280f91906154a4565b90915550501515979650505050505050565b5f80516020615ae283398151915280546001190161285257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612861614d70565b5f80516020615ac28339815191525f8061287d6114fa87611ef2565b9150915080156128a457604051632d07135360e01b81528115156004820152602401610631565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156128d5576128d5614f92565b60058111156128e6576128e6614f92565b81526020016001820180546128fa906150f2565b80601f0160208091040260200160405190810160405280929190818152602001828054612926906150f2565b80156129715780601f1061294857610100808354040283529160200191612971565b820191905f5260205f20905b81548152906001019060200180831161295457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156129dc576129dc614f92565b141580156129fd57506001815160058111156129fa576129fa614f92565b14155b15612a1e57805160405163170cc93360e21b81526106319190600401615124565b600381516005811115612a3357612a33614f92565b03612a415760048152612a46565b600581525b836008018160200151604051612a5c9190615380565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612aa057612aa0614f92565b021790555060208201516001820190612ab990826153d5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b5f57612b5f614f92565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612be2575f80fd5b505af11580156110a7573d5f803e3d5ffd5b6114da6001600160a01b03831682613f39565b60015f80516020615ae283398151915255565b5f8181525f80516020615a828339815191526020526040808220815160e0810190925280545f80516020615aa283398151915293929190829060ff166003811115612c6757612c67614f92565b6003811115612c7857612c78614f92565b8152815461010090046001600160a01b03166020808301919091526001808401546040808501919091526002948501546001600160401b038082166060870152600160401b820481166080870152600160801b8204811660a0870152600160c01b9091041660c090940193909352848301515f89815260058901845284812080546001600160a81b03191681559283018190559190940181905560068701909152908120805490829055929350909190808215612da6575f84815260048701602052604090205461271090612d5890600160a01b900461ffff1685615512565b612d6291906154d9565b915081866007015f8681526020019081526020015f205f828254612d8691906154a4565b90915550612d96905082846156df565b9050612da6856020015182612b96565b612dbb8560200151610f5587606001516111e3565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f805f8351603614612e3857835160405163cc92daa160e01b815263ffffffff909116600482015260366024820152604401610631565b5f805b6002811015612e8757612e4f8160016156df565b612e5a906008615512565b61ffff16868281518110612e7057612e706151cf565b016020015160f81c901b9190911790600101612e3b565b5061ffff811615612eb15760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015612f0c57612ec88160036156df565b612ed3906008615512565b63ffffffff1687612ee58360026154a4565b81518110612ef557612ef56151cf565b016020015160f81c901b9190911790600101612eb4565b5063ffffffff8116600314612f3457604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015612f8957612f4b81601f6156df565b612f56906008615512565b88612f628360066154a4565b81518110612f7257612f726151cf565b016020015160f81c901b9190911790600101612f37565b505f805b6008811015612fe857612fa18160076156df565b612fac906008615512565b6001600160401b031689612fc18360266154a4565b81518110612fd157612fd16151cf565b016020015160f81c901b9190911790600101612f8d565b505f805b6008811015613047576130008160076156df565b61300b906008615512565b6001600160401b03168a61302083602e6154a4565b81518110613030576130306151cf565b016020015160f81c901b9190911790600101612fec565b5091989097509095509350505050565b5f80825160271461308d57825160405163cc92daa160e01b815263ffffffff909116600482015260276024820152604401610631565b5f805b60028110156130dc576130a48160016156df565b6130af906008615512565b61ffff168582815181106130c5576130c56151cf565b016020015160f81c901b9190911790600101613090565b5061ffff8116156131065760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b60048110156131615761311d8160036156df565b613128906008615512565b63ffffffff168661313a8360026154a4565b8151811061314a5761314a6151cf565b016020015160f81c901b9190911790600101613109565b5063ffffffff811660021461318957604051635b60892f60e01b815260040160405180910390fd5b5f805b60208110156131de576131a081601f6156df565b6131ab906008615512565b876131b78360066154a4565b815181106131c7576131c76151cf565b016020015160f81c901b919091179060010161318c565b505f866026815181106131f3576131f36151cf565b016020015191976001600160f81b03199092161515965090945050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f80516020615aa283398151915290600160401b900461ffff9081169086161080613267575061271061ffff8616115b1561328b57604051635f12e6c360e11b815261ffff86166004820152602401610631565b60028101546001600160401b0390811690851610156132c7576040516202a06d60e11b81526001600160401b0385166004820152602401610631565b80548310806132d95750806001015483115b156132fa5760405163222d164360e21b815260048101849052602401610631565b825f61330582610e95565b90505f6133128983613fcc565b905060405180608001604052806133263390565b6001600160a01b03908116825261ffff808c166020808501919091526001600160401b03808d166040808701919091525f60609687018190528881526004909b018352998a902086518154938801519b8801518316600160b01b0267ffffffffffffffff60b01b199c909516600160a01b026001600160b01b03199094169516949094179190911798909816178155910151600190910180549190951667ffffffffffffffff19909116179093555090915050949350505050565b5f5f80516020615aa2833981519152816133fa84610e95565b90505f613406876119f2565b905061341187612380565b613431576040516330efa98b60e01b815260048101889052602401610631565b60028151600581111561344657613446614f92565b1461346757805160405163170cc93360e21b81526106319190600401615124565b5f82826080015161347891906155c2565b905083600201600a9054906101000a90046001600160401b031682604001516134a1919061579d565b6001600160401b0316816001600160401b031611156134de57604051636d51fe0560e11b81526001600160401b0382166004820152602401610631565b5f806134ea8a846136b6565b915091505f8a8360405160200161351892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f19818403018152828252805160209091012060e08301909152915080600181526001600160a01b038c1660208083019190915260408083018f90526001600160401b03808b1660608501525f6080850181905290881660a085015260c090930183905284835260058b01909152902081518154829060ff191660018360038111156135ab576135ab614f92565b02179055506020828101518254610100600160a81b0319166101006001600160a01b039283160217835560408085015160018501556060808601516002909501805460808089015160a08a015160c0909a01516001600160401b03998a166001600160801b031990941693909317600160401b918a1691909102176001600160801b0316600160801b998916999099026001600160c01b031698909817600160c01b91881691909102179055815189861681528a861694810194909452938b1690830152918101859052908c16918d9184917fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a223426910160405180910390a49a9950505050505050505050565b5f8281525f80516020615b02833981519152602052604081206002015481905f80516020615ac283398151915290600160801b90046001600160401b03166136fe8582614544565b5f6137088761471e565b5f8881526007850160205260408120600201805467ffffffffffffffff60801b1916600160801b6001600160401b038b16021790559091506005600160991b0163ee5b48eb6137588a858b611ea3565b6040518263ffffffff1660e01b81526004016137749190615132565b6020604051808303815f875af1158015613790573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b49190615144565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f80516020615aa283398151915290505f61382d84604001516119f2565b90505f60038251600581111561384557613845614f92565b1480613863575060048251600581111561386157613861614f92565b145b15613873575060c08101516138b0565b60028251600581111561388857613888614f92565b036138945750426138b0565b815160405163170cc93360e21b81526106319190600401615124565b84608001516001600160401b0316816001600160401b0316116138d757505f949350505050565b600383015460608601516001600160a01b0390911690634f22429f906138fc906111e3565b60a085015160808901516040808b01515f90815260048a81016020529082902060010154915160e087901b6001600160e01b0319168152908101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa15801561397e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139a29190615144565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166139f457604051631afcd79f60e31b815260040160405180910390fd5b565b6139fe6139ab565b613a0781614793565b613a0f6147ac565b610f7560608201356080830135613a2c60c0850160a08601614f14565b613a3c60e0860160c087016157c8565b613a4d610100870160e088016157e1565b613a5f6101208801610100890161516f565b6147bc565b5f808251602e14613a9a57825160405163cc92daa160e01b815263ffffffff9091166004820152602e6024820152604401610631565b5f805b6002811015613ae957613ab18160016156df565b613abc906008615512565b61ffff16858281518110613ad257613ad26151cf565b016020015160f81c901b9190911790600101613a9d565b5061ffff811615613b135760405163407b587360e01b815261ffff82166004820152602401610631565b5f805b6004811015613b6e57613b2a8160036156df565b613b35906008615512565b63ffffffff1686613b478360026154a4565b81518110613b5757613b576151cf565b016020015160f81c901b9190911790600101613b16565b5063ffffffff811615613b9457604051635b60892f60e01b815260040160405180910390fd5b5f805b6020811015613be957613bab81601f6156df565b613bb6906008615512565b87613bc28360066154a4565b81518110613bd257613bd26151cf565b016020015160f81c901b9190911790600101613b97565b505f805b6008811015613c4857613c018160076156df565b613c0c906008615512565b6001600160401b031688613c218360266154a4565b81518110613c3157613c316151cf565b016020015160f81c901b9190911790600101613bed565b5090969095509350505050565b613c5d614d70565b5f8281525f80516020615b028339815191526020526040808220815160e0810190925280545f80516020615ac283398151915293929190829060ff166005811115613caa57613caa614f92565b6005811115613cbb57613cbb614f92565b8152602001600182018054613ccf906150f2565b80601f0160208091040260200160405190810160405280929190818152602001828054613cfb906150f2565b8015613d465780601f10613d1d57610100808354040283529160200191613d46565b820191905f5260205f20905b815481529060010190602001808311613d2957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613db457613db4614f92565b14613de7575f8481526007830160205260409081902054905163170cc93360e21b81526106319160ff1690600401615124565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613e2b57613e2b614f92565b021790555060208201516001820190613e4490826153d5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613ee285826136b6565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b80471015613f5c5760405163cd78605960e01b8152306004820152602401610631565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613fa5576040519150601f19603f3d011682016040523d82523d5f602084013e613faa565b606091505b505090508061063a57604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff1661401057604051637fab81e560e01b815260040160405180910390fd5b5f80516020615ac28339815191524261402f6060860160408701614f14565b6001600160401b0316111580614069575061404d6202a300426154a4565b61405d6060860160408701614f14565b6001600160401b031610155b156140a35761407e6060850160408601614f14565b604051635879da1360e11b81526001600160401b039091166004820152602401610631565b6140b86140b36060860186615801565b6148eb565b6140c86140b36080860186615801565b60306140d760208601866156f2565b905014614109576140eb60208501856156f2565b6040516326475b2f60e11b8152610631925060040190815260200190565b61411384806156f2565b90505f036141405761412584806156f2565b604051633e08a12560e11b8152600401610631929190615815565b5f6008820161414f86806156f2565b60405161415d9291906155b3565b908152602001604051809103902054146141965761417b84806156f2565b60405163a41f772f60e01b8152600401610631929190615815565b6141a0835f614544565b6040805160e08101909152815481525f9081906142ac90602081016141c589806156f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061420d908a018a6156f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161425660608a0160408b01614f14565b6001600160401b0316815260200161427160608a018a615801565b61427a90615843565b815260200161428c60808a018a615801565b61429590615843565b8152602001876001600160401b0316815250614a54565b5f828152600686016020526040902091935091506142ca82826153d5565b5081600884016142da88806156f2565b6040516142e89291906155b3565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614324908590600401615132565b6020604051808303815f875af1158015614340573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906143649190615144565b6040805160e08101909152909150806001815260200161438489806156f2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509385525050506001600160401b0389166020808401829052604080850184905260608501929092526080840183905260a0909301829052868252600788019092522081518154829060ff1916600183600581111561441357614413614f92565b02179055506020820151600182019061442c90826153d5565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff191691909216179055806144ca88806156f2565b6040516144d89291906155b3565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906145169190614f14565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f80516020615ac28339815191525f6001600160401b0380841690851611156145785761457183856155e2565b9050614585565b61458284846155e2565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145e75750600184015481516145e3916001600160401b0316906154a4565b8210155b1561460d576001600160401b03831660608201528181526040810151602082015261462c565b828160600181815161461f91906155c2565b6001600160401b03169052505b606081015161463c90606461579d565b602082015160018601546001600160401b0392909216916146679190600160401b900460ff16615512565b101561469757606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610631565b856001600160401b0316816040018181516146b291906154a4565b9052506040810180516001600160401b03871691906146d29083906156df565b905250805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615b028339815191526020526040812060020180545f80516020615ac2833981519152919060089061476890600160401b90046001600160401b031661590a565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61479b6139ab565b6147a3614c41565b610f7581614c49565b6147b46139ab565b6139f4614d31565b6147c46139ab565b5f80516020615aa283398151915261ffff841615806147e8575061271061ffff8516115b1561480c57604051635f12e6c360e11b815261ffff85166004820152602401610631565b858711156148305760405163222d164360e21b815260048101889052602401610631565b60ff831615806148435750600a60ff8416115b156148665760405163170db35960e31b815260ff84166004820152602401610631565b95865560018601949094556002850180546001600160401b039490941669ffffffffffffffffffff1990941693909317600160401b61ffff93909316929092029190911767ffffffffffffffff60501b191660ff91909116600160501b02179055600390910180546001600160a01b0319166001600160a01b03909216919091179055565b6148f86020820182614ebd565b63ffffffff161580156149185750614913602082018261518a565b151590505b1561495f5761492a6020820182614ebd565b614937602083018361518a565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610631565b61496c602082018261518a565b905061497b6020830183614ebd565b63ffffffff1611156149945761492a6020820182614ebd565b60015b6149a4602083018361518a565b90508110156114da576149ba602083018361518a565b6149c56001846156df565b8181106149d4576149d46151cf565b90506020020160208101906149e9919061516f565b6001600160a01b03166149ff602084018461518a565b83818110614a0f57614a0f6151cf565b9050602002016020810190614a24919061516f565b6001600160a01b03161015614a4c57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614997565b5f6060826040015151603014614a7d5760405163180ffa0d60e01b815260040160405180910390fd5b82516020808501518051604080880151606089015160808a01518051908701515193515f98614abe988a986001989297929690959094909390929101615925565b60405160208183030381529060405290505f5b84608001516020015151811015614b3057818560800151602001518281518110614afd57614afd6151cf565b6020026020010151604051602001614b169291906159df565b60408051601f198184030181529190529150600101614ad1565b5060a0840151805160209182015151604051614b50938593929101615a15565b60405160208183030381529060405290505f5b8460a001516020015151811015614bc257818560a00151602001518281518110614b8f57614b8f6151cf565b6020026020010151604051602001614ba89291906159df565b60408051601f198184030181529190529150600101614b63565b5060c0840151604051614bd9918391602001615a50565b6040516020818303038152906040529050600281604051614bfa9190615380565b602060405180830381855afa158015614c15573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190614c389190615144565b94909350915050565b6139f46139ab565b614c516139ab565b80355f80516020615ac28339815191529081556014614c7660608401604085016157e1565b60ff161180614c955750614c9060608301604084016157e1565b60ff16155b15614cc957614caa60608301604084016157e1565b604051634a59bbff60e11b815260ff9091166004820152602401610631565b614cd960608301604084016157e1565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614d0a6040830160208401614f14565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c076139ab565b508054614d45906150f2565b5f825580601f10614d54575050565b601f0160209004905f5260205f2090810190610f759190614dad565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614dc1575f8155600101614dae565b5090565b8015158114610f75575f80fd5b803563ffffffff811681146119ed575f80fd5b5f805f60608486031215614df7575f80fd5b833592506020840135614e0981614dc5565b9150614e1760408501614dd2565b90509250925092565b5f60208284031215614e30575f80fd5b5035919050565b5f8060408385031215614e48575f80fd5b82356001600160401b03811115614e5d575f80fd5b830160808186031215614e6e575f80fd5b9150614e7c60208401614dd2565b90509250929050565b5f6101208284031215614e96575f80fd5b50919050565b5f8060408385031215614ead575f80fd5b82359150614e7c60208401614dd2565b5f60208284031215614ecd575f80fd5b61169482614dd2565b5f8060408385031215614ee7575f80fd5b614ef083614dd2565b946020939093013593505050565b80356001600160401b03811681146119ed575f80fd5b5f60208284031215614f24575f80fd5b61169482614efe565b803561ffff811681146119ed575f80fd5b5f805f60608486031215614f50575f80fd5b83356001600160401b03811115614f65575f80fd5b840160a08187031215614f76575f80fd5b9250614f8460208501614f2d565b9150614e1760408501614efe565b634e487b7160e01b5f52602160045260245ffd5b60068110614fb657614fb6614f92565b9052565b5f5b83811015614fd4578181015183820152602001614fbc565b50505f910152565b5f8151808452614ff3816020860160208601614fba565b601f01601f19169290920160200192915050565b60208152615019602082018351614fa6565b5f602083015160e06040840152615034610100840182614fdc565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615098575f80fd5b82356001600160401b03808211156150ae575f80fd5b818501915085601f8301126150c1575f80fd5b8135818111156150cf575f80fd5b8660208285010111156150e0575f80fd5b60209290920196919550909350505050565b600181811c9082168061510657607f821691505b602082108103614e9657634e487b7160e01b5f52602260045260245ffd5b60208101610ea58284614fa6565b602081525f6116946020830184614fdc565b5f60208284031215615154575f80fd5b5051919050565b6001600160a01b0381168114610f75575f80fd5b5f6020828403121561517f575f80fd5b81356116948161515b565b5f808335601e1984360301811261519f575f80fd5b8301803591506001600160401b038211156151b8575f80fd5b6020019150600581901b3603821315613806575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126151f7575f80fd5b9190910192915050565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561523757615237615201565b60405290565b604080519081016001600160401b038111828210171561523757615237615201565b604051601f8201601f191681016001600160401b038111828210171561528757615287615201565b604052919050565b5f6001600160401b038211156152a7576152a7615201565b50601f01601f191660200190565b5f82601f8301126152c4575f80fd5b81356152d76152d28261528f565b61525f565b8181528460208386010111156152eb575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615317575f80fd5b61531f615215565b82356001600160401b0380821115615335575f80fd5b615341368387016152b5565b83526020850135915080821115615356575f80fd5b50615363368286016152b5565b60208301525061537560408401614efe565b604082015292915050565b5f82516151f7818460208701614fba565b601f82111561063a57805f5260205f20601f840160051c810160208510156153b65750805b601f840160051c820191505b8181101561187d575f81556001016153c2565b81516001600160401b038111156153ee576153ee615201565b615402816153fc84546150f2565b84615391565b602080601f831160018114615435575f841561541e5750858301515b5f19600386901b1c1916600185901b1785556110a7565b5f85815260208120601f198616915b8281101561546357888601518255948401946001909101908401615444565b508582101561548057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610ea557610ea5615490565b5f63ffffffff8083168181036154cf576154cf615490565b6001019392505050565b5f826154f357634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061550c5761550c614f92565b91905290565b8082028115828204841417610ea557610ea5615490565b5f60208083525f845461553b816150f2565b806020870152604060018084165f811461555c5760018114615578576155a5565b60ff19851660408a0152604084151560051b8a010195506155a5565b895f5260205f205f5b8581101561559c5781548b8201860152908301908801615581565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561200157612001615490565b6001600160401b0382811682821603908082111561200157612001615490565b80516119ed81614dc5565b5f806040838503121561561e575f80fd5b82516001600160401b0380821115615634575f80fd5b9084019060608287031215615647575f80fd5b61564f615215565b825181526020808401516156628161515b565b82820152604084015183811115615677575f80fd5b80850194505087601f85011261568b575f80fd5b8351925061569b6152d28461528f565b83815288828587010111156156ae575f80fd5b6156bd84838301848801614fba565b806040840152508195506156d2818801615602565b9450505050509250929050565b81810381811115610ea557610ea5615490565b5f808335601e19843603018112615707575f80fd5b8301803591506001600160401b03821115615720575f80fd5b602001915036819003821315613806575f80fd5b5f8851615745818460208d01614fba565b60e089901b6001600160e01b031916908301908152868860048301378681019050600481015f8152858782375060c09390931b6001600160c01b0319166004939094019283019390935250600c019695505050505050565b6001600160401b038181168382160280821691908281146157c0576157c0615490565b505092915050565b5f602082840312156157d8575f80fd5b61169482614f2d565b5f602082840312156157f1575f80fd5b813560ff81168114611694575f80fd5b5f8235603e198336030181126151f7575f80fd5b60208152816020820152818360408301375f818301604090810191909152601f909201601f19160101919050565b5f60408236031215615853575f80fd5b61585b61523d565b61586483614dd2565b81526020808401356001600160401b0380821115615880575f80fd5b9085019036601f830112615892575f80fd5b8135818111156158a4576158a4615201565b8060051b91506158b584830161525f565b81815291830184019184810190368411156158ce575f80fd5b938501935b838510156158f857843592506158e88361515b565b82825293850193908501906158d3565b94860194909452509295945050505050565b5f6001600160401b038083168181036154cf576154cf615490565b61ffff60f01b8a60f01b1681525f63ffffffff60e01b808b60e01b166002840152896006840152808960e01b16602684015250865161596b81602a850160208b01614fba565b86519083019061598281602a840160208b01614fba565b60c087901b6001600160c01b031916602a92909101918201526159b4603282018660e01b6001600160e01b0319169052565b6159cd603682018560e01b6001600160e01b0319169052565b603a019b9a5050505050505050505050565b5f83516159f0818460208801614fba565b60609390931b6bffffffffffffffffffffffff19169190920190815260140192915050565b5f8451615a26818460208901614fba565b6001600160e01b031960e095861b8116919093019081529290931b16600482015260080192915050565b5f8351615a61818460208801614fba565b60c09390931b6001600160c01b031916919092019081526008019291505056fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d054317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a164736f6c6343000819000a", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/ExampleRewardCalculator.sol b/contracts/validator-manager/ExampleRewardCalculator.sol index 79740d61a..1e73d8a0e 100644 --- a/contracts/validator-manager/ExampleRewardCalculator.sol +++ b/contracts/validator-manager/ExampleRewardCalculator.sol @@ -26,9 +26,7 @@ contract ExampleRewardCalculator is IRewardCalculator { uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, - uint64 uptimeSeconds, - uint256, // initialSupply - uint256 // endSupply + uint64 uptimeSeconds ) external view returns (uint256) { // Equivalent to uptimeSeconds/(validator.endedAt - validator.startedAt) < UPTIME_REWARDS_THRESHOLD_PERCENTAGE/100 // Rearranged to prevent integer division truncation. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index dcfa9ed5f..77d54b8d6 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -240,9 +240,7 @@ abstract contract PoSValidatorManager is validatorStartTime: validator.startedAt, stakingStartTime: validator.startedAt, stakingEndTime: validator.endedAt, - uptimeSeconds: uptimeSeconds, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: uptimeSeconds }); $._redeemableValidatorRewards[validationID] += reward; return (reward > 0); @@ -572,9 +570,7 @@ abstract contract PoSValidatorManager is validatorStartTime: validator.startedAt, stakingStartTime: delegator.startedAt, stakingEndTime: delegationEndTime, - uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds }); } diff --git a/contracts/validator-manager/interfaces/IRewardCalculator.sol b/contracts/validator-manager/interfaces/IRewardCalculator.sol index 5ed55458c..e8c556e25 100644 --- a/contracts/validator-manager/interfaces/IRewardCalculator.sol +++ b/contracts/validator-manager/interfaces/IRewardCalculator.sol @@ -16,16 +16,12 @@ interface IRewardCalculator { * @param stakingStartTime The time the staker started staking * @param stakingEndTime The time the staker stopped staking * @param uptimeSeconds The total time the validator was validating - * @param initialSupply The total token supply at the start of the staking period - * @param endSupply The total token supply at the end of the staking period */ function calculateReward( uint256 stakeAmount, uint64 validatorStartTime, uint64 stakingStartTime, uint64 stakingEndTime, - uint64 uptimeSeconds, - uint256 initialSupply, - uint256 endSupply + uint64 uptimeSeconds ) external view returns (uint256); } diff --git a/contracts/validator-manager/tests/ExamplesRewardCalculatorTests.t.sol b/contracts/validator-manager/tests/ExamplesRewardCalculatorTests.t.sol index 87b18020c..dc59a6409 100644 --- a/contracts/validator-manager/tests/ExamplesRewardCalculatorTests.t.sol +++ b/contracts/validator-manager/tests/ExamplesRewardCalculatorTests.t.sol @@ -28,9 +28,7 @@ contract ExampleRewardCalculatorTest is Test { validatorStartTime: DEFAULT_START_TIME, stakingStartTime: DEFAULT_START_TIME, stakingEndTime: DEFAULT_END_TIME, - uptimeSeconds: DEFAULT_UPTIME, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: DEFAULT_UPTIME }); assertEq(output, 42e8); } @@ -41,9 +39,7 @@ contract ExampleRewardCalculatorTest is Test { validatorStartTime: DEFAULT_START_TIME, stakingStartTime: DEFAULT_START_TIME, stakingEndTime: DEFAULT_END_TIME, - uptimeSeconds: DEFAULT_UPTIME - 1, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: DEFAULT_UPTIME - 1 }); assertEq(output, 0); } diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 645b5f99e..00ae5643f 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -546,9 +546,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { 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, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); _completeEndDelegationWithChecks({ @@ -678,9 +676,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, - uptimeSeconds: validationEndTime - DEFAULT_REGISTRATION_TIMESTAMP, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: validationEndTime - DEFAULT_REGISTRATION_TIMESTAMP }); _completeEndDelegationWithChecks({ @@ -750,9 +746,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, - uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); uint256 expectedValidatorFees = expectedTotalReward * DEFAULT_DELEGATION_FEE_BIPS / 10000; @@ -803,9 +797,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { 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, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); uint256 expectedValidatorFees = expectedTotalReward * DEFAULT_DELEGATION_FEE_BIPS / 10000; @@ -944,9 +936,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { 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, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); // Complete delegation1 by delivering the weight update from nonce 4 (delegator2's nonce) @@ -979,9 +969,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, - uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); _completeEndValidationWithChecks({ @@ -1422,9 +1410,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validatorStartTime: completeRegistrationTimestamp, stakingStartTime: completeRegistrationTimestamp, stakingEndTime: completionTimestamp, - uptimeSeconds: completionTimestamp - completeRegistrationTimestamp, - initialSupply: 0, - endSupply: 0 + uptimeSeconds: completionTimestamp - completeRegistrationTimestamp }); _completeEndValidationWithChecks({