0 txs
0 calls
constructor
constructor(address _owner, address[] _rewardTokens, address[] _rewardManagers, uint256[] _rewardRates, address[] _gaugeControllers, address[] _rewardDistributors, address _stakingToken)
functions
calcCurCombinedWeight
viewfunction calcCurCombinedWeight(address account) view returns (uint256 old_combined_weight, uint256 new_vefxs_multiplier, uint256 new_combined_weight)
calcCurrLockMultiplier
viewfunction calcCurrLockMultiplier(address account, uint256 stake_idx) view returns (uint256 midpoint_lock_multiplier)
combinedWeightOf
viewfunction combinedWeightOf(address account) view returns (uint256)
earned
viewfunction earned(address account) view returns (uint256[] new_earned)
fraxPerLPStored
viewfunction fraxPerLPStored() view returns (uint256)
fraxPerLPToken
viewfunction fraxPerLPToken() view returns (uint256)
getAllRewardTokens
viewfunction getAllRewardTokens() view returns (address[])
getLatestETHPriceE8
viewfunction getLatestETHPriceE8() view returns (int256)
getProxyFor
viewfunction getProxyFor(address addr) view returns (address)
getRewardForDuration
viewfunction getRewardForDuration() view returns (uint256[] rewards_per_duration_arr)
isTokenManagerFor
viewfunction isTokenManagerFor(address caller_addr, address reward_token_addr) view returns (bool)
lastRewardClaimTime
viewfunction lastRewardClaimTime(address) view returns (uint256)
lastUpdateTime
viewfunction lastUpdateTime() view returns (uint256)
lens
viewfunction lens() view returns (address)
lock_max_multiplier
viewfunction lock_max_multiplier() view returns (uint256)
lock_time_for_max_multiplier
viewfunction lock_time_for_max_multiplier() view returns (uint256)
lock_time_min
viewfunction lock_time_min() view returns (uint256)
lockedLiquidityOf
viewfunction lockedLiquidityOf(address account) view returns (uint256)
lockedStakes
viewfunction lockedStakes(address, uint256) view returns (bytes32 kek_id, uint256 start_timestamp, uint256 liquidity, uint256 ending_timestamp, uint256 lock_multiplier)
lockedStakesOf
viewfunction lockedStakesOf(address account) view returns (tuple[])
lockedStakesOfLength
viewfunction lockedStakesOfLength(address account) view returns (uint256)
lockMultiplier
viewfunction lockMultiplier(uint256 secs) view returns (uint256)
lp_tkn
viewfunction lp_tkn() view returns (address)
maxLPForMaxBoost
viewfunction maxLPForMaxBoost(address account) view returns (uint256)
minter
viewfunction minter() view returns (address)
minVeFXSForMaxBoost
viewfunction minVeFXSForMaxBoost(address account) view returns (uint256)
minVeFXSForMaxBoostProxy
viewfunction minVeFXSForMaxBoostProxy(address proxy_address) view returns (uint256)
nominatedOwner
viewfunction nominatedOwner() view returns (address)
owner
viewfunction owner() view returns (address)
periodFinish
viewfunction periodFinish() view returns (uint256)
proxy_lp_balances
viewfunction proxy_lp_balances(address) view returns (uint256)
proxyStakedFrax
viewfunction proxyStakedFrax(address proxy_address) view returns (uint256)
rewardManagers
viewfunction rewardManagers(address) view returns (address)
rewardRates
viewfunction rewardRates(uint256 token_idx) view returns (uint256 rwd_rate)
rewardsDuration
viewfunction rewardsDuration() view returns (uint256)
rewardsPerToken
viewfunction rewardsPerToken() view returns (uint256[] newRewardsPerTokenStored)
rewardTokenAddrToIdx
viewfunction rewardTokenAddrToIdx(address) view returns (uint256)
staker_designated_proxies
viewfunction staker_designated_proxies(address) view returns (address)
stakesUnlocked
viewfunction stakesUnlocked() view returns (bool)
stakingToken
viewfunction stakingToken() view returns (address)
totalCombinedWeight
viewfunction totalCombinedWeight() view returns (uint256)
totalLiquidityLocked
viewfunction totalLiquidityLocked() view returns (uint256)
univ3_pool
viewfunction univ3_pool() view returns (address)
userStakedFrax
viewfunction userStakedFrax(address account) view returns (uint256)
vefxs_boost_scale_factor
viewfunction vefxs_boost_scale_factor() view returns (uint256)
vefxs_max_multiplier
viewfunction vefxs_max_multiplier() view returns (uint256)
vefxs_per_frax_for_max_boost
viewfunction vefxs_per_frax_for_max_boost() view returns (uint256)
veFXSMultiplier
viewfunction veFXSMultiplier(address account) view returns (uint256 vefxs_multiplier)
acceptOwnership
nonpayablefunction acceptOwnership()
changeTokenManager
nonpayablefunction changeTokenManager(address reward_token_address, address new_manager_address)
getReward
nonpayablefunction getReward(address destination_address) returns (uint256[])
getReward2
nonpayablefunction getReward2(address destination_address, bool claim_extra_too) returns (uint256[])
getRewardExtraLogic
nonpayablefunction getRewardExtraLogic(address destination_address)
lockAdditional
nonpayablefunction lockAdditional(bytes32 kek_id, uint256 addl_liq)
lockLonger
nonpayablefunction lockLonger(bytes32 kek_id, uint256 new_ending_ts)
nominateNewOwner
nonpayablefunction nominateNewOwner(address _owner)
proxyToggleStaker
nonpayablefunction proxyToggleStaker(address staker_address)
recoverERC20
nonpayablefunction recoverERC20(address tokenAddress, uint256 tokenAmount)
setBunniAddrs
nonpayablefunction setBunniAddrs(address _lens, address _minter)
setETHUSDOracleAddrs
nonpayablefunction setETHUSDOracleAddrs(address _eth_usd_oracle_address)
setMiscVariables
nonpayablefunction setMiscVariables(uint256[6] _misc_vars)
setPauses
nonpayablefunction setPauses(bool _stakingPaused, bool _withdrawalsPaused, bool _rewardsCollectionPaused, bool _collectRewardsOnWithdrawalPaused)
setRewardVars
nonpayablefunction setRewardVars(address reward_token_address, uint256 _new_rate, address _gauge_controller_address, address _rewards_distributor_address)
stakeLocked
nonpayablefunction stakeLocked(uint256 liquidity, uint256 secs) returns (bytes32)
stakerSetVeFXSProxy
nonpayablefunction stakerSetVeFXSProxy(address proxy_address)
sync_gauge_weights
nonpayablefunction sync_gauge_weights(bool force_update)
sync
nonpayablefunction sync()
toggleBunni3rdPartyOLITClaimer
nonpayablefunction toggleBunni3rdPartyOLITClaimer(address _claimer)
toggleValidVeFXSProxy
nonpayablefunction toggleValidVeFXSProxy(address _proxy_addr)
unlockStakes
nonpayablefunction unlockStakes()
withdrawLocked
nonpayablefunction withdrawLocked(bytes32 kek_id, address destination_address, bool claim_rewards) returns (uint256)
events
LockedAdditional
event LockedAdditional(address indexed user, bytes32 kek_id, uint256 amount)
LockedLonger
event LockedLonger(address indexed user, bytes32 kek_id, uint256 new_secs, uint256 new_start_ts, uint256 new_end_ts)
OwnerChanged
event OwnerChanged(address oldOwner, address newOwner)
OwnerNominated
event OwnerNominated(address newOwner)
RewardPaid
event RewardPaid(address indexed user, uint256 amount, address token_address, address destination_address)
StakeLocked
event StakeLocked(address indexed user, uint256 amount, uint256 secs, bytes32 kek_id, address source_address)
WithdrawLocked
event WithdrawLocked(address indexed user, uint256 liquidity, bytes32 kek_id, address destination_address)
errors
No errors.
creation bytecode
0x6080604052600480546001600160a01b031990811673b73f303472c4fd4ff3b9f59ce0f9b13e47fbfd191790915560058054821673f087521ffca0fa8a43f5c445773ab37c5f574da0179055671bc16d674ec8000060098190556305a39a80600a5562091050600b55673782dace9d900000600c819055600d91909155600e5560298054909116735f4ec3df9cbd43714fe2740f5e3616155c5b8419179055348015620000ab57600080fd5b50604051620063a0380380620063a0833981016040819052620000ce916200083b565b86868686868686868686868686856001600160a01b038116620001375760405162461bcd60e51b815260206004820152601960248201527f4f776e657220616464726573732063616e6e6f74206265203000000000000000604482015260640160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040805192835260208301919091527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a15060016002558451620001a990601390602088019062000612565b508151620001bf90601490602085019062000612565b508051620001d590601590602084019062000612565b508251620001eb9060169060208601906200067c565b5060005b8551811015620003a957806018600088848151811062000213576200021362000942565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020819055506001601760008884815181106200025a576200025a62000942565b6020908102919091018101516001600160a01b031682528101919091526040016000908120805460ff191692151592909217909155601980546001810182559082527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c969501558451859082908110620002d657620002d662000942565b602002602001015160126000888481518110620002f757620002f762000942565b6020908102919091018101516001600160a01b03908116835290820192909252604001600090812080546001600160a01b03191693909216929092179055601d805460018181019092557f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f01829055601e8054918201815582527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e350015580620003a08162000958565b915050620001ef565b506025805460ff19169055426008556040805163513872bd60e01b81529051733669c421b77340b2979d1a00a792cc2ee0fce7379163513872bd9160048083019260209291908290030181865afa15801562000409573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200042f919062000980565b6007555050600380546001600160a01b0319166001600160a01b038e1690811790915560408051634163183360e11b81529051919c506382c630669b5060048181019b5060209a509198508890030195508694508a93505050505afa1580156200049d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c391906200099a565b602780546001600160a01b0319166001600160a01b03929092169182179055604080516316f0115b60e01b815290516316f0115b916004808201926020929091908290030181865afa1580156200051e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200054491906200099a565b602880546001600160a01b0319166001600160a01b0392909216918217905560408051630dfe168160e01b8152905160009291630dfe16819160048083019260209291908290030181865afa158015620005a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005c891906200099a565b6025805460ff60281b19166001600160a01b0392909216735e8422345238f34275888049021821e8e08caa1f14650100000000000291909117905550620009bf9650505050505050565b8280548282559060005260206000209081019282156200066a579160200282015b828111156200066a57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019062000633565b5062000678929150620006ba565b5090565b8280548282559060005260206000209081019282156200066a579160200282015b828111156200066a5782518255916020019190600101906200069d565b5b80821115620006785760008155600101620006bb565b80516001600160a01b0381168114620006e957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200072f576200072f620006ee565b604052919050565b60006001600160401b03821115620007535762000753620006ee565b5060051b60200190565b600082601f8301126200076f57600080fd5b8151602062000788620007828362000737565b62000704565b82815260059290921b84018101918181019086841115620007a857600080fd5b8286015b84811015620007ce57620007c081620006d1565b8352918301918301620007ac565b509695505050505050565b600082601f830112620007eb57600080fd5b81516020620007fe620007828362000737565b82815260059290921b840181019181810190868411156200081e57600080fd5b8286015b84811015620007ce578051835291830191830162000822565b600080600080600080600060e0888a0312156200085757600080fd5b6200086288620006d1565b60208901519097506001600160401b03808211156200088057600080fd5b6200088e8b838c016200075d565b975060408a0151915080821115620008a557600080fd5b620008b38b838c016200075d565b965060608a0151915080821115620008ca57600080fd5b620008d88b838c01620007d9565b955060808a0151915080821115620008ef57600080fd5b620008fd8b838c016200075d565b945060a08a01519150808211156200091457600080fd5b50620009238a828b016200075d565b9250506200093460c08901620006d1565b905092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b6000600182016200097957634e487b7160e01b600052601160045260246000fd5b5060010190565b6000602082840312156200099357600080fd5b5051919050565b600060208284031215620009ad57600080fd5b620009b882620006d1565b9392505050565b6159d180620009cf6000396000f3fe608060405234801561001057600080fd5b506004361061048c5760003560e01c80637f472e541161026b578063d2fbdc0d11610150578063e7f30582116100c8578063f2caeb1e11610097578063f77e34d11161007c578063f77e34d114610aba578063facefb6414610acd578063fff6cae914610ae057600080fd5b8063f2caeb1e14610a87578063f60abc1414610a9a57600080fd5b8063e7f3058214610a59578063ebe2b12b14610a6c578063f288baf614610a75578063f2a8d34914610a7e57600080fd5b8063d9f96e8d1161011f578063de821e8511610104578063de821e8514610a36578063e01f62bf14610a49578063e1ba95d214610a5157600080fd5b8063d9f96e8d146109ed578063de1a655114610a2357600080fd5b8063d2fbdc0d146109a1578063d42fc9b4146109b4578063d5e1a9c6146109c7578063d7400d56146109da57600080fd5b8063b85efd06116101e3578063c3543826116101b2578063ca6df29d11610197578063ca6df29d14610959578063cdc82e801461098f578063d2010fb41461099857600080fd5b8063c35438261461093d578063c8f33c911461095057600080fd5b8063b85efd0614610906578063b94c4dcb14610919578063bdb123e314610922578063c00007b01461092a57600080fd5b806391cf600a1161023a578063a0f234761161021f578063a0f23476146108d7578063a2ba0790146108ea578063aa1d4fce146108fd57600080fd5b806391cf600a146108b75780639637927f146108ca57600080fd5b80637f472e54146108435780638980f11f146108565780638bad86a7146108695780638da5cb5b1461089757600080fd5b806336f89af2116103915780636c430dbb11610309578063774d4ae7116102d85780637970833e116102bd5780637970833e146107e057806379ba50971461081b5780637d6ef08e1461082357600080fd5b8063774d4ae7146107ba5780637910d17b146107cd57600080fd5b80636c430dbb146107695780636e27cef91461078957806370641a361461079257806372f702f31461079a57600080fd5b80634fd2b536116103605780635bfd9258116103455780635bfd92581461073957806364f2c06014610741578063693392451461074957600080fd5b80634fd2b5361461070657806353a47bb71461071957600080fd5b806336f89af21461067d578063386a9525146106b3578063387edc86146106bd57806341a16f3f146106d057600080fd5b80631c1f78eb116104245780632352aac1116103f35780632c0c2a0a116103d85780632c0c2a0a146106445780632df079f11461065757806331d0eed11461066a57600080fd5b80632352aac1146105ee57806328408bab1461060e57600080fd5b80631c1f78eb146105905780631e090f01146105985780631face856146105b8578063231b68dc146105cb57600080fd5b8063112666b711610460578063112666b71461053357806312edb24c146105535780631627540c1461056857806317b18c891461057d57600080fd5b80628cc262146104915780630238b936146104ba57806307546172146104db5780630d7bac4f14610520575b600080fd5b6104a461049f3660046152f7565b610ae8565b6040516104b19190615312565b60405180910390f35b6104cd6104c8366004615364565b610c67565b6040519081526020016104b1565b6005546104fb9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016104b1565b6104cd61052e3660046153a4565b610d68565b6004546104fb9073ffffffffffffffffffffffffffffffffffffffff1681565b61055b610d94565b6040516104b191906153bd565b61057b6105763660046152f7565b610e03565b005b6104cd61058b36600461540b565b610f23565b6104a4610fad565b6105ab6105a63660046152f7565b61104e565b6040516104b1919061542d565b6104cd6105c63660046152f7565b611102565b6105de6105d936600461549b565b611148565b60405190151581526020016104b1565b6027546104fb9073ffffffffffffffffffffffffffffffffffffffff1681565b6104fb61061c3660046152f7565b60246020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6104cd6106523660046152f7565b61122e565b61057b6106653660046154ce565b61151a565b61057b6106783660046152f7565b611681565b6104cd61068b3660046152f7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526022602052604090205490565b6104cd62093a8081565b61057b6106cb3660046152f7565b6117e4565b6104fb6106de3660046152f7565b60126020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b6104cd6107143660046152f7565b6118ce565b6001546104fb9073ffffffffffffffffffffffffffffffffffffffff1681565b6104cd6118ef565b6020546104cd565b6104cd6107573660046152f7565b60186020526000908152604090205481565b6104cd6107773660046152f7565b601c6020526000908152604090205481565b6104cd600b5481565b6104a4611b6a565b6003546104fb9073ffffffffffffffffffffffffffffffffffffffff1681565b6104cd6107c836600461552a565b611cc9565b6104a46107db366004615554565b611ed5565b6107f36107ee36600461552a565b611f51565b604080519586526020860194909452928401919091526060830152608082015260a0016104b1565b61057b611f9f565b6104cd6108313660046152f7565b60236020526000908152604090205481565b6104cd6108513660046152f7565b6120ea565b61057b61086436600461552a565b612101565b61087c6108773660046152f7565b612298565b604080519384526020840192909252908201526060016104b1565b6000546104fb9073ffffffffffffffffffffffffffffffffffffffff1681565b61057b6108c53660046152f7565b6124cc565b6025546105de9060ff1681565b6104cd6108e53660046152f7565b6125bf565b61057b6108f836600461549b565b612689565b6104cd600c5481565b61057b61091436600461540b565b61277b565b6104cd600a5481565b6104cd61292d565b6104a46109383660046152f7565b612a72565b6104fb61094b3660046152f7565b612afa565b6104cd60085481565b6104cd6109673660046152f7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526026602052604090205490565b6104cd60095481565b6104cd60065481565b61057b6109af36600461540b565b612b5d565b6104cd6109c23660046152f7565b612ec5565b61057b6109d536600461558b565b612f01565b61057b6109e83660046152f7565b6130f0565b6104cd6109fb3660046152f7565b73ffffffffffffffffffffffffffffffffffffffff1660009081526021602052604090205490565b61057b610a3136600461549b565b61330e565b61057b610a443660046152f7565b6133f5565b601f546104cd565b61057b61351c565b61057b610a673660046152f7565b6135ed565b6104cd60075481565b6104cd600d5481565b6104cd600e5481565b6104cd610a953660046153a4565b61374f565b6028546104fb9073ffffffffffffffffffffffffffffffffffffffff1681565b61057b610ac83660046155d8565b613866565b61057b610adb366004615624565b613a3c565b61057b613bfc565b60606000610af4611b6a565b60135490915067ffffffffffffffff811115610b1257610b126155f5565b604051908082528060200260200182016040528015610b3b578160200160208202803683370190505b5073ffffffffffffffffffffffffffffffffffffffff841660009081526022602052604090205490925015610c615760005b601354811015610c5f5773ffffffffffffffffffffffffffffffffffffffff84166000818152601b60209081526040808320858452825280832054938352601a82528083208584529091529020548351670de0b6b3a76400009190859085908110610bda57610bda6156c9565b6020026020010151610bec9190615727565b73ffffffffffffffffffffffffffffffffffffffff8716600090815260226020526040902054610c1c919061573a565b610c269190615751565b610c30919061578c565b838281518110610c4257610c426156c9565b602090810291909101015280610c578161579f565b915050610b6d565b505b50919050565b60006002805403610cd9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b60028055602554610100900460ff1615610d4f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f5769746864726177616c732070617573656400000000000000000000000000006044820152606401610cd0565b610d5b33848685613c2c565b6001600255949350505050565b600954600a54600091610d8e91610d7f828661573a565b610d899190615751565b613e00565b92915050565b60606013805480602002602001604051908101604052809291908181526020018280548015610df957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610dce575b5050505050905090565b60005473ffffffffffffffffffffffffffffffffffffffff163314610eaa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602f60248201527f4f6e6c792074686520636f6e7472616374206f776e6572206d6179207065726660448201527f6f726d207468697320616374696f6e00000000000000000000000000000000006064820152608401610cd0565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f906a1c6bd7e3091ea86693dd029a831c19049ce77f1dce2ce0bab1cacbabce229060200160405180910390a150565b60006002805403610f90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cd0565b60028055610fa13380858542613e18565b60016002559392505050565b60165460609067ffffffffffffffff811115610fcb57610fcb6155f5565b604051908082528060200260200182016040528015610ff4578160200160208202803683370190505b50905060005b60165481101561104a5762093a806110118261374f565b61101b919061573a565b82828151811061102d5761102d6156c9565b6020908102919091010152806110428161579f565b915050610ffa565b5090565b73ffffffffffffffffffffffffffffffffffffffff81166000908152602660209081526040808320805482518185028101850190935280835260609492939192909184015b828210156110f757838290600052602060002090600502016040518060a00160405290816000820154815260200160018201548152602001600282015481526020016003820154815260200160048201548152505081526020019060010190611093565b505050509050919050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260236020526040812054600654670de0b6b3a76400009161113e9161573a565b610d8e9190615751565b73ffffffffffffffffffffffffffffffffffffffff811660009081526017602052604081205460ff1661117d57506000610d8e565b73ffffffffffffffffffffffffffffffffffffffff831615806111b4575073ffffffffffffffffffffffffffffffffffffffff8216155b156111c157506000610d8e565b60005473ffffffffffffffffffffffffffffffffffffffff908116908416036111ec57506001610d8e565b73ffffffffffffffffffffffffffffffffffffffff82811660009081526012602052604090205481851691160361122557506001610d8e565b50600092915050565b6000808061123b84612afa565b905073ffffffffffffffffffffffffffffffffffffffff811615611300576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015273c8418af6358ffdda74e09ca9cc3fe03ca6adc5b0906370a0823190602401602060405180830381865afa1580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb91906157d7565b6113a2565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273c8418af6358ffdda74e09ca9cc3fe03ca6adc5b0906370a0823190602401602060405180830381865afa15801561137e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a291906157d7565b91506000670de0b6b3a764000073c8418af6358ffdda74e09ca9cc3fe03ca6adc5b073ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143291906157d7565b61143c919061573a565b600c54600d5461144c908661573a565b611456919061573a565b6114609190615751565b905060008073ffffffffffffffffffffffffffffffffffffffff84161561148f5761148a846120ea565b611498565b611498876118ce565b905080156114ea576000816114b5670de0b6b3a76400008861573a565b6114bf9190615751565b9050670de0b6b3a7640000600d54826114d8919061573a565b6114e29190615751565b9250506114ef565b600091505b508082116114fd57806114ff565b815b9450600d5485111561151157600d5494505b50505050919050565b60005473ffffffffffffffffffffffffffffffffffffffff163314806115535750738412ebf45bac1b340bbe8f318b928c466c4e39ca33145b6115b9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b00000000000000000000006044820152606401610cd0565b602580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ff166301000000951515959095027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169490941761010093151593909302929092177fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff00ffff1662010000911515919091027fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff161764010000000091151591909102179055565b60005473ffffffffffffffffffffffffffffffffffffffff163314806116ba5750738412ebf45bac1b340bbe8f318b928c466c4e39ca33145b611720576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b00000000000000000000006044820152606401610cd0565b73ffffffffffffffffffffffffffffffffffffffff811661179d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f5a65726f206164647265737320646574656374656400000000000000000000006044820152606401610cd0565b602980547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600280540361184f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cd0565b6002805560255462010000900460ff16156118c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265776172647320636f6c6c656374696f6e20706175736564000000000000006044820152606401610cd0565b506001600255565b6000670de0b6b3a7640000600e546118e584612ec5565b61113e919061573a565b6040805160608101825260285473ffffffffffffffffffffffffffffffffffffffff908116825260275483517f59c4f905000000000000000000000000000000000000000000000000000000008152935160009485948594909360208086019491909216926359c4f9059260048083019391928290030181865afa15801561197b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199f91906157f0565b60020b8152602754604080517f55b812a8000000000000000000000000000000000000000000000000000000008152905160209384019373ffffffffffffffffffffffffffffffffffffffff909316926355b812a892600480820193918290030181865afa158015611a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a3991906157f0565b600290810b90915260048054604080517f342a7470000000000000000000000000000000000000000000000000000000008152855173ffffffffffffffffffffffffffffffffffffffff908116948201949094526020860151850b60248201529085015190930b6044840152929350600092839291169063342a747090606401606060405180830381865afa158015611ad6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afa9190615813565b602554919450925065010000000000900460ff16159050611b3d576305f5e100611b2261292d565b611b2c908461573a565b611b369190615751565b9350611b61565b6305f5e100611b4a61292d565b611b54908361573a565b611b5e9190615751565b93505b50919392505050565b6060601f5460001480611b7d5750602054155b15611bd7576019805480602002602001604051908101604052809291908181526020018280548015610df957602002820191906000526020600020905b815481526020019060010190808311611bba575050505050905090565b60135467ffffffffffffffff811115611bf257611bf26155f5565b604051908082528060200260200182016040528015611c1b578160200160208202803683370190505b50905060005b60195481101561104a57602054611c378261374f565b600854611c42614162565b611c4c9190615727565b611c56919061573a565b611c6890670de0b6b3a764000061573a565b611c729190615751565b60198281548110611c8557611c856156c9565b9060005260206000200154611c9a919061578c565b828281518110611cac57611cac6156c9565b602090810291909101015280611cc18161579f565b915050611c21565b73ffffffffffffffffffffffffffffffffffffffff82166000908152602660205260408120805482919084908110611d0357611d036156c9565b600091825260208083206040805160a081018252600590940290910180548452600181015484840181905260028201548584015260038201546060860152600490910154608085015273ffffffffffffffffffffffffffffffffffffffff89168552601c9092528320549193501115611d8157506020810151611da9565b5073ffffffffffffffffffffffffffffffffffffffff84166000908152601c60205260409020545b42826060015111611e6957606082015173ffffffffffffffffffffffffffffffffffffffff86166000908152601c60205260409020541015611e60576000818360600151611df79190615727565b90506000836060015142611e0b9190615727565b90506000611e1d61052e600285615751565b90506000611e2b838261573a565b611e35858461573a565b611e3f919061578c565b9050611e4b838561578c565b611e559082615751565b965050505050611eb9565b60009250611eb9565b600080828460600151611e7c9190615727565b90506000428560600151611e909190615727565b90506002611e9e828461578c565b611ea89190615751565b92505050611eb581610d68565b9350505b8160800151831115611ecd57816080015192505b505092915050565b60606002805403611f42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cd0565b60028055610fa1338484614175565b60266020528160005260406000208181548110611f6d57600080fd5b600091825260209091206005909102018054600182015460028301546003840154600490940154929550909350919085565b60015473ffffffffffffffffffffffffffffffffffffffff163314612046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f596f75206d757374206265206e6f6d696e61746564206265666f726520796f7560448201527f2063616e20616363657074206f776e65727368697000000000000000000000006064820152608401610cd0565b6000546001546040805173ffffffffffffffffffffffffffffffffffffffff93841681529290911660208301527fb532073b38c83145e3e5135377a08bf9aab55bc0fd7c1179cd4fb995d2a5159c910160405180910390a160018054600080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811673ffffffffffffffffffffffffffffffffffffffff841617909155169055565b6000670de0b6b3a7640000600e546118e584611102565b600054829073ffffffffffffffffffffffffffffffffffffffff1633148061212e575061212e3382611148565b612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f74206f776e6572206f7220746b6e206d67720000000000000000000000006044820152606401610cd0565b73ffffffffffffffffffffffffffffffffffffffff831660009081526017602052604090205460ff168080156121f0575073ffffffffffffffffffffffffffffffffffffffff8481166000908152601260205260409020541633145b8061221b57508015801561221b575060005473ffffffffffffffffffffffffffffffffffffffff1633145b156122315761222b843385614443565b50505050565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4e6f2076616c696420746f6b656e7320746f207265636f7665720000000000006044820152606401610cd0565b505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526022602052604081205490806122c98461122e565b73ffffffffffffffffffffffffffffffffffffffff851660009081526021602052604081205491935090158015612323575073ffffffffffffffffffffffffffffffffffffffff8516600090815260226020526040902054155b80612353575073ffffffffffffffffffffffffffffffffffffffff85166000908152600f60205260409020548310155b1561235f57508161239f565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600f6020526040902054600290612392908561578c565b61239c9190615751565b90505b6000915060005b73ffffffffffffffffffffffffffffffffffffffff86166000908152602660205260409020548110156124c35773ffffffffffffffffffffffffffffffffffffffff8616600090815260266020526040812080548390811061240a5761240a6156c9565b90600052602060002090600502016040518060a001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060006124638884611cc9565b60408301519091506000670de0b6b3a7640000612480878561578c565b61248a908461573a565b6124949190615751565b61249e908361578c565b90506124aa818861578c565b96505050505080806124bb9061579f565b9150506123a6565b50509193909250565b60005473ffffffffffffffffffffffffffffffffffffffff163314806125055750738412ebf45bac1b340bbe8f318b928c466c4e39ca33145b61256b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b00000000000000000000006044820152606401610cd0565b73ffffffffffffffffffffffffffffffffffffffff16600090815260106020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b6000600654600e546125d1919061573a565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152670de0b6b3a764000090819073c8418af6358ffdda74e09ca9cc3fe03ca6adc5b0906370a0823190602401602060405180830381865afa15801561265b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061267f91906157d7565b6118e5919061573a565b60005473ffffffffffffffffffffffffffffffffffffffff163314806126c25750738412ebf45bac1b340bbe8f318b928c466c4e39ca33145b612728576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b00000000000000000000006044820152606401610cd0565b6004805473ffffffffffffffffffffffffffffffffffffffff9384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560058054929093169116179055565b60028054036127e6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cd0565b600280553360016127f9828260006145ac565b6000806128063387614706565b91509150600085836040015161281c919061578c565b90506003546128439073ffffffffffffffffffffffffffffffffffffffff163330896148cb565b6040805160a081018252888152602085810151818301528183018490526060808701519083015260808087015190830152336000908152602690915291909120805484908110612895576128956156c9565b906000526020600020906005020160008201518160000155602082015181600101556040820151816002015560608201518160030155608082015181600401559050506128e433876001614a61565b604080518881526020810188905233917f2640b32e7e5d0fa2a21ea06b22fbd75fda0fda384a895a5fdeef43646de47a0c910160405180910390a2505060016002555050505050565b6000806000806000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156129a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c69190615879565b945094505093509350600083121580156129df57508115155b8015612a0357508369ffffffffffffffffffff168169ffffffffffffffffffff1610155b612a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f496e76616c696420636861696e6c696e6b2070726963650000000000000000006044820152606401610cd0565b50909392505050565b60606002805403612adf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cd0565b60028055612aef33836001614175565b600160025592915050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604081205460ff1615612b2c575090565b5073ffffffffffffffffffffffffffffffffffffffff9081166000908152602460205260409020541690565b919050565b6002805403612bc8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cd0565b60028055336001612bdb828260006145ac565b600080612be83387614706565b91509150428511612c55576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4d75737420626520696e207468652066757475726500000000000000000000006044820152606401610cd0565b600042836060015111612c69576000612c79565b428360600151612c799190615727565b90506000612c874288615727565b9050818111612cf2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f43616e6e6f742073686f7274656e206c6f636b2074696d6500000000000000006044820152606401610cd0565b600b54811015612d5e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d696e696d756d207374616b652074696d65206e6f74206d65740000000000006044820152606401610cd0565b600a54811115612dca576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f547279696e6720746f206c6f636b20666f7220746f6f206c6f6e6700000000006044820152606401610cd0565b6040518060a0016040528089815260200142815260200185604001518152602001888152602001612dfa83610d68565b9052336000908152602660205260409020805485908110612e1d57612e1d6156c9565b90600052602060002090600502016000820151816000015560208201518160010155604082015181600201556060820151816003015560808201518160040155905050612e6d33600060016145ac565b6040805189815260208101839052428183015260608101899052905133917fc2cf1aae6decacbc52f96b4e4fec96d4ebab5236e4ed987165537bc463014a43919081900360800190a250506001600255505050505050565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260216020526040812054600654670de0b6b3a76400009161113e9161573a565b600054849073ffffffffffffffffffffffffffffffffffffffff16331480612f2e5750612f2e3382611148565b612f94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f74206f776e6572206f7220746b6e206d67720000000000000000000000006044820152606401610cd0565b73ffffffffffffffffffffffffffffffffffffffff8516600090815260186020526040902054601680548692908110612fcf57612fcf6156c9565b9060005260206000200181905550826014601860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110613030576130306156c9565b600091825260208083209190910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9485161790559187168152601890915260409020546015805484929081106130a1576130a16156c9565b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff1661317f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f7879000000000000000000000000000000000000006044820152606401610cd0565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260116020908152604080832033845290915290205460ff16613219576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f50726f787920686173206e6f7420616c6c6f77656420796f75207965740000006044820152606401610cd0565b3360009081526024602052604090205473ffffffffffffffffffffffffffffffffffffffff16801561328f573360009081526021602090815260408083205473ffffffffffffffffffffffffffffffffffffffff8516845260239092528220805491929091613289908490615727565b90915550505b33600090815260246020908152604080832080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff871690811790915560218352818420549084526023909252822080549192909161330590849061578c565b90915550505050565b600054829073ffffffffffffffffffffffffffffffffffffffff1633148061333b575061333b3382611148565b6133a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f74206f776e6572206f7220746b6e206d67720000000000000000000000006044820152606401610cd0565b5073ffffffffffffffffffffffffffffffffffffffff918216600090815260126020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b60005473ffffffffffffffffffffffffffffffffffffffff1633148061342e5750738412ebf45bac1b340bbe8f318b928c466c4e39ca33145b613494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b00000000000000000000006044820152606401610cd0565b6005546040517fdd289d6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff83811660048301529091169063dd289d6090602401600060405180830381600087803b15801561350157600080fd5b505af1158015613515573d6000803e3d6000fd5b5050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314806135555750738412ebf45bac1b340bbe8f318b928c466c4e39ca33145b6135bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b00000000000000000000006044820152606401610cd0565b602580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811660ff90911615179055565b3360009081526010602052604090205460ff16613666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600d60248201527f496e76616c69642070726f7879000000000000000000000000000000000000006044820152606401610cd0565b33600081815260116020908152604080832073ffffffffffffffffffffffffffffffffffffffff8681168552908352818420805460ff8116157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909116179055602490925290912054160361374c5773ffffffffffffffffffffffffffffffffffffffff8116600090815260246020908152604080832080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055602182528083205433845260239092528220805491929091613746908490615727565b90915550505b50565b60008060148381548110613765576137656156c9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff169050801561384057670de0b6b3a7640000601d84815481106137ab576137ab6156c9565b90600052602060002001548273ffffffffffffffffffffffffffffffffffffffff16630a3be7576040518163ffffffff1660e01b8152600401602060405180830381865afa158015613801573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061382591906157d7565b61382f919061573a565b6138399190615751565b9150610c61565b60168381548110613853576138536156c9565b9060005260206000200154915050919050565b60005b601454811015613a3857600060148281548110613888576138886156c9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1690508015613a255782806138da5750601e82815481106138cc576138cc6156c9565b906000526020600020015442115b15613a25576040517f6472eee100000000000000000000000000000000000000000000000000000000815230600482015242602482015273ffffffffffffffffffffffffffffffffffffffff821690636472eee1906044016020604051808303816000875af1158015613951573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397591906157d7565b601d8381548110613988576139886156c9565b90600052602060002001819055508073ffffffffffffffffffffffffffffffffffffffff1663513872bd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a0591906157d7565b601e8381548110613a1857613a186156c9565b6000918252602090912001555b5080613a308161579f565b915050613869565b5050565b60005473ffffffffffffffffffffffffffffffffffffffff16331480613a755750738412ebf45bac1b340bbe8f318b928c466c4e39ca33145b613adb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4e6f74206f776e6572206f722074696d656c6f636b00000000000000000000006044820152606401610cd0565b8051670de0b6b3a76400001115613b4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f4d757374206265203e3d204d554c2050524543000000000000000000000000006044820152606401610cd0565b6080810151600111801590613b68575060a0810151600111155b613bce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f4d757374206265203e3d203100000000000000000000000000000000000000006044820152606401610cd0565b80516009556020810151600d556040810151600e556060810151600c556080810151600a5560a00151600b55565b613c066000613866565b613c0e6118ef565b6006556007544210613c2457613c22614bd6565b565b613c22615160565b60008180613c455750602554640100000000900460ff16155b15613c5c57613c5685856001614175565b50613c69565b613c6985600160006145ac565b600080613c768786614706565b91509150816060015142101580613c94575060255460ff1615156001145b613cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f5374616b65206973207374696c6c206c6f636b656421000000000000000000006044820152606401610cd0565b60408201518015613df557600354613d299073ffffffffffffffffffffffffffffffffffffffff168883614443565b73ffffffffffffffffffffffffffffffffffffffff88166000908152602660205260409020805483908110613d6057613d606156c9565b600091825260208220600590910201818155600181018290556002810182905560038101829055600401819055613d9a9089908390614a61565b604080518281526020810188905273ffffffffffffffffffffffffffffffffffffffff898116828401529151918a16917f1d9308f6b22a2754a1c622bb30889e8f8f956c83e524d039e9d65d5f052eb9089181900360600190a25b979650505050505050565b6000818310613e0f5781613e11565b825b9392505050565b6000856001613e29828260006145ac565b6025546301000000900460ff1615613e9d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f5374616b696e67207061757365640000000000000000000000000000000000006044820152606401610cd0565b600b54851015613f09576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f4d696e696d756d207374616b652074696d65206e6f74206d65740000000000006044820152606401610cd0565b600a54851115613f75576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f547279696e6720746f206c6f636b20666f7220746f6f206c6f6e6700000000006044820152606401610cd0565b600354613f9a9073ffffffffffffffffffffffffffffffffffffffff168830896148cb565b6000613fa586610d68565b73ffffffffffffffffffffffffffffffffffffffff8a1660009081526021602090815260408083205490517fffffffffffffffffffffffffffffffffffffffff00000000000000000000000060608f901b169281019290925260348201899052605482018b9052607482015291925090609401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152828252805160209182012073ffffffffffffffffffffffffffffffffffffffff8e1660009081526026835283902060a0850184528185529184018a90529183018b905290925090606081016140988a8a61578c565b815260209081018590528254600181810185556000948552938290208351600590920201908155908201518184015560408201516002820155606082015160038201556080909101516004909101556140f4908b908a90614a61565b604080518981526020810189905290810182905273ffffffffffffffffffffffffffffffffffffffff8a811660608301528b16907ff400e72e69ef4402819dfc57eeddc66f5eb69bf405e0e8098b1946ec1ac14a229060800160405180910390a29998505050505050505050565b600061417042600754613e00565b905090565b6060836001614186828260006145ac565b73ffffffffffffffffffffffffffffffffffffffff86166000908152601c6020526040902042905560255462010000900460ff1615614221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f5265776172647320636f6c6c656374696f6e20706175736564000000000000006044820152606401610cd0565b60135467ffffffffffffffff81111561423c5761423c6155f5565b604051908082528060200260200182016040528015614265578160200160208202803683370190505b50925060005b6013548110156144395773ffffffffffffffffffffffffffffffffffffffff87166000908152601b6020908152604080832084845290915290205484518590839081106142ba576142ba6156c9565b60209081029190910181019190915273ffffffffffffffffffffffffffffffffffffffff88166000908152601b82526040808220848352909252908120819055845185908390811061430e5761430e6156c9565b602002602001015111156144275761437d60138281548110614332576143326156c9565b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687868481518110614370576143706156c9565b6020026020010151614443565b8673ffffffffffffffffffffffffffffffffffffffff167f1d2f2ca53af5d2f333bd32fdd45f9c52ad8ebe31414f7792912077fcb3876dff8583815181106143c7576143c76156c9565b6020026020010151601384815481106143e2576143e26156c9565b600091825260209182902001546040805193845273ffffffffffffffffffffffffffffffffffffffff918216928401929092528a169082015260600160405180910390a25b806144318161579f565b91505061426b565b5050509392505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916144da91906158ed565b6000604051808303816000865af19150503d8060008114614517576040519150601f19603f3d011682016040523d82523d6000602084013e61451c565b606091505b50915091508180156145465750805115806145465750808060200190518101906145469190615909565b613515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c4544006044820152606401610cd0565b81156145ba576145ba613bfc565b80156145f0576145c98361122e565b73ffffffffffffffffffffffffffffffffffffffff84166000908152600f60205260409020555b73ffffffffffffffffffffffffffffffffffffffff83161561229357600080600061461a86612298565b925092509250614629866151d3565b73ffffffffffffffffffffffffffffffffffffffff86166000908152600f602052604090208290558281106146ad5760006146648483615727565b905080602054614674919061578c565b602055614681818561578c565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260226020526040902055506146fe565b60006146b98285615727565b9050806020546146c99190615727565b6020556146d68185615727565b73ffffffffffffffffffffffffffffffffffffffff8816600090815260226020526040902055505b505050505050565b61473b6040518060a0016040528060008019168152602001600081526020016000815260200160008152602001600081525090565b6000805b73ffffffffffffffffffffffffffffffffffffffff85166000908152602660205260409020548110156148595773ffffffffffffffffffffffffffffffffffffffff851660009081526026602052604090208054829081106147a3576147a36156c9565b90600052602060002090600502016000015484036148475773ffffffffffffffffffffffffffffffffffffffff851660009081526026602052604090208054829081106147f2576147f26156c9565b90600052602060002090600502016040518060a0016040529081600082015481526020016001820154815260200160028201548152602001600382015481526020016004820154815250509250809150614859565b806148518161579f565b91505061473f565b50815183146148c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5374616b65206e6f7420666f756e6400000000000000000000000000000000006044820152606401610cd0565b9250929050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052915160009283929088169161496a91906158ed565b6000604051808303816000865af19150503d80600081146149a7576040519150601f19603f3d011682016040523d82523d6000602084013e6149ac565b606091505b50915091508180156149d65750805115806149d65750808060200190518101906149d69190615909565b6146fe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f464160448201527f494c4544000000000000000000000000000000000000000000000000000000006064820152608401610cd0565b6000614a6c84612afa565b90508115614b215782601f6000828254614a86919061578c565b909155505073ffffffffffffffffffffffffffffffffffffffff841660009081526021602052604081208054859290614ac090849061578c565b909155505073ffffffffffffffffffffffffffffffffffffffff811615614b1c5773ffffffffffffffffffffffffffffffffffffffff811660009081526023602052604081208054859290614b1690849061578c565b90915550505b614bc9565b82601f6000828254614b339190615727565b909155505073ffffffffffffffffffffffffffffffffffffffff841660009081526021602052604081208054859290614b6d908490615727565b909155505073ffffffffffffffffffffffffffffffffffffffff811615614bc95773ffffffffffffffffffffffffffffffffffffffff811660009081526023602052604081208054859290614bc3908490615727565b90915550505b61222b84600060016145ac565b614bde615160565b60005b601554811015614ccf57600060158281548110614c0057614c006156c9565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1690508015614cbc576040517f092193ab00000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff82169063092193ab9060240160408051808303816000875af1158015614c95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cb99190615926565b50505b5080614cc78161579f565b915050614be1565b50600062093a8060075442614ce49190615727565b614cee9190615751565b905060005b601354811015614ed15760138181548110614d1057614d106156c9565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015614d87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dab91906157d7565b614db683600161578c565b62093a80614dc38461374f565b614dcd919061573a565b614dd7919061573a565b111560138281548110614dec57614dec6156c9565b60009182526020918290200154604080517f4e6f7420656e6f7567682072657761726420746f6b656e7320617661696c6162938101939093527f6c653a20000000000000000000000000000000000000000000000000000000009083015260601b7fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016604482015260580160405160208183030381529060405290614ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd0919061594a565b5080614ec98161579f565b915050614cf3565b5062093a80614ee182600161578c565b614eeb919061573a565b600754614ef8919061578c565b600755601680546001908110614f1057614f106156c9565b906000526020600020015460001461515c5760006013600181548110614f3857614f386156c9565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa158015614faf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fd391906157d7565b6005546003546040517f6a62784200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff91821660048201529293501690636a627842906024016020604051808303816000875af1158015615049573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061506d91906157d7565b5060006013600181548110615084576150846156c9565b6000918252602090912001546040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff909116906370a0823190602401602060405180830381865afa1580156150fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061511f91906157d7565b905062093a8061512f8383615727565b6151399190615751565b601660018154811061514d5761514d6156c9565b60009182526020909120015550505b61374c5b600061516a611b6a565b905060005b6019548110156151c45781818151811061518b5761518b6156c9565b6020026020010151601982815481106151a6576151a66156c9565b600091825260209091200155806151bc8161579f565b91505061516f565b506151cd614162565b60085550565b73ffffffffffffffffffffffffffffffffffffffff81161561374c5760006151fa82610ae8565b905060005b81518110156152685781818151811061521a5761521a6156c9565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff85166000908152601b835260408082208583529093529190912055806152608161579f565b9150506151ff565b5060005b81518110156122935760198181548110615288576152886156c9565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff86168352601a82526040808420858552909252912055806152cb8161579f565b91505061526c565b803573ffffffffffffffffffffffffffffffffffffffff81168114612b5857600080fd5b60006020828403121561530957600080fd5b613e11826152d3565b6020808252825182820181905260009190848201906040850190845b8181101561534a5783518352928401929184019160010161532e565b50909695505050505050565b801515811461374c57600080fd5b60008060006060848603121561537957600080fd5b83359250615389602085016152d3565b9150604084013561539981615356565b809150509250925092565b6000602082840312156153b657600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b8181101561534a57835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016153d9565b6000806040838503121561541e57600080fd5b50508035926020909101359150565b602080825282518282018190526000919060409081850190868401855b8281101561548e5781518051855286810151878601528581015186860152606080820151908601526080908101519085015260a0909301929085019060010161544a565b5091979650505050505050565b600080604083850312156154ae57600080fd5b6154b7836152d3565b91506154c5602084016152d3565b90509250929050565b600080600080608085870312156154e457600080fd5b84356154ef81615356565b935060208501356154ff81615356565b9250604085013561550f81615356565b9150606085013561551f81615356565b939692955090935050565b6000806040838503121561553d57600080fd5b615546836152d3565b946020939093013593505050565b6000806040838503121561556757600080fd5b615570836152d3565b9150602083013561558081615356565b809150509250929050565b600080600080608085870312156155a157600080fd5b6155aa856152d3565b9350602085013592506155bf604086016152d3565b91506155cd606086016152d3565b905092959194509250565b6000602082840312156155ea57600080fd5b8135613e1181615356565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060c0828403121561563657600080fd5b82601f83011261564557600080fd5b60405160c0810181811067ffffffffffffffff8211171561568f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040528060c08401858111156156a457600080fd5b845b818110156156be5780358352602092830192016156a6565b509195945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610d8e57610d8e6156f8565b8082028115828204841417610d8e57610d8e6156f8565b600082615787577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b80820180821115610d8e57610d8e6156f8565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157d0576157d06156f8565b5060010190565b6000602082840312156157e957600080fd5b5051919050565b60006020828403121561580257600080fd5b81518060020b8114613e1157600080fd5b60008060006060848603121561582857600080fd5b83516fffffffffffffffffffffffffffffffff8116811461584857600080fd5b602085015160409095015190969495509392505050565b805169ffffffffffffffffffff81168114612b5857600080fd5b600080600080600060a0868803121561589157600080fd5b61589a8661585f565b94506020860151935060408601519250606086015191506158bd6080870161585f565b90509295509295909350565b60005b838110156158e45781810151838201526020016158cc565b50506000910152565b600082516158ff8184602087016158c9565b9190910192915050565b60006020828403121561591b57600080fd5b8151613e1181615356565b6000806040838503121561593957600080fd5b505080516020909101519092909150565b60208152600082518060208401526159698160408501602087016158c9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea26469706673582212202c6b7bef661e3c59907cbedfe148604453f7aeca9b7b63219eccb9c942d1b85264736f6c63430008110033000000000000000000000000ff5b4bcbf765fe363269114e1c765229a29edefd00000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002600000000000000000000000004bf0082080d937897330bab735c2baa99ff16f1900000000000000000000000000000000000000000000000000000000000000020000000000000000000000003432b6a60d23ca0dfca7761b7ab56459d9c964d0000000000000000000000000627fee87d0d9d2c55098a06ac805db8f98b158aa0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000b1748c79709f4ba2dd82834b8c82d4a505003f27000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000001af2af8c84000000000000000000000000000000000000000000000000000000174876e8000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000278dc748eda1d8efef1adfb518542612b49fcd340000000000000000000000000000000000000000000000000000000000000000