0 txs
0 calls
constructor
No constructor.
functions
aggregatedStatsByEpoch
viewfunction aggregatedStatsByEpoch(uint256) view returns (uint256 rewardsAvailable, uint256 numPoolsToFinalize, uint256 totalFeesCollected, uint256 totalWeightedStake, uint256 totalRewardsFinalized)
authorities
viewfunction authorities(uint256) view returns (address)
authorized
viewfunction authorized(address) view returns (bool)
cobbDouglasAlphaDenominator
viewfunction cobbDouglasAlphaDenominator() view returns (uint32)
cobbDouglasAlphaNumerator
viewfunction cobbDouglasAlphaNumerator() view returns (uint32)
computeRewardBalanceOfDelegator
viewfunction computeRewardBalanceOfDelegator(bytes32 poolId, address member) view returns (uint256 reward)
computeRewardBalanceOfOperator
viewfunction computeRewardBalanceOfOperator(bytes32 poolId) view returns (uint256 reward)
currentEpoch
viewfunction currentEpoch() view returns (uint256)
currentEpochStartTimeInSeconds
viewfunction currentEpochStartTimeInSeconds() view returns (uint256)
epochDurationInSeconds
viewfunction epochDurationInSeconds() view returns (uint256)
getAuthorizedAddresses
viewfunction getAuthorizedAddresses() view returns (address[])
getCurrentEpochEarliestEndTimeInSeconds
viewfunction getCurrentEpochEarliestEndTimeInSeconds() view returns (uint256)
getGlobalStakeByStatus
viewfunction getGlobalStakeByStatus(uint8 stakeStatus) view returns (tuple balance)
getOwnerStakeByStatus
viewfunction getOwnerStakeByStatus(address staker, uint8 stakeStatus) view returns (tuple balance)
getParams
viewfunction getParams() view returns (uint256 _epochDurationInSeconds, uint32 _rewardDelegatedStakeWeight, uint256 _minimumPoolStake, uint32 _cobbDouglasAlphaNumerator, uint32 _cobbDouglasAlphaDenominator)
getStakeDelegatedToPoolByOwner
viewfunction getStakeDelegatedToPoolByOwner(address staker, bytes32 poolId) view returns (tuple balance)
getStakingPool
viewfunction getStakingPool(bytes32 poolId) view returns (tuple)
getStakingPoolStatsThisEpoch
viewfunction getStakingPoolStatsThisEpoch(bytes32 poolId) view returns (tuple)
getTotalStake
viewfunction getTotalStake(address staker) view returns (uint256)
getTotalStakeDelegatedToPool
viewfunction getTotalStakeDelegatedToPool(bytes32 poolId) view returns (tuple balance)
getWethContract
viewfunction getWethContract() view returns (address wethContract)
getZrxVault
viewfunction getZrxVault() view returns (address zrxVault)
lastPoolId
viewfunction lastPoolId() view returns (bytes32)
minimumPoolStake
viewfunction minimumPoolStake() view returns (uint256)
owner
viewfunction owner() view returns (address)
poolIdByMaker
viewfunction poolIdByMaker(address) view returns (bytes32)
poolStatsByEpoch
viewfunction poolStatsByEpoch(bytes32, uint256) view returns (uint256 feesCollected, uint256 weightedStake, uint256 membersStake)
rewardDelegatedStakeWeight
viewfunction rewardDelegatedStakeWeight() view returns (uint32)
rewardsByPoolId
viewfunction rewardsByPoolId(bytes32) view returns (uint256)
stakingContract
viewfunction stakingContract() view returns (address)
validExchanges
viewfunction validExchanges(address) view returns (bool)
wethReservedForPoolRewards
viewfunction wethReservedForPoolRewards() view returns (uint256)
addAuthorizedAddress
nonpayablefunction addAuthorizedAddress(address target)
addExchangeAddress
nonpayablefunction addExchangeAddress(address addr)
createStakingPool
nonpayablefunction createStakingPool(uint32 operatorShare, bool addOperatorAsMaker) returns (bytes32 poolId)
decreaseStakingPoolOperatorShare
nonpayablefunction decreaseStakingPoolOperatorShare(bytes32 poolId, uint32 newOperatorShare)
endEpoch
nonpayablefunction endEpoch() returns (uint256)
finalizePool
nonpayablefunction finalizePool(bytes32 poolId)
init
nonpayablefunction init()
joinStakingPoolAsMaker
nonpayablefunction joinStakingPoolAsMaker(bytes32 poolId)
moveStake
nonpayablefunction moveStake(tuple from, tuple to, uint256 amount)
payProtocolFee
payablefunction payProtocolFee(address makerAddress, address payerAddress, uint256 protocolFee) payable
removeAuthorizedAddress
nonpayablefunction removeAuthorizedAddress(address target)
removeAuthorizedAddressAtIndex
nonpayablefunction removeAuthorizedAddressAtIndex(address target, uint256 index)
removeExchangeAddress
nonpayablefunction removeExchangeAddress(address addr)
setParams
nonpayablefunction setParams(uint256 _epochDurationInSeconds, uint32 _rewardDelegatedStakeWeight, uint256 _minimumPoolStake, uint32 _cobbDouglasAlphaNumerator, uint32 _cobbDouglasAlphaDenominator)
stake
nonpayablefunction stake(uint256 amount)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unstake
nonpayablefunction unstake(uint256 amount)
withdrawDelegatorRewards
nonpayablefunction withdrawDelegatorRewards(bytes32 poolId)
events
AuthorizedAddressAdded
event AuthorizedAddressAdded(address indexed target, address indexed caller)
AuthorizedAddressRemoved
event AuthorizedAddressRemoved(address indexed target, address indexed caller)
EpochEnded
event EpochEnded(uint256 indexed epoch, uint256 numPoolsToFinalize, uint256 rewardsAvailable, uint256 totalFeesCollected, uint256 totalWeightedStake)
EpochFinalized
event EpochFinalized(uint256 indexed epoch, uint256 rewardsPaid, uint256 rewardsRemaining)
ExchangeAdded
event ExchangeAdded(address exchangeAddress)
ExchangeRemoved
event ExchangeRemoved(address exchangeAddress)
MakerStakingPoolSet
event MakerStakingPoolSet(address indexed makerAddress, bytes32 indexed poolId)
MoveStake
event MoveStake(address indexed staker, uint256 amount, uint8 fromStatus, bytes32 indexed fromPool, uint8 toStatus, bytes32 indexed toPool)
OperatorShareDecreased
event OperatorShareDecreased(bytes32 indexed poolId, uint32 oldOperatorShare, uint32 newOperatorShare)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ParamsSet
event ParamsSet(uint256 epochDurationInSeconds, uint32 rewardDelegatedStakeWeight, uint256 minimumPoolStake, uint256 cobbDouglasAlphaNumerator, uint256 cobbDouglasAlphaDenominator)
RewardsPaid
event RewardsPaid(uint256 indexed epoch, bytes32 indexed poolId, uint256 operatorReward, uint256 membersReward)
Stake
event Stake(address indexed staker, uint256 amount)
StakingPoolCreated
event StakingPoolCreated(bytes32 poolId, address operator, uint32 operatorShare)
StakingPoolEarnedRewardsInEpoch
event StakingPoolEarnedRewardsInEpoch(uint256 indexed epoch, bytes32 indexed poolId)
Unstake
event Unstake(address indexed staker, uint256 amount)
errors
No errors.
creation bytecode
0x6080604052600080546001600160a01b031916331790556156ac806100256000396000f3fe6080604052600436106103295760003560e01c80638da5cb5b116101a5578063bb7ef7e0116100ec578063e8eeb3f811610095578063f18765321161006f578063f1876532146108bf578063f252b7a1146108df578063f2fde38b146108ff578063ff691b111461091f57610329565b8063e8eeb3f814610875578063e907f0031461088a578063ee99205c146108aa57610329565b8063e0ee036e116100c6578063e0ee036e1461082b578063e1c7392a14610840578063e804d0a41461085557610329565b8063bb7ef7e0146107c9578063c18c9141146107e9578063d39de6e91461080957610329565b8063a694fc3a1161014e578063b3e3337911610128578063b3e3337914610769578063b510879f14610789578063b9181611146107a957610329565b8063a694fc3a1461071f578063b05315241461073f578063b2baa33e1461075457610329565b8063a26171e21161017f578063a26171e2146106e2578063a3b4a327146106f7578063a657e5791461070a57610329565b80638da5cb5b1461068d5780639ad26744146106a25780639c3ccc82146106c257610329565b80634bcc3f6711610274578063624a72321161021d57806370712939116101f757806370712939146106165780637667180814610636578063816667961461064b5780638a2e271a1461066d57610329565b8063624a7232146105cc57806363403801146105e157806368a7d6cd146105f657610329565b80635bd4ab731161024e5780635bd4ab73146105595780635d91121d146105865780635e615a6b146105a657610329565b80634bcc3f67146104f7578063587da0231461052457806358f6c7e31461053957610329565b80633c277fc5116102d657806344a6958b116102b057806344a6958b1461048a57806346b97959146104aa578063494503d4146104d757610329565b80633c277fc51461041b5780633e4ad7321461043d57806342f1181e1461046a57610329565b80632a94c279116103075780632a94c2791461039b5780632e17de78146103ca57806338229d93146103ea57610329565b806301e28d841461032e5780630b9663db146103505780631e7ff8f61461037b575b600080fd5b34801561033a57600080fd5b5061034e610349366004614fc7565b61093f565b005b34801561035c57600080fd5b50610365610a0d565b6040516103729190615327565b60405180910390f35b34801561038757600080fd5b50610365610396366004614fc7565b610b5a565b3480156103a757600080fd5b506103bb6103b63660046150db565b610bf4565b60405161037293929190615514565b3480156103d657600080fd5b5061034e6103e536600461509f565b610c20565b3480156103f657600080fd5b5061040a61040536600461509f565b610dd5565b604051610372959493929190615545565b34801561042757600080fd5b50610430610e04565b6040516103729190615224565b34801561044957600080fd5b5061045d61045836600461509f565b610e1c565b60405161037291906154d5565b34801561047657600080fd5b5061034e610485366004614fc7565b610e3b565b34801561049657600080fd5b5061045d6104a536600461504c565b610e4f565b3480156104b657600080fd5b506104ca6104c536600461509f565b610eae565b6040516103729190615481565b3480156104e357600080fd5b506104306104f236600461509f565b610ef9565b34801561050357600080fd5b5061051761051236600461509f565b610f2d565b60405161037291906154a2565b34801561053057600080fd5b50610365610f8f565b34801561054557600080fd5b5061034e610554366004615144565b610f95565b34801561056557600080fd5b50610579610574366004614fc7565b611192565b604051610372919061531c565b34801561059257600080fd5b5061034e6105a13660046150fc565b6111a7565b3480156105b257600080fd5b506105bb611270565b604051610372959493929190615568565b3480156105d857600080fd5b50610430611299565b3480156105ed57600080fd5b506103656112b1565b34801561060257600080fd5b506103656106113660046151f7565b6112b7565b34801561062257600080fd5b5061034e610631366004614fc7565b6113f0565b34801561064257600080fd5b506103656114a5565b34801561065757600080fd5b506106606114ab565b60405161037291906155ac565b34801561067957600080fd5b5061034e610688366004614fc7565b6114b7565b34801561069957600080fd5b50610430611579565b3480156106ae57600080fd5b5061034e6106bd366004615022565b611595565b3480156106ce57600080fd5b5061034e6106dd366004615199565b6115a7565b3480156106ee57600080fd5b50610365611621565b61034e610705366004614fe2565b611627565b34801561071657600080fd5b50610365611877565b34801561072b57600080fd5b5061034e61073a36600461509f565b61187d565b34801561074b57600080fd5b50610365611992565b34801561076057600080fd5b50610365611998565b34801561077557600080fd5b5061034e61078436600461509f565b6119b6565b34801561079557600080fd5b5061034e6107a436600461509f565b6119f6565b3480156107b557600080fd5b506105796107c4366004614fc7565b611a00565b3480156107d557600080fd5b506103656107e436600461509f565b611a15565b3480156107f557600080fd5b5061036561080436600461509f565b611aa0565b34801561081557600080fd5b5061081e611ab2565b60405161037291906152c3565b34801561083757600080fd5b50610660611b21565b34801561084c57600080fd5b5061034e611b2d565b34801561086157600080fd5b5061045d610870366004615128565b611b47565b34801561088157600080fd5b50610660611c97565b34801561089657600080fd5b506103656108a53660046150b7565b611cab565b3480156108b657600080fd5b50610430611d48565b3480156108cb57600080fd5b506103656108da366004614fc7565b611d64565b3480156108eb57600080fd5b5061045d6108fa366004615022565b611d76565b34801561090b57600080fd5b5061034e61091a366004614fc7565b611db7565b34801561092b57600080fd5b5061034e61093a36600461509f565b611e5a565b610947612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16610987576109876109826001836120aa565b61214c565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517ff50d0d312d501878616eb5e78ebf3ed6dcd3955aaef8165af9c6b057cc4832fb90610a02908390615224565b60405180910390a150565b600c5460009081610a2582600163ffffffff61215416565b6000818152601660205260409020600101549091508015610a4d57610a4d6109828383612173565b610a55612190565b610a5d612203565b600084815260166020526040902055610a74614eaf565b50600083815260166020908152604091829020825160a08101845281548082526001830154938201849052600283015482860181905260038401546060840181905260049094015460808401529451919488947fbb4a26fa0ace13ee4da343896c20eaa44a618fb9071fdd8c2e2c960a4583189d94610af6949193929161552a565b60405180910390a2610b066122a7565b6020810151610b4d57805160405185917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291610b4491600091615372565b60405180910390a25b6020015193505050505b90565b6000610b64611299565b73ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b8152600401610b9c9190615224565b60206040518083038186803b158015610bb457600080fd5b505afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bec9190810190615181565b90505b919050565b601560209081526000928352604080842090915290825290208054600182015460029092015490919083565b33610c29614ede565b73ffffffffffffffffffffffffffffffffffffffff821660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610c76906122ea565b90506000610ca882602001516bffffffffffffffffffffffff1683604001516bffffffffffffffffffffffff16612390565b905080841115610cbf57610cbf61098285836123a6565b73ffffffffffffffffffffffffffffffffffffffff831660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc60205260409020610d0d90856123c3565b610d15611299565b73ffffffffffffffffffffffffffffffffffffffff16639470b0bd84866040518363ffffffff1660e01b8152600401610d4f92919061529d565b600060405180830381600087803b158015610d6957600080fd5b505af1158015610d7d573d6000803e3d6000fd5b505050508273ffffffffffffffffffffffffffffffffffffffff167f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd85604051610dc79190615327565b60405180910390a250505050565b601660205260009081526040902080546001820154600283015460038401546004909401549293919290919085565b73c02aaa39b223fe8d0a0e5c4f27ead9083c756cc290565b610e24614ede565b6000828152600760205260409020610bec906122ea565b610e4361244a565b610e4c81612491565b50565b610e57614ede565b610ea560056000846001811115610e6a57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff8816825290925290206122ea565b90505b92915050565b610eb6614efe565b506000908152601560209081526040808320600c548452825291829020825160608101845281548152600182015492810192909252600201549181019190915290565b60028181548110610f0657fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff16905081565b610f35614f1f565b506000908152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff169082015290565b600d5481565b3381610fa1575061118d565b6000610fb06020860186615128565b6001811115610fbb57fe5b148015610fdf57506000610fd26020850185615128565b6001811115610fdd57fe5b145b15610fea575061118d565b6001610ff96020860186615128565b600181111561100457fe5b141561101957611019846020013582846125c2565b60016110286020850185615128565b600181111561103357fe5b1415611048576110488360200135828461265b565b600060058161105a6020880188615128565b600181111561106557fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff86168252835290812092509060059082906110af90880188615128565b60018111156110ba57fe5b60ff1681526020808201929092526040908101600090812073ffffffffffffffffffffffffffffffffffffffff87168252909252902090506110fd8282866126f4565b60208086013590870180359073ffffffffffffffffffffffffffffffffffffffff8616907f7d3ad1dcf03b9027064d1d9a474a69e0cecc31324c541d3eb9b5e6fa2f106c8d90889061114f908c615128565b600181111561115a57fe5b61116760208c018c615128565b600181111561117257fe5b60405161118193929190615593565b60405180910390a45050505b505050565b60106020526000908152604090205460ff1681565b816111b1816127ed565b6000838152600a602052604090205474010000000000000000000000000000000000000000900463ffffffff166111e9848285612826565b6000848152600a60205260409081902080547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000063ffffffff8716021790555184907f8ea2a7a959bd25f226b7b0a4393613f7fdcaa8404e8bad96aa52dc1c1459016790610dc790849087906155bd565b601154601254601354601454929363ffffffff9283169391928281169264010000000090041690565b73ba7f8b5fb1b19c1211c5d49550fcd149177a5eaf90565b60115481565b60085460009033906112d090600163ffffffff61286e16565b600881905591506112e582620f424086612826565b6112ed614f1f565b5060408051808201825273ffffffffffffffffffffffffffffffffffffffff838116825263ffffffff87811660208085019182526000888152600a9091528590208451815492517fffffffffffffffffffffffff00000000000000000000000000000000000000009093169416939093177fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff1674010000000000000000000000000000000000000000919092160217905590517fcec6fc86ea644053f6edff1160dfe3fa5c61e7a5ef9f873f145bb03a0bd319e7906113d190859085908990615330565b60405180910390a183156113e8576113e8836119b6565b505092915050565b6113f861244a565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16611431576114316109828261288a565b60005b6002548110156114a1578173ffffffffffffffffffffffffffffffffffffffff166002828154811061146257fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff161415611499576114948282612929565b6114a1565b600101611434565b5050565b600c5481565b60145463ffffffff1681565b6114bf612087565b73ffffffffffffffffffffffffffffffffffffffff811660009081526010602052604090205460ff16156114fb576114fb6109826000836120aa565b73ffffffffffffffffffffffffffffffffffffffff81166000908152601060205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f3e535d1ab441ef41c268fd9b52b478aee02d693c5ca2a84b5d26b89e0922e5e190610a02908390615224565b60005473ffffffffffffffffffffffffffffffffffffffff1681565b61159d61244a565b6114a18282612929565b6115af612087565b6115bc8585858585612b78565b3073ffffffffffffffffffffffffffffffffffffffff1663c6f3a4276040518163ffffffff1660e01b815260040160006040518083038186803b15801561160257600080fd5b505afa158015611616573d6000803e3d6000fd5b505050505050505050565b60135481565b3360009081526010602052604090205460ff1661164a5761164a61098233612c3b565b61165381612c56565b3461172d57611660610e04565b73ffffffffffffffffffffffffffffffffffffffff166323b872dd8330846040518463ffffffff1660e01b815260040161169c9392919061526c565b602060405180830381600087803b1580156116b657600080fd5b505af11580156116ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506116ee9190810190615083565b61172d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117249061544a565b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff83166000908152600960205260409020548061175e575061118d565b600061176982610e1c565b602001516bffffffffffffffffffffffff16905060135481101561178e57505061118d565b600c5460008381526015602090815260408083208484528252808320601690925290912081548061183d576000806117c68888612c77565b6002870182905560018701819055600386015491935091506117ee908263ffffffff61286e16565b60038501556001808501546118089163ffffffff61286e16565b6001850155604051889087907f14b098103235344975b17508c2391721cc9ac3f3fa2b56c7ff46f8480dfd074f90600090a350505b61184d818863ffffffff61286e16565b83556002820154611864908863ffffffff61286e16565b8260020181905550505050505050505050565b60085481565b33611886611299565b73ffffffffffffffffffffffffffffffffffffffff166315cc36f282846040518363ffffffff1660e01b81526004016118c092919061529d565b600060405180830381600087803b1580156118da57600080fd5b505af11580156118ee573d6000803e3d6000fd5b5050505073ffffffffffffffffffffffffffffffffffffffff811660009081527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc602052604090206119409083612d03565b8073ffffffffffffffffffffffffffffffffffffffff167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a836040516119869190615327565b60405180910390a25050565b60175481565b60006119b1601154600d5461286e90919063ffffffff16565b905090565b3360008181526009602052604080822084905551839183917f5640833634fce74eb9211d1209a91dd5a1c8c6a751696bff9323b4db67f815139190a35050565b610e4c8133612d6d565b60016020526000908152604090205460ff1681565b6000611a1f614f1f565b506000828152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611a8385612f45565b91509150611a9683602001518383613002565b5095945050505050565b600b6020526000908152604090205481565b60606002805480602002602001604051908101604052809291908181526020018280548015611b1757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311611aec575b5050505050905090565b60125463ffffffff1681565b611b35612087565b611b3d613043565b611b45613056565b565b611b4f614ede565b60016000526004602052611b827fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe056122ea565b90506000826001811115611b9257fe5b1415610bef576000611ba2611299565b73ffffffffffffffffffffffffffffffffffffffff16639706e0c06040518163ffffffff1660e01b815260040160206040518083038186803b158015611be757600080fd5b505afa158015611bfb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611c1f9190810190615181565b9050611c4e611c4983602001516bffffffffffffffffffffffff168361215490919063ffffffff16565b613081565b6bffffffffffffffffffffffff90811660208401526040830151611c7e91611c499184911663ffffffff61215416565b6bffffffffffffffffffffffff16604083015250919050565b601454640100000000900463ffffffff1681565b6000611cb5614f1f565b506000838152600a6020908152604080832081518083019092525473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900463ffffffff16918101919091529080611d1986612f45565b915091506000611d2e84602001518484613002565b915050611d3d878783856130a5565b979650505050505050565b60035473ffffffffffffffffffffffffffffffffffffffff1681565b60096020526000908152604090205481565b611d7e614ede565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208584529091529020610ea5906122ea565b611dbf61244a565b73ffffffffffffffffffffffffffffffffffffffff8116611dea57611de56109826131f2565b610e4c565b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b600c546000611e7082600163ffffffff61215416565b9050611e7a614eaf565b50600081815260166020908152604091829020825160a08101845281548152600182015492810183905260028201549381019390935260038101546060840152600401546080830152611ecf57505050610e4c565b611ed7614efe565b5060008481526015602090815260408083208584528252918290208251606081018452815480825260018301549382019390935260029091015492810192909252611f255750505050610e4c565b6000858152601560209081526040808320868452909152812081815560018101829055600201819055611f588284613229565b9050600080611f6c8884866040015161329e565b9150915087877ff1116b309178aa62dcb6bf8c3b8bc2321724907c7ebf52192d14c8ce3aa9194c8484604051611fa3929190615372565b60405180910390a36000611fbd838363ffffffff61286e16565b6080870151909150611fd5908263ffffffff61286e16565b6080870181905260008881526016602090815260409091206004019190915586015161200890600163ffffffff61215416565b602080880182815260008a8152601690925260409091206001019190915551611616576080860151865188917fb463d19ecf455be65365092cf8e1db6934a0334cf8cd532ddf9964d01f36b5b291612066908263ffffffff61215416565b604051612074929190615372565b60405180910390a2505050505050505050565b3360009081526001602052604090205460ff16611b4557611b45610982336133ee565b606063b9588e4360e01b83836040516024016120c79291906153ba565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152905092915050565b805160208201fd5b60008282111561216d5761216d61098260028585613409565b50900390565b606063614b800a60e01b83836040516024016120c7929190615372565b30318015610e4c576121a0610e04565b73ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121e757600080fd5b505af11580156121fb573d6000803e3d6000fd5b505050505050565b60006119b1601754612213610e04565b73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161224b9190615224565b60206040518083038186803b15801561226357600080fd5b505afa158015612277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061229b9190810190615181565b9063ffffffff61215416565b4260006122b2611998565b9050818111156122c9576122c961098282846134ae565b600c546000906122e090600163ffffffff61286e16565b600c555050600d55565b6122f2614ede565b5060408051606081018252825467ffffffffffffffff81168083526bffffffffffffffffffffffff680100000000000000008304811660208501527401000000000000000000000000000000000000000090920490911692820192909252600c54909181111561238a57612365816134cb565b67ffffffffffffffff16825260408201516bffffffffffffffffffffffff1660208301525b50919050565b600081831061239f5781610ea5565b5090919050565b60606384c8b7c960e01b83836040516024016120c7929190615372565b6123cb614ede565b6123d4836122ea565b90506123fe611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242d91611c4991168463ffffffff61215416565b6bffffffffffffffffffffffff16602082015261118d83826134eb565b60005473ffffffffffffffffffffffffffffffffffffffff163314611b4557600054611b459061098290339073ffffffffffffffffffffffffffffffffffffffff166135a5565b73ffffffffffffffffffffffffffffffffffffffff81166124b7576124b76109826135c2565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604090205460ff16156124f1576124f1610982826135f9565b73ffffffffffffffffffffffffffffffffffffffff8116600081815260016020819052604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168317905560028054928301815583527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90910180547fffffffffffffffffffffffff00000000000000000000000000000000000000001684179055513392917f3147867c59d17e8fa9d522465651d44aae0a9e38f902f3475b97e58072f0ed4c91a350565b6125cb83613614565b6125d58383612d6d565b73ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040808320868452909152902061260f908261364b565b6000838152600760205260409020612627908261364b565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe058261364b565b61266483613614565b61266e8383612d6d565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260066020908152604080832086845290915290206126a890826136a3565b60008381526007602052604090206126c090826136a3565b6001600052600460205261118d7fabd6e7cb50984ff9c2f3e18a2660c3353dadf4e3291deeb275dae2cd1e44fe05826136a3565b6126fe83836136de565b156127085761118d565b612710614ede565b612719846122ea565b9050612723614ede565b61272c846122ea565b905081604001516bffffffffffffffffffffffff16831115612767576127676109828484604001516bffffffffffffffffffffffff166123a6565b604082015161278e90611c49906bffffffffffffffffffffffff168563ffffffff61215416565b6bffffffffffffffffffffffff9081166040808501919091528201516127bf91611c4991168563ffffffff61286e16565b6bffffffffffffffffffffffff1660408201526127dc85836134eb565b6127e684826134eb565b5050505050565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff163381146114a1576114a161098233846136e5565b620f424063ffffffff8216111561284b5761284661098260008584613702565b61118d565b8163ffffffff168163ffffffff16111561118d5761118d61098260018584613702565b600082820183811015610ea557610ea561098260008686613409565b606063eb5108a260e01b826040516024016128a59190615224565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091529050919050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090205460ff16612962576129626109828361288a565b600254811061297d5761297d61098282600280549050613721565b8173ffffffffffffffffffffffffffffffffffffffff16600282815481106129a157fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1614612a0357612a03610982600283815481106129db57fe5b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff168461373e565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260016020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101908110612a7e57fe5b6000918252602090912001546002805473ffffffffffffffffffffffffffffffffffffffff9092169183908110612ab157fe5b600091825260209091200180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055600280547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190612b309082614f36565b50604051339073ffffffffffffffffffffffffffffffffffffffff8416907f1f32c1b084e2de0713b8fb16bd46bb9df710a3dbeae2f3ca93af46e016dcc6b090600090a35050565b60118590556012805463ffffffff8087167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000092831617909255601385905560148054848416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9487169190931617929092161790556040517f613157dbb0e920deab8ad6ddd3805e87cbf57344b9fe780f1764790ec789754290612c2c9087908790879087908790615568565b60405180910390a15050505050565b606063b56d2df060e01b826040516024016128a59190615224565b803414158015612c6557503415155b15610e4c57610e4c610982823461375b565b6000828152600a602052604081205481908190612caa9073ffffffffffffffffffffffffffffffffffffffff1686611d76565b602001516bffffffffffffffffffffffff169050612cce848263ffffffff61215416565b601254909350612cf990612cec9063ffffffff16620f424086613778565b829063ffffffff61286e16565b9150509250929050565b612d0b614ede565b612d14836122ea565b9050612d3e611c498383604001516bffffffffffffffffffffffff1661286e90919063ffffffff16565b6bffffffffffffffffffffffff9081166040830152602082015161242d91611c4991168463ffffffff61286e16565b612d768261379a565b6000612d8583836000806130a5565b73ffffffffffffffffffffffffffffffffffffffff831660009081526006602090815260408083208784529091529020909150612dc1906122ea565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600660209081526040808320888452825291829020845181549286015195909301517fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090921667ffffffffffffffff909316929092177fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff16680100000000000000006bffffffffffffffffffffffff95861602179092167401000000000000000000000000000000000000000093909216929092021790558015612f3c57612ea6838261380e565b612eae610e04565b73ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612ee892919061529d565b602060405180830381600087803b158015612f0257600080fd5b505af1158015612f16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250612f3a9190810190615083565b505b61118d83613856565b6000806000612f606001600c5461215490919063ffffffff16565b9050612f6a614efe565b50600084815260156020908152604080832084845282528083208151606080820184528254825260018084015483870152600293840154838601528787526016865295849020845160a0810186528154815296810154958701959095529184015492850192909252600383015490840152600490910154608083015290612ff2908290613229565b9350806040015192505050915091565b600080826130125783915061303b565b61302663ffffffff8616620f424086613863565b9150613038848363ffffffff61215416565b90505b935093915050565b61304b613899565b42600d556001600c55565b61305e6138ae565b620d2f00620dbba068056bc75e2d63100000600260036127e68585858585612b78565b806bffffffffffffffffffffffff81168114610bef57610bef610982600284613913565b600c546000906130b3614ede565b5073ffffffffffffffffffffffffffffffffffffffff851660009081526006602090815260408083208984528252918290208251606081018452905467ffffffffffffffff81168083526bffffffffffffffffffffffff6801000000000000000083048116948401949094527401000000000000000000000000000000000000000090910490921692810192909252821415613154576000925050506131ea565b61316081838787613930565b81519093506000906131839067ffffffffffffffff16600163ffffffff61286e16565b90506131c16131b48984602001516bffffffffffffffffffffffff16856000015167ffffffffffffffff16856139b3565b859063ffffffff61286e16565b93506131e46131b48984604001516bffffffffffffffffffffffff1684876139b3565b93505050505b949350505050565b60408051808201909152600481527fe69edc3e00000000000000000000000000000000000000000000000000000000602082015290565b815160009061323757610ea8565b8151835160408401516020860151606086015160145461326d95949392919063ffffffff80821691640100000000900416613a4c565b608083015183519192506000916132899163ffffffff61215416565b905081811015613297578091505b5092915050565b6000806132a9614f1f565b506000858152600a602090815260409182902082518084019093525473ffffffffffffffffffffffffffffffffffffffff8116835274010000000000000000000000000000000000000000900463ffffffff1690820181905261330d908686613002565b909350915082156133ca57613320610e04565b81516040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff929092169163a9059cbb9161337691879060040161529d565b602060405180830381600087803b15801561339057600080fd5b505af11580156133a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506133c89190810190615083565b505b81156133e5576133da8683613b0f565b6133e5868386613b50565b50935093915050565b606063b65a25b960e01b826040516024016128a59190615224565b606063e946c1bb60e01b84848460405160240161342893929190615380565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915290509392505050565b606063a6bcde4760e01b83836040516024016120c7929190615372565b8067ffffffffffffffff81168114610bef57610bef610982600184613913565b8051825460408301516020909301516bffffffffffffffffffffffff90811668010000000000000000027fffffffffffffffffffffffff000000000000000000000000ffffffffffffffff91909416740100000000000000000000000000000000000000000273ffffffffffffffffffffffffffffffffffffffff67ffffffffffffffff9094167fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000090931692909217929092161716179055565b6060631de45ad160e01b83836040516024016120c7929190615245565b60408051808201909152600481527f57654fe400000000000000000000000000000000000000000000000000000000602082015290565b606063de16f1a060e01b826040516024016128a59190615224565b6000818152600a602052604090205473ffffffffffffffffffffffffffffffffffffffff16610e4c57610e4c610982826000613c39565b613653614ede565b61365c836122ea565b9050613686611c498383604001516bffffffffffffffffffffffff1661215490919063ffffffff16565b6bffffffffffffffffffffffff16604082015261118d83826134eb565b6136ab614ede565b6136b4836122ea565b9050613686611c498383604001516bffffffffffffffffffffffff1661286e90919063ffffffff16565b1460011690565b60606382ded78560e01b83836040516024016120c792919061529d565b60606322df959760e01b848484604051602401613428939291906153ec565b606063e9f8377160e01b83836040516024016120c7929190615372565b606063140a84db60e01b83836040516024016120c7929190615245565b60606331d7a50560e01b83836040516024016120c7929190615372565b60006131ea8361378e868563ffffffff613c5616565b9063ffffffff613c8716565b600c546000906137b190600163ffffffff61215416565b90506137bb614efe565b50600082815260156020908152604080832084845282529182902082516060810184528154808252600183015493820193909352600290910154928101929092521561118d5761118d6109828484613cb1565b6000828152600b602052604090205461382d908263ffffffff61215416565b6000838152600b602052604090205560175461384f908263ffffffff61215416565b6017555050565b610e4c8160006001613b50565b60006131ea8361378e61387d82600163ffffffff61215416565b61388d888763ffffffff613c5616565b9063ffffffff61286e16565b600d5415611b4557611b456109826000613cce565b601154158015906138c6575060125463ffffffff1615155b80156138d3575060135415155b80156138e6575060145463ffffffff1615155b80156139015750601454640100000000900463ffffffff1615155b15611b4557611b456109826001613cce565b606063c996af7b60e01b83836040516024016120c79291906153a2565b600082158061393d575081155b1561394a575060006131ea565b600061395d85600163ffffffff61215416565b865167ffffffffffffffff16101561397957856040015161397f565b85602001515b6bffffffffffffffffffffffff1690508061399e5760009150506131ea565b6139a9848483613778565b9695505050505050565b60008315806139c157508183145b156139ce575060006131ea565b818310613a07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172490615413565b613a0f614f5a565b613a198685613d0d565b9050613a23614f5a565b613a2d8785613d0d565b9050611d3d81600001518260200151846000015185602001518a613e2b565b600080613a598888613eb7565b90506000613a678787613eb7565b9050811580613a74575080155b15613a85575060009150611d3d9050565b600081831315613a9e57613a998284613f09565b613aa8565b613aa88383613f09565b9050613ad1613acc613ab983613f28565b8863ffffffff168863ffffffff166145ca565b6145d9565b905081831315613aea57613ae58282613f09565b613af4565b613af48282614bc3565b9050613b00818c614bef565b9b9a5050505050505050505050565b6000828152600b6020526040902054613b2e908263ffffffff61286e16565b6000838152600b602052604090205560175461384f908263ffffffff61286e16565b6000838152600f6020526040902054600c5480821415613b7157505061118d565b613b79614f5a565b506000858152600e602090815260408083208584528252918290208251808401909352805483526001015490820152613bb0614f5a565b613bb982614c31565b15613bf257613bd2826000015183602001518888614c3a565b60208301819052818352613be69190614c9c565b60208301528152613bfd565b602081018590528581525b6000878152600e6020908152604080832086845282528083208451815593820151600190940193909355978152600f9097529095205550505050565b6060639ae94f0160e01b83836040516024016120c7929190615362565b600082613c6557506000610ea8565b82820282848281613c7257fe5b0414610ea557610ea561098260018686613409565b600081613c9d57613c9d61098260038585613409565b6000828481613ca857fe5b04949350505050565b6060635caa0b0560e01b83836040516024016120c7929190615372565b60607f0b02d77300000000000000000000000000000000000000000000000000000000826001811115613cfd57fe5b6040516024016128a591906155d4565b613d15614f5a565b506000828152600e602090815260408083208484528252918290208251808401909352805483526001015490820152613d4d81614c31565b15613d5757610ea8565b6000613d6a83600163ffffffff61215416565b6000858152600e60209081526040808320848452825291829020825180840190935280548352600101549082015292509050613da582614c31565b15613db05750610ea8565b6000848152600f602052604090205483811015613e0d576000858152600e6020908152604080832084845282529182902082518084019093528054835260010154908201529250613e0083614c31565b15613e0d5750610ea89050565b50506040805180820190915260008152600160208201529392505050565b600081613e3a57506000613eae565b83613e5a57613e538561378e848963ffffffff613c5616565b9050613eae565b6000613e7f613e6f868863ffffffff613c5616565b61229b898763ffffffff613c5616565b90506000613e93828663ffffffff613c8716565b9050613ea98761378e868463ffffffff613c5616565b925050505b95945050505050565b600080831215613ecf57613ecf610982600185614cc5565b6000821215613ee657613ee6610982600184614cc5565b610ea5613f03846f80000000000000000000000000000000614d06565b83614d4e565b6000610ea5613f03846f80000000000000000000000000000000614d06565b60006f80000000000000000000000000000000821315613f5057613f50610982600184614dcf565b60008213613f6657613f66610982600084614dcf565b6f80000000000000000000000000000000821415613f8657506000610bef565b640733048c5a8213613fb957507fffffffffffffffffffffffffffffffe010000000000000000000000000000000610bef565b60008060006a01c8464f761647600000008513614018577ffffffffffffffffffffffffffffffff000000000000000000000000000000000909301926a01c8464f761647600000006f8000000000000000000000000000000086020594505b6cf1aaddd7742e900000000000008513614076577ffffffffffffffffffffffffffffffff800000000000000000000000000000000909301926cf1aaddd7742e900000000000006f8000000000000000000000000000000086020594505b6e0afe10820813d7800000000000000085136140d8577ffffffffffffffffffffffffffffffffc00000000000000000000000000000000909301926e0afe10820813d780000000000000006f8000000000000000000000000000000086020594505b6f02582ab704279ec00000000000000000851361413c577ffffffffffffffffffffffffffffffffe00000000000000000000000000000000909301926f02582ab704279ec000000000000000006f8000000000000000000000000000000086020594505b6f1152aaa3bf81cc00000000000000000085136141a0577fffffffffffffffffffffffffffffffff00000000000000000000000000000000909301926f1152aaa3bf81cc0000000000000000006f8000000000000000000000000000000086020594505b6f2f16ac6c59de700000000000000000008513614204577fffffffffffffffffffffffffffffffff80000000000000000000000000000000909301926f2f16ac6c59de700000000000000000006f8000000000000000000000000000000086020594505b6f4da2cbf1be58280000000000000000008513614268577fffffffffffffffffffffffffffffffffc0000000000000000000000000000000909301926f4da2cbf1be58280000000000000000006f8000000000000000000000000000000086020594505b6f63afbe7ab2082c00000000000000000085136142cc577fffffffffffffffffffffffffffffffffe0000000000000000000000000000000909301926f63afbe7ab2082c0000000000000000006f8000000000000000000000000000000086020594505b6f70f5a893b608861e1f58934f97aea57d8513614330577ffffffffffffffffffffffffffffffffff0000000000000000000000000000000909301926f70f5a893b608861e1f58934f97aea57d6f8000000000000000000000000000000086020594505b7fffffffffffffffffffffffffffffffff80000000000000000000000000000000850192508291506f80000000000000000000000000000000828002059050700100000000000000000000000000000000838103830205840193506f80000000000000000000000000000000818302816143a657fe5b059150700200000000000000000000000000000000836faaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa038302816143d757fe5b05840193506f80000000000000000000000000000000818302816143f757fe5b059150700300000000000000000000000000000000836f999999999999999999999999999999990383028161442857fe5b05840193506f800000000000000000000000000000008183028161444857fe5b059150700400000000000000000000000000000000836f924924924924924924924924924924920383028161447957fe5b05840193506f800000000000000000000000000000008183028161449957fe5b059150700500000000000000000000000000000000836f8e38e38e38e38e38e38e38e38e38e38e038302816144ca57fe5b05840193506f80000000000000000000000000000000818302816144ea57fe5b059150700600000000000000000000000000000000836f8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b0383028161451b57fe5b05840193506f800000000000000000000000000000008183028161453b57fe5b059150700700000000000000000000000000000000836f89d89d89d89d89d89d89d89d89d89d890383028161456c57fe5b05840193506f800000000000000000000000000000008183028161458c57fe5b059150700800000000000000000000000000000000836f88888888888888888888888888888888038302816145bd57fe5b0584019350505050919050565b60006131ea613f038585614d06565b60007fffffffffffffffffffffffffffffffe01000000000000000000000000000000082121561460b57506000610bef565b8161462757506f80000000000000000000000000000000610bef565b600082131561463e5761463e610982600184614dcf565b6f800000000000000000000000000000006f1000000000000000000000000000000083078080028290056710e1b3be415a0000810293909301929091818302059050806705a0913f6b1e000002830192506f80000000000000000000000000000000828202816146aa57fe5b05905080670168244fdac7800002830192506f80000000000000000000000000000000828202816146d757fe5b05905080664807432bc1800002830192506f800000000000000000000000000000008282028161470357fe5b05905080660c0135dca0400002830192506f800000000000000000000000000000008282028161472f57fe5b059050806601b707b1cdc00002830192506f800000000000000000000000000000008282028161475b57fe5b059050806536e0f639b80002830192506f800000000000000000000000000000008282028161478657fe5b05905080650618fee9f80002830192506f80000000000000000000000000000000828202816147b157fe5b05905080649c197dcc0002830192506f80000000000000000000000000000000828202816147db57fe5b05905080640e30dce40002830192506f800000000000000000000000000000008282028161480557fe5b0590508064012ebd130002830192506f800000000000000000000000000000008282028161482f57fe5b059050806317499f0002830192506f800000000000000000000000000000008282028161485857fe5b059050806301a9d48002830192506f800000000000000000000000000000008282028161488157fe5b05905080621c638002830192506f80000000000000000000000000000000828202816148a957fe5b059050806201c63802830192506f80000000000000000000000000000000828202816148d157fe5b05905080611ab802830192506f80000000000000000000000000000000828202816148f857fe5b0590508061017c02830192506f800000000000000000000000000000008282028161491f57fe5b05905080601402830192506f800000000000000000000000000000008282028161494557fe5b600095909503946721c3677c82b400009190059384010582016f80000000000000000000000000000000019290507010000000000000000000000000000000008416156149b4577243cbaf42a000812488fc5c220ad7b97bf6e99e6cf1aaddd7742e56d32fb9f9974484020592505b7008000000000000000000000000000000008416156149f6577105d27a9f51c31b7c2f8038212a05747799916e0afe10820813d65dfe6a33c07f738f84020592505b700400000000000000000000000000000000841615614a3857701b4c902e273a58678d6d3bfdb93db96d026f02582ab704279e8efd15e0265855c47a84020592505b700200000000000000000000000000000000841615614a7a577003b1cc971a9bb5b9867477440d6d1577506f1152aaa3bf81cb9fdb76eae12d02957184020592505b700100000000000000000000000000000000841615614abc5770015bf0a8b1457695355fb8ac404e7a79e36f2f16ac6c59de6f8d5d6f63c1482a7c8684020592505b6f80000000000000000000000000000000841615614afc576fd3094c70f034de4b96ff7d5b6f99fcd86f4da2cbf1be5827f9eb3ad1aa9866ebb384020592505b6f40000000000000000000000000000000841615614b3c576fa45af1e1f40c333b3de1db4dd55f29a76f63afbe7ab2082ba1a0ae5e4eb1b479dc84020592505b6f20000000000000000000000000000000841615614b7c576f910b022db7ae67ce76b441c27035c6a16f70f5a893b608861e1f58934f97aea57d84020592505b6f10000000000000000000000000000000841615614bbc576f88415abbe9a76bead8d00cf112e4d4a86f783eafef1c0a8f3978c7f81824d62ebf84020592505b5050919050565b60006f80000000000000000000000000000000614be08484614d06565b81614be757fe5b059392505050565b600080821215614c0757614c07610982600184614cc5565b6000614c138484614d06565b905060008113614c27576000915050610ea8565b607f1c9392505050565b60200151151590565b60008085614c4c575082905081614c93565b83614c5b575084905083614c93565b614c7e614c6e858763ffffffff613c5616565b61388d888663ffffffff613c5616565b9150614c90858463ffffffff613c5616565b90505b94509492505050565b600080614cba84846f80000000000000000000000000000000614dfe565b915091509250929050565b60607fbd79545f00000000000000000000000000000000000000000000000000000000836001811115614cf457fe5b836040516024016120c79291906155e2565b600082614d1557506000610ea8565b5081810281838281614d2357fe5b05141580614d3a575082828281614d3657fe5b0514155b15610ea857610ea861098260018585614e6c565b600081614d6457614d6461098260028585614e6c565b7f800000000000000000000000000000000000000000000000000000000000000083148015614db25750817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff145b15614dc657614dc661098260038585614e6c565b818381614be757fe5b60607fed2f26a100000000000000000000000000000000000000000000000000000000836001811115614cf457fe5b60008082851180614e0e57508284115b15614e6357600084861015614e235784614e25565b855b9050614e37818563ffffffff613c8716565b9050614e49868263ffffffff613c8716565b9250614e5b858263ffffffff613c8716565b91505061303b565b50929391925050565b60607f8c12dfe700000000000000000000000000000000000000000000000000000000846003811115614e9b57fe5b8484604051602401613428939291906155f5565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b604080516060810182526000808252602082018190529181019190915290565b60405180606001604052806000815260200160008152602001600081525090565b604080518082019091526000808252602082015290565b81548183558181111561118d5760008381526020902061118d918101908301614f74565b604051806040016040528060008152602001600081525090565b610b5791905b80821115614f8e5760008155600101614f7a565b5090565b803573ffffffffffffffffffffffffffffffffffffffff81168114610ea857600080fd5b60006040828403121561238a578081fd5b600060208284031215614fd8578081fd5b610ea58383614f92565b600080600060608486031215614ff6578182fd5b83356150018161561a565b925060208401356150118161561a565b929592945050506040919091013590565b60008060408385031215615034578182fd5b61503e8484614f92565b946020939093013593505050565b6000806040838503121561505e578182fd5b6150688484614f92565b915060208301356150788161564a565b809150509250929050565b600060208284031215615094578081fd5b8151610ea58161563c565b6000602082840312156150b0578081fd5b5035919050565b600080604083850312156150c9578182fd5b8235915060208301356150788161561a565b600080604083850312156150ed578182fd5b50508035926020909101359150565b6000806040838503121561510e578182fd5b82359150602083013563ffffffff81168114615078578182fd5b600060208284031215615139578081fd5b8135610ea58161564a565b600080600060a08486031215615158578283fd5b6151628585614fb6565b92506151718560408601614fb6565b9150608084013590509250925092565b600060208284031215615192578081fd5b5051919050565b600080600080600060a086880312156151b0578283fd5b8535945060208601356151c281615657565b93506040860135925060608601356151d981615657565b915060808601356151e981615657565b809150509295509295909350565b60008060408385031215615209578182fd5b823561521481615657565b915060208301356150788161563c565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b73ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b73ffffffffffffffffffffffffffffffffffffffff9384168152919092166020820152604081019190915260600190565b73ffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b602080825282518282018190526000918401906040840190835b8181101561531157835173ffffffffffffffffffffffffffffffffffffffff168352602093840193909201916001016152dd565b509095945050505050565b901515815260200190565b90815260200190565b92835273ffffffffffffffffffffffffffffffffffffffff91909116602083015263ffffffff16604082015260600190565b9182521515602082015260400190565b918252602082015260400190565b606081016004851061538e57fe5b938152602081019290925260409091015290565b60408101600384106153b057fe5b9281526020015290565b604081016153c784615610565b92815273ffffffffffffffffffffffffffffffffffffffff9190911660209091015290565b606081016153f985615610565b938152602081019290925263ffffffff1660409091015290565b60208082526013908201527f43525f494e54455256414c5f494e56414c494400000000000000000000000000604082015260600190565b60208082526014908201527f574554485f5452414e534645525f4641494c4544000000000000000000000000604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b815173ffffffffffffffffffffffffffffffffffffffff16815260209182015163ffffffff169181019190915260400190565b815167ffffffffffffffff1681526020808301516bffffffffffffffffffffffff90811691830191909152604092830151169181019190915260600190565b9283526020830191909152604082015260600190565b93845260208401929092526040830152606082015260800190565b948552602085019390935260408401919091526060830152608082015260a00190565b94855263ffffffff938416602086015260408501929092528216606084015216608082015260a00190565b92835260ff918216602084015216604082015260600190565b63ffffffff91909116815260200190565b63ffffffff92831681529116602082015260400190565b60ff91909116815260200190565b60ff929092168252602082015260400190565b60ff9390931683526020830191909152604082015260600190565b60028110610e4c57fe5b73ffffffffffffffffffffffffffffffffffffffff81168114610e4c57600080fd5b8015158114610e4c57600080fd5b60028110610e4c57600080fd5b63ffffffff81168114610e4c57600080fdfea365627a7a72315820006210cdecfe6b555e273506a51e8f70592803d6dba0c5040fa921b6f79ac2176c6578706572696d656e74616cf564736f6c634300050c0040