diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 5feff8582..b21145459 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput struct { // ERC20TokenStakingManagerMetaData contains all meta data concerning the ERC20TokenStakingManager contract. var ERC20TokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"erc20\",\"outputs\":[{\"internalType\":\"contractIERC20Mintable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615fc4380380615fc483398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e778061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c80637d8d2f7711610140578063afb98096116100bf578063c974d1b611610084578063c974d1b614610532578063d5f20ff61461053a578063df93d8de1461055a578063e4a63c4014610564578063fb8b11dd14610578578063fd7ac5e71461058b575f80fd5b8063afb98096146104c3578063b771b3bc146104ea578063ba3a4b97146104f8578063bc5fbfec1461050b578063bee0a03f1461051f575f80fd5b80639ae06447116101055780639ae06447146104775780639e1bc4ef1461048a5780639e478eea1461049d578063a3a65e48146104b0578063a9778a7a146102f9575f80fd5b80637d8d2f771461042357806380dd672f146104365780638280a25a146104495780638ef34c981461045157806393e2459814610464575f80fd5b8063467ef06f116101cc578063620658561161019157806362065856146103b257806366435abf146103c5578063732214f8146103d857806376f78621146103df578063785e9e86146103f2575f80fd5b8063467ef06f1461033b5780634bee00401461034e5780635dd6a6cb1461036f57806360305d621461038257806360ad77841461039f575f80fd5b806325e1c7761161021257806325e1c776146102bb5780632e2194d8146102ce57806335455ded146102f957806337b9be8f146103155780633a1cfff614610328575f80fd5b80630118acc41461024e5780630322ed9814610263578063151d30d1146102765780631ec447241461029557806320d91b7a146102a8575b5f80fd5b61026161025c366004614dbb565b61059e565b005b610261610271366004614df6565b6105af565b61027e600a81565b60405160ff90911681526020015b60405180910390f35b6102616102a3366004614dbb565b61083f565b6102616102b6366004614e0d565b61084b565b6102616102c9366004614e5b565b610e01565b6102e16102dc366004614df6565b610e75565b6040516001600160401b03909116815260200161028c565b61030261271081565b60405161ffff909116815260200161028c565b610261610323366004614e90565b610ec9565b610261610336366004614dbb565b610edc565b610261610349366004614ede565b610ee8565b61036161035c366004614f1c565b610fcd565b60405190815260200161028c565b61026161037d366004614e90565b611002565b61038a601481565b60405163ffffffff909116815260200161028c565b6102616103ad366004614e5b565b61100e565b6103616103c0366004614f83565b6112d6565b6102e16103d3366004614df6565b6112f6565b6103615f81565b6102616103ed366004614dbb565b61130a565b5f80516020615dc2833981519152546001600160a01b03165b6040516001600160a01b03909116815260200161028c565b610261610431366004614e90565b611316565b610261610444366004614e5b565b611322565b61027e603081565b61026161045f366004614f9e565b61155c565b610261610472366004614df6565b61163d565b610261610485366004614e90565b6116d1565b610361610498366004614fcc565b6116dd565b6102616104ab366004614fec565b611709565b6102616104be366004614ede565b6117e8565b6103617f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040b6005600160991b0181565b610261610506366004614df6565b6119de565b6103615f80516020615de283398151915281565b61026161052d366004614df6565b611c37565b61027e601481565b61054d610548366004614df6565b611d73565b60405161028c9190615094565b6102e16202a30081565b6103615f80516020615dc283398151915281565b610261610586366004614f9e565b611ec2565b610361610599366004615114565b611f89565b6105aa8383835f611fe4565b505050565b5f8181525f80516020615e028339815191526020526040808220815160e0810190925280545f80516020615de283398151915293929190829060ff1660058111156105fc576105fc61501f565b600581111561060d5761060d61501f565b81526020016001820180546106219061517f565b80601f016020809104026020016040519081016040528092919081815260200182805461064d9061517f565b80156106985780601f1061066f57610100808354040283529160200191610698565b820191905f5260205f20905b81548152906001019060200180831161067b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156107035761070361501f565b1461073f575f8381526005830160205260409081902054905163170cc93360e21b81526107369160ff16906004016151b7565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156107b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107dd91908101906152c0565b6040518263ffffffff1660e01b81526004016107f991906152f1565b6020604051808303815f875af1158015610815573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108399190615303565b50505050565b6108398383835f612010565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615de28339815191529060ff161561089d57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109049190615303565b83602001351461092d576040516372b0a7e760e11b815260208401356004820152602401610736565b3061093e606085016040860161531a565b6001600160a01b0316146109815761095c606084016040850161531a565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610736565b5f61098f6060850185615335565b905090505f805b828163ffffffff161015610bf7575f6109b26060880188615335565b8363ffffffff168181106109c8576109c861537a565b90506020028101906109da919061538e565b6109e3906153f9565b80516040519192505f9160068801916109fb91615474565b90815260200160405180910390205414610a2b57805160405163a41f772f60e01b815261073691906004016152f1565b5f6002885f013584604051602001610a5a92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a7491615474565b602060405180830381855afa158015610a8f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ab29190615303565b90508086600601835f0151604051610aca9190615474565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b0a90826154c9565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b8a9085615598565b8251604051919550610b9b91615474565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bf0906155b8565b9050610996565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c3a910460ff16836155da565b6001600160401b03161015610c6d57604051633e1a785160e01b81526001600160401b0382166004820152602401610736565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c918761233d565b604001516040518263ffffffff1660e01b8152600401610cb191906152f1565b602060405180830381865af4158015610ccc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf09190615303565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d2a9190615730565b5f60405180830381865af4158015610d44573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d6b91908101906152c0565b90505f600282604051610d7e9190615474565b602060405180830381855afa158015610d99573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dbc9190615303565b9050828114610de85760405163baaea89d60e01b81526004810182905260248101849052604401610736565b5050506007909201805460ff1916600117905550505050565b610e0a82612453565b610e2a576040516330efa98b60e01b815260048101839052602401610736565b5f610e3483611d73565b5190506002816005811115610e4b57610e4b61501f565b14610e6b578060405163170cc93360e21b815260040161073691906151b7565b610839838361247c565b5f80610e7f61271b565b60030154610e8d90846157c4565b9050801580610ea257506001600160401b0381115b15610ec35760405163222d164360e21b815260048101849052602401610736565b92915050565b610ed584848484612010565b5050505050565b6108398383835f61273f565b610ef0612961565b5f610ef961271b565b90505f80610f0684612998565b91509150610f1382612453565b610f1f57505050610fb4565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f56575080610f74565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f8957610f8961501f565b03610f9857610f988185612d50565b610fae82610fa985604001516112d6565b612d7a565b50505050505b610fca60015f80516020615e2283398151915255565b50565b5f610fd6612961565b610fe285858585612db0565b9050610ffa60015f80516020615e2283398151915255565b949350505050565b61083984848484612f15565b5f61101761271b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156110505761105061501f565b60038111156110615761106161501f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110d782611d73565b90506001835160038111156110ee576110ee61501f565b1461110f578251604051633b0d540d60e21b815261073691906004016157e3565b6004815160058111156111245761112461501f565b0361113a5761113286612f41565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61115f8961233d565b604001516040518263ffffffff1660e01b815260040161117f91906152f1565b606060405180830381865af415801561119a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111be91906157fd565b50915091508184146111eb57846040015160405163089938b360e11b815260040161073691815260200190565b806001600160401b031683606001516001600160401b031610806112245750806001600160401b03168560a001516001600160401b0316115b1561124d57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112df61271b565b60030154610ec3906001600160401b03841661583d565b5f61130082611d73565b6080015192915050565b6105aa8383835f612f15565b610ed58484848461273f565b61132a612961565b5f61133361271b565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561136c5761136c61501f565b600381111561137d5761137d61501f565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113f6576113f661501f565b14611417578051604051633b0d540d60e21b815261073691906004016157e3565b60046114268260400151611d73565b5160058111156114385761143861501f565b14611537575f6114478461233d565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161148691906152f1565b606060405180830381865af41580156114a1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114c591906157fd565b5091509150818460400151146114f15760405163089938b360e11b815260048101839052602401610736565b806001600160401b03168460c001516001600160401b0316111561153357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5050505b61154084612f41565b505061155860015f80516020615e2283398151915255565b5050565b5f61156561271b565b90506001600160a01b0382166115995760405163caa903f960e01b81526001600160a01b0383166004820152602401610736565b5f8381526006820160205260409020546001600160a01b031633146115df57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610736565b336001600160a01b0383160361160e575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f61164661271b565b90505f61165283611d73565b51905060048160058111156116695761166961501f565b14611689578060405163170cc93360e21b815260040161073691906151b7565b5f8381526006830160205260409020546001600160a01b031633146116ae57336115ba565b5f8381526006830160205260409020546105aa906001600160a01b031684612d50565b61083984848484611fe4565b5f6116e6612961565b6116f183338461314e565b9050610ec360015f80516020615e2283398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611752575080546001600160401b03808416911610155b156117705760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561179b8484613393565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615de28339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61181b8661233d565b604001516040518263ffffffff1660e01b815260040161183b91906152f1565b6040805180830381865af4158015611855573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118799190615854565b915091508061189f57604051632d07135360e01b81528115156004820152602401610736565b5f828152600484016020526040902080546118b99061517f565b90505f036118dd5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580860160205260409091205460ff16908111156119045761190461501f565b14611937575f8281526005840160205260409081902054905163170cc93360e21b81526107369160ff16906004016151b7565b5f828152600484016020526040812061194f91614d0a565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119e761271b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611a2057611a2061501f565b6003811115611a3157611a3161501f565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611aaa57611aaa61501f565b14158015611acb5750600381516003811115611ac857611ac861501f565b14155b15611aec578051604051633b0d540d60e21b815261073691906004016157e3565b5f611afa8260400151611d73565b905080606001516001600160401b03165f03611b2c576040516339b894f960e21b815260048101859052602401610736565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b9a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611bb4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bdb91908101906152c0565b6040518263ffffffff1660e01b8152600401611bf791906152f1565b6020604051808303815f875af1158015611c13573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed59190615303565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615de28339815191529190611c7e9061517f565b90505f03611ca25760405163089938b360e11b815260048101839052602401610736565b60015f838152600580840160205260409091205460ff1690811115611cc957611cc961501f565b14611cfc575f8281526005820160205260409081902054905163170cc93360e21b81526107369160ff16906004016151b7565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611d339201615877565b6020604051808303815f875af1158015611d4f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105aa9190615303565b611d7b614d41565b5f8281525f80516020615e02833981519152602052604090819020815160e0810190925280545f80516020615de2833981519152929190829060ff166005811115611dc857611dc861501f565b6005811115611dd957611dd961501f565b8152602001600182018054611ded9061517f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e199061517f565b8015611e645780601f10611e3b57610100808354040283529160200191611e64565b820191905f5260205f20905b815481529060010190602001808311611e4757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ef45760405163caa903f960e01b81526001600160a01b0382166004820152602401610736565b5f611efd61271b565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611f2b57336115ba565b336001600160a01b03831603611f5a575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615de2833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611fcc9086908690615901565b90815260200160405180910390205491505092915050565b611ff084848484612010565b61083957604051631036cf9160e11b815260048101859052602401610736565b5f8061201a61271b565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156120535761205361501f565b60038111156120645761206461501f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6120da82611d73565b90506002835160038111156120f1576120f161501f565b14612112578251604051633b0d540d60e21b815261073691906004016157e3565b60208301516001600160a01b031633146121ae575f8281526006850160205260409020546001600160a01b0316331461214b57336115ba565b5f82815260068501602052604090205460a082015161217a91600160b01b90046001600160401b031690615598565b6001600160401b03164210156121ae5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b6002815160058111156121c3576121c361501f565b036122e557600284015460808401516121e5916001600160401b031690615598565b6001600160401b03164210156122195760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b871561222b57612229828861247c565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161226491849161225f9190615910565b6133ad565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556122a784888c613584565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610ffa9350505050565b6004815160058111156122fa576122fa61501f565b036123215761230a83878b613584565b5061231489612f41565b6001945050505050610ffa565b805160405163170cc93360e21b815261073691906004016151b7565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123a1573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123c89190810190615930565b91509150806123ea57604051636b2f19e960e01b815260040160405180910390fd5b815115612410578151604051636ba589a560e01b81526004810191909152602401610736565b60208201516001600160a01b03161561244c576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5092915050565b5f8061245d61271b565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156124c7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124ee9190810190615930565b915091508061251057604051636b2f19e960e01b815260040160405180910390fd5b5f61251961271b565b6005810154845191925014612547578251604051636ba589a560e01b81526004810191909152602401610736565b60208301516001600160a01b031615612583576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b60208301516001600160a01b0316156125bf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125fc91906152f1565b6040805180830381865af4158015612616573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061263a91906159c0565b915091508188146126615760405163089938b360e11b815260048101899052602401610736565b5f8881526006840160205260409020600101546001600160401b0390811690821611156126f2575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612710565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061274961271b565b90505f61275587613769565b905061276087612453565b61276f57600192505050610ffa565b5f8781526006830160205260409020546001600160a01b0316331461279457336115ba565b5f87815260068301602052604090205460a08201516127c391600160b01b90046001600160401b031690615598565b6001600160401b03168160c001516001600160401b0316101561280a5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610736565b5f86156128225761281b888761247c565b9050612840565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612865906112d6565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156128ce573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128f29190615303565b90508084600a015f8b81526020019081526020015f205f82825461291691906159e3565b90915550506001600160a01b03861615612953575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615e2283398151915280546001190161299257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129a1614d41565b5f80516020615de28339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6129d48861233d565b604001516040518263ffffffff1660e01b81526004016129f491906152f1565b6040805180830381865af4158015612a0e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a329190615854565b915091508015612a5957604051632d07135360e01b81528115156004820152602401610736565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a9057612a9061501f565b6005811115612aa157612aa161501f565b8152602001600182018054612ab59061517f565b80601f0160208091040260200160405190810160405280929190818152602001828054612ae19061517f565b8015612b2c5780601f10612b0357610100808354040283529160200191612b2c565b820191905f5260205f20905b815481529060010190602001808311612b0f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b9757612b9761501f565b14158015612bb85750600181516005811115612bb557612bb561501f565b14155b15612bd957805160405163170cc93360e21b815261073691906004016151b7565b600381516005811115612bee57612bee61501f565b03612bfc5760048152612c01565b600581525b836006018160200151604051612c179190615474565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612c5a57612c5a61501f565b021790555060208201516001820190612c7390826154c9565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d1957612d1961501f565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d5961271b565b5f838152600a82016020526040812080549190559091506108398482613a4e565b5f80516020615dc283398151915254611558906001600160a01b03168383613ac4565b60015f80516020615e2283398151915255565b5f80612dba61271b565b600281015490915061ffff600160401b90910481169086161080612de3575061271061ffff8616115b15612e0757604051635f12e6c360e11b815261ffff86166004820152602401610736565b60028101546001600160401b039081169085161015612e43576040516202a06d60e11b81526001600160401b0385166004820152602401610736565b8054831080612e555750806001015483115b15612e765760405163222d164360e21b815260048101849052602401610736565b5f612e8084613b23565b90505f612e8c82610e75565b90505f612e998983613b46565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612f218484848461273f565b61083957604051635bff683f60e11b815260048101859052602401610736565b5f612f4a61271b565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f8357612f8361501f565b6003811115612f9457612f9461501f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130317fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130409190615598565b6001600160401b03164210156130745760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130c4575060208201516130e2565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130ef8388866140b8565b915091506131088560200151610fa987606001516112d6565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f8061315861271b565b90505f6131676102dc85613b23565b90505f61317387611d73565b905061317e87612453565b61319e576040516330efa98b60e01b815260048101889052602401610736565b6002815160058111156131b3576131b361501f565b146131d457805160405163170cc93360e21b815261073691906004016151b7565b5f8282608001516131e59190615598565b905083600201600a9054906101000a90046001600160401b0316826040015161320e91906155da565b6001600160401b0316816001600160401b0316111561324b57604051636d51fe0560e11b81526001600160401b0382166004820152602401610736565b5f806132578a846133ad565b915091505f8a8360405160200161328592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61339b614165565b6133a4826141b0565b6115588161422a565b5f8281525f80516020615e02833981519152602052604081206002015481905f80516020615de283398151915290600160801b90046001600160401b03166133f58582614292565b5f6133ff876144fc565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156134a8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134cf91908101906152c0565b6040518263ffffffff1660e01b81526004016134eb91906152f1565b6020604051808303815f875af1158015613507573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061352b9190615303565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061358e61271b565b90505f61359e8660400151611d73565b90505f6003825160058111156135b6576135b661501f565b14806135d457506004825160058111156135d2576135d261501f565b145b156135e4575060c0810151613621565b6002825160058111156135f9576135f961501f565b03613605575042613621565b815160405163170cc93360e21b815261073691906004016151b7565b86608001516001600160401b0316816001600160401b031611613649575f935050505061338c565b600483015460608801515f916001600160a01b031690634f22429f9061366e906112d6565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156136ef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137139190615303565b5f878152600886016020526040902081905590506001600160a01b03871615612710575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b613771614d41565b5f8281525f80516020615e028339815191526020526040808220815160e0810190925280545f80516020615de283398151915293929190829060ff1660058111156137be576137be61501f565b60058111156137cf576137cf61501f565b81526020016001820180546137e39061517f565b80601f016020809104026020016040519081016040528092919081815260200182805461380f9061517f565b801561385a5780601f106138315761010080835404028352916020019161385a565b820191905f5260205f20905b81548152906001019060200180831161383d57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156138c8576138c861501f565b146138fb575f8481526005830160205260409081902054905163170cc93360e21b81526107369160ff16906004016151b7565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156139405761394061501f565b02179055506020820151600182019061395990826154c9565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139f785826133ad565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615dc283398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613aa9575f80fd5b505af1158015613abb573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526105aa91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614571565b5f610ec3825f80516020615dc2833981519152546001600160a01b0316906145d2565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b8a57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615de283398151915242613ba96060860160408701614f83565b6001600160401b0316111580613be35750613bc76202a300426159e3565b613bd76060860160408701614f83565b6001600160401b031610155b15613c1d57613bf86060850160408601614f83565b604051635879da1360e11b81526001600160401b039091166004820152602401610736565b60038101546001600160401b0390613c4090600160401b900482168583166159e3565b1115613c6a57604051633e1a785160e01b81526001600160401b0384166004820152602401610736565b613c7f613c7a60608601866159f6565b6145de565b613c8f613c7a60808601866159f6565b6030613c9e6020860186615a0a565b905014613cd057613cb26020850185615a0a565b6040516326475b2f60e11b8152610736925060040190815260200190565b613cda8480615a0a565b90505f03613d0757613cec8480615a0a565b604051633e08a12560e11b8152600401610736929190615a4c565b5f60068201613d168680615a0a565b604051613d24929190615901565b90815260200160405180910390205414613d5d57613d428480615a0a565b60405163a41f772f60e01b8152600401610736929190615a4c565b613d67835f614292565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613da48a80615a0a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613dec908b018b615a0a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613e3560608b0160408c01614f83565b6001600160401b03168152602001613e5060608b018b6159f6565b613e5990615a5f565b8152602001613e6b60808b018b6159f6565b613e7490615a5f565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613ea29190615b8c565b5f60405180830381865af4158015613ebc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ee39190810190615c43565b5f82815260048601602052604090209193509150613f0182826154c9565b508160068401613f118880615a0a565b604051613f1f929190615901565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613f5b9085906004016152f1565b6020604051808303815f875af1158015613f77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f9b9190615303565b5f8481526005860160205260409020805460ff191660011790559050613fc18780615a0a565b5f858152600587016020526040902060010191613fdf919083615c86565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff191690558061403e8880615a0a565b60405161404c929190615901565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b604001602081019061408a9190614f83565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f6140c361271b565b5f86815260088201602052604081208054908290559192509081908015614157575f8781526006850160205260409020546127109061410d90600160a01b900461ffff168361583d565b61411791906157c4565b91508184600a015f8981526020019081526020015f205f82825461413b91906159e3565b9091555061414b90508282615d3f565b92506141578984613a4e565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166141ae57604051631afcd79f60e31b815260040160405180910390fd5b565b6141b8614165565b6141c181614747565b6141c9614760565b610fca606082013560808301356141e660c0850160a08601614f83565b6141f660e0860160c08701615d52565b614207610100870160e08801615d6b565b61010087013561421f61014089016101208a0161531a565b886101400135614770565b614232614165565b5f80516020615dc28339815191526001600160a01b03821661427257604051637330680360e01b81526001600160a01b0383166004820152602401610736565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615de28339815191525f6001600160401b0380841690851611156142c6576142bf8385615910565b90506142d3565b6142d08484615910565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b900490921660608201524291158061434057506001840154815161433c916001600160401b0316906159e3565b8210155b15614368576001600160401b0380841660608301528282526040820151166020820152614387565b828160600181815161437a9190615598565b6001600160401b03169052505b60608101516143979060646155da565b602082015160018601546001600160401b0392909216916143c29190600160401b900460ff166155da565b6001600160401b031610156143fb57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610736565b858160400181815161440d9190615598565b6001600160401b031690525060408101805186919061442d908390615910565b6001600160401b03169052506001840154604082015160649161445b91600160401b90910460ff16906155da565b6001600160401b03161015614494576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610736565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615e028339815191526020526040812060020180545f80516020615de2833981519152919060089061454690600160401b90046001600160401b0316615d8b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6145856001600160a01b03841683614955565b905080515f141580156145a95750808060200190518101906145a79190615da6565b155b156105aa57604051635274afe760e01b81526001600160a01b0384166004820152602401610736565b5f61338c833384614962565b6145eb6020820182614ede565b63ffffffff1615801561460b57506146066020820182615335565b151590505b156146525761461d6020820182614ede565b61462a6020830183615335565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610736565b61465f6020820182615335565b905061466e6020830183614ede565b63ffffffff1611156146875761461d6020820182614ede565b60015b6146976020830183615335565b9050811015611558576146ad6020830183615335565b6146b8600184615d3f565b8181106146c7576146c761537a565b90506020020160208101906146dc919061531a565b6001600160a01b03166146f26020840184615335565b838181106147025761470261537a565b9050602002016020810190614717919061531a565b6001600160a01b0316101561473f57604051630dbc8d5f60e31b815260040160405180910390fd5b60010161468a565b61474f614165565b614757614ac5565b610fca81614acd565b614768614165565b6141ae614bb5565b614778614165565b5f61478161271b565b905061ffff86161580614799575061271061ffff8716115b156147bd57604051635f12e6c360e11b815261ffff87166004820152602401610736565b878911156147e15760405163222d164360e21b8152600481018a9052602401610736565b60ff851615806147f45750600a60ff8616115b156148175760405163170db35960e31b815260ff86166004820152602401610736565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561487e576040516202a06d60e11b81526001600160401b0388166004820152602401610736565b835f0361489e5760405163a733007160e01b815260040160405180910390fd5b816148bf57604051632f6bd1db60e01b815260048101839052602401610736565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061338c83835f614bbd565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156149a8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149cc9190615303565b90506149e36001600160a01b038616853086614c4c565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614a27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a4b9190615303565b9050818111614ab15760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610736565b614abb8282615d3f565b9695505050505050565b6141ae614165565b614ad5614165565b80355f80516020615de28339815191529081556014614afa6060840160408501615d6b565b60ff161180614b195750614b146060830160408401615d6b565b60ff16155b15614b4d57614b2e6060830160408401615d6b565b604051634a59bbff60e11b815260ff9091166004820152602401610736565b614b5d6060830160408401615d6b565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b8e6040830160208401614f83565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d9d614165565b606081471015614be25760405163cd78605960e01b8152306004820152602401610736565b5f80856001600160a01b03168486604051614bfd9190615474565b5f6040518083038185875af1925050503d805f8114614c37576040519150601f19603f3d011682016040523d82523d5f602084013e614c3c565b606091505b5091509150614abb868383614c85565b6040516001600160a01b0384811660248301528381166044830152606482018390526108399186918216906323b872dd90608401613af1565b606082614c9a57614c9582614ce1565b61338c565b8151158015614cb157506001600160a01b0384163b155b15614cda57604051639996b31560e01b81526001600160a01b0385166004820152602401610736565b508061338c565b805115614cf15780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614d169061517f565b5f825580601f10614d25575050565b601f0160209004905f5260205f2090810190610fca9190614d7e565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d92575f8155600101614d7f565b5090565b8015158114610fca575f80fd5b803563ffffffff81168114614db6575f80fd5b919050565b5f805f60608486031215614dcd575f80fd5b833592506020840135614ddf81614d96565b9150614ded60408501614da3565b90509250925092565b5f60208284031215614e06575f80fd5b5035919050565b5f8060408385031215614e1e575f80fd5b82356001600160401b03811115614e33575f80fd5b830160808186031215614e44575f80fd5b9150614e5260208401614da3565b90509250929050565b5f8060408385031215614e6c575f80fd5b82359150614e5260208401614da3565b6001600160a01b0381168114610fca575f80fd5b5f805f8060808587031215614ea3575f80fd5b843593506020850135614eb581614d96565b9250614ec360408601614da3565b91506060850135614ed381614e7c565b939692955090935050565b5f60208284031215614eee575f80fd5b61338c82614da3565b803561ffff81168114614db6575f80fd5b6001600160401b0381168114610fca575f80fd5b5f805f8060808587031215614f2f575f80fd5b84356001600160401b03811115614f44575f80fd5b850160a08188031215614f55575f80fd5b9350614f6360208601614ef7565b92506040850135614f7381614f08565b9396929550929360600135925050565b5f60208284031215614f93575f80fd5b813561338c81614f08565b5f8060408385031215614faf575f80fd5b823591506020830135614fc181614e7c565b809150509250929050565b5f8060408385031215614fdd575f80fd5b50508035926020909101359150565b5f80828403610180811215614fff575f80fd5b6101608082121561500e575f80fd5b8493508301359050614fc181614e7c565b634e487b7160e01b5f52602160045260245ffd5b600681106150435761504361501f565b9052565b5f5b83811015615061578181015183820152602001615049565b50505f910152565b5f8151808452615080816020860160208601615047565b601f01601f19169290920160200192915050565b602081526150a6602082018351615033565b5f602083015160e060408401526150c1610100840182615069565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615125575f80fd5b82356001600160401b038082111561513b575f80fd5b818501915085601f83011261514e575f80fd5b81358181111561515c575f80fd5b86602082850101111561516d575f80fd5b60209290920196919550909350505050565b600181811c9082168061519357607f821691505b6020821081036151b157634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ec38284615033565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151fb576151fb6151c5565b60405290565b604080519081016001600160401b03811182821017156151fb576151fb6151c5565b604051601f8201601f191681016001600160401b038111828210171561524b5761524b6151c5565b604052919050565b5f6001600160401b0382111561526b5761526b6151c5565b50601f01601f191660200190565b5f82601f830112615288575f80fd5b815161529b61529682615253565b615223565b8181528460208386010111156152af575f80fd5b610ffa826020830160208701615047565b5f602082840312156152d0575f80fd5b81516001600160401b038111156152e5575f80fd5b610ffa84828501615279565b602081525f61338c6020830184615069565b5f60208284031215615313575f80fd5b5051919050565b5f6020828403121561532a575f80fd5b813561338c81614e7c565b5f808335601e1984360301811261534a575f80fd5b8301803591506001600160401b03821115615363575f80fd5b6020019150600581901b360382131561357d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126153a2575f80fd5b9190910192915050565b5f82601f8301126153bb575f80fd5b81356153c961529682615253565b8181528460208386010111156153dd575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615409575f80fd5b6154116151d9565b82356001600160401b0380821115615427575f80fd5b615433368387016153ac565b83526020850135915080821115615448575f80fd5b50615455368286016153ac565b602083015250604083013561546981614f08565b604082015292915050565b5f82516153a2818460208701615047565b601f8211156105aa57805f5260205f20601f840160051c810160208510156154aa5750805b601f840160051c820191505b81811015610ed5575f81556001016154b6565b81516001600160401b038111156154e2576154e26151c5565b6154f6816154f0845461517f565b84615485565b602080601f831160018114615529575f84156155125750858301515b5f19600386901b1c1916600185901b178555611132565b5f85815260208120601f198616915b8281101561555757888601518255948401946001909101908401615538565b508582101561557457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561244c5761244c615584565b5f63ffffffff8083168181036155d0576155d0615584565b6001019392505050565b6001600160401b038181168382160280821691908281146155fd576155fd615584565b505092915050565b5f808335601e1984360301811261561a575f80fd5b83016020810192503590506001600160401b03811115615638575f80fd5b80360382131561357d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561572357848303601f19018952813536889003605e190181126156aa575f80fd5b870160606156b88280615605565b8287526156c88388018284615646565b925050506156d886830183615605565b868303888801526156ea838284615646565b9250505060408083013592506156ff83614f08565b6001600160401b039290921694909101939093529783019790830190600101615685565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561575481614e7c565b6001600160a01b031660608381019190915283013536849003601e1901811261577b575f80fd5b83016020810190356001600160401b03811115615796575f80fd5b8060051b36038213156157a7575f80fd5b6080808501526157bb60a08501828461566e565b95945050505050565b5f826157de57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157f7576157f761501f565b91905290565b5f805f6060848603121561580f575f80fd5b83519250602084015161582181614f08565b604085015190925061583281614f08565b809150509250925092565b8082028115828204841417610ec357610ec3615584565b5f8060408385031215615865575f80fd5b825191506020830151614fc181614d96565b5f60208083525f84546158898161517f565b806020870152604060018084165f81146158aa57600181146158c6576158f3565b60ff19851660408a0152604084151560051b8a010195506158f3565b895f5260205f205f5b858110156158ea5781548b82018601529083019088016158cf565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561244c5761244c615584565b5f8060408385031215615941575f80fd5b82516001600160401b0380821115615957575f80fd5b908401906060828703121561596a575f80fd5b6159726151d9565b82518152602083015161598481614e7c565b602082015260408301518281111561599a575f80fd5b6159a688828601615279565b6040830152508094505050506020830151614fc181614d96565b5f80604083850312156159d1575f80fd5b825191506020830151614fc181614f08565b80820180821115610ec357610ec3615584565b5f8235603e198336030181126153a2575f80fd5b5f808335601e19843603018112615a1f575f80fd5b8301803591506001600160401b03821115615a38575f80fd5b60200191503681900382131561357d575f80fd5b602081525f610ffa602083018486615646565b5f60408236031215615a6f575f80fd5b615a77615201565b615a8083614da3565b81526020808401356001600160401b0380821115615a9c575f80fd5b9085019036601f830112615aae575f80fd5b813581811115615ac057615ac06151c5565b8060051b9150615ad1848301615223565b8181529183018401918481019036841115615aea575f80fd5b938501935b83851015615b145784359250615b0483614e7c565b8282529385019390850190615aef565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b815784516001600160a01b03168252938301936001929092019190830190615b58565b509695505050505050565b60208152815160208201525f602083015160e06040840152615bb2610100840182615069565b90506040840151601f1980858403016060860152615bd08383615069565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615c008383615b26565b925060a08601519150808584030160c086015250615c1e8282615b26565b91505060c0840151615c3b60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c54575f80fd5b8251915060208301516001600160401b03811115615c70575f80fd5b615c7c85828601615279565b9150509250929050565b6001600160401b03831115615c9d57615c9d6151c5565b615cb183615cab835461517f565b83615485565b5f601f841160018114615ce2575f8515615ccb5750838201355b5f19600387901b1c1916600186901b178355610ed5565b5f83815260208120601f198716915b82811015615d115786850135825560209485019460019092019101615cf1565b5086821015615d2d575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610ec357610ec3615584565b5f60208284031215615d62575f80fd5b61338c82614ef7565b5f60208284031215615d7b575f80fd5b813560ff8116811461338c575f80fd5b5f6001600160401b038083168181036155d0576155d0615584565b5f60208284031215615db6575f80fd5b815161338c81614d9656fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122026c2eadba6547bb2f7267c122bc78f893cbc1371e1143d68c5b5bb8b2dc7c54d64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615f7d380380615f7d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615e308061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c80637d8d2f7711610140578063afb98096116100bf578063c974d1b611610084578063c974d1b614610532578063d5f20ff61461053a578063df93d8de1461055a578063e4a63c4014610564578063fb8b11dd14610578578063fd7ac5e71461058b575f80fd5b8063afb98096146104c3578063b771b3bc146104ea578063ba3a4b97146104f8578063bc5fbfec1461050b578063bee0a03f1461051f575f80fd5b80639ae06447116101055780639ae06447146104775780639e1bc4ef1461048a5780639e478eea1461049d578063a3a65e48146104b0578063a9778a7a146102f9575f80fd5b80637d8d2f771461042357806380dd672f146104365780638280a25a146104495780638ef34c981461045157806393e2459814610464575f80fd5b8063467ef06f116101cc578063620658561161019157806362065856146103b257806366435abf146103c5578063732214f8146103d857806376f78621146103df578063785e9e86146103f2575f80fd5b8063467ef06f1461033b5780634bee00401461034e5780635dd6a6cb1461036f57806360305d621461038257806360ad77841461039f575f80fd5b806325e1c7761161021257806325e1c776146102bb5780632e2194d8146102ce57806335455ded146102f957806337b9be8f146103155780633a1cfff614610328575f80fd5b80630118acc41461024e5780630322ed9814610263578063151d30d1146102765780631ec447241461029557806320d91b7a146102a8575b5f80fd5b61026161025c366004614d74565b61059e565b005b610261610271366004614daf565b6105af565b61027e600a81565b60405160ff90911681526020015b60405180910390f35b6102616102a3366004614d74565b61083f565b6102616102b6366004614dc6565b61084b565b6102616102c9366004614e14565b610e01565b6102e16102dc366004614daf565b610e75565b6040516001600160401b03909116815260200161028c565b61030261271081565b60405161ffff909116815260200161028c565b610261610323366004614e49565b610ec9565b610261610336366004614d74565b610edc565b610261610349366004614e97565b610ee8565b61036161035c366004614ed5565b610fba565b60405190815260200161028c565b61026161037d366004614e49565b610fef565b61038a601481565b60405163ffffffff909116815260200161028c565b6102616103ad366004614e14565b610ffb565b6103616103c0366004614f3c565b6112c3565b6102e16103d3366004614daf565b6112e3565b6103615f81565b6102616103ed366004614d74565b6112f7565b5f80516020615d7b833981519152546001600160a01b03165b6040516001600160a01b03909116815260200161028c565b610261610431366004614e49565b611303565b610261610444366004614e14565b61130f565b61027e603081565b61026161045f366004614f57565b611549565b610261610472366004614daf565b6115fa565b610261610485366004614e49565b61168e565b610361610498366004614f85565b61169a565b6102616104ab366004614fa5565b6116c6565b6102616104be366004614e97565b6117a5565b6103617f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61040b6005600160991b0181565b610261610506366004614daf565b61199b565b6103615f80516020615d9b83398151915281565b61026161052d366004614daf565b611bf4565b61027e601481565b61054d610548366004614daf565b611d30565b60405161028c919061504d565b6102e16202a30081565b6103615f80516020615d7b83398151915281565b610261610586366004614f57565b611e7f565b6103616105993660046150cd565b611f16565b6105aa8383835f611f71565b505050565b5f8181525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff1660058111156105fc576105fc614fd8565b600581111561060d5761060d614fd8565b815260200160018201805461062190615138565b80601f016020809104026020016040519081016040528092919081815260200182805461064d90615138565b80156106985780601f1061066f57610100808354040283529160200191610698565b820191905f5260205f20905b81548152906001019060200180831161067b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561070357610703614fd8565b1461073f575f8381526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156107b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107dd9190810190615279565b6040518263ffffffff1660e01b81526004016107f991906152aa565b6020604051808303815f875af1158015610815573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083991906152bc565b50505050565b6108398383835f611f9d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615d9b8339815191529060ff161561089d57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e0573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061090491906152bc565b83602001351461092d576040516372b0a7e760e11b815260208401356004820152602401610736565b3061093e60608501604086016152d3565b6001600160a01b0316146109815761095c60608401604085016152d3565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610736565b5f61098f60608501856152ee565b905090505f805b828163ffffffff161015610bf7575f6109b260608801886152ee565b8363ffffffff168181106109c8576109c8615333565b90506020028101906109da9190615347565b6109e3906153b2565b80516040519192505f9160068801916109fb9161542d565b90815260200160405180910390205414610a2b57805160405163a41f772f60e01b815261073691906004016152aa565b5f6002885f013584604051602001610a5a92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a749161542d565b602060405180830381855afa158015610a8f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ab291906152bc565b90508086600601835f0151604051610aca919061542d565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610b0a9082615482565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610b8a9085615551565b8251604051919550610b9b9161542d565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610bf090615571565b9050610996565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610c3a910460ff1683615593565b6001600160401b03161015610c6d57604051633e1a785160e01b81526001600160401b0382166004820152602401610736565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c91876122ca565b604001516040518263ffffffff1660e01b8152600401610cb191906152aa565b602060405180830381865af4158015610ccc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610cf091906152bc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d2a91906156e9565b5f60405180830381865af4158015610d44573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d6b9190810190615279565b90505f600282604051610d7e919061542d565b602060405180830381855afa158015610d99573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610dbc91906152bc565b9050828114610de85760405163baaea89d60e01b81526004810182905260248101849052604401610736565b5050506007909201805460ff1916600117905550505050565b610e0a826123e0565b610e2a576040516330efa98b60e01b815260048101839052602401610736565b5f610e3483611d30565b5190506002816005811115610e4b57610e4b614fd8565b14610e6b578060405163170cc93360e21b81526004016107369190615170565b6108398383612409565b5f80610e7f6126a8565b60030154610e8d908461577d565b9050801580610ea257506001600160401b0381115b15610ec35760405163222d164360e21b815260048101849052602401610736565b92915050565b610ed584848484611f9d565b5050505050565b6108398383835f6126cc565b610ef0612909565b5f610ef96126a8565b90505f80610f0684612940565b91509150610f13826123e0565b610f1f57505050610fa1565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b03918216911680610f615750805b600483516005811115610f7657610f76614fd8565b03610f8557610f858185612cf8565b610f9b82610f9685604001516112c3565b612d22565b50505050505b610fb760015f80516020615ddb83398151915255565b50565b5f610fc3612909565b610fcf85858585612d58565b9050610fe760015f80516020615ddb83398151915255565b949350505050565b61083984848484612ed8565b5f6110046126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561103d5761103d614fd8565b600381111561104e5761104e614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110c482611d30565b90506001835160038111156110db576110db614fd8565b146110fc578251604051633b0d540d60e21b8152610736919060040161579c565b60048151600581111561111157611111614fd8565b036111275761111f86612f04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61114c896122ca565b604001516040518263ffffffff1660e01b815260040161116c91906152aa565b606060405180830381865af4158015611187573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111ab91906157b6565b50915091508184146111d857846040015160405163089938b360e11b815260040161073691815260200190565b806001600160401b031683606001516001600160401b031610806112115750806001600160401b03168560a001516001600160401b0316115b1561123a57604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112cc6126a8565b60030154610ec3906001600160401b0384166157f6565b5f6112ed82611d30565b6080015192915050565b6105aa8383835f612ed8565b610ed5848484846126cc565b611317612909565b5f6113206126a8565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561135957611359614fd8565b600381111561136a5761136a614fd8565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113e3576113e3614fd8565b14611404578051604051633b0d540d60e21b8152610736919060040161579c565b60046114138260400151611d30565b51600581111561142557611425614fd8565b14611524575f611434846122ca565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161147391906152aa565b606060405180830381865af415801561148e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114b291906157b6565b5091509150818460400151146114de5760405163089938b360e11b815260048101839052602401610736565b806001600160401b03168460c001516001600160401b0316111561152057604051632e19bc2d60e11b81526001600160401b0382166004820152602401610736565b5050505b61152d84612f04565b505061154560015f80516020615ddb83398151915255565b5050565b5f6115526126a8565b90506001600160a01b0382166115865760405163caa903f960e01b81526001600160a01b0383166004820152602401610736565b5f8381526006820160205260409020546001600160a01b031633146115cc57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610736565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f6116036126a8565b90505f61160f83611d30565b519050600481600581111561162657611626614fd8565b14611646578060405163170cc93360e21b81526004016107369190615170565b5f8381526006830160205260409020546001600160a01b0316331461166b57336115a7565b5f8381526006830160205260409020546105aa906001600160a01b031684612cf8565b61083984848484611f71565b5f6116a3612909565b6116ae8333846130fe565b9050610ec360015f80516020615ddb83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061170f575080546001600160401b03808416911610155b1561172d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b1781556117588484613343565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117d8866122ca565b604001516040518263ffffffff1660e01b81526004016117f891906152aa565b6040805180830381865af4158015611812573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611836919061580d565b915091508061185c57604051632d07135360e01b81528115156004820152602401610736565b5f8281526004840160205260409020805461187690615138565b90505f0361189a5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580860160205260409091205460ff16908111156118c1576118c1614fd8565b146118f4575f8281526005840160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f828152600484016020526040812061190c91614cc3565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f6119a46126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119dd576119dd614fd8565b60038111156119ee576119ee614fd8565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a6757611a67614fd8565b14158015611a885750600381516003811115611a8557611a85614fd8565b14155b15611aa9578051604051633b0d540d60e21b8152610736919060040161579c565b5f611ab78260400151611d30565b905080606001516001600160401b03165f03611ae9576040516339b894f960e21b815260048101859052602401610736565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b5793906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b71573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b989190810190615279565b6040518263ffffffff1660e01b8152600401611bb491906152aa565b6020604051808303815f875af1158015611bd0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ed591906152bc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615d9b8339815191529190611c3b90615138565b90505f03611c5f5760405163089938b360e11b815260048101839052602401610736565b60015f838152600580840160205260409091205460ff1690811115611c8657611c86614fd8565b14611cb9575f8281526005820160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611cf09201615830565b6020604051808303815f875af1158015611d0c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105aa91906152bc565b611d38614cfa565b5f8281525f80516020615dbb833981519152602052604090819020815160e0810190925280545f80516020615d9b833981519152929190829060ff166005811115611d8557611d85614fd8565b6005811115611d9657611d96614fd8565b8152602001600182018054611daa90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054611dd690615138565b8015611e215780601f10611df857610100808354040283529160200191611e21565b820191905f5260205f20905b815481529060010190602001808311611e0457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611eb15760405163caa903f960e01b81526001600160a01b0382166004820152602401610736565b5f611eba6126a8565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611ee857336115a7565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615d9b833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0690611f5990869086906158ba565b90815260200160405180910390205491505092915050565b611f7d84848484611f9d565b61083957604051631036cf9160e11b815260048101859052602401610736565b5f80611fa76126a8565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fe057611fe0614fd8565b6003811115611ff157611ff1614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61206782611d30565b905060028351600381111561207e5761207e614fd8565b1461209f578251604051633b0d540d60e21b8152610736919060040161579c565b60208301516001600160a01b0316331461213b575f8281526006850160205260409020546001600160a01b031633146120d857336115a7565b5f82815260068501602052604090205460a082015161210791600160b01b90046001600160401b031690615551565b6001600160401b031642101561213b5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b60028151600581111561215057612150614fd8565b036122725760028401546080840151612172916001600160401b031690615551565b6001600160401b03164210156121a65760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b87156121b8576121b68288612409565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121f19184916121ec91906158c9565b61335d565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561223484888c613534565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fe79350505050565b60048151600581111561228757612287614fd8565b036122ae5761229783878b613534565b506122a189612f04565b6001945050505050610fe7565b805160405163170cc93360e21b81526107369190600401615170565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561232e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261235591908101906158e9565b915091508061237757604051636b2f19e960e01b815260040160405180910390fd5b81511561239d578151604051636ba589a560e01b81526004810191909152602401610736565b60208201516001600160a01b0316156123d9576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5092915050565b5f806123ea6126a8565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261247b91908101906158e9565b915091508061249d57604051636b2f19e960e01b815260040160405180910390fd5b5f6124a66126a8565b60058101548451919250146124d4578251604051636ba589a560e01b81526004810191909152602401610736565b60208301516001600160a01b031615612510576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b60208301516001600160a01b03161561254c576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610736565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161258991906152aa565b6040805180830381865af41580156125a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125c79190615979565b915091508188146125ee5760405163089938b360e11b815260048101899052602401610736565b5f8881526006840160205260409020600101546001600160401b03908116908216111561267f575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261269d565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126d66126a8565b90505f6126e287613722565b90506126ed876123e0565b6126fc57600192505050610fe7565b5f8781526006830160205260409020546001600160a01b0316331461272157336115a7565b5f87815260068301602052604090205460a082015161275091600160b01b90046001600160401b031690615551565b6001600160401b03168160c001516001600160401b031610156127975760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610736565b5f86156127af576127a88887612409565b90506127cd565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906127f2906112c3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561285b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061287f91906152bc565b90506001600160a01b0386166128ab575f8981526006850160205260409020546001600160a01b031695505b5f898152600a85016020526040812080548392906128ca90849061599c565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615ddb83398151915280546001190161293a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612949614cfa565b5f80516020615d9b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61297c886122ca565b604001516040518263ffffffff1660e01b815260040161299c91906152aa565b6040805180830381865af41580156129b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129da919061580d565b915091508015612a0157604051632d07135360e01b81528115156004820152602401610736565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612a3857612a38614fd8565b6005811115612a4957612a49614fd8565b8152602001600182018054612a5d90615138565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8990615138565b8015612ad45780601f10612aab57610100808354040283529160200191612ad4565b820191905f5260205f20905b815481529060010190602001808311612ab757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b3f57612b3f614fd8565b14158015612b605750600181516005811115612b5d57612b5d614fd8565b14155b15612b8157805160405163170cc93360e21b81526107369190600401615170565b600381516005811115612b9657612b96614fd8565b03612ba45760048152612ba9565b600581525b836006018160200151604051612bbf919061542d565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612c0257612c02614fd8565b021790555060208201516001820190612c1b9082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc157612cc1614fd8565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d016126a8565b5f838152600a82016020526040812080549190559091506108398482613a07565b5f80516020615d7b83398151915254611545906001600160a01b03168383613a7d565b60015f80516020615ddb83398151915255565b5f80612d626126a8565b600281015490915061ffff600160401b90910481169086161080612d8b575061271061ffff8616115b15612daf57604051635f12e6c360e11b815261ffff86166004820152602401610736565b60028101546001600160401b039081169085161015612deb576040516202a06d60e11b81526001600160401b0385166004820152602401610736565b8054831080612dfd5750806001015483115b15612e1e5760405163222d164360e21b815260048101849052602401610736565b5f612e2884613adc565b90505f612e3482610e75565b90505f612e418983613aff565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b612ee4848484846126cc565b61083957604051635bff683f60e11b815260048101859052602401610736565b5f612f0d6126a8565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f4657612f46614fd8565b6003811115612f5757612f57614fd8565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ff47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130039190615551565b6001600160401b03164210156130375760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610736565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b031680613092575060208201515b5f8061309f838886614071565b915091506130b88560200151610f9687606001516112c3565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131086126a8565b90505f6131176102dc85613adc565b90505f61312387611d30565b905061312e876123e0565b61314e576040516330efa98b60e01b815260048101889052602401610736565b60028151600581111561316357613163614fd8565b1461318457805160405163170cc93360e21b81526107369190600401615170565b5f8282608001516131959190615551565b905083600201600a9054906101000a90046001600160401b031682604001516131be9190615593565b6001600160401b0316816001600160401b031611156131fb57604051636d51fe0560e11b81526001600160401b0382166004820152602401610736565b5f806132078a8461335d565b915091505f8a8360405160200161323592919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61334b61411e565b61335482614169565b611545816141e3565b5f8281525f80516020615dbb833981519152602052604081206002015481905f80516020615d9b83398151915290600160801b90046001600160401b03166133a5858261424b565b5f6133af876144b5565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613458573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347f9190810190615279565b6040518263ffffffff1660e01b815260040161349b91906152aa565b6020604051808303815f875af11580156134b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134db91906152bc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353e6126a8565b90505f61354e8660400151611d30565b90505f60038251600581111561356657613566614fd8565b1480613584575060048251600581111561358257613582614fd8565b145b15613594575060c08101516135d1565b6002825160058111156135a9576135a9614fd8565b036135b55750426135d1565b815160405163170cc93360e21b81526107369190600401615170565b86608001516001600160401b0316816001600160401b0316116135f9575f935050505061333c565b600483015460608801515f916001600160a01b031690634f22429f9061361e906112c3565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136c391906152bc565b90506001600160a01b0387166136db57876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b61372a614cfa565b5f8281525f80516020615dbb8339815191526020526040808220815160e0810190925280545f80516020615d9b83398151915293929190829060ff16600581111561377757613777614fd8565b600581111561378857613788614fd8565b815260200160018201805461379c90615138565b80601f01602080910402602001604051908101604052809291908181526020018280546137c890615138565b80156138135780601f106137ea57610100808354040283529160200191613813565b820191905f5260205f20905b8154815290600101906020018083116137f657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561388157613881614fd8565b146138b4575f8481526005830160205260409081902054905163170cc93360e21b81526107369160ff1690600401615170565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff19169060019084908111156138f9576138f9614fd8565b0217905550602082015160018201906139129082615482565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139b0858261335d565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b5f5f80516020615d7b83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a62575f80fd5b505af1158015613a74573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526105aa91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061452a565b5f610ec3825f80516020615d7b833981519152546001600160a01b03169061458b565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613b4357604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d9b83398151915242613b626060860160408701614f3c565b6001600160401b0316111580613b9c5750613b806202a3004261599c565b613b906060860160408701614f3c565b6001600160401b031610155b15613bd657613bb16060850160408601614f3c565b604051635879da1360e11b81526001600160401b039091166004820152602401610736565b60038101546001600160401b0390613bf990600160401b9004821685831661599c565b1115613c2357604051633e1a785160e01b81526001600160401b0384166004820152602401610736565b613c38613c3360608601866159af565b614597565b613c48613c3360808601866159af565b6030613c5760208601866159c3565b905014613c8957613c6b60208501856159c3565b6040516326475b2f60e11b8152610736925060040190815260200190565b613c9384806159c3565b90505f03613cc057613ca584806159c3565b604051633e08a12560e11b8152600401610736929190615a05565b5f60068201613ccf86806159c3565b604051613cdd9291906158ba565b90815260200160405180910390205414613d1657613cfb84806159c3565b60405163a41f772f60e01b8152600401610736929190615a05565b613d20835f61424b565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d5d8a806159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613da5908b018b6159c3565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dee60608b0160408c01614f3c565b6001600160401b03168152602001613e0960608b018b6159af565b613e1290615a18565b8152602001613e2460808b018b6159af565b613e2d90615a18565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e5b9190615b45565b5f60405180830381865af4158015613e75573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e9c9190810190615bfc565b5f82815260048601602052604090209193509150613eba8282615482565b508160068401613eca88806159c3565b604051613ed89291906158ba565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613f149085906004016152aa565b6020604051808303815f875af1158015613f30573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f5491906152bc565b5f8481526005860160205260409020805460ff191660011790559050613f7a87806159c3565b5f858152600587016020526040902060010191613f98919083615c3f565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ff788806159c3565b6040516140059291906158ba565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906140439190614f3c565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61407c6126a8565b5f86815260088201602052604081208054908290559192509081908015614110575f878152600685016020526040902054612710906140c690600160a01b900461ffff16836157f6565b6140d0919061577d565b91508184600a015f8981526020019081526020015f205f8282546140f4919061599c565b9091555061410490508282615cf8565b92506141108984613a07565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661416757604051631afcd79f60e31b815260040160405180910390fd5b565b61417161411e565b61417a81614700565b614182614719565b610fb76060820135608083013561419f60c0850160a08601614f3c565b6141af60e0860160c08701615d0b565b6141c0610100870160e08801615d24565b6101008701356141d861014089016101208a016152d3565b886101400135614729565b6141eb61411e565b5f80516020615d7b8339815191526001600160a01b03821661422b57604051637330680360e01b81526001600160a01b0383166004820152602401610736565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d9b8339815191525f6001600160401b03808416908516111561427f5761427883856158c9565b905061428c565b61428984846158c9565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806142f95750600184015481516142f5916001600160401b03169061599c565b8210155b15614321576001600160401b0380841660608301528282526040820151166020820152614340565b82816060018181516143339190615551565b6001600160401b03169052505b6060810151614350906064615593565b602082015160018601546001600160401b03929092169161437b9190600160401b900460ff16615593565b6001600160401b031610156143b457606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610736565b85816040018181516143c69190615551565b6001600160401b03169052506040810180518691906143e69083906158c9565b6001600160401b03169052506001840154604082015160649161441491600160401b90910460ff1690615593565b6001600160401b0316101561444d576040808201519051633e1a785160e01b81526001600160401b039091166004820152602401610736565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615dbb8339815191526020526040812060020180545f80516020615d9b83398151915291906008906144ff90600160401b90046001600160401b0316615d44565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61453e6001600160a01b0384168361490e565b905080515f141580156145625750808060200190518101906145609190615d5f565b155b156105aa57604051635274afe760e01b81526001600160a01b0384166004820152602401610736565b5f61333c83338461491b565b6145a46020820182614e97565b63ffffffff161580156145c457506145bf60208201826152ee565b151590505b1561460b576145d66020820182614e97565b6145e360208301836152ee565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610736565b61461860208201826152ee565b90506146276020830183614e97565b63ffffffff161115614640576145d66020820182614e97565b60015b61465060208301836152ee565b90508110156115455761466660208301836152ee565b614671600184615cf8565b81811061468057614680615333565b905060200201602081019061469591906152d3565b6001600160a01b03166146ab60208401846152ee565b838181106146bb576146bb615333565b90506020020160208101906146d091906152d3565b6001600160a01b031610156146f857604051630dbc8d5f60e31b815260040160405180910390fd5b600101614643565b61470861411e565b614710614a7e565b610fb781614a86565b61472161411e565b614167614b6e565b61473161411e565b5f61473a6126a8565b905061ffff86161580614752575061271061ffff8716115b1561477657604051635f12e6c360e11b815261ffff87166004820152602401610736565b8789111561479a5760405163222d164360e21b8152600481018a9052602401610736565b60ff851615806147ad5750600a60ff8616115b156147d05760405163170db35960e31b815260ff86166004820152602401610736565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614837576040516202a06d60e11b81526001600160401b0388166004820152602401610736565b835f036148575760405163a733007160e01b815260040160405180910390fd5b8161487857604051632f6bd1db60e01b815260048101839052602401610736565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333c83835f614b76565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614961573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061498591906152bc565b905061499c6001600160a01b038616853086614c05565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156149e0573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614a0491906152bc565b9050818111614a6a5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610736565b614a748282615cf8565b9695505050505050565b61416761411e565b614a8e61411e565b80355f80516020615d9b8339815191529081556014614ab36060840160408501615d24565b60ff161180614ad25750614acd6060830160408401615d24565b60ff16155b15614b0657614ae76060830160408401615d24565b604051634a59bbff60e11b815260ff9091166004820152602401610736565b614b166060830160408401615d24565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614b476040830160208401614f3c565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d4561411e565b606081471015614b9b5760405163cd78605960e01b8152306004820152602401610736565b5f80856001600160a01b03168486604051614bb6919061542d565b5f6040518083038185875af1925050503d805f8114614bf0576040519150601f19603f3d011682016040523d82523d5f602084013e614bf5565b606091505b5091509150614a74868383614c3e565b6040516001600160a01b0384811660248301528381166044830152606482018390526108399186918216906323b872dd90608401613aaa565b606082614c5357614c4e82614c9a565b61333c565b8151158015614c6a57506001600160a01b0384163b155b15614c9357604051639996b31560e01b81526001600160a01b0385166004820152602401610736565b508061333c565b805115614caa5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614ccf90615138565b5f825580601f10614cde575050565b601f0160209004905f5260205f2090810190610fb79190614d37565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614d4b575f8155600101614d38565b5090565b8015158114610fb7575f80fd5b803563ffffffff81168114614d6f575f80fd5b919050565b5f805f60608486031215614d86575f80fd5b833592506020840135614d9881614d4f565b9150614da660408501614d5c565b90509250925092565b5f60208284031215614dbf575f80fd5b5035919050565b5f8060408385031215614dd7575f80fd5b82356001600160401b03811115614dec575f80fd5b830160808186031215614dfd575f80fd5b9150614e0b60208401614d5c565b90509250929050565b5f8060408385031215614e25575f80fd5b82359150614e0b60208401614d5c565b6001600160a01b0381168114610fb7575f80fd5b5f805f8060808587031215614e5c575f80fd5b843593506020850135614e6e81614d4f565b9250614e7c60408601614d5c565b91506060850135614e8c81614e35565b939692955090935050565b5f60208284031215614ea7575f80fd5b61333c82614d5c565b803561ffff81168114614d6f575f80fd5b6001600160401b0381168114610fb7575f80fd5b5f805f8060808587031215614ee8575f80fd5b84356001600160401b03811115614efd575f80fd5b850160a08188031215614f0e575f80fd5b9350614f1c60208601614eb0565b92506040850135614f2c81614ec1565b9396929550929360600135925050565b5f60208284031215614f4c575f80fd5b813561333c81614ec1565b5f8060408385031215614f68575f80fd5b823591506020830135614f7a81614e35565b809150509250929050565b5f8060408385031215614f96575f80fd5b50508035926020909101359150565b5f80828403610180811215614fb8575f80fd5b61016080821215614fc7575f80fd5b8493508301359050614f7a81614e35565b634e487b7160e01b5f52602160045260245ffd5b60068110614ffc57614ffc614fd8565b9052565b5f5b8381101561501a578181015183820152602001615002565b50505f910152565b5f8151808452615039816020860160208601615000565b601f01601f19169290920160200192915050565b6020815261505f602082018351614fec565b5f602083015160e0604084015261507a610100840182615022565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156150de575f80fd5b82356001600160401b03808211156150f4575f80fd5b818501915085601f830112615107575f80fd5b813581811115615115575f80fd5b866020828501011115615126575f80fd5b60209290920196919550909350505050565b600181811c9082168061514c57607f821691505b60208210810361516a57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610ec38284614fec565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156151b4576151b461517e565b60405290565b604080519081016001600160401b03811182821017156151b4576151b461517e565b604051601f8201601f191681016001600160401b03811182821017156152045761520461517e565b604052919050565b5f6001600160401b038211156152245761522461517e565b50601f01601f191660200190565b5f82601f830112615241575f80fd5b815161525461524f8261520c565b6151dc565b818152846020838601011115615268575f80fd5b610fe7826020830160208701615000565b5f60208284031215615289575f80fd5b81516001600160401b0381111561529e575f80fd5b610fe784828501615232565b602081525f61333c6020830184615022565b5f602082840312156152cc575f80fd5b5051919050565b5f602082840312156152e3575f80fd5b813561333c81614e35565b5f808335601e19843603018112615303575f80fd5b8301803591506001600160401b0382111561531c575f80fd5b6020019150600581901b360382131561352d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261535b575f80fd5b9190910192915050565b5f82601f830112615374575f80fd5b813561538261524f8261520c565b818152846020838601011115615396575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156153c2575f80fd5b6153ca615192565b82356001600160401b03808211156153e0575f80fd5b6153ec36838701615365565b83526020850135915080821115615401575f80fd5b5061540e36828601615365565b602083015250604083013561542281614ec1565b604082015292915050565b5f825161535b818460208701615000565b601f8211156105aa57805f5260205f20601f840160051c810160208510156154635750805b601f840160051c820191505b81811015610ed5575f815560010161546f565b81516001600160401b0381111561549b5761549b61517e565b6154af816154a98454615138565b8461543e565b602080601f8311600181146154e2575f84156154cb5750858301515b5f19600386901b1c1916600185901b17855561111f565b5f85815260208120601f198616915b82811015615510578886015182559484019460019091019084016154f1565b508582101561552d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156123d9576123d961553d565b5f63ffffffff8083168181036155895761558961553d565b6001019392505050565b6001600160401b038181168382160280821691908281146155b6576155b661553d565b505092915050565b5f808335601e198436030181126155d3575f80fd5b83016020810192503590506001600160401b038111156155f1575f80fd5b80360382131561352d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156156dc57848303601f19018952813536889003605e19018112615663575f80fd5b8701606061567182806155be565b82875261568183880182846155ff565b92505050615691868301836155be565b868303888801526156a38382846155ff565b9250505060408083013592506156b883614ec1565b6001600160401b03929092169490910193909352978301979083019060010161563e565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561570d81614e35565b6001600160a01b031660608381019190915283013536849003601e19018112615734575f80fd5b83016020810190356001600160401b0381111561574f575f80fd5b8060051b3603821315615760575f80fd5b60808085015261577460a085018284615627565b95945050505050565b5f8261579757634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106157b0576157b0614fd8565b91905290565b5f805f606084860312156157c8575f80fd5b8351925060208401516157da81614ec1565b60408501519092506157eb81614ec1565b809150509250925092565b8082028115828204841417610ec357610ec361553d565b5f806040838503121561581e575f80fd5b825191506020830151614f7a81614d4f565b5f60208083525f845461584281615138565b806020870152604060018084165f8114615863576001811461587f576158ac565b60ff19851660408a0152604084151560051b8a010195506158ac565b895f5260205f205f5b858110156158a35781548b8201860152908301908801615888565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156123d9576123d961553d565b5f80604083850312156158fa575f80fd5b82516001600160401b0380821115615910575f80fd5b9084019060608287031215615923575f80fd5b61592b615192565b82518152602083015161593d81614e35565b6020820152604083015182811115615953575f80fd5b61595f88828601615232565b6040830152508094505050506020830151614f7a81614d4f565b5f806040838503121561598a575f80fd5b825191506020830151614f7a81614ec1565b80820180821115610ec357610ec361553d565b5f8235603e1983360301811261535b575f80fd5b5f808335601e198436030181126159d8575f80fd5b8301803591506001600160401b038211156159f1575f80fd5b60200191503681900382131561352d575f80fd5b602081525f610fe76020830184866155ff565b5f60408236031215615a28575f80fd5b615a306151ba565b615a3983614d5c565b81526020808401356001600160401b0380821115615a55575f80fd5b9085019036601f830112615a67575f80fd5b813581811115615a7957615a7961517e565b8060051b9150615a8a8483016151dc565b8181529183018401918481019036841115615aa3575f80fd5b938501935b83851015615acd5784359250615abd83614e35565b8282529385019390850190615aa8565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615b3a5784516001600160a01b03168252938301936001929092019190830190615b11565b509695505050505050565b60208152815160208201525f602083015160e06040840152615b6b610100840182615022565b90506040840151601f1980858403016060860152615b898383615022565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615bb98383615adf565b925060a08601519150808584030160c086015250615bd78282615adf565b91505060c0840151615bf460e08501826001600160401b03169052565b509392505050565b5f8060408385031215615c0d575f80fd5b8251915060208301516001600160401b03811115615c29575f80fd5b615c3585828601615232565b9150509250929050565b6001600160401b03831115615c5657615c5661517e565b615c6a83615c648354615138565b8361543e565b5f601f841160018114615c9b575f8515615c845750838201355b5f19600387901b1c1916600186901b178355610ed5565b5f83815260208120601f198716915b82811015615cca5786850135825560209485019460019092019101615caa565b5086821015615ce6575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610ec357610ec361553d565b5f60208284031215615d1b575f80fd5b61333c82614eb0565b5f60208284031215615d34575f80fd5b813560ff8116811461333c575f80fd5b5f6001600160401b038083168181036155895761558961553d565b5f60208284031215615d6f575f80fd5b815161333c81614d4f56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220f6f64fdc442cfa31996deebfed5d4e3e11b8853445ab96335283e710c97b65c064736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index 902d5b281..3e693d802 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput struct { // NativeTokenStakingManagerMetaData contains all meta data concerning the NativeTokenStakingManager contract. var NativeTokenStakingManagerMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"enumICMInitializable\",\"name\":\"init\",\"type\":\"uint8\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidBLSKeyLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encodedConversionID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expectedConversionID\",\"type\":\"bytes32\"}],\"name\":\"InvalidConversionID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"}],\"name\":\"InvalidDelegationFee\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidDelegationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumDelegatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidDelegatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"InvalidNodeID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"name\":\"InvalidNonce\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"addressesLength\",\"type\":\"uint256\"}],\"name\":\"InvalidPChainOwnerThreshold\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"InvalidRegistrationExpiry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"InvalidRewardRecipient\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeDelegatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"changeValidatorRewardRecipient\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"rewardRecipient\",\"type\":\"address\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615cff380380615cff83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615bb28061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b84565b610724565b005b348015610263575f80fd5b50610256610272366004614bbf565b610735565b348015610282575f80fd5b50610256610291366004614bd6565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b84565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614bed565b610aae565b34801561030a575f80fd5b50610256610319366004614c3b565b611064565b348015610329575f80fd5b5061033d610338366004614bbf565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c70565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b84565b61113f565b3480156103f8575f80fd5b50610256610407366004614cbe565b61114b565b348015610417575f80fd5b50610256610426366004614c70565b611230565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614c3b565b61123c565b34801561047e575f80fd5b5061049261048d366004614ceb565b611504565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614bbf565b611524565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b84565b611538565b3480156104fc575f80fd5b5061025661050b366004614c70565b611544565b34801561051b575f80fd5b5061025661052a366004614c3b565b611550565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614d06565b61178a565b34801561056d575f80fd5b5061025661057c366004614bbf565b61186b565b34801561058c575f80fd5b5061025661059b366004614c70565b6118ff565b3480156105ab575f80fd5b506102566105ba366004614cbe565b61190b565b6104926105cd366004614d45565b611b01565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614bbf565b611b35565b348015610649575f80fd5b506104925f80516020615b1d83398151915281565b348015610669575f80fd5b50610256610678366004614bbf565b611d8e565b61049261068b366004614bbf565b611eca565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614bbf565b611efb565b6040516102b89190614e1b565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614d06565b61204a565b348015610710575f80fd5b5061049261071f366004614e9b565b612111565b6107308383835f61216c565b505050565b5f8181525f80516020615b3d8339815191526020526040808220815160e0810190925280545f80516020615b1d83398151915293929190829060ff16600581111561078257610782614da6565b600581111561079357610793614da6565b81526020016001820180546107a790614f06565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614f06565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614da6565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f38565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190615041565b6040518263ffffffff1660e01b815260040161097f9190615072565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190615084565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612198565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f6121a9565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615b1d8339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190615084565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba1606085016040860161509b565b6001600160a01b031614610be457610bbf606084016040850161509b565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf260608501856150b6565b905090505f805b828163ffffffff161015610e5a575f610c1560608801886150b6565b8363ffffffff16818110610c2b57610c2b6150fb565b9050602002810190610c3d919061510f565b610c469061517a565b80516040519192505f916006880191610c5e916151f5565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401615072565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd7916151f5565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190615084565b90508086600601835f0151604051610d2d91906151f5565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d908261524a565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded9085615319565b8251604051919550610dfe916151f5565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e5390615339565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff168361535b565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef4876124de565b604001516040518263ffffffff1660e01b8152600401610f149190615072565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f539190615084565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d91906154b1565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190615041565b90505f600282604051610fe191906151f5565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f9190615084565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d826125f4565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611efb565b51905060028160058111156110ae576110ae614da6565b146110ce578060405163170cc93360e21b81526004016108bc9190614f38565b6109bf838361261d565b5f806110e26128bc565b600301546110f09084615545565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b611138848484846121a9565b5050505050565b6109bf8383835f6128e0565b611153612b02565b5f61115c6128bc565b90505f8061116984612b39565b91509150611176826125f4565b61118257505050611217565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111b95750806111d7565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111ec576111ec614da6565b036111fb576111fb8185612ef1565b6112118261120c8560400151611504565b612f1b565b50505050505b61122d60015f80516020615b5d83398151915255565b50565b6109bf84848484612f41565b5f6112456128bc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561127e5761127e614da6565b600381111561128f5761128f614da6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61130582611efb565b905060018351600381111561131c5761131c614da6565b1461133d578251604051633b0d540d60e21b81526108bc9190600401615564565b60048151600581111561135257611352614da6565b036113685761136086612f6d565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61138d896124de565b604001516040518263ffffffff1660e01b81526004016113ad9190615072565b606060405180830381865af41580156113c8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ec919061557e565b509150915081841461141957846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114525750806001600160401b03168560a001516001600160401b0316115b1561147b57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61150d6128bc565b60030154611126906001600160401b0384166155b3565b5f61152e82611efb565b6080015192915050565b6107308383835f612f41565b611138848484846128e0565b611558612b02565b5f6115616128bc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561159a5761159a614da6565b60038111156115ab576115ab614da6565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561162457611624614da6565b14611645578051604051633b0d540d60e21b81526108bc9190600401615564565b60046116548260400151611efb565b51600581111561166657611666614da6565b14611765575f611675846124de565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116b49190615072565b606060405180830381865af41580156116cf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116f3919061557e565b50915091508184604001511461171f5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561176157604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61176e84612f6d565b505061178660015f80516020615b5d83398151915255565b5050565b5f6117936128bc565b90506001600160a01b0382166117c75760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b0316331461180d57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b0383160361183c575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6118746128bc565b90505f61188083611efb565b519050600481600581111561189757611897614da6565b146118b7578060405163170cc93360e21b81526004016108bc9190614f38565b5f8381526006830160205260409020546001600160a01b031633146118dc57336117e8565b5f838152600683016020526040902054610730906001600160a01b031684612ef1565b6109bf8484848461216c565b5f80516020615b1d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61193e866124de565b604001516040518263ffffffff1660e01b815260040161195e9190615072565b6040805180830381865af4158015611978573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061199c91906155ca565b91509150806119c257604051632d07135360e01b815281151560048201526024016108bc565b5f828152600484016020526040902080546119dc90614f06565b90505f03611a005760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff1690811115611a2757611a27614da6565b14611a5a575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f38565b5f8281526004840160205260408120611a7291614ad8565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611b0a612b02565b611b168484843461317a565b9050611b2e60015f80516020615b5d83398151915255565b9392505050565b5f611b3e6128bc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b7757611b77614da6565b6003811115611b8857611b88614da6565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611c0157611c01614da6565b14158015611c225750600381516003811115611c1f57611c1f614da6565b14155b15611c43578051604051633b0d540d60e21b81526108bc9190600401615564565b5f611c518260400151611efb565b905080606001516001600160401b03165f03611c83576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cf193906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611d0b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d329190810190615041565b6040518263ffffffff1660e01b8152600401611d4e9190615072565b6020604051808303815f875af1158015611d6a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111389190615084565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615b1d8339815191529190611dd590614f06565b90505f03611df95760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611e2057611e20614da6565b14611e53575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f38565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e8a92016155ed565b6020604051808303815f875af1158015611ea6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190615084565b5f611ed3612b02565b611ede8233346132d4565b9050611ef660015f80516020615b5d83398151915255565b919050565b611f03614b0f565b5f8281525f80516020615b3d833981519152602052604090819020815160e0810190925280545f80516020615b1d833981519152929190829060ff166005811115611f5057611f50614da6565b6005811115611f6157611f61614da6565b8152602001600182018054611f7590614f06565b80601f0160208091040260200160405190810160405280929190818152602001828054611fa190614f06565b8015611fec5780601f10611fc357610100808354040283529160200191611fec565b820191905f5260205f20905b815481529060010190602001808311611fcf57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b03811661207c5760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f6120856128bc565b5f8481526007820160205260409020549091506001600160a01b036101009091041633146120b357336117e8565b336001600160a01b038316036120e2575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615b1d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906121549086908690615677565b90815260200160405180910390205491505092915050565b612178848484846121a9565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b6121a0613514565b61122d8161355f565b5f806121b36128bc565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121ec576121ec614da6565b60038111156121fd576121fd614da6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61227382611efb565b905060028351600381111561228a5761228a614da6565b146122ab578251604051633b0d540d60e21b81526108bc9190600401615564565b60208301516001600160a01b03163314612347575f8281526006850160205260409020546001600160a01b031633146122e457336117e8565b5f82815260068501602052604090205460a082015161231391600160b01b90046001600160401b031690615319565b6001600160401b03164210156123475760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561235c5761235c614da6565b0361247e576002840154608084015161237e916001600160401b031690615319565b6001600160401b03164210156123b25760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123c4576123c2828861261d565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123fd9184916123f89190615686565b6135d9565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561244084888c6137b0565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124d69350505050565b60048151600581111561249357612493614da6565b036124ba576124a383878b6137b0565b506124ad89612f6d565b60019450505050506124d6565b805160405163170cc93360e21b81526108bc9190600401614f38565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612542573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261256991908101906156a6565b915091508061258b57604051636b2f19e960e01b815260040160405180910390fd5b8151156125b1578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b0316156125ed576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125fe6128bc565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612668573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261268f91908101906156a6565b91509150806126b157604051636b2f19e960e01b815260040160405180910390fd5b5f6126ba6128bc565b60058101548451919250146126e8578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b031615612724576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b031615612760576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161279d9190615072565b6040805180830381865af41580156127b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127db9190615736565b915091508188146128025760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612893575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26128b1565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128ea6128bc565b90505f6128f687613995565b9050612901876125f4565b612910576001925050506124d6565b5f8781526006830160205260409020546001600160a01b0316331461293557336117e8565b5f87815260068301602052604090205460a082015161296491600160b01b90046001600160401b031690615319565b6001600160401b03168160c001516001600160401b031610156129ab5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129c3576129bc888761261d565b90506129e1565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a0690611504565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a6f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a939190615084565b90508084600a015f8b81526020019081526020015f205f828254612ab79190615759565b90915550506001600160a01b03861615612af4575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615b5d833981519152805460011901612b3357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b42614b0f565b5f80516020615b1d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b75886124de565b604001516040518263ffffffff1660e01b8152600401612b959190615072565b6040805180830381865af4158015612baf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612bd391906155ca565b915091508015612bfa57604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612c3157612c31614da6565b6005811115612c4257612c42614da6565b8152602001600182018054612c5690614f06565b80601f0160208091040260200160405190810160405280929190818152602001828054612c8290614f06565b8015612ccd5780601f10612ca457610100808354040283529160200191612ccd565b820191905f5260205f20905b815481529060010190602001808311612cb057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d3857612d38614da6565b14158015612d595750600181516005811115612d5657612d56614da6565b14155b15612d7a57805160405163170cc93360e21b81526108bc9190600401614f38565b600381516005811115612d8f57612d8f614da6565b03612d9d5760048152612da2565b600581525b836006018160200151604051612db891906151f5565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612dfb57612dfb614da6565b021790555060208201516001820190612e14908261524a565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612eba57612eba614da6565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612efa6128bc565b5f838152600a82016020526040812080549190559091506109bf8482613c7a565b6117866001600160a01b03831682613cd8565b60015f80516020615b5d83398151915255565b612f4d848484846128e0565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f766128bc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612faf57612faf614da6565b6003811115612fc057612fc0614da6565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061305d7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161306c9190615319565b6001600160401b03164210156130a05760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130f05750602082015161310e565b5f858152600985016020526040902080546001600160a01b03191690555b5f8061311b838886613d6b565b91509150613134856020015161120c8760600151611504565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131846128bc565b600281015490915061ffff600160401b909104811690861610806131ad575061271061ffff8616115b156131d157604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b03908116908516101561320d576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b805483108061321f5750806001015483115b156132405760405163222d164360e21b8152600481018490526024016108bc565b825f61324b826110d8565b90505f6132588983613e18565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f806132de6128bc565b90505f6132ea846110d8565b90505f6132f687611efb565b9050613301876125f4565b613321576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561333657613336614da6565b1461335757805160405163170cc93360e21b81526108bc9190600401614f38565b5f8282608001516133689190615319565b905083600201600a9054906101000a90046001600160401b03168260400151613391919061535b565b6001600160401b0316816001600160401b031611156133ce57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133da8a846135d9565b915091505f8a8360405160200161340892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661355d57604051631afcd79f60e31b815260040160405180910390fd5b565b613567613514565b6135708161438a565b6135786143a3565b61122d6060820135608083013561359560c0850160a08601614ceb565b6135a560e0860160c0870161576c565b6135b6610100870160e08801615785565b6101008701356135ce61014089016101208a0161509b565b8861014001356143b3565b5f8281525f80516020615b3d833981519152602052604081206002015481905f80516020615b1d83398151915290600160801b90046001600160401b03166136218582614598565b5f61362b87614802565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136fb9190810190615041565b6040518263ffffffff1660e01b81526004016137179190615072565b6020604051808303815f875af1158015613733573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137579190615084565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806137ba6128bc565b90505f6137ca8660400151611efb565b90505f6003825160058111156137e2576137e2614da6565b148061380057506004825160058111156137fe576137fe614da6565b145b15613810575060c081015161384d565b60028251600581111561382557613825614da6565b0361383157504261384d565b815160405163170cc93360e21b81526108bc9190600401614f38565b86608001516001600160401b0316816001600160401b031611613875575f9350505050611b2e565b600483015460608801515f916001600160a01b031690634f22429f9061389a90611504565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561391b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393f9190615084565b5f878152600886016020526040902081905590506001600160a01b038716156128b1575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61399d614b0f565b5f8281525f80516020615b3d8339815191526020526040808220815160e0810190925280545f80516020615b1d83398151915293929190829060ff1660058111156139ea576139ea614da6565b60058111156139fb576139fb614da6565b8152602001600182018054613a0f90614f06565b80601f0160208091040260200160405190810160405280929190818152602001828054613a3b90614f06565b8015613a865780601f10613a5d57610100808354040283529160200191613a86565b820191905f5260205f20905b815481529060010190602001808311613a6957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613af457613af4614da6565b14613b27575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614f38565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b6c57613b6c614da6565b021790555060208201516001820190613b85908261524a565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c2385826135d9565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613cc6575f80fd5b505af1158015611360573d5f803e3d5ffd5b80471015613cfb5760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d44576040519150601f19603f3d011682016040523d82523d5f602084013e613d49565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d766128bc565b5f86815260088201602052604081208054908290559192509081908015613e0a575f87815260068501602052604090205461271090613dc090600160a01b900461ffff16836155b3565b613dca9190615545565b91508184600a015f8981526020019081526020015f205f828254613dee9190615759565b90915550613dfe905082826157a5565b9250613e0a8984613c7a565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613e5c57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615b1d83398151915242613e7b6060860160408701614ceb565b6001600160401b0316111580613eb55750613e996202a30042615759565b613ea96060860160408701614ceb565b6001600160401b031610155b15613eef57613eca6060850160408601614ceb565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613f1290600160401b90048216858316615759565b1115613f3c57604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613f51613f4c60608601866157b8565b614877565b613f61613f4c60808601866157b8565b6030613f7060208601866157cc565b905014613fa257613f8460208501856157cc565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613fac84806157cc565b90505f03613fd957613fbe84806157cc565b604051633e08a12560e11b81526004016108bc92919061580e565b5f60068201613fe886806157cc565b604051613ff6929190615677565b9081526020016040518091039020541461402f5761401484806157cc565b60405163a41f772f60e01b81526004016108bc92919061580e565b614039835f614598565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140768a806157cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906140be908b018b6157cc565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161410760608b0160408c01614ceb565b6001600160401b0316815260200161412260608b018b6157b8565b61412b90615821565b815260200161413d60808b018b6157b8565b61414690615821565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401614174919061594e565b5f60405180830381865af415801561418e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141b59190810190615a05565b5f828152600486016020526040902091935091506141d3828261524a565b5081600684016141e388806157cc565b6040516141f1929190615677565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb9061422d908590600401615072565b6020604051808303815f875af1158015614249573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061426d9190615084565b5f8481526005860160205260409020805460ff19166001179055905061429387806157cc565b5f8581526005870160205260409020600101916142b1919083615a48565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff191690558061431088806157cc565b60405161431e929190615677565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b604001602081019061435c9190614ceb565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b614392613514565b61439a6149e0565b61122d816149e8565b6143ab613514565b61355d614ad0565b6143bb613514565b5f6143c46128bc565b905061ffff861615806143dc575061271061ffff8716115b1561440057604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156144245760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806144375750600a60ff8616115b1561445a5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156144c1576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144e15760405163a733007160e01b815260040160405180910390fd5b8161450257604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615b1d8339815191525f6001600160401b0380841690851611156145cc576145c58385615686565b90506145d9565b6145d68484615686565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b9004909216606082015242911580614646575060018401548151614642916001600160401b031690615759565b8210155b1561466e576001600160401b038084166060830152828252604082015116602082015261468d565b82816060018181516146809190615319565b6001600160401b03169052505b606081015161469d90606461535b565b602082015160018601546001600160401b0392909216916146c89190600160401b900460ff1661535b565b6001600160401b0316101561470157606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516147139190615319565b6001600160401b0316905250604081018051869190614733908390615686565b6001600160401b03169052506001840154604082015160649161476191600160401b90910460ff169061535b565b6001600160401b0316101561479a576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615b3d8339815191526020526040812060020180545f80516020615b1d833981519152919060089061484c90600160401b90046001600160401b0316615b01565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6148846020820182614cbe565b63ffffffff161580156148a4575061489f60208201826150b6565b151590505b156148eb576148b66020820182614cbe565b6148c360208301836150b6565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148f860208201826150b6565b90506149076020830183614cbe565b63ffffffff161115614920576148b66020820182614cbe565b60015b61493060208301836150b6565b90508110156117865761494660208301836150b6565b6149516001846157a5565b818110614960576149606150fb565b9050602002016020810190614975919061509b565b6001600160a01b031661498b60208401846150b6565b8381811061499b5761499b6150fb565b90506020020160208101906149b0919061509b565b6001600160a01b031610156149d857604051630dbc8d5f60e31b815260040160405180910390fd5b600101614923565b61355d613514565b6149f0613514565b80355f80516020615b1d8339815191529081556014614a156060840160408501615785565b60ff161180614a345750614a2f6060830160408401615785565b60ff16155b15614a6857614a496060830160408401615785565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a786060830160408401615785565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa96040830160208401614ceb565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612f2e613514565b508054614ae490614f06565b5f825580601f10614af3575050565b601f0160209004905f5260205f209081019061122d9190614b4c565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b60575f8155600101614b4d565b5090565b801515811461122d575f80fd5b803563ffffffff81168114611ef6575f80fd5b5f805f60608486031215614b96575f80fd5b833592506020840135614ba881614b64565b9150614bb660408501614b71565b90509250925092565b5f60208284031215614bcf575f80fd5b5035919050565b5f6101608284031215614be7575f80fd5b50919050565b5f8060408385031215614bfe575f80fd5b82356001600160401b03811115614c13575f80fd5b830160808186031215614c24575f80fd5b9150614c3260208401614b71565b90509250929050565b5f8060408385031215614c4c575f80fd5b82359150614c3260208401614b71565b6001600160a01b038116811461122d575f80fd5b5f805f8060808587031215614c83575f80fd5b843593506020850135614c9581614b64565b9250614ca360408601614b71565b91506060850135614cb381614c5c565b939692955090935050565b5f60208284031215614cce575f80fd5b611b2e82614b71565b6001600160401b038116811461122d575f80fd5b5f60208284031215614cfb575f80fd5b8135611b2e81614cd7565b5f8060408385031215614d17575f80fd5b823591506020830135614d2981614c5c565b809150509250929050565b803561ffff81168114611ef6575f80fd5b5f805f60608486031215614d57575f80fd5b83356001600160401b03811115614d6c575f80fd5b840160a08187031215614d7d575f80fd5b9250614d8b60208501614d34565b91506040840135614d9b81614cd7565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614dca57614dca614da6565b9052565b5f5b83811015614de8578181015183820152602001614dd0565b50505f910152565b5f8151808452614e07816020860160208601614dce565b601f01601f19169290920160200192915050565b60208152614e2d602082018351614dba565b5f602083015160e06040840152614e48610100840182614df0565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614eac575f80fd5b82356001600160401b0380821115614ec2575f80fd5b818501915085601f830112614ed5575f80fd5b813581811115614ee3575f80fd5b866020828501011115614ef4575f80fd5b60209290920196919550909350505050565b600181811c90821680614f1a57607f821691505b602082108103614be757634e487b7160e01b5f52602260045260245ffd5b602081016111268284614dba565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f7c57614f7c614f46565b60405290565b604080519081016001600160401b0381118282101715614f7c57614f7c614f46565b604051601f8201601f191681016001600160401b0381118282101715614fcc57614fcc614f46565b604052919050565b5f6001600160401b03821115614fec57614fec614f46565b50601f01601f191660200190565b5f82601f830112615009575f80fd5b815161501c61501782614fd4565b614fa4565b818152846020838601011115615030575f80fd5b6124d6826020830160208701614dce565b5f60208284031215615051575f80fd5b81516001600160401b03811115615066575f80fd5b6124d684828501614ffa565b602081525f611b2e6020830184614df0565b5f60208284031215615094575f80fd5b5051919050565b5f602082840312156150ab575f80fd5b8135611b2e81614c5c565b5f808335601e198436030181126150cb575f80fd5b8301803591506001600160401b038211156150e4575f80fd5b6020019150600581901b36038213156137a9575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112615123575f80fd5b9190910192915050565b5f82601f83011261513c575f80fd5b813561514a61501782614fd4565b81815284602083860101111561515e575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561518a575f80fd5b615192614f5a565b82356001600160401b03808211156151a8575f80fd5b6151b43683870161512d565b835260208501359150808211156151c9575f80fd5b506151d63682860161512d565b60208301525060408301356151ea81614cd7565b604082015292915050565b5f8251615123818460208701614dce565b601f82111561073057805f5260205f20601f840160051c8101602085101561522b5750805b601f840160051c820191505b81811015611138575f8155600101615237565b81516001600160401b0381111561526357615263614f46565b615277816152718454614f06565b84615206565b602080601f8311600181146152aa575f84156152935750858301515b5f19600386901b1c1916600185901b178555611360565b5f85815260208120601f198616915b828110156152d8578886015182559484019460019091019084016152b9565b50858210156152f557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b038181168382160190808211156125ed576125ed615305565b5f63ffffffff80831681810361535157615351615305565b6001019392505050565b6001600160401b0381811683821602808216919082811461537e5761537e615305565b505092915050565b5f808335601e1984360301811261539b575f80fd5b83016020810192503590506001600160401b038111156153b9575f80fd5b8036038213156137a9575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156154a457848303601f19018952813536889003605e1901811261542b575f80fd5b870160606154398280615386565b82875261544983880182846153c7565b9250505061545986830183615386565b8683038888015261546b8382846153c7565b92505050604080830135925061548083614cd7565b6001600160401b039290921694909101939093529783019790830190600101615406565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154d581614c5c565b6001600160a01b031660608381019190915283013536849003601e190181126154fc575f80fd5b83016020810190356001600160401b03811115615517575f80fd5b8060051b3603821315615528575f80fd5b60808085015261553c60a0850182846153ef565b95945050505050565b5f8261555f57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061557857615578614da6565b91905290565b5f805f60608486031215615590575f80fd5b8351925060208401516155a281614cd7565b6040850151909250614d9b81614cd7565b808202811582820484141761112657611126615305565b5f80604083850312156155db575f80fd5b825191506020830151614d2981614b64565b5f60208083525f84546155ff81614f06565b806020870152604060018084165f8114615620576001811461563c57615669565b60ff19851660408a0152604084151560051b8a01019550615669565b895f5260205f205f5b858110156156605781548b8201860152908301908801615645565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038281168282160390808211156125ed576125ed615305565b5f80604083850312156156b7575f80fd5b82516001600160401b03808211156156cd575f80fd5b90840190606082870312156156e0575f80fd5b6156e8614f5a565b8251815260208301516156fa81614c5c565b6020820152604083015182811115615710575f80fd5b61571c88828601614ffa565b6040830152508094505050506020830151614d2981614b64565b5f8060408385031215615747575f80fd5b825191506020830151614d2981614cd7565b8082018082111561112657611126615305565b5f6020828403121561577c575f80fd5b611b2e82614d34565b5f60208284031215615795575f80fd5b813560ff81168114611b2e575f80fd5b8181038181111561112657611126615305565b5f8235603e19833603018112615123575f80fd5b5f808335601e198436030181126157e1575f80fd5b8301803591506001600160401b038211156157fa575f80fd5b6020019150368190038213156137a9575f80fd5b602081525f6124d66020830184866153c7565b5f60408236031215615831575f80fd5b615839614f82565b61584283614b71565b81526020808401356001600160401b038082111561585e575f80fd5b9085019036601f830112615870575f80fd5b81358181111561588257615882614f46565b8060051b9150615893848301614fa4565b81815291830184019184810190368411156158ac575f80fd5b938501935b838510156158d657843592506158c683614c5c565b82825293850193908501906158b1565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156159435784516001600160a01b0316825293830193600192909201919083019061591a565b509695505050505050565b60208152815160208201525f602083015160e06040840152615974610100840182614df0565b90506040840151601f19808584030160608601526159928383614df0565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159c283836158e8565b925060a08601519150808584030160c0860152506159e082826158e8565b91505060c08401516159fd60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615a16575f80fd5b8251915060208301516001600160401b03811115615a32575f80fd5b615a3e85828601614ffa565b9150509250929050565b6001600160401b03831115615a5f57615a5f614f46565b615a7383615a6d8354614f06565b83615206565b5f601f841160018114615aa4575f8515615a8d5750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615ad35786850135825560209485019460019092019101615ab3565b5086821015615aef575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036153515761535161530556fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220518758d0a039f6c47e1f96e3b4d2fa09cf0bd8e79d8bdddfd29c212664c10d2864736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615cb8380380615cb883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b6b8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614b3d565b610724565b005b348015610263575f80fd5b50610256610272366004614b78565b610735565b348015610282575f80fd5b50610256610291366004614b8f565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614b3d565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614ba6565b610aae565b34801561030a575f80fd5b50610256610319366004614bf4565b611064565b348015610329575f80fd5b5061033d610338366004614b78565b6110d8565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614c29565b61112c565b3480156103d9575f80fd5b506102566103e8366004614b3d565b61113f565b3480156103f8575f80fd5b50610256610407366004614c77565b61114b565b348015610417575f80fd5b50610256610426366004614c29565b61121d565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bf4565b611229565b34801561047e575f80fd5b5061049261048d366004614ca4565b6114f1565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b78565b611511565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614b3d565b611525565b3480156104fc575f80fd5b5061025661050b366004614c29565b611531565b34801561051b575f80fd5b5061025661052a366004614bf4565b61153d565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614cbf565b611777565b34801561056d575f80fd5b5061025661057c366004614b78565b611828565b34801561058c575f80fd5b5061025661059b366004614c29565b6118bc565b3480156105ab575f80fd5b506102566105ba366004614c77565b6118c8565b6104926105cd366004614cfe565b611abe565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b78565b611af2565b348015610649575f80fd5b506104925f80516020615ad683398151915281565b348015610669575f80fd5b50610256610678366004614b78565b611d4b565b61049261068b366004614b78565b611e87565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b78565b611eb8565b6040516102b89190614dd4565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614cbf565b612007565b348015610710575f80fd5b5061049261071f366004614e54565b61209e565b6107308383835f6120f9565b505050565b5f8181525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff16600581111561078257610782614d5f565b600581111561079357610793614d5f565b81526020016001820180546107a790614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614ebf565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d5f565b146108c5575f8381526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614ffa565b6040518263ffffffff1660e01b815260040161097f919061502b565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf919061503d565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a5683612125565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f612136565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f80516020615ad68339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b67919061503d565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615054565b6001600160a01b031614610be457610bbf6060840160408501615054565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561506f565b905090505f805b828163ffffffff161015610e5a575f610c15606088018861506f565b8363ffffffff16818110610c2b57610c2b6150b4565b9050602002810190610c3d91906150c8565b610c4690615133565b80516040519192505f916006880191610c5e916151ae565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc919060040161502b565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd7916151ae565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d15919061503d565b90508086600601835f0151604051610d2d91906151ae565b90815260408051918290036020908101909220929092555f8381526005890190915220805460ff191660021781558251600190910190610d6d9082615203565b50604082810180515f84815260058a016020529290922060028101805492516001600160401b039485166001600160c01b031990941693909317600160801b85851602176001600160c01b0316600160c01b429590951694909402939093179092556003909101805467ffffffffffffffff19169055610ded90856152d2565b8251604051919550610dfe916151ae565b60408051918290038220908401516001600160401b031682529082907ffe3e5983f71c8253fb0b678f2bc587aa8574d8f1aab9cf82b983777f5998392c9060200160405180910390a3505080610e53906152f2565b9050610bf9565b5060038301805467ffffffffffffffff60401b1916600160401b6001600160401b0384168102919091179091556001840154606491610e9d910460ff1683615314565b6001600160401b03161015610ed057604051633e1a785160e01b81526001600160401b03821660048201526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ef48761246b565b604001516040518263ffffffff1660e01b8152600401610f14919061502b565b602060405180830381865af4158015610f2f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f53919061503d565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f8d919061546a565b5f60405180830381865af4158015610fa7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fce9190810190614ffa565b90505f600282604051610fe191906151ae565b602060405180830381855afa158015610ffc573d5f803e3d5ffd5b5050506040513d601f19601f8201168201806040525081019061101f919061503d565b905082811461104b5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506007909201805460ff1916600117905550505050565b61106d82612581565b61108d576040516330efa98b60e01b8152600481018390526024016108bc565b5f61109783611eb8565b51905060028160058111156110ae576110ae614d5f565b146110ce578060405163170cc93360e21b81526004016108bc9190614ef1565b6109bf83836125aa565b5f806110e2612849565b600301546110f090846154fe565b905080158061110557506001600160401b0381115b156111265760405163222d164360e21b8152600481018490526024016108bc565b92915050565b61113884848484612136565b5050505050565b6109bf8383835f61286d565b611153612aaa565b5f61115c612849565b90505f8061116984612ae1565b9150915061117682612581565b61118257505050611204565b5f828152600684016020908152604080832054600b870190925290912080546001600160a01b031981169091556001600160a01b039182169116806111c45750805b6004835160058111156111d9576111d9614d5f565b036111e8576111e88185612e99565b6111fe826111f985604001516114f1565b612ec3565b50505050505b61121a60015f80516020615b1683398151915255565b50565b6109bf84848484612ee9565b5f611232612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561126b5761126b614d5f565b600381111561127c5761127c614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112f282611eb8565b905060018351600381111561130957611309614d5f565b1461132a578251604051633b0d540d60e21b81526108bc919060040161551d565b60048151600581111561133f5761133f614d5f565b036113555761134d86612f15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61137a8961246b565b604001516040518263ffffffff1660e01b815260040161139a919061502b565b606060405180830381865af41580156113b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113d99190615537565b509150915081841461140657846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b0316108061143f5750806001600160401b03168560a001516001600160401b0316115b1561146857604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b810267ffffffffffffffff60401b1990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114fa612849565b60030154611126906001600160401b03841661556c565b5f61151b82611eb8565b6080015192915050565b6107308383835f612ee9565b6111388484848461286d565b611545612aaa565b5f61154e612849565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561158757611587614d5f565b600381111561159857611598614d5f565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561161157611611614d5f565b14611632578051604051633b0d540d60e21b81526108bc919060040161551d565b60046116418260400151611eb8565b51600581111561165357611653614d5f565b14611752575f6116628461246b565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116a1919061502b565b606060405180830381865af41580156116bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e09190615537565b50915091508184604001511461170c5760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561174e57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61175b84612f15565b505061177360015f80516020615b1683398151915255565b5050565b5f611780612849565b90506001600160a01b0382166117b45760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117fa57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b5f928352600b01602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b5f611831612849565b90505f61183d83611eb8565b519050600481600581111561185457611854614d5f565b14611874578060405163170cc93360e21b81526004016108bc9190614ef1565b5f8381526006830160205260409020546001600160a01b0316331461189957336117d5565b5f838152600683016020526040902054610730906001600160a01b031684612e99565b6109bf848484846120f9565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6118fb8661246b565b604001516040518263ffffffff1660e01b815260040161191b919061502b565b6040805180830381865af4158015611935573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119599190615583565b915091508061197f57604051632d07135360e01b815281151560048201526024016108bc565b5f8281526004840160205260409020805461199990614ebf565b90505f036119bd5760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580860160205260409091205460ff16908111156119e4576119e4614d5f565b14611a17575f8281526005840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004840160205260408120611a2f91614a91565b5f828152600584016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917f8629ec2bfd8d3b792ba269096bb679e08f20ba2caec0785ef663cf94788e349b910160405180910390a250505050565b5f611ac7612aaa565b611ad38484843461310f565b9050611aeb60015f80516020615b1683398151915255565b9392505050565b5f611afb612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b3457611b34614d5f565b6003811115611b4557611b45614d5f565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bbe57611bbe614d5f565b14158015611bdf5750600381516003811115611bdc57611bdc614d5f565b14155b15611c00578051604051633b0d540d60e21b81526108bc919060040161551d565b5f611c0e8260400151611eb8565b905080606001516001600160401b03165f03611c40576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cae93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cc8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611cef9190810190614ffa565b6040518263ffffffff1660e01b8152600401611d0b919061502b565b6020604051808303815f875af1158015611d27573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611138919061503d565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb046020526040902080545f80516020615ad68339815191529190611d9290614ebf565b90505f03611db65760405163089938b360e11b8152600481018390526024016108bc565b60015f838152600580840160205260409091205460ff1690811115611ddd57611ddd614d5f565b14611e10575f8281526005820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b5f8281526004808301602052604091829020915163ee5b48eb60e01b81526005600160991b019263ee5b48eb92611e4792016155a6565b6020604051808303815f875af1158015611e63573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610730919061503d565b5f611e90612aaa565b611e9b823334613284565b9050611eb360015f80516020615b1683398151915255565b919050565b611ec0614ac8565b5f8281525f80516020615af6833981519152602052604090819020815160e0810190925280545f80516020615ad6833981519152929190829060ff166005811115611f0d57611f0d614d5f565b6005811115611f1e57611f1e614d5f565b8152602001600182018054611f3290614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054611f5e90614ebf565b8015611fa95780601f10611f8057610100808354040283529160200191611fa9565b820191905f5260205f20905b815481529060010190602001808311611f8c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120395760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f612042612849565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461207057336117d5565b5f928352600901602052604090912080546001600160a01b0319166001600160a01b03909216919091179055565b6040515f905f80516020615ad6833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb06906120e19086908690615630565b90815260200160405180910390205491505092915050565b61210584848484612136565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61212d6134c4565b61121a8161350f565b5f80612140612849565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561217957612179614d5f565b600381111561218a5761218a614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61220082611eb8565b905060028351600381111561221757612217614d5f565b14612238578251604051633b0d540d60e21b81526108bc919060040161551d565b60208301516001600160a01b031633146122d4575f8281526006850160205260409020546001600160a01b0316331461227157336117d5565b5f82815260068501602052604090205460a08201516122a091600160b01b90046001600160401b0316906152d2565b6001600160401b03164210156122d45760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b6002815160058111156122e9576122e9614d5f565b0361240b576002840154608084015161230b916001600160401b0316906152d2565b6001600160401b031642101561233f5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123515761234f82886125aa565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161238a918491612385919061563f565b613589565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556123cd84888c613760565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124639350505050565b60048151600581111561242057612420614d5f565b036124475761243083878b613760565b5061243a89612f15565b6001945050505050612463565b805160405163170cc93360e21b81526108bc9190600401614ef1565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156124cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124f6919081019061565f565b915091508061251857604051636b2f19e960e01b815260040160405180910390fd5b81511561253e578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561257a576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061258b612849565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156125f5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261261c919081019061565f565b915091508061263e57604051636b2f19e960e01b815260040160405180910390fd5b5f612647612849565b6005810154845191925014612675578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126b1576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156126ed576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161272a919061502b565b6040805180830381865af4158015612744573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276891906156ef565b9150915081881461278f5760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612820575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261283e565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612877612849565b90505f6128838761394e565b905061288e87612581565b61289d57600192505050612463565b5f8781526006830160205260409020546001600160a01b031633146128c257336117d5565b5f87815260068301602052604090205460a08201516128f191600160b01b90046001600160401b0316906152d2565b6001600160401b03168160c001516001600160401b031610156129385760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129505761294988876125aa565b905061296e565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612993906114f1565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156129fc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a20919061503d565b90506001600160a01b038616612a4c575f8981526006850160205260409020546001600160a01b031695505b5f898152600a8501602052604081208054839290612a6b908490615712565b90915550505f898152600b909401602052604090932080546001600160a01b0387166001600160a01b0319909116179055505015159050949350505050565b5f80516020615b16833981519152805460011901612adb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612aea614ac8565b5f80516020615ad68339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b1d8861246b565b604001516040518263ffffffff1660e01b8152600401612b3d919061502b565b6040805180830381865af4158015612b57573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b7b9190615583565b915091508015612ba257604051632d07135360e01b815281151560048201526024016108bc565b5f82815260058085016020526040808320815160e08101909252805491929091839160ff90911690811115612bd957612bd9614d5f565b6005811115612bea57612bea614d5f565b8152602001600182018054612bfe90614ebf565b80601f0160208091040260200160405190810160405280929190818152602001828054612c2a90614ebf565b8015612c755780601f10612c4c57610100808354040283529160200191612c75565b820191905f5260205f20905b815481529060010190602001808311612c5857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612ce057612ce0614d5f565b14158015612d015750600181516005811115612cfe57612cfe614d5f565b14155b15612d2257805160405163170cc93360e21b81526108bc9190600401614ef1565b600381516005811115612d3757612d37614d5f565b03612d455760048152612d4a565b600581525b836006018160200151604051612d6091906151ae565b90815260408051602092819003830190205f90819055858152600587810190935220825181548493839160ff1916906001908490811115612da357612da3614d5f565b021790555060208201516001820190612dbc9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e6257612e62614d5f565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ea2612849565b5f838152600a82016020526040812080549190559091506109bf8482613c33565b6117736001600160a01b03831682613c91565b60015f80516020615b1683398151915255565b612ef58484848461286d565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f1e612849565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f5757612f57614d5f565b6003811115612f6857612f68614d5f565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130057fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161301491906152d2565b6001600160401b03164210156130485760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b03191681556001810184905560020183905560098601909152902080546001600160a01b031981169091556001600160a01b0316806130a3575060208201515b5f806130b0838886613d24565b915091506130c985602001516111f987606001516114f1565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613119612849565b600281015490915061ffff600160401b90910481169086161080613142575061271061ffff8616115b1561316657604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131a2576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131b45750806001015483115b156131d55760405163222d164360e21b8152600481018490526024016108bc565b825f6131e0826110d8565b90505f6131ed8983613dd1565b5f818152600686016020908152604080832080546001600160401b039c909c16600160b01b0267ffffffffffffffff60b01b1961ffff9e909e16600160a01b02336001600160b01b0319909e168e17179d909d169c909c178c556001909b01805467ffffffffffffffff19169055600b9096019095529790932080546001600160a01b031916909617909555509395945050505050565b5f8061328e612849565b90505f61329a846110d8565b90505f6132a687611eb8565b90506132b187612581565b6132d1576040516330efa98b60e01b8152600481018890526024016108bc565b6002815160058111156132e6576132e6614d5f565b1461330757805160405163170cc93360e21b81526108bc9190600401614ef1565b5f82826080015161331891906152d2565b905083600201600a9054906101000a90046001600160401b031682604001516133419190615314565b6001600160401b0316816001600160401b0316111561337e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f8061338a8a84613589565b915091505f8a836040516020016133b892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661350d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135176134c4565b61352081614343565b61352861435c565b61121a6060820135608083013561354560c0850160a08601614ca4565b61355560e0860160c08701615725565b613566610100870160e0880161573e565b61010087013561357e61014089016101208a01615054565b88610140013561436c565b5f8281525f80516020615af6833981519152602052604081206002015481905f80516020615ad683398151915290600160801b90046001600160401b03166135d18582614551565b5f6135db876147bb565b5f888152600585016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613684573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136ab9190810190614ffa565b6040518263ffffffff1660e01b81526004016136c7919061502b565b6020604051808303815f875af11580156136e3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613707919061503d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061376a612849565b90505f61377a8660400151611eb8565b90505f60038251600581111561379257613792614d5f565b14806137b057506004825160058111156137ae576137ae614d5f565b145b156137c0575060c08101516137fd565b6002825160058111156137d5576137d5614d5f565b036137e15750426137fd565b815160405163170cc93360e21b81526108bc9190600401614ef1565b86608001516001600160401b0316816001600160401b031611613825575f9350505050611aeb565b600483015460608801515f916001600160a01b031690634f22429f9061384a906114f1565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906138ef919061503d565b90506001600160a01b03871661390757876020015196505b5f8681526008850160209081526040808320849055600990960190529390932080546001600160a01b0388166001600160a01b031990911617905550909150509392505050565b613956614ac8565b5f8281525f80516020615af68339815191526020526040808220815160e0810190925280545f80516020615ad683398151915293929190829060ff1660058111156139a3576139a3614d5f565b60058111156139b4576139b4614d5f565b81526020016001820180546139c890614ebf565b80601f01602080910402602001604051908101604052809291908181526020018280546139f490614ebf565b8015613a3f5780601f10613a1657610100808354040283529160200191613a3f565b820191905f5260205f20905b815481529060010190602001808311613a2257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613aad57613aad614d5f565b14613ae0575f8481526005830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614ef1565b60038152426001600160401b031660c08201525f84815260058381016020526040909120825181548493839160ff1916906001908490811115613b2557613b25614d5f565b021790555060208201516001820190613b3e9082615203565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bdc8582613589565b6080840151604080516001600160401b03909216825242602083015291935083925087917ffbfc4c00cddda774e9bce93712e29d12887b46526858a1afb0937cce8c30fa42910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c7f575f80fd5b505af115801561134d573d5f803e3d5ffd5b80471015613cb45760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613cfd576040519150601f19603f3d011682016040523d82523d5f602084013e613d02565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d2f612849565b5f86815260088201602052604081208054908290559192509081908015613dc3575f87815260068501602052604090205461271090613d7990600160a01b900461ffff168361556c565b613d8391906154fe565b91508184600a015f8981526020019081526020015f205f828254613da79190615712565b90915550613db79050828261575e565b9250613dc38984613c33565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07545f9060ff16613e1557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615ad683398151915242613e346060860160408701614ca4565b6001600160401b0316111580613e6e5750613e526202a30042615712565b613e626060860160408701614ca4565b6001600160401b031610155b15613ea857613e836060850160408601614ca4565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b60038101546001600160401b0390613ecb90600160401b90048216858316615712565b1115613ef557604051633e1a785160e01b81526001600160401b03841660048201526024016108bc565b613f0a613f056060860186615771565b614830565b613f1a613f056080860186615771565b6030613f296020860186615785565b905014613f5b57613f3d6020850185615785565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f658480615785565b90505f03613f9257613f778480615785565b604051633e08a12560e11b81526004016108bc9291906157c7565b5f60068201613fa18680615785565b604051613faf929190615630565b90815260200160405180910390205414613fe857613fcd8480615785565b60405163a41f772f60e01b81526004016108bc9291906157c7565b613ff2835f614551565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce51906020810161402f8a80615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614077908b018b615785565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c060608b0160408c01614ca4565b6001600160401b031681526020016140db60608b018b615771565b6140e4906157da565b81526020016140f660808b018b615771565b6140ff906157da565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161412d9190615907565b5f60405180830381865af4158015614147573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261416e91908101906159be565b5f8281526004860160205260409020919350915061418c8282615203565b50816006840161419c8880615785565b6040516141aa929190615630565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141e690859060040161502b565b6020604051808303815f875af1158015614202573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614226919061503d565b5f8481526005860160205260409020805460ff19166001179055905061424c8780615785565b5f85815260058701602052604090206001019161426a919083615a01565b505f83815260058501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142c98880615785565b6040516142d7929190615630565b6040518091039020847fd8a184af94a03e121609cc5f803a446236793e920c7945abc6ba355c8a30cb49898b60400160208101906143159190614ca4565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61434b6134c4565b614353614999565b61121a816149a1565b6143646134c4565b61350d614a89565b6143746134c4565b5f61437d612849565b905061ffff86161580614395575061271061ffff8716115b156143b957604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143dd5760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f05750600a60ff8616115b156144135760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561447a576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f0361449a5760405163a733007160e01b815260040160405180910390fd5b816144bb57604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615ad68339815191525f6001600160401b0380841690851611156145855761457e838561563f565b9050614592565b61458f848461563f565b90505b60408051608081018252600284015480825260038501546001600160401b038082166020850152600160401b8204811694840194909452600160801b90049092166060820152429115806145ff5750600184015481516145fb916001600160401b031690615712565b8210155b15614627576001600160401b0380841660608301528282526040820151166020820152614646565b828160600181815161463991906152d2565b6001600160401b03169052505b6060810151614656906064615314565b602082015160018601546001600160401b0392909216916146819190600160401b900460ff16615314565b6001600160401b031610156146ba57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b85816040018181516146cc91906152d2565b6001600160401b03169052506040810180518691906146ec90839061563f565b6001600160401b03169052506001840154604082015160649161471a91600160401b90910460ff1690615314565b6001600160401b03161015614753576040808201519051633e1a785160e01b81526001600160401b0390911660048201526024016108bc565b8051600285015560208101516003909401805460408301516060909301516001600160401b03908116600160801b0267ffffffffffffffff60801b19948216600160401b026001600160801b0319909316919097161717919091169390931790925550505050565b5f8181525f80516020615af68339815191526020526040812060020180545f80516020615ad6833981519152919060089061480590600160401b90046001600160401b0316615aba565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61483d6020820182614c77565b63ffffffff1615801561485d5750614858602082018261506f565b151590505b156148a45761486f6020820182614c77565b61487c602083018361506f565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148b1602082018261506f565b90506148c06020830183614c77565b63ffffffff1611156148d95761486f6020820182614c77565b60015b6148e9602083018361506f565b9050811015611773576148ff602083018361506f565b61490a60018461575e565b818110614919576149196150b4565b905060200201602081019061492e9190615054565b6001600160a01b0316614944602084018461506f565b83818110614954576149546150b4565b90506020020160208101906149699190615054565b6001600160a01b0316101561499157604051630dbc8d5f60e31b815260040160405180910390fd5b6001016148dc565b61350d6134c4565b6149a96134c4565b80355f80516020615ad683398151915290815560146149ce606084016040850161573e565b60ff1611806149ed57506149e8606083016040840161573e565b60ff16155b15614a2157614a02606083016040840161573e565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b614a31606083016040840161573e565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a626040830160208401614ca4565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612ed66134c4565b508054614a9d90614ebf565b5f825580601f10614aac575050565b601f0160209004905f5260205f209081019061121a9190614b05565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b19575f8155600101614b06565b5090565b801515811461121a575f80fd5b803563ffffffff81168114611eb3575f80fd5b5f805f60608486031215614b4f575f80fd5b833592506020840135614b6181614b1d565b9150614b6f60408501614b2a565b90509250925092565b5f60208284031215614b88575f80fd5b5035919050565b5f6101608284031215614ba0575f80fd5b50919050565b5f8060408385031215614bb7575f80fd5b82356001600160401b03811115614bcc575f80fd5b830160808186031215614bdd575f80fd5b9150614beb60208401614b2a565b90509250929050565b5f8060408385031215614c05575f80fd5b82359150614beb60208401614b2a565b6001600160a01b038116811461121a575f80fd5b5f805f8060808587031215614c3c575f80fd5b843593506020850135614c4e81614b1d565b9250614c5c60408601614b2a565b91506060850135614c6c81614c15565b939692955090935050565b5f60208284031215614c87575f80fd5b611aeb82614b2a565b6001600160401b038116811461121a575f80fd5b5f60208284031215614cb4575f80fd5b8135611aeb81614c90565b5f8060408385031215614cd0575f80fd5b823591506020830135614ce281614c15565b809150509250929050565b803561ffff81168114611eb3575f80fd5b5f805f60608486031215614d10575f80fd5b83356001600160401b03811115614d25575f80fd5b840160a08187031215614d36575f80fd5b9250614d4460208501614ced565b91506040840135614d5481614c90565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d8357614d83614d5f565b9052565b5f5b83811015614da1578181015183820152602001614d89565b50505f910152565b5f8151808452614dc0816020860160208601614d87565b601f01601f19169290920160200192915050565b60208152614de6602082018351614d73565b5f602083015160e06040840152614e01610100840182614da9565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e65575f80fd5b82356001600160401b0380821115614e7b575f80fd5b818501915085601f830112614e8e575f80fd5b813581811115614e9c575f80fd5b866020828501011115614ead575f80fd5b60209290920196919550909350505050565b600181811c90821680614ed357607f821691505b602082108103614ba057634e487b7160e01b5f52602260045260245ffd5b602081016111268284614d73565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f3557614f35614eff565b60405290565b604080519081016001600160401b0381118282101715614f3557614f35614eff565b604051601f8201601f191681016001600160401b0381118282101715614f8557614f85614eff565b604052919050565b5f6001600160401b03821115614fa557614fa5614eff565b50601f01601f191660200190565b5f82601f830112614fc2575f80fd5b8151614fd5614fd082614f8d565b614f5d565b818152846020838601011115614fe9575f80fd5b612463826020830160208701614d87565b5f6020828403121561500a575f80fd5b81516001600160401b0381111561501f575f80fd5b61246384828501614fb3565b602081525f611aeb6020830184614da9565b5f6020828403121561504d575f80fd5b5051919050565b5f60208284031215615064575f80fd5b8135611aeb81614c15565b5f808335601e19843603018112615084575f80fd5b8301803591506001600160401b0382111561509d575f80fd5b6020019150600581901b3603821315613759575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126150dc575f80fd5b9190910192915050565b5f82601f8301126150f5575f80fd5b8135615103614fd082614f8d565b818152846020838601011115615117575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615143575f80fd5b61514b614f13565b82356001600160401b0380821115615161575f80fd5b61516d368387016150e6565b83526020850135915080821115615182575f80fd5b5061518f368286016150e6565b60208301525060408301356151a381614c90565b604082015292915050565b5f82516150dc818460208701614d87565b601f82111561073057805f5260205f20601f840160051c810160208510156151e45750805b601f840160051c820191505b81811015611138575f81556001016151f0565b81516001600160401b0381111561521c5761521c614eff565b6152308161522a8454614ebf565b846151bf565b602080601f831160018114615263575f841561524c5750858301515b5f19600386901b1c1916600185901b17855561134d565b5f85815260208120601f198616915b8281101561529157888601518255948401946001909101908401615272565b50858210156152ae57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b0381811683821601908082111561257a5761257a6152be565b5f63ffffffff80831681810361530a5761530a6152be565b6001019392505050565b6001600160401b03818116838216028082169190828114615337576153376152be565b505092915050565b5f808335601e19843603018112615354575f80fd5b83016020810192503590506001600160401b03811115615372575f80fd5b803603821315613759575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561545d57848303601f19018952813536889003605e190181126153e4575f80fd5b870160606153f2828061533f565b8287526154028388018284615380565b925050506154128683018361533f565b86830388880152615424838284615380565b92505050604080830135925061543983614c90565b6001600160401b0392909216949091019390935297830197908301906001016153bf565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561548e81614c15565b6001600160a01b031660608381019190915283013536849003601e190181126154b5575f80fd5b83016020810190356001600160401b038111156154d0575f80fd5b8060051b36038213156154e1575f80fd5b6080808501526154f560a0850182846153a8565b95945050505050565b5f8261551857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061553157615531614d5f565b91905290565b5f805f60608486031215615549575f80fd5b83519250602084015161555b81614c90565b6040850151909250614d5481614c90565b8082028115828204841417611126576111266152be565b5f8060408385031215615594575f80fd5b825191506020830151614ce281614b1d565b5f60208083525f84546155b881614ebf565b806020870152604060018084165f81146155d957600181146155f557615622565b60ff19851660408a0152604084151560051b8a01019550615622565b895f5260205f205f5b858110156156195781548b82018601529083019088016155fe565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0382811682821603908082111561257a5761257a6152be565b5f8060408385031215615670575f80fd5b82516001600160401b0380821115615686575f80fd5b9084019060608287031215615699575f80fd5b6156a1614f13565b8251815260208301516156b381614c15565b60208201526040830151828111156156c9575f80fd5b6156d588828601614fb3565b6040830152508094505050506020830151614ce281614b1d565b5f8060408385031215615700575f80fd5b825191506020830151614ce281614c90565b80820180821115611126576111266152be565b5f60208284031215615735575f80fd5b611aeb82614ced565b5f6020828403121561574e575f80fd5b813560ff81168114611aeb575f80fd5b81810381811115611126576111266152be565b5f8235603e198336030181126150dc575f80fd5b5f808335601e1984360301811261579a575f80fd5b8301803591506001600160401b038211156157b3575f80fd5b602001915036819003821315613759575f80fd5b602081525f612463602083018486615380565b5f604082360312156157ea575f80fd5b6157f2614f3b565b6157fb83614b2a565b81526020808401356001600160401b0380821115615817575f80fd5b9085019036601f830112615829575f80fd5b81358181111561583b5761583b614eff565b8060051b915061584c848301614f5d565b8181529183018401918481019036841115615865575f80fd5b938501935b8385101561588f578435925061587f83614c15565b828252938501939085019061586a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158fc5784516001600160a01b031682529383019360019290920191908301906158d3565b509695505050505050565b60208152815160208201525f602083015160e0604084015261592d610100840182614da9565b90506040840151601f198085840301606086015261594b8383614da9565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261597b83836158a1565b925060a08601519150808584030160c08601525061599982826158a1565b91505060c08401516159b660e08501826001600160401b03169052565b509392505050565b5f80604083850312156159cf575f80fd5b8251915060208301516001600160401b038111156159eb575f80fd5b6159f785828601614fb3565b9150509250929050565b6001600160401b03831115615a1857615a18614eff565b615a2c83615a268354614ebf565b836151bf565b5f601f841160018114615a5d575f8515615a465750838201355b5f19600387901b1c1916600186901b178355611138565b5f83815260208120601f198716915b82811015615a8c5786850135825560209485019460019092019101615a6c565b5086821015615aa8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361530a5761530a6152be56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb059b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a2646970667358221220af403c437d036217f0204209c054e7b3361e4fa8b159155d0d6f85fc835a149c64736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 4243b850b..c4a3752d9 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -289,11 +289,7 @@ abstract contract PoSValidatorManager is revert UnauthorizedOwner(_msgSender()); } - if (rewardRecipient == _msgSender()) { - delete $._rewardRecipients[validationID]; - } else { - $._rewardRecipients[validationID] = rewardRecipient; - } + $._rewardRecipients[validationID] = rewardRecipient; } function changeDelegatorRewardRecipient( @@ -310,11 +306,7 @@ abstract contract PoSValidatorManager is revert UnauthorizedOwner(_msgSender()); } - if (rewardRecipient == _msgSender()) { - delete $._delegatorRewardRecipients[delegationID]; - } else { - $._delegatorRewardRecipients[delegationID] = rewardRecipient; - } + $._delegatorRewardRecipients[delegationID] = rewardRecipient; } /** @@ -365,12 +357,14 @@ abstract contract PoSValidatorManager is stakingEndTime: validator.endedAt, uptimeSeconds: uptimeSeconds }); - $._redeemableValidatorRewards[validationID] += reward; - if (rewardRecipient != address(0)) { - $._rewardRecipients[validationID] = rewardRecipient; + if (rewardRecipient == address(0)) { + rewardRecipient = $._posValidatorInfo[validationID].owner; } + $._redeemableValidatorRewards[validationID] += reward; + $._rewardRecipients[validationID] = rewardRecipient; + return (reward > 0); } @@ -389,13 +383,12 @@ abstract contract PoSValidatorManager is } address owner = $._posValidatorInfo[validationID].owner; - address rewardRecipient = $._rewardRecipients[validationID]; + delete $._rewardRecipients[validationID]; + // the reward-recipient should always be set, but just in case it isn't, we won't burn the reward if (rewardRecipient == address(0)) { rewardRecipient = owner; - } else { - delete $._rewardRecipients[validationID]; } // The validator can either be Completed or Invalidated here. We only grant rewards for Completed. @@ -479,10 +472,14 @@ abstract contract PoSValidatorManager is uint64 weight = valueToWeight(lockedValue); bytes32 validationID = _initializeValidatorRegistration(registrationInput, weight); - $._posValidatorInfo[validationID].owner = _msgSender(); + address owner = _msgSender(); + + $._posValidatorInfo[validationID].owner = owner; $._posValidatorInfo[validationID].delegationFeeBips = delegationFeeBips; $._posValidatorInfo[validationID].minStakeDuration = minStakeDuration; $._posValidatorInfo[validationID].uptimeSeconds = 0; + $._rewardRecipients[validationID] = owner; + return validationID; } @@ -799,12 +796,13 @@ abstract contract PoSValidatorManager is uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds }); - $._redeemableDelegatorRewards[delegationID] = reward; - - if (rewardRecipient != address(0)) { - $._delegatorRewardRecipients[delegationID] = rewardRecipient; + if (rewardRecipient == address(0)) { + rewardRecipient = delegator.owner; } + $._redeemableDelegatorRewards[delegationID] = reward; + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + return reward; } @@ -892,11 +890,10 @@ abstract contract PoSValidatorManager is delete $._delegatorStakes[delegationID]; address rewardRecipient = $._delegatorRewardRecipients[delegationID]; + delete $._delegatorRewardRecipients[delegationID]; if (rewardRecipient == address(0)) { rewardRecipient = delegator.owner; - } else { - delete $._delegatorRewardRecipients[delegationID]; } (uint256 delegationRewards, uint256 validatorFees) = diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index c4c5b7bb4..f4a87b72b 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -153,7 +153,7 @@ interface IPoSValidatorManager is IValidatorManager { /** * @notice See {IPoSValidatorManager-initializeEndValidation} for details of the first three parameters - * @param recipientAddress The address to receive the rewards + * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the validator. */ function initializeEndValidation( bytes32 validationID, @@ -226,7 +226,7 @@ interface IPoSValidatorManager is IValidatorManager { /** * @notice See {IPoSValidatorManager-initializeEndDelegation} for details of the first three parameters - * @param recipientAddress The address to receive the rewards. + * @param recipientAddress The address to receive the rewards. If the 0-address is provided, the rewards will be sent to the delegator. */ function initializeEndDelegation( bytes32 delegationID,