From 33380bd9b2f7833c632a0c9d319187d94736fee8 Mon Sep 17 00:00:00 2001 From: cam-schultz Date: Thu, 31 Oct 2024 19:48:42 -0500 Subject: [PATCH] remove uptime message check against source chain --- .../ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager.go | 2 +- .../validator-manager/PoSValidatorManager.sol | 6 ++++-- .../validator-manager/UptimeMessageSpec.md | 2 +- .../tests/PoSValidatorManagerTests.t.sol | 21 ------------------- .../tests/ValidatorManagerTests.t.sol | 1 - 6 files changed, 7 insertions(+), 27 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 9913fc053..9f5cdd25a 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -103,7 +103,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\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"tokenAddress\",\"type\":\"address\"}],\"name\":\"InvalidTokenAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"},{\"internalType\":\"contractIERC20Mintable\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"delegationAmount\",\"type\":\"uint256\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b50604051615b60380380615b6083398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a138061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff61461044f578063df93d8de1461046f578063e4a63c4014610479578063f74c607b1461048d578063fd7ac5e7146104a0575f80fd5b8063ba3a4b971461040d578063bc5fbfec14610420578063bee0a03f14610434578063c974d1b614610447575f80fd5b8063a3a65e48116100e4578063a3a65e48146103c0578063a9778a7a146102ac578063afb98096146103d3578063b771b3bc146103e7575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f36600461499c565b6104b3565b005b6102146102243660046149d7565b6104e8565b610231600a81565b60405160ff90911681526020015b60405180910390f35b61021461025636600461499c565b61076f565b6102146102693660046149ee565b61077a565b61021461027c366004614a3c565b610cff565b61029461028f3660046149d7565b610d73565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d636600461499c565b610dcd565b6102146102e9366004614a5d565b610dd8565b6103016102fc366004614a9b565b610e99565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614a3c565b610ece565b61030161034d366004614b02565b6111a6565b6102946103603660046149d7565b6111dd565b6103015f81565b61021461037a36600461499c565b6111f1565b61021461038d366004614a3c565b61121c565b610231603081565b6102146103a83660046149d7565b611461565b6103016103bb366004614b1d565b61152c565b6102146103ce366004614a5d565b611558565b6103015f8051602061593e83398151915281565b6103f56005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461041b3660046149d7565b61174d565b6103015f8051602061595e83398151915281565b6102146104423660046149d7565b6119b8565b610231601481565b61046261045d3660046149d7565b611af5565b60405161023f9190614bb2565b6102946202a30081565b6103015f8051602061591e83398151915281565b61021461049b366004614c46565b611c44565b6103016104ae366004614c84565b611d23565b6104be838383611d7e565b6104e357604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206159be8339815191526020526040808220815160e0810190925280545f8051602061595e83398151915293929190829060ff16600581111561053557610535614b3d565b600581111561054657610546614b3d565b815260200160018201805461055a90614cef565b80601f016020809104026020016040519081016040528092919081815260200182805461058690614cef565b80156105d15780601f106105a8576101008083540402835291602001916105d1565b820191905f5260205f20905b8154815290600101906020018083116105b457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561063c5761063c614b3d565b1461066f575f8381526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d27565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106e6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261070d9190810190614e30565b6040518263ffffffff1660e01b81526004016107299190614e61565b6020604051808303815f875af1158015610745573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107699190614e73565b50505050565b610769838383611d7e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061595e8339815191529060ff16156107cc57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561080f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108339190614e73565b83602001351461085c576040516372b0a7e760e11b8152602084013560048201526024016104da565b3061086d6060850160408601614e8a565b6001600160a01b0316146108b05761088b6060840160408501614e8a565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104da565b5f6108be6060850185614ea5565b905090505f805b828163ffffffff161015610b25575f6108e16060880188614ea5565b8363ffffffff168181106108f7576108f7614eea565b90506020028101906109099190614efe565b61091290614f69565b80516040519192505f91600888019161092a91614fe4565b9081526020016040518091039020541461095a57805160405163a41f772f60e01b81526104da9190600401614e61565b5f6002885f01358460405160200161098992919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109a391614fe4565b602060405180830381855afa1580156109be573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109e19190614e73565b90508086600801835f01516040516109f99190614fe4565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a399082615039565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610ab89085615108565b8251604051919550610ac991614fe4565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1e9061511b565b90506108c5565b50600483018190556001830154606490610b4990600160401b900460ff168361513d565b1015610b6b57604051635943317f60e01b8152600481018290526024016104da565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610b8f876120d6565b604001516040518263ffffffff1660e01b8152600401610baf9190614e61565b602060405180830381865af4158015610bca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bee9190614e73565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c28919061527f565b5f60405180830381865af4158015610c42573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c699190810190614e30565b90505f600282604051610c7c9190614fe4565b602060405180830381855afa158015610c97573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cba9190614e73565b9050828114610ce65760405163baaea89d60e01b815260048101829052602481018490526044016104da565b5050506009909201805460ff1916600117905550505050565b610d08826121ec565b610d28576040516330efa98b60e01b8152600481018390526024016104da565b5f610d3283611af5565b5190506002816005811115610d4957610d49614b3d565b14610d69578060405163170cc93360e21b81526004016104da9190614d27565b6107698383612227565b5f805f8051602061593e83398151915260030154610d91908461530a565b9050801580610da657506001600160401b0381115b15610dc75760405163222d164360e21b8152600481018490526024016104da565b92915050565b61076983838361250d565b610de06126f9565b5f8051602061593e8339815191525f80610df984612730565b91509150610e06826121ec565b610e1257505050610e80565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610e4057610e40614b3d565b03610e65575f83815260088501602052604081208054919055610e638282612ae3565b505b610e7b81610e7684604001516111a6565b612b59565b505050505b610e9660015f8051602061599e83398151915255565b50565b5f610ea26126f9565b610eae85858585612b8f565b9050610ec660015f8051602061599e83398151915255565b949350505050565b5f8281525f8051602061597e8339815191526020526040808220815160e0810190925280545f8051602061593e83398151915293929190829060ff166003811115610f1b57610f1b614b3d565b6003811115610f2c57610f2c614b3d565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610fa282611af5565b9050600183516003811115610fb957610fb9614b3d565b14610fda578251604051633b0d540d60e21b81526104da9190600401615329565b600481516005811115610fef57610fef614b3d565b0361100557610ffd86612d15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61102a896120d6565b604001516040518263ffffffff1660e01b815260040161104a9190614e61565b606060405180830381865af4158015611065573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110899190615343565b50915091508184146110b657846040015160405163089938b360e11b81526004016104da91815260200190565b806001600160401b031683606001516001600160401b031610806110ef5750806001600160401b03168560a001516001600160401b0316115b1561111857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610dc7906001600160401b03841661513d565b5f6111e782611af5565b6080015192915050565b6111fc83838361250d565b6104e357604051635bff683f60e11b8152600481018490526024016104da565b6112246126f9565b5f8281525f8051602061597e8339815191526020526040808220815160e0810190925280545f8051602061593e83398151915293929190829060ff16600381111561127157611271614b3d565b600381111561128257611282614b3d565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112fb576112fb614b3d565b1461131c578051604051633b0d540d60e21b81526104da9190600401615329565b600461132b8260400151611af5565b51600581111561133d5761133d614b3d565b1461143c575f61134c846120d6565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161138b9190614e61565b606060405180830381865af41580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca9190615343565b5091509150818460400151146113f65760405163089938b360e11b8152600481018390526024016104da565b806001600160401b03168460c001516001600160401b0316111561143857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5050505b61144584612d15565b505061145d60015f8051602061599e83398151915255565b5050565b5f8051602061593e8339815191525f61147983611af5565b519050600481600581111561149057611490614b3d565b146114b0578060405163170cc93360e21b81526004016104da9190614d27565b5f8381526005830160205260409020546001600160a01b031633146114f657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104da565b5f83815260088301602090815260408083208054908490556005860190925290912054610769906001600160a01b031682612ae3565b5f6115356126f9565b611540833384612f69565b9050610dc760015f8051602061599e83398151915255565b5f8051602061595e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61158b866120d6565b604001516040518263ffffffff1660e01b81526004016115ab9190614e61565b6040805180830381865af41580156115c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e99190615383565b915091508061160f57604051632d07135360e01b815281151560048201526024016104da565b5f8281526006840160205260409020805461162990614cef565b90505f0361164d5760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078501602052604090205460ff16600581111561167357611673614b3d565b146116a6575f8281526007840160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d27565b5f82815260068401602052604081206116be916148eb565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f8051602061597e8339815191526020526040808220815160e0810190925280545f8051602061593e83398151915293929190829060ff16600381111561179a5761179a614b3d565b60038111156117ab576117ab614b3d565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561182457611824614b3d565b14158015611845575060038151600381111561184257611842614b3d565b14155b15611866578051604051633b0d540d60e21b81526104da9190600401615329565b5f6118748260400151611af5565b905080606001516001600160401b03165f036118a6576040516339b894f960e21b8152600481018590526024016104da565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361191493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af415801561192e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119559190810190614e30565b6040518263ffffffff1660e01b81526004016119719190614e61565b6020604051808303815f875af115801561198d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b19190614e73565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061595e83398151915291906119ff90614cef565b90505f03611a235760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078301602052604090205460ff166005811115611a4957611a49614b3d565b14611a7c575f8281526007820160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d27565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ab591906004016153a6565b6020604051808303815f875af1158015611ad1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190614e73565b611afd614922565b5f8281525f805160206159be833981519152602052604090819020815160e0810190925280545f8051602061595e833981519152929190829060ff166005811115611b4a57611b4a614b3d565b6005811115611b5b57611b5b614b3d565b8152602001600182018054611b6f90614cef565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614cef565b8015611be65780601f10611bbd57610100808354040283529160200191611be6565b820191905f5260205f20905b815481529060010190602001808311611bc957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c8d575080546001600160401b03808416911610155b15611cab5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cd684846131af565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f8051602061595e833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d669086908690615430565b90815260200160405180910390205491505092915050565b5f8381525f8051602061597e8339815191526020526040808220815160e0810190925280545f8051602061593e8339815191529284929091829060ff166003811115611dcc57611dcc614b3d565b6003811115611ddd57611ddd614b3d565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611e5382611af5565b9050600283516003811115611e6a57611e6a614b3d565b14611e8b578251604051633b0d540d60e21b81526104da9190600401615329565b60208301516001600160a01b03163314611f27575f8281526005850160205260409020546001600160a01b03163314611ec457336114d1565b5f82815260058501602052604090205460a0820151611ef391600160b01b90046001600160401b03169061543f565b6001600160401b0316421015611f275760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b600281516005811115611f3c57611f3c614b3d565b0361206a5760028401546080840151611f5e916001600160401b03169061543f565b6001600160401b0316421015611f925760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b8615611fa457611fa28287612227565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611fdd918491611fd8919061545f565b6131c9565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561201e846133a0565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506120cf9350505050565b60048151600581111561207f5761207f614b3d565b036120b35761208d836133a0565b5f8981526007860160205260409020556120a688612d15565b60019450505050506120cf565b805160405163170cc93360e21b81526104da9190600401614d27565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561213a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612161919081019061547f565b915091508061218357604051636b2f19e960e01b815260040160405180910390fd5b8151156121a9578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b0316156121e5576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612272573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612299919081019061547f565b91509150806122bb57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123229190614e73565b825114612348578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b031615612384576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b81526004016123c19190614e61565b6040805180830381865af41580156123db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ff919061550f565b915091508187146124265760405163089938b360e11b8152600481018890526024016104da565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061593e833981519152906001600160401b0390811690831611156124e3575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612502565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061593e833981519152816125268661353d565b9050612531866121ec565b612540576001925050506120cf565b5f8681526005830160205260409020546001600160a01b0316331461256557336114d1565b5f86815260058301602052604090205460a082015161259491600160b01b90046001600160401b03169061543f565b6001600160401b03168160c001516001600160401b031610156125db5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104da565b5f85156125f3576125ec8786612227565b9050612611565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612636906111a6565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c39190614e73565b905080846008015f8a81526020019081526020015f205f8282546126e79190615108565b90915550501515979650505050505050565b5f8051602061599e83398151915280546001190161272a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612739614922565b5f8051602061595e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61276c886120d6565b604001516040518263ffffffff1660e01b815260040161278c9190614e61565b6040805180830381865af41580156127a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127ca9190615383565b9150915080156127f157604051632d07135360e01b815281151560048201526024016104da565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561282257612822614b3d565b600581111561283357612833614b3d565b815260200160018201805461284790614cef565b80601f016020809104026020016040519081016040528092919081815260200182805461287390614cef565b80156128be5780601f10612895576101008083540402835291602001916128be565b820191905f5260205f20905b8154815290600101906020018083116128a157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561292957612929614b3d565b1415801561294a575060018151600581111561294757612947614b3d565b14155b1561296b57805160405163170cc93360e21b81526104da9190600401614d27565b60038151600581111561298057612980614b3d565b0361298e5760048152612993565b600581525b8360080181602001516040516129a99190614fe4565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156129ed576129ed614b3d565b021790555060208201516001820190612a069082615039565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612aac57612aac614b3d565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f8051602061591e83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612b3e575f80fd5b505af1158015612b50573d5f803e3d5ffd5b50505050505050565b5f8051602061591e8339815191525461145d906001600160a01b03168383613821565b60015f8051602061599e83398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061593e83398151915290600160401b900461ffff9081169086161080612be3575061271061ffff8616115b15612c0757604051635f12e6c360e11b815261ffff861660048201526024016104da565b60028101546001600160401b039081169085161015612c43576040516202a06d60e11b81526001600160401b03851660048201526024016104da565b8054831080612c555750806001015483115b15612c765760405163222d164360e21b8152600481018490526024016104da565b5f612c8084613880565b90505f612c8c82610d73565b90505f612c9989836138a3565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8181525f8051602061597e8339815191526020526040808220815160e0810190925280545f8051602061593e83398151915293929190829060ff166003811115612d6257612d62614b3d565b6003811115612d7357612d73614b3d565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612e107fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612e1f919061543f565b6001600160401b0316421015612e535760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612f0e575f84815260058701602052604090205461271090612ec090600160a01b900461ffff168561513d565b612eca919061530a565b915081866008015f8681526020019081526020015f205f828254612eee9190615108565b90915550612efe90508284615532565b9050612f0e856020015182612ae3565b612f238560200151610e7687606001516111a6565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f5f8051602061593e83398151915281612f8561028f85613880565b90505f612f9187611af5565b9050612f9c876121ec565b612fbc576040516330efa98b60e01b8152600481018890526024016104da565b600281516005811115612fd157612fd1614b3d565b14612ff257805160405163170cc93360e21b81526104da9190600401614d27565b5f828260800151613003919061543f565b905083600201600a9054906101000a90046001600160401b0316826040015161302c9190615545565b6001600160401b0316816001600160401b0316111561306957604051636d51fe0560e11b81526001600160401b03821660048201526024016104da565b5f806130758a846131c9565b915091505f8a836040516020016130a392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b6131b7613dc8565b6131c082613e13565b61145d81613e87565b5f8281525f805160206159be833981519152602052604081206002015481905f8051602061595e83398151915290600160801b90046001600160401b03166132118582613eef565b5f61321b87614112565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156132c4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132eb9190810190614e30565b6040518263ffffffff1660e01b81526004016133079190614e61565b6020604051808303815f875af1158015613323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133479190614e73565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061593e83398151915290505f6133c08460400151611af5565b90505f6003825160058111156133d8576133d8614b3d565b14806133f657506004825160058111156133f4576133f4614b3d565b145b15613406575060c0810151613443565b60028251600581111561341b5761341b614b3d565b03613427575042613443565b815160405163170cc93360e21b81526104da9190600401614d27565b84608001516001600160401b0316816001600160401b03161161346a57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061348f906111a6565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613510573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135349190614e73565b95945050505050565b613545614922565b5f8281525f805160206159be8339815191526020526040808220815160e0810190925280545f8051602061595e83398151915293929190829060ff16600581111561359257613592614b3d565b60058111156135a3576135a3614b3d565b81526020016001820180546135b790614cef565b80601f01602080910402602001604051908101604052809291908181526020018280546135e390614cef565b801561362e5780601f106136055761010080835404028352916020019161362e565b820191905f5260205f20905b81548152906001019060200180831161361157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561369c5761369c614b3d565b146136cf575f8481526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d27565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561371357613713614b3d565b02179055506020820151600182019061372c9082615039565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6137ca85826131c9565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104e391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614187565b5f610dc7825f8051602061591e833981519152546001600160a01b0316906141e8565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166138e757604051637fab81e560e01b815260040160405180910390fd5b5f8051602061595e833981519152426139066060860160408701614b02565b6001600160401b031611158061394057506139246202a30042615108565b6139346060860160408701614b02565b6001600160401b031610155b1561397a576139556060850160408601614b02565b604051635879da1360e11b81526001600160401b0390911660048201526024016104da565b61398f61398a6060860186615570565b614341565b61399f61398a6080860186615570565b60306139ae6020860186615584565b9050146139e0576139c26020850185615584565b6040516326475b2f60e11b81526104da925060040190815260200190565b6139ea8480615584565b90505f03613a17576139fc8480615584565b604051633e08a12560e11b81526004016104da9291906155c6565b5f60088201613a268680615584565b604051613a34929190615430565b90815260200160405180910390205414613a6d57613a528480615584565b60405163a41f772f60e01b81526004016104da9291906155c6565b613a77835f613eef565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ab48a80615584565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613afc908b018b615584565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613b4560608b0160408c01614b02565b6001600160401b03168152602001613b6060608b018b615570565b613b69906155d9565b8152602001613b7b60808b018b615570565b613b84906155d9565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613bb291906156fb565b5f60405180830381865af4158015613bcc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613bf391908101906157b2565b5f82815260068601602052604090209193509150613c118282615039565b508160088401613c218880615584565b604051613c2f929190615430565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613c6b908590600401614e61565b6020604051808303815f875af1158015613c87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cab9190614e73565b5f8481526007860160205260409020805460ff191660011790559050613cd18780615584565b5f858152600787016020526040902060010191613cef9190836157f5565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613d4e8880615584565b604051613d5c929190615430565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613d9a9190614b02565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613e1157604051631afcd79f60e31b815260040160405180910390fd5b565b613e1b613dc8565b613e24816144aa565b613e2c6144c3565b610e9660608201356080830135613e4960c0850160a08601614b02565b613e5960e0860160c087016158ae565b613e6a610100870160e088016158c7565b610100870135613e8261014089016101208a01614e8a565b6144d3565b613e8f613dc8565b5f8051602061591e8339815191526001600160a01b038216613ecf57604051637330680360e01b81526001600160a01b03831660048201526024016104da565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061595e8339815191525f6001600160401b038084169085161115613f2357613f1c838561545f565b9050613f30565b613f2d848461545f565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f92575060018401548151613f8e916001600160401b031690615108565b8210155b15613fb8576001600160401b038316606082015281815260408101516020820152613fd7565b8281606001818151613fca919061543f565b6001600160401b03169052505b6060810151613fe7906064615545565b602082015160018601546001600160401b0392909216916140129190600160401b900460ff1661513d565b101561404257606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104da565b856001600160401b03168160400181815161405d9190615108565b9052506040810180516001600160401b038716919061407d908390615532565b905250600184015460408201516064916140a291600160401b90910460ff169061513d565b10156140c9578060400151604051635943317f60e01b81526004016104da91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206159be8339815191526020526040812060020180545f8051602061595e833981519152919060089061415c90600160401b90046001600160401b03166158e7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61419b6001600160a01b0384168361468f565b905080515f141580156141bf5750808060200190518101906141bd9190615902565b155b156104e357604051635274afe760e01b81526001600160a01b03841660048201526024016104da565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa15801561422e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142529190614e73565b90506142696001600160a01b03851633308661469c565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa1580156142ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142d19190614e73565b90508181116143375760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104da565b6135348282615532565b61434e6020820182614a5d565b63ffffffff1615801561436e57506143696020820182614ea5565b151590505b156143b5576143806020820182614a5d565b61438d6020830183614ea5565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104da565b6143c26020820182614ea5565b90506143d16020830183614a5d565b63ffffffff1611156143ea576143806020820182614a5d565b60015b6143fa6020830183614ea5565b905081101561145d576144106020830183614ea5565b61441b600184615532565b81811061442a5761442a614eea565b905060200201602081019061443f9190614e8a565b6001600160a01b03166144556020840184614ea5565b8381811061446557614465614eea565b905060200201602081019061447a9190614e8a565b6001600160a01b031610156144a257604051630dbc8d5f60e31b815260040160405180910390fd5b6001016143ed565b6144b2613dc8565b6144ba6146d5565b610e96816146dd565b6144cb613dc8565b613e116147c5565b6144db613dc8565b5f8051602061593e83398151915261ffff851615806144ff575061271061ffff8616115b1561452357604051635f12e6c360e11b815261ffff861660048201526024016104da565b868811156145475760405163222d164360e21b8152600481018990526024016104da565b60ff8416158061455a5750600a60ff8516115b1561457d5760405163170db35960e31b815260ff851660048201526024016104da565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b031610156145e4576040516202a06d60e11b81526001600160401b03871660048201526024016104da565b825f036146045760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b60606120cf83835f6147cd565b6040516001600160a01b0384811660248301528381166044830152606482018390526107699186918216906323b872dd9060840161384e565b613e11613dc8565b6146e5613dc8565b80355f8051602061595e833981519152908155601461470a60608401604085016158c7565b60ff161180614729575061472460608301604084016158c7565b60ff16155b1561475d5761473e60608301604084016158c7565b604051634a59bbff60e11b815260ff90911660048201526024016104da565b61476d60608301604084016158c7565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561479e6040830160208401614b02565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612b7c613dc8565b6060814710156147f25760405163cd78605960e01b81523060048201526024016104da565b5f80856001600160a01b0316848660405161480d9190614fe4565b5f6040518083038185875af1925050503d805f8114614847576040519150601f19603f3d011682016040523d82523d5f602084013e61484c565b606091505b509150915061485c868383614866565b9695505050505050565b60608261487b57614876826148c2565b6120cf565b815115801561489257506001600160a01b0384163b155b156148bb57604051639996b31560e01b81526001600160a01b03851660048201526024016104da565b50806120cf565b8051156148d25780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546148f790614cef565b5f825580601f10614906575050565b601f0160209004905f5260205f2090810190610e96919061495f565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614973575f8155600101614960565b5090565b8015158114610e96575f80fd5b803563ffffffff81168114614997575f80fd5b919050565b5f805f606084860312156149ae575f80fd5b8335925060208401356149c081614977565b91506149ce60408501614984565b90509250925092565b5f602082840312156149e7575f80fd5b5035919050565b5f80604083850312156149ff575f80fd5b82356001600160401b03811115614a14575f80fd5b830160808186031215614a25575f80fd5b9150614a3360208401614984565b90509250929050565b5f8060408385031215614a4d575f80fd5b82359150614a3360208401614984565b5f60208284031215614a6d575f80fd5b6120cf82614984565b803561ffff81168114614997575f80fd5b6001600160401b0381168114610e96575f80fd5b5f805f8060808587031215614aae575f80fd5b84356001600160401b03811115614ac3575f80fd5b850160a08188031215614ad4575f80fd5b9350614ae260208601614a76565b92506040850135614af281614a87565b9396929550929360600135925050565b5f60208284031215614b12575f80fd5b81356120cf81614a87565b5f8060408385031215614b2e575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b60068110614b6157614b61614b3d565b9052565b5f5b83811015614b7f578181015183820152602001614b67565b50505f910152565b5f8151808452614b9e816020860160208601614b65565b601f01601f19169290920160200192915050565b60208152614bc4602082018351614b51565b5f602083015160e06040840152614bdf610100840182614b87565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610e96575f80fd5b5f80828403610160811215614c59575f80fd5b61014080821215614c68575f80fd5b8493508301359050614c7981614c32565b809150509250929050565b5f8060208385031215614c95575f80fd5b82356001600160401b0380821115614cab575f80fd5b818501915085601f830112614cbe575f80fd5b813581811115614ccc575f80fd5b866020828501011115614cdd575f80fd5b60209290920196919550909350505050565b600181811c90821680614d0357607f821691505b602082108103614d2157634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dc78284614b51565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d6b57614d6b614d35565b60405290565b604080519081016001600160401b0381118282101715614d6b57614d6b614d35565b604051601f8201601f191681016001600160401b0381118282101715614dbb57614dbb614d35565b604052919050565b5f6001600160401b03821115614ddb57614ddb614d35565b50601f01601f191660200190565b5f82601f830112614df8575f80fd5b8151614e0b614e0682614dc3565b614d93565b818152846020838601011115614e1f575f80fd5b610ec6826020830160208701614b65565b5f60208284031215614e40575f80fd5b81516001600160401b03811115614e55575f80fd5b610ec684828501614de9565b602081525f6120cf6020830184614b87565b5f60208284031215614e83575f80fd5b5051919050565b5f60208284031215614e9a575f80fd5b81356120cf81614c32565b5f808335601e19843603018112614eba575f80fd5b8301803591506001600160401b03821115614ed3575f80fd5b6020019150600581901b3603821315613399575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614f12575f80fd5b9190910192915050565b5f82601f830112614f2b575f80fd5b8135614f39614e0682614dc3565b818152846020838601011115614f4d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f79575f80fd5b614f81614d49565b82356001600160401b0380821115614f97575f80fd5b614fa336838701614f1c565b83526020850135915080821115614fb8575f80fd5b50614fc536828601614f1c565b6020830152506040830135614fd981614a87565b604082015292915050565b5f8251614f12818460208701614b65565b601f8211156104e357805f5260205f20601f840160051c8101602085101561501a5750805b601f840160051c820191505b818110156119b1575f8155600101615026565b81516001600160401b0381111561505257615052614d35565b615066816150608454614cef565b84614ff5565b602080601f831160018114615099575f84156150825750858301515b5f19600386901b1c1916600185901b178555610ffd565b5f85815260208120601f198616915b828110156150c7578886015182559484019460019091019084016150a8565b50858210156150e457878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dc757610dc76150f4565b5f63ffffffff808316818103615133576151336150f4565b6001019392505050565b8082028115828204841417610dc757610dc76150f4565b5f808335601e19843603018112615169575f80fd5b83016020810192503590506001600160401b03811115615187575f80fd5b803603821315613399575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561527257848303601f19018952813536889003605e190181126151f9575f80fd5b870160606152078280615154565b8287526152178388018284615195565b9250505061522786830183615154565b86830388880152615239838284615195565b92505050604080830135925061524e83614a87565b6001600160401b0392909216949091019390935297830197908301906001016151d4565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356152a381614c32565b6001600160a01b031660608381019190915283013536849003601e190181126152ca575f80fd5b83016020810190356001600160401b038111156152e5575f80fd5b8060051b36038213156152f6575f80fd5b60808085015261353460a0850182846151bd565b5f8261532457634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061533d5761533d614b3d565b91905290565b5f805f60608486031215615355575f80fd5b83519250602084015161536781614a87565b604085015190925061537881614a87565b809150509250925092565b5f8060408385031215615394575f80fd5b825191506020830151614c7981614977565b5f60208083525f84546153b881614cef565b806020870152604060018084165f81146153d957600181146153f557615422565b60ff19851660408a0152604084151560051b8a01019550615422565b895f5260205f205f5b858110156154195781548b82018601529083019088016153fe565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156121e5576121e56150f4565b6001600160401b038281168282160390808211156121e5576121e56150f4565b5f8060408385031215615490575f80fd5b82516001600160401b03808211156154a6575f80fd5b90840190606082870312156154b9575f80fd5b6154c1614d49565b8251815260208301516154d381614c32565b60208201526040830151828111156154e9575f80fd5b6154f588828601614de9565b6040830152508094505050506020830151614c7981614977565b5f8060408385031215615520575f80fd5b825191506020830151614c7981614a87565b81810381811115610dc757610dc76150f4565b6001600160401b03818116838216028082169190828114615568576155686150f4565b505092915050565b5f8235603e19833603018112614f12575f80fd5b5f808335601e19843603018112615599575f80fd5b8301803591506001600160401b038211156155b2575f80fd5b602001915036819003821315613399575f80fd5b602081525f610ec6602083018486615195565b5f604082360312156155e9575f80fd5b6155f1614d71565b6155fa83614984565b81526020808401356001600160401b0380821115615616575f80fd5b9085019036601f830112615628575f80fd5b81358181111561563a5761563a614d35565b8060051b915061564b848301614d93565b8181529183018401918481019036841115615664575f80fd5b938501935b8385101561568e578435925061567e83614c32565b8282529385019390850190615669565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156125025784516001600160a01b031682529383019360019290920191908301906156d2565b60208152815160208201525f602083015160e06040840152615721610100840182614b87565b90506040840151601f198085840301606086015261573f8383614b87565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261576f83836156a0565b925060a08601519150808584030160c08601525061578d82826156a0565b91505060c08401516157aa60e08501826001600160401b03169052565b509392505050565b5f80604083850312156157c3575f80fd5b8251915060208301516001600160401b038111156157df575f80fd5b6157eb85828601614de9565b9150509250929050565b6001600160401b0383111561580c5761580c614d35565b6158208361581a8354614cef565b83614ff5565b5f601f841160018114615851575f851561583a5750838201355b5f19600387901b1c1916600186901b1783556119b1565b5f83815260208120601f198716915b828110156158805786850135825560209485019460019092019101615860565b508682101561589c575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f602082840312156158be575f80fd5b6120cf82614a76565b5f602082840312156158d7575f80fd5b813560ff811681146120cf575f80fd5b5f6001600160401b03808316818103615133576151336150f4565b5f60208284031215615912575f80fd5b81516120cf8161497756fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212209fc56fa0f87ac48df9317b43a6566d39bc195bea46caed39fba98184b15f6a3364736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615b0f380380615b0f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6159c28061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff61461044f578063df93d8de1461046f578063e4a63c4014610479578063f74c607b1461048d578063fd7ac5e7146104a0575f80fd5b8063ba3a4b971461040d578063bc5fbfec14610420578063bee0a03f14610434578063c974d1b614610447575f80fd5b8063a3a65e48116100e4578063a3a65e48146103c0578063a9778a7a146102ac578063afb98096146103d3578063b771b3bc146103e7575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f36600461494b565b6104b3565b005b610214610224366004614986565b6104e8565b610231600a81565b60405160ff90911681526020015b60405180910390f35b61021461025636600461494b565b61076f565b61021461026936600461499d565b61077a565b61021461027c3660046149eb565b610cff565b61029461028f366004614986565b610d73565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d636600461494b565b610dcd565b6102146102e9366004614a0c565b610dd8565b6103016102fc366004614a4a565b610e99565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a3660046149eb565b610ece565b61030161034d366004614ab1565b6111a6565b610294610360366004614986565b6111dd565b6103015f81565b61021461037a36600461494b565b6111f1565b61021461038d3660046149eb565b61121c565b610231603081565b6102146103a8366004614986565b611461565b6103016103bb366004614acc565b61152c565b6102146103ce366004614a0c565b611558565b6103015f805160206158ed83398151915281565b6103f56005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461041b366004614986565b61174d565b6103015f8051602061590d83398151915281565b610214610442366004614986565b6119b8565b610231601481565b61046261045d366004614986565b611af5565b60405161023f9190614b61565b6102946202a30081565b6103015f805160206158cd83398151915281565b61021461049b366004614bf5565b611c44565b6103016104ae366004614c33565b611d23565b6104be838383611d7e565b6104e357604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f8051602061596d8339815191526020526040808220815160e0810190925280545f8051602061590d83398151915293929190829060ff16600581111561053557610535614aec565b600581111561054657610546614aec565b815260200160018201805461055a90614c9e565b80601f016020809104026020016040519081016040528092919081815260200182805461058690614c9e565b80156105d15780601f106105a8576101008083540402835291602001916105d1565b820191905f5260205f20905b8154815290600101906020018083116105b457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561063c5761063c614aec565b1461066f575f8381526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614cd6565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106e6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261070d9190810190614ddf565b6040518263ffffffff1660e01b81526004016107299190614e10565b6020604051808303815f875af1158015610745573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107699190614e22565b50505050565b610769838383611d7e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061590d8339815191529060ff16156107cc57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561080f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108339190614e22565b83602001351461085c576040516372b0a7e760e11b8152602084013560048201526024016104da565b3061086d6060850160408601614e39565b6001600160a01b0316146108b05761088b6060840160408501614e39565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104da565b5f6108be6060850185614e54565b905090505f805b828163ffffffff161015610b25575f6108e16060880188614e54565b8363ffffffff168181106108f7576108f7614e99565b90506020028101906109099190614ead565b61091290614f18565b80516040519192505f91600888019161092a91614f93565b9081526020016040518091039020541461095a57805160405163a41f772f60e01b81526104da9190600401614e10565b5f6002885f01358460405160200161098992919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109a391614f93565b602060405180830381855afa1580156109be573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109e19190614e22565b90508086600801835f01516040516109f99190614f93565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a399082614fe8565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610ab890856150b7565b8251604051919550610ac991614f93565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1e906150ca565b90506108c5565b50600483018190556001830154606490610b4990600160401b900460ff16836150ec565b1015610b6b57604051635943317f60e01b8152600481018290526024016104da565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610b8f876120d6565b604001516040518263ffffffff1660e01b8152600401610baf9190614e10565b602060405180830381865af4158015610bca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bee9190614e22565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c28919061522e565b5f60405180830381865af4158015610c42573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c699190810190614ddf565b90505f600282604051610c7c9190614f93565b602060405180830381855afa158015610c97573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cba9190614e22565b9050828114610ce65760405163baaea89d60e01b815260048101829052602481018490526044016104da565b5050506009909201805460ff1916600117905550505050565b610d08826121ec565b610d28576040516330efa98b60e01b8152600481018390526024016104da565b5f610d3283611af5565b5190506002816005811115610d4957610d49614aec565b14610d69578060405163170cc93360e21b81526004016104da9190614cd6565b6107698383612227565b5f805f805160206158ed83398151915260030154610d9190846152b9565b9050801580610da657506001600160401b0381115b15610dc75760405163222d164360e21b8152600481018490526024016104da565b92915050565b6107698383836124bc565b610de06126a8565b5f805160206158ed8339815191525f80610df9846126df565b91509150610e06826121ec565b610e1257505050610e80565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610e4057610e40614aec565b03610e65575f83815260088501602052604081208054919055610e638282612a92565b505b610e7b81610e7684604001516111a6565b612b08565b505050505b610e9660015f8051602061594d83398151915255565b50565b5f610ea26126a8565b610eae85858585612b3e565b9050610ec660015f8051602061594d83398151915255565b949350505050565b5f8281525f8051602061592d8339815191526020526040808220815160e0810190925280545f805160206158ed83398151915293929190829060ff166003811115610f1b57610f1b614aec565b6003811115610f2c57610f2c614aec565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610fa282611af5565b9050600183516003811115610fb957610fb9614aec565b14610fda578251604051633b0d540d60e21b81526104da91906004016152d8565b600481516005811115610fef57610fef614aec565b0361100557610ffd86612cc4565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61102a896120d6565b604001516040518263ffffffff1660e01b815260040161104a9190614e10565b606060405180830381865af4158015611065573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061108991906152f2565b50915091508184146110b657846040015160405163089938b360e11b81526004016104da91815260200190565b806001600160401b031683606001516001600160401b031610806110ef5750806001600160401b03168560a001516001600160401b0316115b1561111857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610dc7906001600160401b0384166150ec565b5f6111e782611af5565b6080015192915050565b6111fc8383836124bc565b6104e357604051635bff683f60e11b8152600481018490526024016104da565b6112246126a8565b5f8281525f8051602061592d8339815191526020526040808220815160e0810190925280545f805160206158ed83398151915293929190829060ff16600381111561127157611271614aec565b600381111561128257611282614aec565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112fb576112fb614aec565b1461131c578051604051633b0d540d60e21b81526104da91906004016152d8565b600461132b8260400151611af5565b51600581111561133d5761133d614aec565b1461143c575f61134c846120d6565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161138b9190614e10565b606060405180830381865af41580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca91906152f2565b5091509150818460400151146113f65760405163089938b360e11b8152600481018390526024016104da565b806001600160401b03168460c001516001600160401b0316111561143857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5050505b61144584612cc4565b505061145d60015f8051602061594d83398151915255565b5050565b5f805160206158ed8339815191525f61147983611af5565b519050600481600581111561149057611490614aec565b146114b0578060405163170cc93360e21b81526004016104da9190614cd6565b5f8381526005830160205260409020546001600160a01b031633146114f657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104da565b5f83815260088301602090815260408083208054908490556005860190925290912054610769906001600160a01b031682612a92565b5f6115356126a8565b611540833384612f18565b9050610dc760015f8051602061594d83398151915255565b5f8051602061590d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61158b866120d6565b604001516040518263ffffffff1660e01b81526004016115ab9190614e10565b6040805180830381865af41580156115c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e99190615332565b915091508061160f57604051632d07135360e01b815281151560048201526024016104da565b5f8281526006840160205260409020805461162990614c9e565b90505f0361164d5760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078501602052604090205460ff16600581111561167357611673614aec565b146116a6575f8281526007840160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614cd6565b5f82815260068401602052604081206116be9161489a565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f8051602061592d8339815191526020526040808220815160e0810190925280545f805160206158ed83398151915293929190829060ff16600381111561179a5761179a614aec565b60038111156117ab576117ab614aec565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561182457611824614aec565b14158015611845575060038151600381111561184257611842614aec565b14155b15611866578051604051633b0d540d60e21b81526104da91906004016152d8565b5f6118748260400151611af5565b905080606001516001600160401b03165f036118a6576040516339b894f960e21b8152600481018590526024016104da565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361191493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af415801561192e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119559190810190614ddf565b6040518263ffffffff1660e01b81526004016119719190614e10565b6020604051808303815f875af115801561198d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b19190614e22565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061590d83398151915291906119ff90614c9e565b90505f03611a235760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078301602052604090205460ff166005811115611a4957611a49614aec565b14611a7c575f8281526007820160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614cd6565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ab59190600401615355565b6020604051808303815f875af1158015611ad1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190614e22565b611afd6148d1565b5f8281525f8051602061596d833981519152602052604090819020815160e0810190925280545f8051602061590d833981519152929190829060ff166005811115611b4a57611b4a614aec565b6005811115611b5b57611b5b614aec565b8152602001600182018054611b6f90614c9e565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614c9e565b8015611be65780601f10611bbd57610100808354040283529160200191611be6565b820191905f5260205f20905b815481529060010190602001808311611bc957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c8d575080546001600160401b03808416911610155b15611cab5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cd6848461315e565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f8051602061590d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d6690869086906153df565b90815260200160405180910390205491505092915050565b5f8381525f8051602061592d8339815191526020526040808220815160e0810190925280545f805160206158ed8339815191529284929091829060ff166003811115611dcc57611dcc614aec565b6003811115611ddd57611ddd614aec565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611e5382611af5565b9050600283516003811115611e6a57611e6a614aec565b14611e8b578251604051633b0d540d60e21b81526104da91906004016152d8565b60208301516001600160a01b03163314611f27575f8281526005850160205260409020546001600160a01b03163314611ec457336114d1565b5f82815260058501602052604090205460a0820151611ef391600160b01b90046001600160401b0316906153ee565b6001600160401b0316421015611f275760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b600281516005811115611f3c57611f3c614aec565b0361206a5760028401546080840151611f5e916001600160401b0316906153ee565b6001600160401b0316421015611f925760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b8615611fa457611fa28287612227565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611fdd918491611fd8919061540e565b613178565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561201e8461334f565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506120cf9350505050565b60048151600581111561207f5761207f614aec565b036120b35761208d8361334f565b5f8981526007860160205260409020556120a688612cc4565b60019450505050506120cf565b805160405163170cc93360e21b81526104da9190600401614cd6565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561213a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612161919081019061542e565b915091508061218357604051636b2f19e960e01b815260040160405180910390fd5b8151156121a9578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b0316156121e5576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612272573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612299919081019061542e565b91509150806122bb57604051636b2f19e960e01b815260040160405180910390fd5b60208201516001600160a01b0316156122f7576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b60208201516001600160a01b031615612333576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b81526004016123709190614e10565b6040805180830381865af415801561238a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ae91906154be565b915091508187146123d55760405163089938b360e11b8152600481018890526024016104da565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f805160206158ed833981519152906001600160401b039081169083161115612492575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26124b1565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f805160206158ed833981519152816124d5866134ec565b90506124e0866121ec565b6124ef576001925050506120cf565b5f8681526005830160205260409020546001600160a01b0316331461251457336114d1565b5f86815260058301602052604090205460a082015161254391600160b01b90046001600160401b0316906153ee565b6001600160401b03168160c001516001600160401b0316101561258a5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104da565b5f85156125a25761259b8786612227565b90506125c0565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125e5906111a6565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561264e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126729190614e22565b905080846008015f8a81526020019081526020015f205f82825461269691906150b7565b90915550501515979650505050505050565b5f8051602061594d8339815191528054600119016126d957604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6126e86148d1565b5f8051602061590d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61271b886120d6565b604001516040518263ffffffff1660e01b815260040161273b9190614e10565b6040805180830381865af4158015612755573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127799190615332565b9150915080156127a057604051632d07135360e01b815281151560048201526024016104da565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156127d1576127d1614aec565b60058111156127e2576127e2614aec565b81526020016001820180546127f690614c9e565b80601f016020809104026020016040519081016040528092919081815260200182805461282290614c9e565b801561286d5780601f106128445761010080835404028352916020019161286d565b820191905f5260205f20905b81548152906001019060200180831161285057829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156128d8576128d8614aec565b141580156128f957506001815160058111156128f6576128f6614aec565b14155b1561291a57805160405163170cc93360e21b81526104da9190600401614cd6565b60038151600581111561292f5761292f614aec565b0361293d5760048152612942565b600581525b8360080181602001516040516129589190614f93565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561299c5761299c614aec565b0217905550602082015160018201906129b59082614fe8565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612a5b57612a5b614aec565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f805160206158cd83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612aed575f80fd5b505af1158015612aff573d5f803e3d5ffd5b50505050505050565b5f805160206158cd8339815191525461145d906001600160a01b031683836137d0565b60015f8051602061594d83398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f805160206158ed83398151915290600160401b900461ffff9081169086161080612b92575061271061ffff8616115b15612bb657604051635f12e6c360e11b815261ffff861660048201526024016104da565b60028101546001600160401b039081169085161015612bf2576040516202a06d60e11b81526001600160401b03851660048201526024016104da565b8054831080612c045750806001015483115b15612c255760405163222d164360e21b8152600481018490526024016104da565b5f612c2f8461382f565b90505f612c3b82610d73565b90505f612c488983613852565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8181525f8051602061592d8339815191526020526040808220815160e0810190925280545f805160206158ed83398151915293929190829060ff166003811115612d1157612d11614aec565b6003811115612d2257612d22614aec565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dbf7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612dce91906153ee565b6001600160401b0316421015612e025760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612ebd575f84815260058701602052604090205461271090612e6f90600160a01b900461ffff16856150ec565b612e7991906152b9565b915081866008015f8681526020019081526020015f205f828254612e9d91906150b7565b90915550612ead905082846154e1565b9050612ebd856020015182612a92565b612ed28560200151610e7687606001516111a6565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f5f805160206158ed83398151915281612f3461028f8561382f565b90505f612f4087611af5565b9050612f4b876121ec565b612f6b576040516330efa98b60e01b8152600481018890526024016104da565b600281516005811115612f8057612f80614aec565b14612fa157805160405163170cc93360e21b81526104da9190600401614cd6565b5f828260800151612fb291906153ee565b905083600201600a9054906101000a90046001600160401b03168260400151612fdb91906154f4565b6001600160401b0316816001600160401b0316111561301857604051636d51fe0560e11b81526001600160401b03821660048201526024016104da565b5f806130248a84613178565b915091505f8a8360405160200161305292919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b613166613d77565b61316f82613dc2565b61145d81613e36565b5f8281525f8051602061596d833981519152602052604081206002015481905f8051602061590d83398151915290600160801b90046001600160401b03166131c08582613e9e565b5f6131ca876140c1565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613273573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261329a9190810190614ddf565b6040518263ffffffff1660e01b81526004016132b69190614e10565b6020604051808303815f875af11580156132d2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132f69190614e22565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f805160206158ed83398151915290505f61336f8460400151611af5565b90505f60038251600581111561338757613387614aec565b14806133a557506004825160058111156133a3576133a3614aec565b145b156133b5575060c08101516133f2565b6002825160058111156133ca576133ca614aec565b036133d65750426133f2565b815160405163170cc93360e21b81526104da9190600401614cd6565b84608001516001600160401b0316816001600160401b03161161341957505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061343e906111a6565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156134bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134e39190614e22565b95945050505050565b6134f46148d1565b5f8281525f8051602061596d8339815191526020526040808220815160e0810190925280545f8051602061590d83398151915293929190829060ff16600581111561354157613541614aec565b600581111561355257613552614aec565b815260200160018201805461356690614c9e565b80601f016020809104026020016040519081016040528092919081815260200182805461359290614c9e565b80156135dd5780601f106135b4576101008083540402835291602001916135dd565b820191905f5260205f20905b8154815290600101906020018083116135c057829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561364b5761364b614aec565b1461367e575f8481526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614cd6565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156136c2576136c2614aec565b0217905550602082015160018201906136db9082614fe8565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6137798582613178565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104e391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614136565b5f610dc7825f805160206158cd833981519152546001600160a01b031690614197565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff1661389657604051637fab81e560e01b815260040160405180910390fd5b5f8051602061590d833981519152426138b56060860160408701614ab1565b6001600160401b03161115806138ef57506138d36202a300426150b7565b6138e36060860160408701614ab1565b6001600160401b031610155b15613929576139046060850160408601614ab1565b604051635879da1360e11b81526001600160401b0390911660048201526024016104da565b61393e613939606086018661551f565b6142f0565b61394e613939608086018661551f565b603061395d6020860186615533565b90501461398f576139716020850185615533565b6040516326475b2f60e11b81526104da925060040190815260200190565b6139998480615533565b90505f036139c6576139ab8480615533565b604051633e08a12560e11b81526004016104da929190615575565b5f600882016139d58680615533565b6040516139e39291906153df565b90815260200160405180910390205414613a1c57613a018480615533565b60405163a41f772f60e01b81526004016104da929190615575565b613a26835f613e9e565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613a638a80615533565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613aab908b018b615533565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613af460608b0160408c01614ab1565b6001600160401b03168152602001613b0f60608b018b61551f565b613b1890615588565b8152602001613b2a60808b018b61551f565b613b3390615588565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613b6191906156aa565b5f60405180830381865af4158015613b7b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ba29190810190615761565b5f82815260068601602052604090209193509150613bc08282614fe8565b508160088401613bd08880615533565b604051613bde9291906153df565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613c1a908590600401614e10565b6020604051808303815f875af1158015613c36573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613c5a9190614e22565b5f8481526007860160205260409020805460ff191660011790559050613c808780615533565b5f858152600787016020526040902060010191613c9e9190836157a4565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613cfd8880615533565b604051613d0b9291906153df565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613d499190614ab1565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613dc057604051631afcd79f60e31b815260040160405180910390fd5b565b613dca613d77565b613dd381614459565b613ddb614472565b610e9660608201356080830135613df860c0850160a08601614ab1565b613e0860e0860160c0870161585d565b613e19610100870160e08801615876565b610100870135613e3161014089016101208a01614e39565b614482565b613e3e613d77565b5f805160206158cd8339815191526001600160a01b038216613e7e57604051637330680360e01b81526001600160a01b03831660048201526024016104da565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061590d8339815191525f6001600160401b038084169085161115613ed257613ecb838561540e565b9050613edf565b613edc848461540e565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f41575060018401548151613f3d916001600160401b0316906150b7565b8210155b15613f67576001600160401b038316606082015281815260408101516020820152613f86565b8281606001818151613f7991906153ee565b6001600160401b03169052505b6060810151613f969060646154f4565b602082015160018601546001600160401b039290921691613fc19190600160401b900460ff166150ec565b1015613ff157606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104da565b856001600160401b03168160400181815161400c91906150b7565b9052506040810180516001600160401b038716919061402c9083906154e1565b9052506001840154604082015160649161405191600160401b90910460ff16906150ec565b1015614078578060400151604051635943317f60e01b81526004016104da91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f8051602061596d8339815191526020526040812060020180545f8051602061590d833981519152919060089061410b90600160401b90046001600160401b0316615896565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61414a6001600160a01b0384168361463e565b905080515f1415801561416e57508080602001905181019061416c91906158b1565b155b156104e357604051635274afe760e01b81526001600160a01b03841660048201526024016104da565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156141dd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142019190614e22565b90506142186001600160a01b03851633308661464b565b6040516370a0823160e01b81523060048201525f906001600160a01b038616906370a0823190602401602060405180830381865afa15801561425c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142809190614e22565b90508181116142e65760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104da565b6134e382826154e1565b6142fd6020820182614a0c565b63ffffffff1615801561431d57506143186020820182614e54565b151590505b156143645761432f6020820182614a0c565b61433c6020830183614e54565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104da565b6143716020820182614e54565b90506143806020830183614a0c565b63ffffffff1611156143995761432f6020820182614a0c565b60015b6143a96020830183614e54565b905081101561145d576143bf6020830183614e54565b6143ca6001846154e1565b8181106143d9576143d9614e99565b90506020020160208101906143ee9190614e39565b6001600160a01b03166144046020840184614e54565b8381811061441457614414614e99565b90506020020160208101906144299190614e39565b6001600160a01b0316101561445157604051630dbc8d5f60e31b815260040160405180910390fd5b60010161439c565b614461613d77565b614469614684565b610e968161468c565b61447a613d77565b613dc0614774565b61448a613d77565b5f805160206158ed83398151915261ffff851615806144ae575061271061ffff8616115b156144d257604051635f12e6c360e11b815261ffff861660048201526024016104da565b868811156144f65760405163222d164360e21b8152600481018990526024016104da565b60ff841615806145095750600a60ff8516115b1561452c5760405163170db35960e31b815260ff851660048201526024016104da565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b03161015614593576040516202a06d60e11b81526001600160401b03871660048201526024016104da565b825f036145b35760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b60606120cf83835f61477c565b6040516001600160a01b0384811660248301528381166044830152606482018390526107699186918216906323b872dd906084016137fd565b613dc0613d77565b614694613d77565b80355f8051602061590d83398151915290815560146146b96060840160408501615876565b60ff1611806146d857506146d36060830160408401615876565b60ff16155b1561470c576146ed6060830160408401615876565b604051634a59bbff60e11b815260ff90911660048201526024016104da565b61471c6060830160408401615876565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561474d6040830160208401614ab1565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612b2b613d77565b6060814710156147a15760405163cd78605960e01b81523060048201526024016104da565b5f80856001600160a01b031684866040516147bc9190614f93565b5f6040518083038185875af1925050503d805f81146147f6576040519150601f19603f3d011682016040523d82523d5f602084013e6147fb565b606091505b509150915061480b868383614815565b9695505050505050565b60608261482a5761482582614871565b6120cf565b815115801561484157506001600160a01b0384163b155b1561486a57604051639996b31560e01b81526001600160a01b03851660048201526024016104da565b50806120cf565b8051156148815780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546148a690614c9e565b5f825580601f106148b5575050565b601f0160209004905f5260205f2090810190610e96919061490e565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614922575f815560010161490f565b5090565b8015158114610e96575f80fd5b803563ffffffff81168114614946575f80fd5b919050565b5f805f6060848603121561495d575f80fd5b83359250602084013561496f81614926565b915061497d60408501614933565b90509250925092565b5f60208284031215614996575f80fd5b5035919050565b5f80604083850312156149ae575f80fd5b82356001600160401b038111156149c3575f80fd5b8301608081860312156149d4575f80fd5b91506149e260208401614933565b90509250929050565b5f80604083850312156149fc575f80fd5b823591506149e260208401614933565b5f60208284031215614a1c575f80fd5b6120cf82614933565b803561ffff81168114614946575f80fd5b6001600160401b0381168114610e96575f80fd5b5f805f8060808587031215614a5d575f80fd5b84356001600160401b03811115614a72575f80fd5b850160a08188031215614a83575f80fd5b9350614a9160208601614a25565b92506040850135614aa181614a36565b9396929550929360600135925050565b5f60208284031215614ac1575f80fd5b81356120cf81614a36565b5f8060408385031215614add575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b60068110614b1057614b10614aec565b9052565b5f5b83811015614b2e578181015183820152602001614b16565b50505f910152565b5f8151808452614b4d816020860160208601614b14565b601f01601f19169290920160200192915050565b60208152614b73602082018351614b00565b5f602083015160e06040840152614b8e610100840182614b36565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610e96575f80fd5b5f80828403610160811215614c08575f80fd5b61014080821215614c17575f80fd5b8493508301359050614c2881614be1565b809150509250929050565b5f8060208385031215614c44575f80fd5b82356001600160401b0380821115614c5a575f80fd5b818501915085601f830112614c6d575f80fd5b813581811115614c7b575f80fd5b866020828501011115614c8c575f80fd5b60209290920196919550909350505050565b600181811c90821680614cb257607f821691505b602082108103614cd057634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dc78284614b00565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d1a57614d1a614ce4565b60405290565b604080519081016001600160401b0381118282101715614d1a57614d1a614ce4565b604051601f8201601f191681016001600160401b0381118282101715614d6a57614d6a614ce4565b604052919050565b5f6001600160401b03821115614d8a57614d8a614ce4565b50601f01601f191660200190565b5f82601f830112614da7575f80fd5b8151614dba614db582614d72565b614d42565b818152846020838601011115614dce575f80fd5b610ec6826020830160208701614b14565b5f60208284031215614def575f80fd5b81516001600160401b03811115614e04575f80fd5b610ec684828501614d98565b602081525f6120cf6020830184614b36565b5f60208284031215614e32575f80fd5b5051919050565b5f60208284031215614e49575f80fd5b81356120cf81614be1565b5f808335601e19843603018112614e69575f80fd5b8301803591506001600160401b03821115614e82575f80fd5b6020019150600581901b3603821315613348575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614ec1575f80fd5b9190910192915050565b5f82601f830112614eda575f80fd5b8135614ee8614db582614d72565b818152846020838601011115614efc575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f28575f80fd5b614f30614cf8565b82356001600160401b0380821115614f46575f80fd5b614f5236838701614ecb565b83526020850135915080821115614f67575f80fd5b50614f7436828601614ecb565b6020830152506040830135614f8881614a36565b604082015292915050565b5f8251614ec1818460208701614b14565b601f8211156104e357805f5260205f20601f840160051c81016020851015614fc95750805b601f840160051c820191505b818110156119b1575f8155600101614fd5565b81516001600160401b0381111561500157615001614ce4565b6150158161500f8454614c9e565b84614fa4565b602080601f831160018114615048575f84156150315750858301515b5f19600386901b1c1916600185901b178555610ffd565b5f85815260208120601f198616915b8281101561507657888601518255948401946001909101908401615057565b508582101561509357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dc757610dc76150a3565b5f63ffffffff8083168181036150e2576150e26150a3565b6001019392505050565b8082028115828204841417610dc757610dc76150a3565b5f808335601e19843603018112615118575f80fd5b83016020810192503590506001600160401b03811115615136575f80fd5b803603821315613348575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561522157848303601f19018952813536889003605e190181126151a8575f80fd5b870160606151b68280615103565b8287526151c68388018284615144565b925050506151d686830183615103565b868303888801526151e8838284615144565b9250505060408083013592506151fd83614a36565b6001600160401b039290921694909101939093529783019790830190600101615183565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561525281614be1565b6001600160a01b031660608381019190915283013536849003601e19018112615279575f80fd5b83016020810190356001600160401b03811115615294575f80fd5b8060051b36038213156152a5575f80fd5b6080808501526134e360a08501828461516c565b5f826152d357634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106152ec576152ec614aec565b91905290565b5f805f60608486031215615304575f80fd5b83519250602084015161531681614a36565b604085015190925061532781614a36565b809150509250925092565b5f8060408385031215615343575f80fd5b825191506020830151614c2881614926565b5f60208083525f845461536781614c9e565b806020870152604060018084165f811461538857600181146153a4576153d1565b60ff19851660408a0152604084151560051b8a010195506153d1565b895f5260205f205f5b858110156153c85781548b82018601529083019088016153ad565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156121e5576121e56150a3565b6001600160401b038281168282160390808211156121e5576121e56150a3565b5f806040838503121561543f575f80fd5b82516001600160401b0380821115615455575f80fd5b9084019060608287031215615468575f80fd5b615470614cf8565b82518152602083015161548281614be1565b6020820152604083015182811115615498575f80fd5b6154a488828601614d98565b6040830152508094505050506020830151614c2881614926565b5f80604083850312156154cf575f80fd5b825191506020830151614c2881614a36565b81810381811115610dc757610dc76150a3565b6001600160401b03818116838216028082169190828114615517576155176150a3565b505092915050565b5f8235603e19833603018112614ec1575f80fd5b5f808335601e19843603018112615548575f80fd5b8301803591506001600160401b03821115615561575f80fd5b602001915036819003821315613348575f80fd5b602081525f610ec6602083018486615144565b5f60408236031215615598575f80fd5b6155a0614d20565b6155a983614933565b81526020808401356001600160401b03808211156155c5575f80fd5b9085019036601f8301126155d7575f80fd5b8135818111156155e9576155e9614ce4565b8060051b91506155fa848301614d42565b8181529183018401918481019036841115615613575f80fd5b938501935b8385101561563d578435925061562d83614be1565b8282529385019390850190615618565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156124b15784516001600160a01b03168252938301936001929092019190830190615681565b60208152815160208201525f602083015160e060408401526156d0610100840182614b36565b90506040840151601f19808584030160608601526156ee8383614b36565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261571e838361564f565b925060a08601519150808584030160c08601525061573c828261564f565b91505060c084015161575960e08501826001600160401b03169052565b509392505050565b5f8060408385031215615772575f80fd5b8251915060208301516001600160401b0381111561578e575f80fd5b61579a85828601614d98565b9150509250929050565b6001600160401b038311156157bb576157bb614ce4565b6157cf836157c98354614c9e565b83614fa4565b5f601f841160018114615800575f85156157e95750838201355b5f19600387901b1c1916600186901b1783556119b1565b5f83815260208120601f198716915b8281101561582f578685013582556020948501946001909201910161580f565b508682101561584b575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6020828403121561586d575f80fd5b6120cf82614a25565b5f60208284031215615886575f80fd5b813560ff811681146120cf575f80fd5b5f6001600160401b038083168181036150e2576150e26150a3565b5f602082840312156158c1575f80fd5b81516120cf8161492656fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212204cc24a3befebd5f9106e136aa200ac9f618c42941ef364a1a319809184b9ae1164736f6c63430008190033", } // 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 6d38f7bad..cd9b8f38d 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -103,7 +103,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\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidationID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"}],\"name\":\"InvalidValidatorManagerAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"blockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidValidatorManagerBlockchainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"InvalidValidatorStatus\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidWarpMessage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"senderAddress\",\"type\":\"address\"}],\"name\":\"InvalidWarpOriginSenderAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"sourceChainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidWarpSourceChainID\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"churnAmount\",\"type\":\"uint64\"}],\"name\":\"MaxChurnRateExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorIneligibleForRewards\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorNotPoS\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroWeightToValueFactor\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"delegatorAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"delegatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"NATIVE_MINTER\",\"outputs\":[{\"internalType\":\"contractINativeMinter\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"P_CHAIN_BLOCKCHAIN_ID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WARP_MESSENGER\",\"outputs\":[{\"internalType\":\"contractIWarpMessenger\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"claimDelegationFees\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeDelegatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"startingWeight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"minimumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maximumStakeAmount\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"minimumStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint16\",\"name\":\"minimumDelegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"weightToValueFactor\",\"type\":\"uint256\"},{\"internalType\":\"contractIRewardCalculator\",\"name\":\"rewardCalculator\",\"type\":\"address\"}],\"internalType\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"remainingBalanceOwner\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"threshold\",\"type\":\"uint32\"},{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"internalType\":\"structPChainOwner\",\"name\":\"disableOwner\",\"type\":\"tuple\"}],\"internalType\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"validatorManagerBlockchainID\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"validatorManagerAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"internalType\":\"structInitialValidator[]\",\"name\":\"initialValidators\",\"type\":\"tuple[]\"}],\"internalType\":\"structConversionData\",\"name\":\"conversionData\",\"type\":\"tuple\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"initializeValidatorSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendEndValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"resendRegisterValidatorMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"submitUptimeProof\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"valueToWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"}],\"name\":\"weightToValue\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x608060405234801561000f575f80fd5b5060405161587e38038061587e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6157318061014d5f395ff3fe6080604052600436106101f1575f3560e01c806380dd672f11610108578063ba3a4b971161009d578063c599e24f1161006d578063c599e24f1461058d578063c974d1b6146105a0578063d5f20ff6146105b4578063df93d8de146105e0578063fd7ac5e7146105f6575f80fd5b8063ba3a4b9714610510578063bc5fbfec1461052f578063bee0a03f1461054f578063c257a0f51461056e575f80fd5b8063a9778a7a116100d8578063a9778a7a14610326578063af2f5feb146104c3578063afb98096146104d6578063b771b3bc146104f6575f80fd5b806380dd672f146104525780638280a25a1461047157806393e2459814610485578063a3a65e48146104a4575f80fd5b806335455ded1161018957806360ad77841161015957806360ad7784146103b557806362065856146103d457806366435abf14610401578063732214f81461042057806376f7862114610433575f80fd5b806335455ded146103265780633a1cfff61461034e578063467ef06f1461036d57806360305d621461038c575f80fd5b806320d91b7a116101c457806320d91b7a1461027f57806325e1c7761461029e5780632e2194d8146102bd578063329c3e12146102f4575f80fd5b80630118acc4146101f55780630322ed9814610216578063151d30d1146102355780631ec4472414610260575b5f80fd5b348015610200575f80fd5b5061021461020f366004614740565b610615565b005b348015610221575f80fd5b5061021461023036600461477b565b61064a565b348015610240575f80fd5b50610249600a81565b60405160ff90911681526020015b60405180910390f35b34801561026b575f80fd5b5061021461027a366004614740565b6108d1565b34801561028a575f80fd5b50610214610299366004614792565b6108dc565b3480156102a9575f80fd5b506102146102b83660046147e0565b610e61565b3480156102c8575f80fd5b506102dc6102d736600461477b565b610ed5565b6040516001600160401b039091168152602001610257565b3480156102ff575f80fd5b5061030e6001600160991b0181565b6040516001600160a01b039091168152602001610257565b348015610331575f80fd5b5061033b61271081565b60405161ffff9091168152602001610257565b348015610359575f80fd5b50610214610368366004614740565b610f2f565b348015610378575f80fd5b50610214610387366004614801565b610f3a565b348015610397575f80fd5b506103a0601481565b60405163ffffffff9091168152602001610257565b3480156103c0575f80fd5b506102146103cf3660046147e0565b610ffb565b3480156103df575f80fd5b506103f36103ee36600461482e565b6112d3565b604051908152602001610257565b34801561040c575f80fd5b506102dc61041b36600461477b565b61130a565b34801561042b575f80fd5b506103f35f81565b34801561043e575f80fd5b5061021461044d366004614740565b61131e565b34801561045d575f80fd5b5061021461046c3660046147e0565b611349565b34801561047c575f80fd5b50610249603081565b348015610490575f80fd5b5061021461049f36600461477b565b61158e565b3480156104af575f80fd5b506102146104be366004614801565b611659565b6103f36104d136600461485a565b61184e565b3480156104e1575f80fd5b506103f35f8051602061565c83398151915281565b348015610501575f80fd5b5061030e6005600160991b0181565b34801561051b575f80fd5b5061021461052a36600461477b565b611882565b34801561053a575f80fd5b506103f35f8051602061567c83398151915281565b34801561055a575f80fd5b5061021461056936600461477b565b611aed565b348015610579575f80fd5b506102146105883660046148bb565b611c2a565b6103f361059b36600461477b565b611d07565b3480156105ab575f80fd5b50610249601481565b3480156105bf575f80fd5b506105d36105ce36600461477b565b611d38565b6040516102579190614947565b3480156105eb575f80fd5b506102dc6202a30081565b348015610601575f80fd5b506103f36106103660046149c7565b611e87565b610620838383611ee2565b61064557604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206156dc8339815191526020526040808220815160e0810190925280545f8051602061567c83398151915293929190829060ff166005811115610697576106976148d2565b60058111156106a8576106a86148d2565b81526020016001820180546106bc90614a32565b80601f01602080910402602001604051908101604052809291908181526020018280546106e890614a32565b80156107335780601f1061070a57610100808354040283529160200191610733565b820191905f5260205f20905b81548152906001019060200180831161071657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079e5761079e6148d2565b146107d1575f8381526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610848573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261086f9190810190614b75565b6040518263ffffffff1660e01b815260040161088b9190614ba6565b6020604051808303815f875af11580156108a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190614bb8565b50505050565b6108cb838383611ee2565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061567c8339815191529060ff161561092e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190614bb8565b8360200135146109be576040516372b0a7e760e11b81526020840135600482015260240161063c565b306109cf6060850160408601614be3565b6001600160a01b031614610a12576109ed6060840160408501614be3565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161063c565b5f610a206060850185614bfe565b905090505f805b828163ffffffff161015610c87575f610a436060880188614bfe565b8363ffffffff16818110610a5957610a59614c43565b9050602002810190610a6b9190614c57565b610a7490614cc2565b80516040519192505f916008880191610a8c91614d3d565b90815260200160405180910390205414610abc57805160405163a41f772f60e01b815261063c9190600401614ba6565b5f6002885f013584604051602001610aeb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610b0591614d3d565b602060405180830381855afa158015610b20573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b439190614bb8565b90508086600801835f0151604051610b5b9190614d3d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610b9b9082614d92565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610c1a9085614e61565b8251604051919550610c2b91614d3d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c8090614e74565b9050610a27565b50600483018190556001830154606490610cab90600160401b900460ff1683614e96565b1015610ccd57604051635943317f60e01b81526004810182905260240161063c565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf187612233565b604001516040518263ffffffff1660e01b8152600401610d119190614ba6565b602060405180830381865af4158015610d2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190614bb8565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8a9190614fd8565b5f60405180830381865af4158015610da4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcb9190810190614b75565b90505f600282604051610dde9190614d3d565b602060405180830381855afa158015610df9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1c9190614bb8565b9050828114610e485760405163baaea89d60e01b8152600481018290526024810184905260440161063c565b5050506009909201805460ff1916600117905550505050565b610e6a82612349565b610e8a576040516330efa98b60e01b81526004810183905260240161063c565b5f610e9483611d38565b5190506002816005811115610eab57610eab6148d2565b14610ecb578060405163170cc93360e21b815260040161063c9190614a64565b6108cb8383612384565b5f805f8051602061565c83398151915260030154610ef39084615063565b9050801580610f0857506001600160401b0381115b15610f295760405163222d164360e21b81526004810184905260240161063c565b92915050565b6108cb83838361266a565b610f42612856565b5f8051602061565c8339815191525f80610f5b8461288d565b91509150610f6882612349565b610f7457505050610fe2565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610fa257610fa26148d2565b03610fc7575f83815260088501602052604081208054919055610fc58282612c40565b505b610fdd81610fd884604001516112d3565b612c9e565b505050505b610ff860015f805160206156bc83398151915255565b50565b5f8281525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff166003811115611048576110486148d2565b6003811115611059576110596148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110cf82611d38565b90506001835160038111156110e6576110e66148d2565b14611107578251604051633b0d540d60e21b815261063c9190600401615082565b60048151600581111561111c5761111c6148d2565b036111325761112a86612cc4565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61115789612233565b604001516040518263ffffffff1660e01b81526004016111779190614ba6565b606060405180830381865af4158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b6919061509c565b50915091508184146111e357846040015160405163089938b360e11b815260040161063c91815260200190565b806001600160401b031683606001516001600160401b0316108061121c5750806001600160401b03168560a001516001600160401b0316115b1561124557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610f29906001600160401b038416614e96565b5f61131482611d38565b6080015192915050565b61132983838361266a565b61064557604051635bff683f60e11b81526004810184905260240161063c565b611351612856565b5f8281525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff16600381111561139e5761139e6148d2565b60038111156113af576113af6148d2565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529050600381516003811115611428576114286148d2565b14611449578051604051633b0d540d60e21b815261063c9190600401615082565b60046114588260400151611d38565b51600581111561146a5761146a6148d2565b14611569575f61147984612233565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114b89190614ba6565b606060405180830381865af41580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061509c565b5091509150818460400151146115235760405163089938b360e11b81526004810183905260240161063c565b806001600160401b03168460c001516001600160401b0316111561156557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5050505b61157284612cc4565b505061158a60015f805160206156bc83398151915255565b5050565b5f8051602061565c8339815191525f6115a683611d38565b51905060048160058111156115bd576115bd6148d2565b146115dd578060405163170cc93360e21b815260040161063c9190614a64565b5f8381526005830160205260409020546001600160a01b0316331461162357335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161063c565b5f838152600883016020908152604080832080549084905560058601909252909120546108cb906001600160a01b031682612c40565b5f8051602061567c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61168c86612233565b604001516040518263ffffffff1660e01b81526004016116ac9190614ba6565b6040805180830381865af41580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea91906150d1565b915091508061171057604051632d07135360e01b8152811515600482015260240161063c565b5f8281526006840160205260409020805461172a90614a32565b90505f0361174e5760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078501602052604090205460ff166005811115611774576117746148d2565b146117a7575f8281526007840160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b5f82815260068401602052604081206117bf91614694565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611857612856565b61186384848434612f18565b905061187b60015f805160206156bc83398151915255565b9392505050565b5f8181525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff1660038111156118cf576118cf6148d2565b60038111156118e0576118e06148d2565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611959576119596148d2565b1415801561197a5750600381516003811115611977576119776148d2565b14155b1561199b578051604051633b0d540d60e21b815261063c9190600401615082565b5f6119a98260400151611d38565b905080606001516001600160401b03165f036119db576040516339b894f960e21b81526004810185905260240161063c565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611a4993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611a63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a8a9190810190614b75565b6040518263ffffffff1660e01b8152600401611aa69190614ba6565b6020604051808303815f875af1158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190614bb8565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061567c8339815191529190611b3490614a32565b90505f03611b585760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078301602052604090205460ff166005811115611b7e57611b7e6148d2565b14611bb1575f8281526007820160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611bea91906004016150ff565b6020604051808303815f875af1158015611c06573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106459190614bb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c73575080546001600160401b03808416911610155b15611c915760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cbb83613093565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f611d10612856565b611d1b8233346130a4565b9050611d3360015f805160206156bc83398151915255565b919050565b611d406146cb565b5f8281525f805160206156dc833981519152602052604090819020815160e0810190925280545f8051602061567c833981519152929190829060ff166005811115611d8d57611d8d6148d2565b6005811115611d9e57611d9e6148d2565b8152602001600182018054611db290614a32565b80601f0160208091040260200160405190810160405280929190818152602001828054611dde90614a32565b8015611e295780601f10611e0057610100808354040283529160200191611e29565b820191905f5260205f20905b815481529060010190602001808311611e0c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061567c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611eca9086908690615189565b90815260200160405180910390205491505092915050565b5f8381525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c8339815191529284929091829060ff166003811115611f3057611f306148d2565b6003811115611f4157611f416148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611fb782611d38565b9050600283516003811115611fce57611fce6148d2565b14611fef578251604051633b0d540d60e21b815261063c9190600401615082565b60208301516001600160a01b0316331461208b575f8281526005850160205260409020546001600160a01b0316331461202857336115fe565b5f82815260058501602052604090205460a082015161205791600160b01b90046001600160401b031690615198565b6001600160401b031642101561208b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b6002815160058111156120a0576120a06148d2565b036121ce57600284015460808401516120c2916001600160401b031690615198565b6001600160401b03164210156120f65760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b8615612108576121068287612384565b505b5f8881526006850160205260409020805460ff191660031790556060830151608082015161214191849161213c91906151b8565b6132e7565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612182846134be565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061187b9350505050565b6004815160058111156121e3576121e36148d2565b03612217576121f1836134be565b5f89815260078601602052604090205561220a88612cc4565b600194505050505061187b565b805160405163170cc93360e21b815261063c9190600401614a64565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612297573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122be91908101906151d8565b91509150806122e057604051636b2f19e960e01b815260040160405180910390fd5b815115612306578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b031615612342576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156123cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123f691908101906151d8565b915091508061241857604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561245b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247f9190614bb8565b8251146124a5578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b0316156124e1576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b815260040161251e9190614ba6565b6040805180830381865af4158015612538573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255c9190615268565b915091508187146125835760405163089938b360e11b81526004810188905260240161063c565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061565c833981519152906001600160401b039081169083161115612640575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261265f565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061565c833981519152816126838661365b565b905061268e86612349565b61269d5760019250505061187b565b5f8681526005830160205260409020546001600160a01b031633146126c257336115fe565b5f86815260058301602052604090205460a08201516126f191600160b01b90046001600160401b031690615198565b6001600160401b03168160c001516001600160401b031610156127385760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161063c565b5f8515612750576127498786612384565b905061276e565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612793906112d3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156127fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128209190614bb8565b905080846008015f8a81526020019081526020015f205f8282546128449190614e61565b90915550501515979650505050505050565b5f805160206156bc83398151915280546001190161288757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6128966146cb565b5f8051602061567c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6128c988612233565b604001516040518263ffffffff1660e01b81526004016128e99190614ba6565b6040805180830381865af4158015612903573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292791906150d1565b91509150801561294e57604051632d07135360e01b8152811515600482015260240161063c565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561297f5761297f6148d2565b6005811115612990576129906148d2565b81526020016001820180546129a490614a32565b80601f01602080910402602001604051908101604052809291908181526020018280546129d090614a32565b8015612a1b5780601f106129f257610100808354040283529160200191612a1b565b820191905f5260205f20905b8154815290600101906020018083116129fe57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a8657612a866148d2565b14158015612aa75750600181516005811115612aa457612aa46148d2565b14155b15612ac857805160405163170cc93360e21b815261063c9190600401614a64565b600381516005811115612add57612add6148d2565b03612aeb5760048152612af0565b600581525b836008018160200151604051612b069190614d3d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612b4a57612b4a6148d2565b021790555060208201516001820190612b639082614d92565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612c0957612c096148d2565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612c8c575f80fd5b505af115801561112a573d5f803e3d5ffd5b61158a6001600160a01b0383168261393f565b60015f805160206156bc83398151915255565b5f8181525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff166003811115612d1157612d116148d2565b6003811115612d2257612d226148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dbf7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612dce9190615198565b6001600160401b0316421015612e025760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612ebd575f84815260058701602052604090205461271090612e6f90600160a01b900461ffff1685614e96565b612e799190615063565b915081866008015f8681526020019081526020015f205f828254612e9d9190614e61565b90915550612ead9050828461528b565b9050612ebd856020015182612c40565b612ed28560200151610fd887606001516112d3565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061565c83398151915290600160401b900461ffff9081169086161080612f6c575061271061ffff8616115b15612f9057604051635f12e6c360e11b815261ffff8616600482015260240161063c565b60028101546001600160401b039081169085161015612fcc576040516202a06d60e11b81526001600160401b038516600482015260240161063c565b8054831080612fde5750806001015483115b15612fff5760405163222d164360e21b81526004810184905260240161063c565b825f61300a82610ed5565b90505f61301789836139d2565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b61309b613ef7565b610ff881613f42565b5f5f8051602061565c833981519152816130bd84610ed5565b90505f6130c987611d38565b90506130d487612349565b6130f4576040516330efa98b60e01b81526004810188905260240161063c565b600281516005811115613109576131096148d2565b1461312a57805160405163170cc93360e21b815261063c9190600401614a64565b5f82826080015161313b9190615198565b905083600201600a9054906101000a90046001600160401b03168260400151613164919061529e565b6001600160401b0316816001600160401b031611156131a157604051636d51fe0560e11b81526001600160401b038216600482015260240161063c565b5f806131ad8a846132e7565b915091505f8a836040516020016131db92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f805160206156dc833981519152602052604081206002015481905f8051602061567c83398151915290600160801b90046001600160401b031661332f8582613fb6565b5f613339876141d9565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156133e2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134099190810190614b75565b6040518263ffffffff1660e01b81526004016134259190614ba6565b6020604051808303815f875af1158015613441573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134659190614bb8565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061565c83398151915290505f6134de8460400151611d38565b90505f6003825160058111156134f6576134f66148d2565b14806135145750600482516005811115613512576135126148d2565b145b15613524575060c0810151613561565b600282516005811115613539576135396148d2565b03613545575042613561565b815160405163170cc93360e21b815261063c9190600401614a64565b84608001516001600160401b0316816001600160401b03161161358857505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906135ad906112d3565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa15801561362e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136529190614bb8565b95945050505050565b6136636146cb565b5f8281525f805160206156dc8339815191526020526040808220815160e0810190925280545f8051602061567c83398151915293929190829060ff1660058111156136b0576136b06148d2565b60058111156136c1576136c16148d2565b81526020016001820180546136d590614a32565b80601f016020809104026020016040519081016040528092919081815260200182805461370190614a32565b801561374c5780601f106137235761010080835404028352916020019161374c565b820191905f5260205f20905b81548152906001019060200180831161372f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156137ba576137ba6148d2565b146137ed575f8481526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613831576138316148d2565b02179055506020820151600182019061384a9082614d92565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6138e885826132e7565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b804710156139625760405163cd78605960e01b815230600482015260240161063c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146139ab576040519150601f19603f3d011682016040523d82523d5f602084013e6139b0565b606091505b505090508061064557604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613a1657604051637fab81e560e01b815260040160405180910390fd5b5f8051602061567c83398151915242613a35606086016040870161482e565b6001600160401b0316111580613a6f5750613a536202a30042614e61565b613a63606086016040870161482e565b6001600160401b031610155b15613aa957613a84606085016040860161482e565b604051635879da1360e11b81526001600160401b03909116600482015260240161063c565b613abe613ab960608601866152c9565b61424e565b613ace613ab960808601866152c9565b6030613add60208601866152dd565b905014613b0f57613af160208501856152dd565b6040516326475b2f60e11b815261063c925060040190815260200190565b613b1984806152dd565b90505f03613b4657613b2b84806152dd565b604051633e08a12560e11b815260040161063c92919061531f565b5f60088201613b5586806152dd565b604051613b63929190615189565b90815260200160405180910390205414613b9c57613b8184806152dd565b60405163a41f772f60e01b815260040161063c92919061531f565b613ba6835f613fb6565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613be38a806152dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613c2b908b018b6152dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613c7460608b0160408c0161482e565b6001600160401b03168152602001613c8f60608b018b6152c9565b613c9890615332565b8152602001613caa60808b018b6152c9565b613cb390615332565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613ce19190615454565b5f60405180830381865af4158015613cfb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d22919081019061550b565b5f82815260068601602052604090209193509150613d408282614d92565b508160088401613d5088806152dd565b604051613d5e929190615189565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613d9a908590600401614ba6565b6020604051808303815f875af1158015613db6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dda9190614bb8565b5f8481526007860160205260409020805460ff191660011790559050613e0087806152dd565b5f858152600787016020526040902060010191613e1e91908361554e565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613e7d88806152dd565b604051613e8b929190615189565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613ec9919061482e565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613f4057604051631afcd79f60e31b815260040160405180910390fd5b565b613f4a613ef7565b613f53816143b7565b613f5b6143d0565b610ff860608201356080830135613f7860c0850160a0860161482e565b613f8860e0860160c08701615607565b613f99610100870160e08801615620565b610100870135613fb161014089016101208a01614be3565b6143e0565b5f8051602061567c8339815191525f6001600160401b038084169085161115613fea57613fe383856151b8565b9050613ff7565b613ff484846151b8565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580614059575060018401548151614055916001600160401b031690614e61565b8210155b1561407f576001600160401b03831660608201528181526040810151602082015261409e565b82816060018181516140919190615198565b6001600160401b03169052505b60608101516140ae90606461529e565b602082015160018601546001600160401b0392909216916140d99190600160401b900460ff16614e96565b101561410957606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161063c565b856001600160401b0316816040018181516141249190614e61565b9052506040810180516001600160401b038716919061414490839061528b565b9052506001840154604082015160649161416991600160401b90910460ff1690614e96565b1015614190578060400151604051635943317f60e01b815260040161063c91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206156dc8339815191526020526040812060020180545f8051602061567c833981519152919060089061422390600160401b90046001600160401b0316615640565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61425b6020820182614801565b63ffffffff1615801561427b57506142766020820182614bfe565b151590505b156142c25761428d6020820182614801565b61429a6020830183614bfe565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161063c565b6142cf6020820182614bfe565b90506142de6020830183614801565b63ffffffff1611156142f75761428d6020820182614801565b60015b6143076020830183614bfe565b905081101561158a5761431d6020830183614bfe565b61432860018461528b565b81811061433757614337614c43565b905060200201602081019061434c9190614be3565b6001600160a01b03166143626020840184614bfe565b8381811061437257614372614c43565b90506020020160208101906143879190614be3565b6001600160a01b031610156143af57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142fa565b6143bf613ef7565b6143c761459c565b610ff8816145a4565b6143d8613ef7565b613f4061468c565b6143e8613ef7565b5f8051602061565c83398151915261ffff8516158061440c575061271061ffff8616115b1561443057604051635f12e6c360e11b815261ffff8616600482015260240161063c565b868811156144545760405163222d164360e21b81526004810189905260240161063c565b60ff841615806144675750600a60ff8516115b1561448a5760405163170db35960e31b815260ff8516600482015260240161063c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b031610156144f1576040516202a06d60e11b81526001600160401b038716600482015260240161063c565b825f036145115760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b613f40613ef7565b6145ac613ef7565b80355f8051602061567c83398151915290815560146145d16060840160408501615620565b60ff1611806145f057506145eb6060830160408401615620565b60ff16155b15614624576146056060830160408401615620565b604051634a59bbff60e11b815260ff909116600482015260240161063c565b6146346060830160408401615620565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614665604083016020840161482e565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cb1613ef7565b5080546146a090614a32565b5f825580601f106146af575050565b601f0160209004905f5260205f2090810190610ff89190614708565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561471c575f8155600101614709565b5090565b8015158114610ff8575f80fd5b803563ffffffff81168114611d33575f80fd5b5f805f60608486031215614752575f80fd5b83359250602084013561476481614720565b91506147726040850161472d565b90509250925092565b5f6020828403121561478b575f80fd5b5035919050565b5f80604083850312156147a3575f80fd5b82356001600160401b038111156147b8575f80fd5b8301608081860312156147c9575f80fd5b91506147d76020840161472d565b90509250929050565b5f80604083850312156147f1575f80fd5b823591506147d76020840161472d565b5f60208284031215614811575f80fd5b61187b8261472d565b6001600160401b0381168114610ff8575f80fd5b5f6020828403121561483e575f80fd5b813561187b8161481a565b803561ffff81168114611d33575f80fd5b5f805f6060848603121561486c575f80fd5b83356001600160401b03811115614881575f80fd5b840160a08187031215614892575f80fd5b92506148a060208501614849565b915060408401356148b08161481a565b809150509250925092565b5f61014082840312156148cc575f80fd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b600681106148f6576148f66148d2565b9052565b5f5b838110156149145781810151838201526020016148fc565b50505f910152565b5f81518084526149338160208601602086016148fa565b601f01601f19169290920160200192915050565b602081526149596020820183516148e6565b5f602083015160e0604084015261497461010084018261491c565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156149d8575f80fd5b82356001600160401b03808211156149ee575f80fd5b818501915085601f830112614a01575f80fd5b813581811115614a0f575f80fd5b866020828501011115614a20575f80fd5b60209290920196919550909350505050565b600181811c90821680614a4657607f821691505b6020821081036148cc57634e487b7160e01b5f52602260045260245ffd5b60208101610f2982846148e6565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614aa857614aa8614a72565b60405290565b604080519081016001600160401b0381118282101715614aa857614aa8614a72565b604051601f8201601f191681016001600160401b0381118282101715614af857614af8614a72565b604052919050565b5f6001600160401b03821115614b1857614b18614a72565b50601f01601f191660200190565b5f82601f830112614b35575f80fd5b8151614b48614b4382614b00565b614ad0565b818152846020838601011115614b5c575f80fd5b614b6d8260208301602087016148fa565b949350505050565b5f60208284031215614b85575f80fd5b81516001600160401b03811115614b9a575f80fd5b614b6d84828501614b26565b602081525f61187b602083018461491c565b5f60208284031215614bc8575f80fd5b5051919050565b6001600160a01b0381168114610ff8575f80fd5b5f60208284031215614bf3575f80fd5b813561187b81614bcf565b5f808335601e19843603018112614c13575f80fd5b8301803591506001600160401b03821115614c2c575f80fd5b6020019150600581901b36038213156134b7575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c6b575f80fd5b9190910192915050565b5f82601f830112614c84575f80fd5b8135614c92614b4382614b00565b818152846020838601011115614ca6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614cd2575f80fd5b614cda614a86565b82356001600160401b0380821115614cf0575f80fd5b614cfc36838701614c75565b83526020850135915080821115614d11575f80fd5b50614d1e36828601614c75565b6020830152506040830135614d328161481a565b604082015292915050565b5f8251614c6b8184602087016148fa565b601f82111561064557805f5260205f20601f840160051c81016020851015614d735750805b601f840160051c820191505b81811015611ae6575f8155600101614d7f565b81516001600160401b03811115614dab57614dab614a72565b614dbf81614db98454614a32565b84614d4e565b602080601f831160018114614df2575f8415614ddb5750858301515b5f19600386901b1c1916600185901b17855561112a565b5f85815260208120601f198616915b82811015614e2057888601518255948401946001909101908401614e01565b5085821015614e3d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f2957610f29614e4d565b5f63ffffffff808316818103614e8c57614e8c614e4d565b6001019392505050565b8082028115828204841417610f2957610f29614e4d565b5f808335601e19843603018112614ec2575f80fd5b83016020810192503590506001600160401b03811115614ee0575f80fd5b8036038213156134b7575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614fcb57848303601f19018952813536889003605e19018112614f52575f80fd5b87016060614f608280614ead565b828752614f708388018284614eee565b92505050614f8086830183614ead565b86830388880152614f92838284614eee565b925050506040808301359250614fa78361481a565b6001600160401b039290921694909101939093529783019790830190600101614f2d565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614ffc81614bcf565b6001600160a01b031660608381019190915283013536849003601e19018112615023575f80fd5b83016020810190356001600160401b0381111561503e575f80fd5b8060051b360382131561504f575f80fd5b60808085015261365260a085018284614f16565b5f8261507d57634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160048310615096576150966148d2565b91905290565b5f805f606084860312156150ae575f80fd5b8351925060208401516150c08161481a565b60408501519092506148b08161481a565b5f80604083850312156150e2575f80fd5b8251915060208301516150f481614720565b809150509250929050565b5f60208083525f845461511181614a32565b806020870152604060018084165f8114615132576001811461514e5761517b565b60ff19851660408a0152604084151560051b8a0101955061517b565b895f5260205f205f5b858110156151725781548b8201860152908301908801615157565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561234257612342614e4d565b6001600160401b0382811682821603908082111561234257612342614e4d565b5f80604083850312156151e9575f80fd5b82516001600160401b03808211156151ff575f80fd5b9084019060608287031215615212575f80fd5b61521a614a86565b82518152602083015161522c81614bcf565b6020820152604083015182811115615242575f80fd5b61524e88828601614b26565b60408301525080945050505060208301516150f481614720565b5f8060408385031215615279575f80fd5b8251915060208301516150f48161481a565b81810381811115610f2957610f29614e4d565b6001600160401b038181168382160280821691908281146152c1576152c1614e4d565b505092915050565b5f8235603e19833603018112614c6b575f80fd5b5f808335601e198436030181126152f2575f80fd5b8301803591506001600160401b0382111561530b575f80fd5b6020019150368190038213156134b7575f80fd5b602081525f614b6d602083018486614eee565b5f60408236031215615342575f80fd5b61534a614aae565b6153538361472d565b81526020808401356001600160401b038082111561536f575f80fd5b9085019036601f830112615381575f80fd5b81358181111561539357615393614a72565b8060051b91506153a4848301614ad0565b81815291830184019184810190368411156153bd575f80fd5b938501935b838510156153e757843592506153d783614bcf565b82825293850193908501906153c2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561265f5784516001600160a01b0316825293830193600192909201919083019061542b565b60208152815160208201525f602083015160e0604084015261547a61010084018261491c565b90506040840151601f1980858403016060860152615498838361491c565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526154c883836153f9565b925060a08601519150808584030160c0860152506154e682826153f9565b91505060c084015161550360e08501826001600160401b03169052565b509392505050565b5f806040838503121561551c575f80fd5b8251915060208301516001600160401b03811115615538575f80fd5b61554485828601614b26565b9150509250929050565b6001600160401b0383111561556557615565614a72565b615579836155738354614a32565b83614d4e565b5f601f8411600181146155aa575f85156155935750838201355b5f19600387901b1c1916600186901b178355611ae6565b5f83815260208120601f198716915b828110156155d957868501358255602094850194600190920191016155b9565b50868210156155f5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f60208284031215615617575f80fd5b61187b82614849565b5f60208284031215615630575f80fd5b813560ff8116811461187b575f80fd5b5f6001600160401b03808316818103614e8c57614e8c614e4d56fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212208dd1e9ee153033a34dcfc386c2727e5787c4109fb1d592866eabdb2e2be7197064736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b5060405161582d38038061582d83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6156e08061014d5f395ff3fe6080604052600436106101f1575f3560e01c806380dd672f11610108578063ba3a4b971161009d578063c599e24f1161006d578063c599e24f1461058d578063c974d1b6146105a0578063d5f20ff6146105b4578063df93d8de146105e0578063fd7ac5e7146105f6575f80fd5b8063ba3a4b9714610510578063bc5fbfec1461052f578063bee0a03f1461054f578063c257a0f51461056e575f80fd5b8063a9778a7a116100d8578063a9778a7a14610326578063af2f5feb146104c3578063afb98096146104d6578063b771b3bc146104f6575f80fd5b806380dd672f146104525780638280a25a1461047157806393e2459814610485578063a3a65e48146104a4575f80fd5b806335455ded1161018957806360ad77841161015957806360ad7784146103b557806362065856146103d457806366435abf14610401578063732214f81461042057806376f7862114610433575f80fd5b806335455ded146103265780633a1cfff61461034e578063467ef06f1461036d57806360305d621461038c575f80fd5b806320d91b7a116101c457806320d91b7a1461027f57806325e1c7761461029e5780632e2194d8146102bd578063329c3e12146102f4575f80fd5b80630118acc4146101f55780630322ed9814610216578063151d30d1146102355780631ec4472414610260575b5f80fd5b348015610200575f80fd5b5061021461020f3660046146ef565b610615565b005b348015610221575f80fd5b5061021461023036600461472a565b61064a565b348015610240575f80fd5b50610249600a81565b60405160ff90911681526020015b60405180910390f35b34801561026b575f80fd5b5061021461027a3660046146ef565b6108d1565b34801561028a575f80fd5b50610214610299366004614741565b6108dc565b3480156102a9575f80fd5b506102146102b836600461478f565b610e61565b3480156102c8575f80fd5b506102dc6102d736600461472a565b610ed5565b6040516001600160401b039091168152602001610257565b3480156102ff575f80fd5b5061030e6001600160991b0181565b6040516001600160a01b039091168152602001610257565b348015610331575f80fd5b5061033b61271081565b60405161ffff9091168152602001610257565b348015610359575f80fd5b506102146103683660046146ef565b610f2f565b348015610378575f80fd5b506102146103873660046147b0565b610f3a565b348015610397575f80fd5b506103a0601481565b60405163ffffffff9091168152602001610257565b3480156103c0575f80fd5b506102146103cf36600461478f565b610ffb565b3480156103df575f80fd5b506103f36103ee3660046147dd565b6112d3565b604051908152602001610257565b34801561040c575f80fd5b506102dc61041b36600461472a565b61130a565b34801561042b575f80fd5b506103f35f81565b34801561043e575f80fd5b5061021461044d3660046146ef565b61131e565b34801561045d575f80fd5b5061021461046c36600461478f565b611349565b34801561047c575f80fd5b50610249603081565b348015610490575f80fd5b5061021461049f36600461472a565b61158e565b3480156104af575f80fd5b506102146104be3660046147b0565b611659565b6103f36104d1366004614809565b61184e565b3480156104e1575f80fd5b506103f35f8051602061560b83398151915281565b348015610501575f80fd5b5061030e6005600160991b0181565b34801561051b575f80fd5b5061021461052a36600461472a565b611882565b34801561053a575f80fd5b506103f35f8051602061562b83398151915281565b34801561055a575f80fd5b5061021461056936600461472a565b611aed565b348015610579575f80fd5b5061021461058836600461486a565b611c2a565b6103f361059b36600461472a565b611d07565b3480156105ab575f80fd5b50610249601481565b3480156105bf575f80fd5b506105d36105ce36600461472a565b611d38565b60405161025791906148f6565b3480156105eb575f80fd5b506102dc6202a30081565b348015610601575f80fd5b506103f3610610366004614976565b611e87565b610620838383611ee2565b61064557604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f8051602061568b8339815191526020526040808220815160e0810190925280545f8051602061562b83398151915293929190829060ff16600581111561069757610697614881565b60058111156106a8576106a8614881565b81526020016001820180546106bc906149e1565b80601f01602080910402602001604051908101604052809291908181526020018280546106e8906149e1565b80156107335780601f1061070a57610100808354040283529160200191610733565b820191905f5260205f20905b81548152906001019060200180831161071657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079e5761079e614881565b146107d1575f8381526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a13565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610848573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261086f9190810190614b24565b6040518263ffffffff1660e01b815260040161088b9190614b55565b6020604051808303815f875af11580156108a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190614b67565b50505050565b6108cb838383611ee2565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061562b8339815191529060ff161561092e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190614b67565b8360200135146109be576040516372b0a7e760e11b81526020840135600482015260240161063c565b306109cf6060850160408601614b92565b6001600160a01b031614610a12576109ed6060840160408501614b92565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161063c565b5f610a206060850185614bad565b905090505f805b828163ffffffff161015610c87575f610a436060880188614bad565b8363ffffffff16818110610a5957610a59614bf2565b9050602002810190610a6b9190614c06565b610a7490614c71565b80516040519192505f916008880191610a8c91614cec565b90815260200160405180910390205414610abc57805160405163a41f772f60e01b815261063c9190600401614b55565b5f6002885f013584604051602001610aeb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610b0591614cec565b602060405180830381855afa158015610b20573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b439190614b67565b90508086600801835f0151604051610b5b9190614cec565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610b9b9082614d41565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610c1a9085614e10565b8251604051919550610c2b91614cec565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c8090614e23565b9050610a27565b50600483018190556001830154606490610cab90600160401b900460ff1683614e45565b1015610ccd57604051635943317f60e01b81526004810182905260240161063c565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf187612233565b604001516040518263ffffffff1660e01b8152600401610d119190614b55565b602060405180830381865af4158015610d2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190614b67565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8a9190614f87565b5f60405180830381865af4158015610da4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcb9190810190614b24565b90505f600282604051610dde9190614cec565b602060405180830381855afa158015610df9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1c9190614b67565b9050828114610e485760405163baaea89d60e01b8152600481018290526024810184905260440161063c565b5050506009909201805460ff1916600117905550505050565b610e6a82612349565b610e8a576040516330efa98b60e01b81526004810183905260240161063c565b5f610e9483611d38565b5190506002816005811115610eab57610eab614881565b14610ecb578060405163170cc93360e21b815260040161063c9190614a13565b6108cb8383612384565b5f805f8051602061560b83398151915260030154610ef39084615012565b9050801580610f0857506001600160401b0381115b15610f295760405163222d164360e21b81526004810184905260240161063c565b92915050565b6108cb838383612619565b610f42612805565b5f8051602061560b8339815191525f80610f5b8461283c565b91509150610f6882612349565b610f7457505050610fe2565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610fa257610fa2614881565b03610fc7575f83815260088501602052604081208054919055610fc58282612bef565b505b610fdd81610fd884604001516112d3565b612c4d565b505050505b610ff860015f8051602061566b83398151915255565b50565b5f8281525f8051602061564b8339815191526020526040808220815160e0810190925280545f8051602061560b83398151915293929190829060ff16600381111561104857611048614881565b600381111561105957611059614881565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110cf82611d38565b90506001835160038111156110e6576110e6614881565b14611107578251604051633b0d540d60e21b815261063c9190600401615031565b60048151600581111561111c5761111c614881565b036111325761112a86612c73565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61115789612233565b604001516040518263ffffffff1660e01b81526004016111779190614b55565b606060405180830381865af4158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b6919061504b565b50915091508184146111e357846040015160405163089938b360e11b815260040161063c91815260200190565b806001600160401b031683606001516001600160401b0316108061121c5750806001600160401b03168560a001516001600160401b0316115b1561124557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610f29906001600160401b038416614e45565b5f61131482611d38565b6080015192915050565b611329838383612619565b61064557604051635bff683f60e11b81526004810184905260240161063c565b611351612805565b5f8281525f8051602061564b8339815191526020526040808220815160e0810190925280545f8051602061560b83398151915293929190829060ff16600381111561139e5761139e614881565b60038111156113af576113af614881565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561142857611428614881565b14611449578051604051633b0d540d60e21b815261063c9190600401615031565b60046114588260400151611d38565b51600581111561146a5761146a614881565b14611569575f61147984612233565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114b89190614b55565b606060405180830381865af41580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061504b565b5091509150818460400151146115235760405163089938b360e11b81526004810183905260240161063c565b806001600160401b03168460c001516001600160401b0316111561156557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5050505b61157284612c73565b505061158a60015f8051602061566b83398151915255565b5050565b5f8051602061560b8339815191525f6115a683611d38565b51905060048160058111156115bd576115bd614881565b146115dd578060405163170cc93360e21b815260040161063c9190614a13565b5f8381526005830160205260409020546001600160a01b0316331461162357335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161063c565b5f838152600883016020908152604080832080549084905560058601909252909120546108cb906001600160a01b031682612bef565b5f8051602061562b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61168c86612233565b604001516040518263ffffffff1660e01b81526004016116ac9190614b55565b6040805180830381865af41580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea9190615080565b915091508061171057604051632d07135360e01b8152811515600482015260240161063c565b5f8281526006840160205260409020805461172a906149e1565b90505f0361174e5760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078501602052604090205460ff16600581111561177457611774614881565b146117a7575f8281526007840160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a13565b5f82815260068401602052604081206117bf91614643565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611857612805565b61186384848434612ec7565b905061187b60015f8051602061566b83398151915255565b9392505050565b5f8181525f8051602061564b8339815191526020526040808220815160e0810190925280545f8051602061560b83398151915293929190829060ff1660038111156118cf576118cf614881565b60038111156118e0576118e0614881565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561195957611959614881565b1415801561197a575060038151600381111561197757611977614881565b14155b1561199b578051604051633b0d540d60e21b815261063c9190600401615031565b5f6119a98260400151611d38565b905080606001516001600160401b03165f036119db576040516339b894f960e21b81526004810185905260240161063c565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611a4993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611a63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a8a9190810190614b24565b6040518263ffffffff1660e01b8152600401611aa69190614b55565b6020604051808303815f875af1158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190614b67565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061562b8339815191529190611b34906149e1565b90505f03611b585760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078301602052604090205460ff166005811115611b7e57611b7e614881565b14611bb1575f8281526007820160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a13565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611bea91906004016150ae565b6020604051808303815f875af1158015611c06573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106459190614b67565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c73575080546001600160401b03808416911610155b15611c915760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cbb83613042565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f611d10612805565b611d1b823334613053565b9050611d3360015f8051602061566b83398151915255565b919050565b611d4061467a565b5f8281525f8051602061568b833981519152602052604090819020815160e0810190925280545f8051602061562b833981519152929190829060ff166005811115611d8d57611d8d614881565b6005811115611d9e57611d9e614881565b8152602001600182018054611db2906149e1565b80601f0160208091040260200160405190810160405280929190818152602001828054611dde906149e1565b8015611e295780601f10611e0057610100808354040283529160200191611e29565b820191905f5260205f20905b815481529060010190602001808311611e0c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061562b833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611eca9086908690615138565b90815260200160405180910390205491505092915050565b5f8381525f8051602061564b8339815191526020526040808220815160e0810190925280545f8051602061560b8339815191529284929091829060ff166003811115611f3057611f30614881565b6003811115611f4157611f41614881565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611fb782611d38565b9050600283516003811115611fce57611fce614881565b14611fef578251604051633b0d540d60e21b815261063c9190600401615031565b60208301516001600160a01b0316331461208b575f8281526005850160205260409020546001600160a01b0316331461202857336115fe565b5f82815260058501602052604090205460a082015161205791600160b01b90046001600160401b031690615147565b6001600160401b031642101561208b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b6002815160058111156120a0576120a0614881565b036121ce57600284015460808401516120c2916001600160401b031690615147565b6001600160401b03164210156120f65760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b8615612108576121068287612384565b505b5f8881526006850160205260409020805460ff191660031790556060830151608082015161214191849161213c9190615167565b613296565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556121828461346d565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061187b9350505050565b6004815160058111156121e3576121e3614881565b03612217576121f18361346d565b5f89815260078601602052604090205561220a88612c73565b600194505050505061187b565b805160405163170cc93360e21b815261063c9190600401614a13565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612297573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122be9190810190615187565b91509150806122e057604051636b2f19e960e01b815260040160405180910390fd5b815115612306578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b031615612342576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156123cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123f69190810190615187565b915091508061241857604051636b2f19e960e01b815260040160405180910390fd5b60208201516001600160a01b031615612454576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b60208201516001600160a01b031615612490576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b81526004016124cd9190614b55565b6040805180830381865af41580156124e7573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061250b9190615217565b915091508187146125325760405163089938b360e11b81526004810188905260240161063c565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061560b833981519152906001600160401b0390811690831611156125ef575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261260e565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061560b833981519152816126328661360a565b905061263d86612349565b61264c5760019250505061187b565b5f8681526005830160205260409020546001600160a01b0316331461267157336115fe565b5f86815260058301602052604090205460a08201516126a091600160b01b90046001600160401b031690615147565b6001600160401b03168160c001516001600160401b031610156126e75760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161063c565b5f85156126ff576126f88786612384565b905061271d565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612742906112d3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156127ab573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127cf9190614b67565b905080846008015f8a81526020019081526020015f205f8282546127f39190614e10565b90915550501515979650505050505050565b5f8051602061566b83398151915280546001190161283657604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61284561467a565b5f8051602061562b8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61287888612233565b604001516040518263ffffffff1660e01b81526004016128989190614b55565b6040805180830381865af41580156128b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128d69190615080565b9150915080156128fd57604051632d07135360e01b8152811515600482015260240161063c565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561292e5761292e614881565b600581111561293f5761293f614881565b8152602001600182018054612953906149e1565b80601f016020809104026020016040519081016040528092919081815260200182805461297f906149e1565b80156129ca5780601f106129a1576101008083540402835291602001916129ca565b820191905f5260205f20905b8154815290600101906020018083116129ad57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a3557612a35614881565b14158015612a565750600181516005811115612a5357612a53614881565b14155b15612a7757805160405163170cc93360e21b815261063c9190600401614a13565b600381516005811115612a8c57612a8c614881565b03612a9a5760048152612a9f565b600581525b836008018160200151604051612ab59190614cec565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612af957612af9614881565b021790555060208201516001820190612b129082614d41565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612bb857612bb8614881565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612c3b575f80fd5b505af115801561112a573d5f803e3d5ffd5b61158a6001600160a01b038316826138ee565b60015f8051602061566b83398151915255565b5f8181525f8051602061564b8339815191526020526040808220815160e0810190925280545f8051602061560b83398151915293929190829060ff166003811115612cc057612cc0614881565b6003811115612cd157612cd1614881565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d6e7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d7d9190615147565b6001600160401b0316421015612db15760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612e6c575f84815260058701602052604090205461271090612e1e90600160a01b900461ffff1685614e45565b612e289190615012565b915081866008015f8681526020019081526020015f205f828254612e4c9190614e10565b90915550612e5c9050828461523a565b9050612e6c856020015182612bef565b612e818560200151610fd887606001516112d3565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061560b83398151915290600160401b900461ffff9081169086161080612f1b575061271061ffff8616115b15612f3f57604051635f12e6c360e11b815261ffff8616600482015260240161063c565b60028101546001600160401b039081169085161015612f7b576040516202a06d60e11b81526001600160401b038516600482015260240161063c565b8054831080612f8d5750806001015483115b15612fae5760405163222d164360e21b81526004810184905260240161063c565b825f612fb982610ed5565b90505f612fc68983613981565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b61304a613ea6565b610ff881613ef1565b5f5f8051602061560b8339815191528161306c84610ed5565b90505f61307887611d38565b905061308387612349565b6130a3576040516330efa98b60e01b81526004810188905260240161063c565b6002815160058111156130b8576130b8614881565b146130d957805160405163170cc93360e21b815261063c9190600401614a13565b5f8282608001516130ea9190615147565b905083600201600a9054906101000a90046001600160401b03168260400151613113919061524d565b6001600160401b0316816001600160401b0316111561315057604051636d51fe0560e11b81526001600160401b038216600482015260240161063c565b5f8061315c8a84613296565b915091505f8a8360405160200161318a92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f8051602061568b833981519152602052604081206002015481905f8051602061562b83398151915290600160801b90046001600160401b03166132de8582613f65565b5f6132e887614188565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613391573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526133b89190810190614b24565b6040518263ffffffff1660e01b81526004016133d49190614b55565b6020604051808303815f875af11580156133f0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134149190614b67565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061560b83398151915290505f61348d8460400151611d38565b90505f6003825160058111156134a5576134a5614881565b14806134c357506004825160058111156134c1576134c1614881565b145b156134d3575060c0810151613510565b6002825160058111156134e8576134e8614881565b036134f4575042613510565b815160405163170cc93360e21b815261063c9190600401614a13565b84608001516001600160401b0316816001600160401b03161161353757505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061355c906112d3565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156135dd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136019190614b67565b95945050505050565b61361261467a565b5f8281525f8051602061568b8339815191526020526040808220815160e0810190925280545f8051602061562b83398151915293929190829060ff16600581111561365f5761365f614881565b600581111561367057613670614881565b8152602001600182018054613684906149e1565b80601f01602080910402602001604051908101604052809291908181526020018280546136b0906149e1565b80156136fb5780601f106136d2576101008083540402835291602001916136fb565b820191905f5260205f20905b8154815290600101906020018083116136de57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561376957613769614881565b1461379c575f8481526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a13565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156137e0576137e0614881565b0217905550602082015160018201906137f99082614d41565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6138978582613296565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b804710156139115760405163cd78605960e01b815230600482015260240161063c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461395a576040519150601f19603f3d011682016040523d82523d5f602084013e61395f565b606091505b505090508061064557604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166139c557604051637fab81e560e01b815260040160405180910390fd5b5f8051602061562b833981519152426139e460608601604087016147dd565b6001600160401b0316111580613a1e5750613a026202a30042614e10565b613a1260608601604087016147dd565b6001600160401b031610155b15613a5857613a3360608501604086016147dd565b604051635879da1360e11b81526001600160401b03909116600482015260240161063c565b613a6d613a686060860186615278565b6141fd565b613a7d613a686080860186615278565b6030613a8c602086018661528c565b905014613abe57613aa0602085018561528c565b6040516326475b2f60e11b815261063c925060040190815260200190565b613ac8848061528c565b90505f03613af557613ada848061528c565b604051633e08a12560e11b815260040161063c9291906152ce565b5f60088201613b04868061528c565b604051613b12929190615138565b90815260200160405180910390205414613b4b57613b30848061528c565b60405163a41f772f60e01b815260040161063c9291906152ce565b613b55835f613f65565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613b928a8061528c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613bda908b018b61528c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613c2360608b0160408c016147dd565b6001600160401b03168152602001613c3e60608b018b615278565b613c47906152e1565b8152602001613c5960808b018b615278565b613c62906152e1565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613c909190615403565b5f60405180830381865af4158015613caa573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613cd191908101906154ba565b5f82815260068601602052604090209193509150613cef8282614d41565b508160088401613cff888061528c565b604051613d0d929190615138565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613d49908590600401614b55565b6020604051808303815f875af1158015613d65573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d899190614b67565b5f8481526007860160205260409020805460ff191660011790559050613daf878061528c565b5f858152600787016020526040902060010191613dcd9190836154fd565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613e2c888061528c565b604051613e3a929190615138565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613e7891906147dd565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613eef57604051631afcd79f60e31b815260040160405180910390fd5b565b613ef9613ea6565b613f0281614366565b613f0a61437f565b610ff860608201356080830135613f2760c0850160a086016147dd565b613f3760e0860160c087016155b6565b613f48610100870160e088016155cf565b610100870135613f6061014089016101208a01614b92565b61438f565b5f8051602061562b8339815191525f6001600160401b038084169085161115613f9957613f928385615167565b9050613fa6565b613fa38484615167565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580614008575060018401548151614004916001600160401b031690614e10565b8210155b1561402e576001600160401b03831660608201528181526040810151602082015261404d565b82816060018181516140409190615147565b6001600160401b03169052505b606081015161405d90606461524d565b602082015160018601546001600160401b0392909216916140889190600160401b900460ff16614e45565b10156140b857606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161063c565b856001600160401b0316816040018181516140d39190614e10565b9052506040810180516001600160401b03871691906140f390839061523a565b9052506001840154604082015160649161411891600160401b90910460ff1690614e45565b101561413f578060400151604051635943317f60e01b815260040161063c91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f8051602061568b8339815191526020526040812060020180545f8051602061562b83398151915291906008906141d290600160401b90046001600160401b03166155ef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61420a60208201826147b0565b63ffffffff1615801561422a57506142256020820182614bad565b151590505b156142715761423c60208201826147b0565b6142496020830183614bad565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161063c565b61427e6020820182614bad565b905061428d60208301836147b0565b63ffffffff1611156142a65761423c60208201826147b0565b60015b6142b66020830183614bad565b905081101561158a576142cc6020830183614bad565b6142d760018461523a565b8181106142e6576142e6614bf2565b90506020020160208101906142fb9190614b92565b6001600160a01b03166143116020840184614bad565b8381811061432157614321614bf2565b90506020020160208101906143369190614b92565b6001600160a01b0316101561435e57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142a9565b61436e613ea6565b61437661454b565b610ff881614553565b614387613ea6565b613eef61463b565b614397613ea6565b5f8051602061560b83398151915261ffff851615806143bb575061271061ffff8616115b156143df57604051635f12e6c360e11b815261ffff8616600482015260240161063c565b868811156144035760405163222d164360e21b81526004810189905260240161063c565b60ff841615806144165750600a60ff8516115b156144395760405163170db35960e31b815260ff8516600482015260240161063c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b031610156144a0576040516202a06d60e11b81526001600160401b038716600482015260240161063c565b825f036144c05760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b613eef613ea6565b61455b613ea6565b80355f8051602061562b833981519152908155601461458060608401604085016155cf565b60ff16118061459f575061459a60608301604084016155cf565b60ff16155b156145d3576145b460608301604084016155cf565b604051634a59bbff60e11b815260ff909116600482015260240161063c565b6145e360608301604084016155cf565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561461460408301602084016147dd565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c60613ea6565b50805461464f906149e1565b5f825580601f1061465e575050565b601f0160209004905f5260205f2090810190610ff891906146b7565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156146cb575f81556001016146b8565b5090565b8015158114610ff8575f80fd5b803563ffffffff81168114611d33575f80fd5b5f805f60608486031215614701575f80fd5b833592506020840135614713816146cf565b9150614721604085016146dc565b90509250925092565b5f6020828403121561473a575f80fd5b5035919050565b5f8060408385031215614752575f80fd5b82356001600160401b03811115614767575f80fd5b830160808186031215614778575f80fd5b9150614786602084016146dc565b90509250929050565b5f80604083850312156147a0575f80fd5b82359150614786602084016146dc565b5f602082840312156147c0575f80fd5b61187b826146dc565b6001600160401b0381168114610ff8575f80fd5b5f602082840312156147ed575f80fd5b813561187b816147c9565b803561ffff81168114611d33575f80fd5b5f805f6060848603121561481b575f80fd5b83356001600160401b03811115614830575f80fd5b840160a08187031215614841575f80fd5b925061484f602085016147f8565b9150604084013561485f816147c9565b809150509250925092565b5f610140828403121561487b575f80fd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b600681106148a5576148a5614881565b9052565b5f5b838110156148c35781810151838201526020016148ab565b50505f910152565b5f81518084526148e28160208601602086016148a9565b601f01601f19169290920160200192915050565b60208152614908602082018351614895565b5f602083015160e060408401526149236101008401826148cb565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614987575f80fd5b82356001600160401b038082111561499d575f80fd5b818501915085601f8301126149b0575f80fd5b8135818111156149be575f80fd5b8660208285010111156149cf575f80fd5b60209290920196919550909350505050565b600181811c908216806149f557607f821691505b60208210810361487b57634e487b7160e01b5f52602260045260245ffd5b60208101610f298284614895565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614a5757614a57614a21565b60405290565b604080519081016001600160401b0381118282101715614a5757614a57614a21565b604051601f8201601f191681016001600160401b0381118282101715614aa757614aa7614a21565b604052919050565b5f6001600160401b03821115614ac757614ac7614a21565b50601f01601f191660200190565b5f82601f830112614ae4575f80fd5b8151614af7614af282614aaf565b614a7f565b818152846020838601011115614b0b575f80fd5b614b1c8260208301602087016148a9565b949350505050565b5f60208284031215614b34575f80fd5b81516001600160401b03811115614b49575f80fd5b614b1c84828501614ad5565b602081525f61187b60208301846148cb565b5f60208284031215614b77575f80fd5b5051919050565b6001600160a01b0381168114610ff8575f80fd5b5f60208284031215614ba2575f80fd5b813561187b81614b7e565b5f808335601e19843603018112614bc2575f80fd5b8301803591506001600160401b03821115614bdb575f80fd5b6020019150600581901b3603821315613466575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c1a575f80fd5b9190910192915050565b5f82601f830112614c33575f80fd5b8135614c41614af282614aaf565b818152846020838601011115614c55575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614c81575f80fd5b614c89614a35565b82356001600160401b0380821115614c9f575f80fd5b614cab36838701614c24565b83526020850135915080821115614cc0575f80fd5b50614ccd36828601614c24565b6020830152506040830135614ce1816147c9565b604082015292915050565b5f8251614c1a8184602087016148a9565b601f82111561064557805f5260205f20601f840160051c81016020851015614d225750805b601f840160051c820191505b81811015611ae6575f8155600101614d2e565b81516001600160401b03811115614d5a57614d5a614a21565b614d6e81614d6884546149e1565b84614cfd565b602080601f831160018114614da1575f8415614d8a5750858301515b5f19600386901b1c1916600185901b17855561112a565b5f85815260208120601f198616915b82811015614dcf57888601518255948401946001909101908401614db0565b5085821015614dec57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f2957610f29614dfc565b5f63ffffffff808316818103614e3b57614e3b614dfc565b6001019392505050565b8082028115828204841417610f2957610f29614dfc565b5f808335601e19843603018112614e71575f80fd5b83016020810192503590506001600160401b03811115614e8f575f80fd5b803603821315613466575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614f7a57848303601f19018952813536889003605e19018112614f01575f80fd5b87016060614f0f8280614e5c565b828752614f1f8388018284614e9d565b92505050614f2f86830183614e5c565b86830388880152614f41838284614e9d565b925050506040808301359250614f56836147c9565b6001600160401b039290921694909101939093529783019790830190600101614edc565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614fab81614b7e565b6001600160a01b031660608381019190915283013536849003601e19018112614fd2575f80fd5b83016020810190356001600160401b03811115614fed575f80fd5b8060051b3603821315614ffe575f80fd5b60808085015261360160a085018284614ec5565b5f8261502c57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061504557615045614881565b91905290565b5f805f6060848603121561505d575f80fd5b83519250602084015161506f816147c9565b604085015190925061485f816147c9565b5f8060408385031215615091575f80fd5b8251915060208301516150a3816146cf565b809150509250929050565b5f60208083525f84546150c0816149e1565b806020870152604060018084165f81146150e157600181146150fd5761512a565b60ff19851660408a0152604084151560051b8a0101955061512a565b895f5260205f205f5b858110156151215781548b8201860152908301908801615106565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561234257612342614dfc565b6001600160401b0382811682821603908082111561234257612342614dfc565b5f8060408385031215615198575f80fd5b82516001600160401b03808211156151ae575f80fd5b90840190606082870312156151c1575f80fd5b6151c9614a35565b8251815260208301516151db81614b7e565b60208201526040830151828111156151f1575f80fd5b6151fd88828601614ad5565b60408301525080945050505060208301516150a3816146cf565b5f8060408385031215615228575f80fd5b8251915060208301516150a3816147c9565b81810381811115610f2957610f29614dfc565b6001600160401b0381811683821602808216919082811461527057615270614dfc565b505092915050565b5f8235603e19833603018112614c1a575f80fd5b5f808335601e198436030181126152a1575f80fd5b8301803591506001600160401b038211156152ba575f80fd5b602001915036819003821315613466575f80fd5b602081525f614b1c602083018486614e9d565b5f604082360312156152f1575f80fd5b6152f9614a5d565b615302836146dc565b81526020808401356001600160401b038082111561531e575f80fd5b9085019036601f830112615330575f80fd5b81358181111561534257615342614a21565b8060051b9150615353848301614a7f565b818152918301840191848101903684111561536c575f80fd5b938501935b83851015615396578435925061538683614b7e565b8282529385019390850190615371565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561260e5784516001600160a01b031682529383019360019290920191908301906153da565b60208152815160208201525f602083015160e060408401526154296101008401826148cb565b90506040840151601f198085840301606086015261544783836148cb565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261547783836153a8565b925060a08601519150808584030160c08601525061549582826153a8565b91505060c08401516154b260e08501826001600160401b03169052565b509392505050565b5f80604083850312156154cb575f80fd5b8251915060208301516001600160401b038111156154e7575f80fd5b6154f385828601614ad5565b9150509250929050565b6001600160401b0383111561551457615514614a21565b6155288361552283546149e1565b83614cfd565b5f601f841160018114615559575f85156155425750838201355b5f19600387901b1c1916600186901b178355611ae6565b5f83815260208120601f198716915b828110156155885786850135825560209485019460019092019101615568565b50868210156155a4575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f602082840312156155c6575f80fd5b61187b826147f8565b5f602082840312156155df575f80fd5b813560ff8116811461187b575f80fd5b5f6001600160401b03808316818103614e3b57614e3b614dfc56fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220165dc43e230cb7f26d365cdbda1bd072823fa30ae222aab8daf85a7765c9626e64736f6c63430008190033", } // 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 3451c68fe..2672cb8af 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -311,8 +311,10 @@ abstract contract PoSValidatorManager is revert InvalidWarpMessage(); } - if (warpMessage.sourceChainID != WARP_MESSENGER.getBlockchainID()) { - revert InvalidWarpSourceChainID(warpMessage.sourceChainID); + // The sender is required to be the zero address so that we know the validator node + // signed the proof directly, rather than as an arbitrary on-chain message + if (warpMessage.originSenderAddress != address(0)) { + revert InvalidWarpOriginSenderAddress(warpMessage.originSenderAddress); } if (warpMessage.originSenderAddress != address(0)) { revert InvalidWarpOriginSenderAddress(warpMessage.originSenderAddress); diff --git a/contracts/validator-manager/UptimeMessageSpec.md b/contracts/validator-manager/UptimeMessageSpec.md index c979d759c..98848ca09 100644 --- a/contracts/validator-manager/UptimeMessageSpec.md +++ b/contracts/validator-manager/UptimeMessageSpec.md @@ -16,4 +16,4 @@ Specification: | `uptime` | `uint64` | 8 byte | | | | 46 bytes | -This is defined within `Subnet-EVM` [here](https://github.com/ava-labs/subnet-evm/blob/323eb0c7dd7204521e662a3a355fe78a0e19c0be/warp/messages/validator_uptime.go#L14-L19). +This is defined within `Subnet-EVM` [here](https://github.com/ava-labs/subnet-evm/blob/323eb0c7dd7204521e662a3a355fe78a0e19c0be/warp/messages/validator_uptime.go#L14-L19). The `ValidationUptimeMessage` must be included as an `AddressedPayload` with the `sourceAddress` set to an empty byte array, to prove that it did not originate as an arbitrary on-chain message. The `sourceChainID` does not need to be specified, as the origin chain is implicitly authenticated by validating the `validationID`. diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 38f7102bd..9fc381723 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -200,24 +200,9 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.initializeEndValidation(validationID, true, 0); } - function testInvalidUptimeChainID() public { - bytes32 validationID = _registerDefaultValidator(); - - _mockGetUptimeWarpMessage(new bytes(0), true); - _mockGetBlockchainID(posValidatorManager.P_CHAIN_BLOCKCHAIN_ID()); - vm.warp(DEFAULT_REGISTRATION_TIMESTAMP + DEFAULT_MINIMUM_STAKE_DURATION); - vm.expectRevert( - abi.encodeWithSelector( - ValidatorManager.InvalidWarpSourceChainID.selector, DEFAULT_SOURCE_BLOCKCHAIN_ID - ) - ); - posValidatorManager.initializeEndValidation(validationID, true, 0); - } - function testInvalidUptimeSenderAddress() public { bytes32 validationID = _registerDefaultValidator(); - _mockGetBlockchainID(); vm.mockCall( WARP_PRECOMPILE_ADDRESS, abi.encodeWithSelector(IWarpMessenger.getVerifiedWarpMessage.selector, uint32(0)), @@ -246,7 +231,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { function testInvalidUptimeValidationID() public { bytes32 validationID = _registerDefaultValidator(); - _mockGetBlockchainID(); vm.mockCall( WARP_PRECOMPILE_ADDRESS, abi.encodeWithSelector(IWarpMessenger.getVerifiedWarpMessage.selector, uint32(0)), @@ -1106,7 +1090,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMsg1 = ValidatorMessages.packValidationUptimeMessage(validationID, uptime1); _mockGetUptimeWarpMessage(uptimeMsg1, true); - _mockGetBlockchainID(); vm.expectEmit(true, true, true, true, address(validatorManager)); emit UptimeUpdated(validationID, uptime1); @@ -1120,7 +1103,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes memory uptimeMsg2 = ValidatorMessages.packValidationUptimeMessage(validationID, uptime2); _mockGetUptimeWarpMessage(uptimeMsg2, true); - _mockGetBlockchainID(); vm.expectEmit(true, true, true, true, address(validatorManager)); emit ValidatorRemovalInitialized( @@ -1144,7 +1126,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { (DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 ); _mockGetUptimeWarpMessage(uptimeMsg, true); - _mockGetBlockchainID(); vm.expectRevert( abi.encodeWithSelector( @@ -1201,7 +1182,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { (DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP) * uptimePercentage / 100 ); _mockGetUptimeWarpMessage(uptimeMsg, true); - _mockGetBlockchainID(); vm.expectEmit(true, true, true, true, address(validatorManager)); emit ValidatorRemovalInitialized( @@ -1468,7 +1448,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { if (includeUptime) { _mockGetUptimeWarpMessage(uptimePayload, true); - _mockGetBlockchainID(); } _initializeEndDelegation(sender, delegationID, endDelegationTimestamp, includeUptime, force); } diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 7c89a351e..1f4f49963 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -487,7 +487,6 @@ abstract contract ValidatorManagerTest is Test { _mockSendWarpMessage(setWeightMessage, bytes32(0)); if (includeUptime) { _mockGetUptimeWarpMessage(uptimeMessage, true); - _mockGetBlockchainID(); } vm.warp(completionTimestamp);