0 txs
0 calls
constructor
constructor()
functions
aToken
viewfunction aToken() view returns (address)
borrowedInUnderlying
viewfunction borrowedInUnderlying() view returns (uint256)
borrowTargetFactorNumerator
viewfunction borrowTargetFactorNumerator() view returns (uint256)
bVault
viewfunction bVault() view returns (address)
collateralFactorNumerator
viewfunction collateralFactorNumerator() view returns (uint256)
controller
viewfunction controller() view returns (address)
currentBalance
viewfunction currentBalance() view returns (uint256)
debtToken
viewfunction debtToken() view returns (address)
depositArbCheck
purefunction depositArbCheck() pure returns (bool)
factorDenominator
viewfunction factorDenominator() view returns (uint256)
feeDenominator
viewfunction feeDenominator() view returns (uint256)
fold
viewfunction fold() view returns (bool)
governance
viewfunction governance() view returns (address)
harvestMSIG
viewfunction harvestMSIG() view returns (address)
investedUnderlyingBalance
viewfunction investedUnderlyingBalance() view returns (uint256)
isAToken
viewfunction isAToken(address) view returns (bool)
isRewardToken
viewfunction isRewardToken(address _token) view returns (bool)
nextImplementation
viewfunction nextImplementation() view returns (address)
nextImplementationDelay
viewfunction nextImplementationDelay() view returns (uint256)
nextImplementationTimestamp
viewfunction nextImplementationTimestamp() view returns (uint256)
pausedInvesting
viewfunction pausedInvesting() view returns (bool)
pendingFee
viewfunction pendingFee() view returns (uint256)
platformFeeNumerator
viewfunction platformFeeNumerator() view returns (uint256)
profitSharingNumerator
viewfunction profitSharingNumerator() view returns (uint256)
rewardPool
viewfunction rewardPool() view returns (address)
rewardToken
viewfunction rewardToken() view returns (address)
rewardTokens
viewfunction rewardTokens() view returns (address[])
rewardTokens
viewfunction rewardTokens(uint256) view returns (address)
sell
viewfunction sell() view returns (bool)
sellFloor
viewfunction sellFloor() view returns (uint256)
shouldUpgrade
viewfunction shouldUpgrade() view returns (bool, address)
storedBalance
viewfunction storedBalance() view returns (uint256)
strategist
viewfunction strategist() view returns (address)
strategistFeeNumerator
viewfunction strategistFeeNumerator() view returns (uint256)
suppliedInUnderlying
viewfunction suppliedInUnderlying() view returns (uint256)
totalFeeNumerator
viewfunction totalFeeNumerator() view returns (uint256)
underlying
viewfunction underlying() view returns (address)
universalLiquidator
viewfunction universalLiquidator() view returns (address)
unsalvagableTokens
viewfunction unsalvagableTokens(address token) view returns (bool)
vault
viewfunction vault() view returns (address)
_setCollateralFactorNumerator
nonpayablefunction _setCollateralFactorNumerator(uint256 _numerator)
continueInvesting
nonpayablefunction continueInvesting()
doHardWork
nonpayablefunction doHardWork()
emergencyExit
nonpayablefunction emergencyExit()
finalizeUpgrade
nonpayablefunction finalizeUpgrade()
initialize
nonpayablefunction initialize()
initialize
nonpayablefunction initialize(address _storage, address _underlying, address _vault, address _rewardPool, address _rewardToken, address _strategist)
initialize
nonpayablefunction initialize(address _storage)
initializeBaseStrategy
nonpayablefunction initializeBaseStrategy(address _storage, address _underlying, address _vault, address _aToken, address _debtToken, address _rewardToken, uint256 _borrowTargetFactorNumerator, uint256 _collateralFactorNumerator, uint256 _factorDenominator, bool _fold)
initializeStrategy
nonpayablefunction initializeStrategy(address _storage, address _vault)
receiveFlashLoan
nonpayablefunction receiveFlashLoan(address[], uint256[] amounts, uint256[] feeAmounts, bytes)
salvage
nonpayablefunction salvage(address recipient, address token, uint256 amount)
scheduleUpgrade
nonpayablefunction scheduleUpgrade(address impl)
setBorrowTargetFactorNumerator
nonpayablefunction setBorrowTargetFactorNumerator(uint256 _numerator)
setFold
nonpayablefunction setFold(bool _fold)
setStorage
nonpayablefunction setStorage(address _store)
toggleMerklOperator
nonpayablefunction toggleMerklOperator(address merklClaim, address operator)
withdrawAllToVault
nonpayablefunction withdrawAllToVault()
withdrawToVault
nonpayablefunction withdrawToVault(uint256 amountUnderlying)
events
PlatformFeeLogInReward
event PlatformFeeLogInReward(address indexed treasury, address indexed rewardToken, uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitAndBuybackLog
event ProfitAndBuybackLog(address indexed rewardToken, uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitAndBuybackLog
event ProfitAndBuybackLog(uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitLogInReward
event ProfitLogInReward(address indexed rewardToken, uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitLogInReward
event ProfitLogInReward(uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
ProfitsNotCollected
event ProfitsNotCollected(address indexed rewardToken, bool sell, bool floor)
ProfitsNotCollected
event ProfitsNotCollected(bool sell, bool floor)
StrategistFeeLogInReward
event StrategistFeeLogInReward(address indexed strategist, address indexed rewardToken, uint256 profitAmount, uint256 feeAmount, uint256 timestamp)
errors
No errors.
creation bytecode
0x608060405234801561001057600080fd5b5061003c60017f62ae7bf2df4e95c187ea09c8c47c3fc3d9abc36298f5b5b6c5e2e7b4b291fe2661086e565b7f62ae7bf2df4e95c187ea09c8c47c3fc3d9abc36298f5b5b6c5e2e7b4b291fe251461006a5761006a610895565b61009560017fa7ec62784904ff31cbcc32d09932a58e7f1e4476e1d041995b37c917990b16dd61086e565b7fa7ec62784904ff31cbcc32d09932a58e7f1e4476e1d041995b37c917990b16dc146100c3576100c3610895565b6100ee60017fa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e53161086e565b7fa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e5301461011c5761011c610895565b61014760017fefd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d4261086e565b7fefd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d411461017557610175610895565b6101a060017fdae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bc061086e565b7fdae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bbf146101ce576101ce610895565b6101f960017f45418d9b5c2787ae64acbffccad43f2b487c1a16e24385aa9d2b059f9d1d163d61086e565b7f45418d9b5c2787ae64acbffccad43f2b487c1a16e24385aa9d2b059f9d1d163c1461022757610227610895565b61025260017f3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b961086e565b7f3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b81461028057610280610895565b6102ab60017fc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afd61086e565b7fc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afc146102d9576102d9610895565b61030460017f656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb761086e565b7f656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb61461033257610332610895565b61035d60017fa07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591b61086e565b7fa07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591a1461038b5761038b610895565b6103b660017fe3ee74fb7893020b457d8071ed1ef76ace2bf4903abd7b24d3ce312e9c72c02a61086e565b7fe3ee74fb7893020b457d8071ed1ef76ace2bf4903abd7b24d3ce312e9c72c029146103e4576103e4610895565b61040f60017f0286fd414602b432a8c80a0125e9a25de9bba96da9d5068c832ff73f09208a3c61086e565b7f0286fd414602b432a8c80a0125e9a25de9bba96da9d5068c832ff73f09208a3b1461043d5761043d610895565b61046860017f29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb8444861086e565b7f29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb844471461049657610496610895565b6104c160017f414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22f61086e565b7f414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22e146104ef576104ef610895565b61051a60017f82b330ca72bcd6db11a26f10ce47ebcfe574a9c646bccbc6f1cd4478eae16b3261086e565b7f82b330ca72bcd6db11a26f10ce47ebcfe574a9c646bccbc6f1cd4478eae16b311461054857610548610895565b61057360017f6a7b588c950d46e2de3db2f157e5e0e4f29054c8d60f17bf0c30352e223a458e61086e565b7f6a7b588c950d46e2de3db2f157e5e0e4f29054c8d60f17bf0c30352e223a458d146105a1576105a1610895565b6105cc60017f8cdee58637b787efaa2d78bb1da1e053a2c91e61640b32339bfbba65c00abd6961086e565b7f8cdee58637b787efaa2d78bb1da1e053a2c91e61640b32339bfbba65c00abd68146105fa576105fa610895565b61062560017f29e482e0e21cdcc43d1f0a48ba975f14078bf56d1ca40ed3f48e655ac06df8cc61086e565b7f29e482e0e21cdcc43d1f0a48ba975f14078bf56d1ca40ed3f48e655ac06df8cb1461065357610653610895565b61067e60017f280539da846b4989609abdccfea039bd1453e4f710c670b29b9eeaca0730c1a361086e565b7f280539da846b4989609abdccfea039bd1453e4f710c670b29b9eeaca0730c1a2146106ac576106ac610895565b6106d760017f0af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd9861086e565b7f0af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd971461070557610705610895565b61073060017f129eccdfbcf3761d8e2f66393221fa8277b7623ad13ed7693a0025435931c64b61086e565b7f129eccdfbcf3761d8e2f66393221fa8277b7623ad13ed7693a0025435931c64a1461075e5761075e610895565b61078960017f4e92df66cc717205e8df80bec55fc1429f703d590a2d456b97b74f0008b4a3ef61086e565b7f4e92df66cc717205e8df80bec55fc1429f703d590a2d456b97b74f0008b4a3ee146107b7576107b7610895565b6107e260017fa65533f4b41f3786d877c8fdd4ae6d27ada84e1d9c62ea3aca309e9aa03af1ce61086e565b7fa65533f4b41f3786d877c8fdd4ae6d27ada84e1d9c62ea3aca309e9aa03af1cd1461081057610810610895565b61083b60017f1841be4c16015a744c9fbf595f7c6b32d40278c16c1fc7cf2de88c6348de44bb61086e565b7f1841be4c16015a744c9fbf595f7c6b32d40278c16c1fc7cf2de88c6348de44ba1461086957610869610895565b6108ab565b8181038181111561088f57634e487b7160e01b600052601160045260246000fd5b92915050565b634e487b7160e01b600052600160045260246000fd5b615b8e806108ba6000396000f3fe6080604052600436106103905760003560e01c80639a138d6d116101dc578063cc2a9a5b11610102578063e684f46a116100a0578063f77c47911161006f578063f77c47911461097a578063f7c618c11461098f578063f8d89898146109a4578063fbfa77cf146109b957600080fd5b8063e684f46a14610908578063e9eca9941461091d578063ec09560614610932578063f04f27071461095a57600080fd5b8063d3df8aa4116100dc578063d3df8aa414610898578063d610101b146108ad578063d7102067146108c3578063db620485146108f357600080fd5b8063cc2a9a5b14610843578063ce845d1d14610863578063ce8c42e81461087857600080fd5b8063b5fd73f81161017a578063c23ff8b611610149578063c23ff8b6146107cd578063c2a2a07b146107ed578063c2b18aa014610801578063c4d66de81461082357600080fd5b8063b5fd73f81461076e578063b60f151a1461078e578063b8d3370b146107a3578063bfd131f1146107b857600080fd5b8063a0c1f15e116101b6578063a0c1f15e1461071a578063a1dab23e1461072f578063a836569314610744578063b5d7a94f1461075957600080fd5b80639a138d6d146106b15780639a508c8e146106d15780639d16acfd146106e657600080fd5b80634ed65416116102c157806366666aa91161025f5780637bb7bed11161022e5780637bb7bed1146106475780638129fc1c1461066757806382de9c1b1461067c5780639137c1a71461069157600080fd5b806366666aa9146105e85780636f307dc3146105fd578063759098881461061257806375f6d6ce1461062757600080fd5b80635641ec031161029b5780635641ec03146105935780635aa6e675146105a8578063627c96ca146105bd578063643090bc146105d357600080fd5b80634ed654161461053e5780634fa5d8541461055e578063501859461461057357600080fd5b806320d1ceaf1161032e5780633f282b8d116103085780633f282b8d146104c457806345710074146104e457806345d01e4a146105095780634d352ab21461051e57600080fd5b806320d1ceaf1461047257806320d88ac714610487578063394b71cf1461049c57600080fd5b80630c80447a1161036a5780630c80447a146104065780631113ef5214610428578063180b0d7e146104485780631fe4a6861461045d57600080fd5b806303140ff41461039c57806306974e8d146103c457806309ff18f0146103f157600080fd5b3661039757005b600080fd5b3480156103a857600080fd5b506103b16109ce565b6040519081526020015b60405180910390f35b3480156103d057600080fd5b506103d9610a3e565b6040516001600160a01b0390911681526020016103bb565b3480156103fd57600080fd5b506103d9610aa9565b34801561041257600080fd5b50610426610421366004615390565b610ad3565b005b34801561043457600080fd5b506104266104433660046153ad565b610b98565b34801561045457600080fd5b506103b1610ca8565b34801561046957600080fd5b506103d9610cef565b34801561047e57600080fd5b506103b1610d19565b34801561049357600080fd5b506103b1610d60565b3480156104a857600080fd5b506103d973ba12222222228d8ba445958a75a0704d566bf2c881565b3480156104d057600080fd5b506104266104df3660046153ee565b610d8a565b3480156104f057600080fd5b506104f9610eb4565b60405190151581526020016103bb565b34801561051557600080fd5b506103b1610edf565b34801561052a57600080fd5b50610426610539366004615407565b610f75565b34801561054a57600080fd5b5061042661055936600461544e565b611077565b34801561056a57600080fd5b506104266113d3565b34801561057f57600080fd5b506104f961058e366004615390565b61147e565b34801561059f57600080fd5b506104266114c5565b3480156105b457600080fd5b506103d9611663565b3480156105c957600080fd5b506103b160025481565b3480156105df57600080fd5b506103b16116b8565b3480156105f457600080fd5b506103d96116e2565b34801561060957600080fd5b506103d961170c565b34801561061e57600080fd5b506103b1611736565b34801561063357600080fd5b50610426610642366004615503565b611760565b34801561065357600080fd5b506103d96106623660046153ee565b611820565b34801561067357600080fd5b5061042661184a565b34801561068857600080fd5b506103b16118d9565b34801561069d57600080fd5b506104266106ac366004615390565b611903565b3480156106bd57600080fd5b506104266106cc366004615407565b611a05565b3480156106dd57600080fd5b50610426611b01565b3480156106f257600080fd5b506106fb611b9f565b6040805192151583526001600160a01b039091166020830152016103bb565b34801561072657600080fd5b506103d9611beb565b34801561073b57600080fd5b506103b1611c15565b34801561075057600080fd5b506103b1611c3f565b34801561076557600080fd5b506103b1611c86565b34801561077a57600080fd5b506104f9610789366004615390565b611cb0565b34801561079a57600080fd5b506103b1611cc3565b3480156107af57600080fd5b506103b1611d0a565b3480156107c457600080fd5b50610426611d2a565b3480156107d957600080fd5b506104266107e83660046153ee565b611ec4565b3480156107f957600080fd5b5060016104f9565b34801561080d57600080fd5b5061081661205c565b6040516103bb9190615565565b34801561082f57600080fd5b5061042661083e366004615390565b612087565b34801561084f57600080fd5b5061042661085e366004615578565b6120fd565b34801561086f57600080fd5b506103b16121c3565b34801561088457600080fd5b506104266108933660046153ee565b6122ad565b3480156108a457600080fd5b506104f961257b565b3480156108b957600080fd5b506103b160015481565b3480156108cf57600080fd5b506104f96108de366004615390565b60056020526000908152604090205460ff1681565b3480156108ff57600080fd5b506104266125a6565b34801561091457600080fd5b506104f9612648565b34801561092957600080fd5b506103b1612673565b34801561093e57600080fd5b506103d973f49440c1f012d041802b25a73e5b0b9166a75c0281565b34801561096657600080fd5b50610426610975366004615742565b61269d565b34801561098657600080fd5b506103d96128e2565b34801561099b57600080fd5b506103d9612937565b3480156109b057600080fd5b506103d9612961565b3480156109c557600080fd5b506103d961298b565b60006109d86128e2565b6001600160a01b03166303140ff46040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a399190615864565b905090565b6000610a486128e2565b6001600160a01b03166306974e8d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a39919061587d565b6000610a397f29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb844475490565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa158015610b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b4d919061589a565b610b725760405162461bcd60e51b8152600401610b69906158b7565b60405180910390fd5b610b7b816129b5565b610b95610b90610b89611c3f565b42906129de565b6129f1565b50565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa158015610bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c12919061589a565b610c2e5760405162461bcd60e51b8152600401610b69906158b7565b610c378261147e565b15610c8f5760405162461bcd60e51b815260206004820152602260248201527f746f6b656e20697320646566696e6564206173206e6f742073616c76616761626044820152616c6560f01b6064820152608401610b69565b610ca36001600160a01b0383168483612a1a565b505050565b6000610cb26128e2565b6001600160a01b031663180b0d7e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a15573d6000803e3d6000fd5b6000610a397f6a7b588c950d46e2de3db2f157e5e0e4f29054c8d60f17bf0c30352e223a458d5490565b6000610d236128e2565b6001600160a01b03166320d1ceaf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a15573d6000803e3d6000fd5b6000610a397f4e92df66cc717205e8df80bec55fc1429f703d590a2d456b97b74f0008b4a3ee5490565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa158015610de0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e04919061589a565b610e205760405162461bcd60e51b8152600401610b69906158b7565b610e28611c86565b8110610e8b5760405162461bcd60e51b815260206004820152602c60248201527f5461726765742073686f756c64206265206c6f776572207468616e20636f6c6c60448201526b185d195c985b081b1a5b5a5d60a21b6064820152608401610b69565b610b957fa65533f4b41f3786d877c8fdd4ae6d27ada84e1d9c62ea3aca309e9aa03af1cd829055565b6000610a397f656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb6612a7d565b6000610a39610eec6116b8565b610f6f610ef7612673565b610eff61170c565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015610f45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f699190615864565b906129de565b90612a90565b600054610100900460ff1680610f8e575060005460ff16155b610faa5760405162461bcd60e51b8152600401610b69906158df565b600054610100900460ff16158015610fcc576000805461ffff19166101011790555b73a0b86991c6218b36c1d19d4a2e9eb0ce3606eb487398c23e9d8f34fefb1b7bd6a91b7ff122f4e16f5c7372e95b8931767c79ba4eee721354d6e99a61d00473c02aaa39b223fe8d0a0e5c4f27ead9083c756cc261103787858886868660006102ed6103e882611077565b60408051602081019091526001600160a01b038216815261105c906004906001615301565b50505050508015610ca3576000805461ff0019169055505050565b600054610100900460ff1680611090575060005460ff16155b6110ac5760405162461bcd60e51b8152600401610b69906158df565b600054610100900460ff161580156110ce576000805461ffff19166101011790555b6110f08b8b8b8b8a73f49440c1f012d041802b25a73e5b0b9166a75c026120fd565b896001600160a01b0316886001600160a01b031663b16a19de6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115c919061587d565b6001600160a01b0316146111a85760405162461bcd60e51b81526020600482015260136024820152720aadcc8cae4d8f2d2dcce40dad2e6dac2e8c6d606b1b6044820152606401610b69565b896001600160a01b0316876001600160a01b031663b16a19de6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611214919061587d565b6001600160a01b0316146112605760405162461bcd60e51b81526020600482015260136024820152720aadcc8cae4d8f2d2dcce40dad2e6dac2e8c6d606b1b6044820152606401610b69565b61126988612a9c565b61127287612ac5565b8284106112d65760405162461bcd60e51b815260206004820152602c60248201527f4e756d657261746f722073686f756c6420626520736d616c6c6572207468616e60448201526b103232b737b6b4b730ba37b960a11b6064820152608401610b69565b83851061132f5760405162461bcd60e51b815260206004820152602160248201527f5461726765742073686f756c64206265206c6f776572207468616e206c696d696044820152601d60fa1b6064820152608401610b69565b61133883612aee565b6113617f129eccdfbcf3761d8e2f66393221fa8277b7623ad13ed7693a0025435931c64a859055565b61138a7fa65533f4b41f3786d877c8fdd4ae6d27ada84e1d9c62ea3aca309e9aa03af1cd869055565b6113b47f1841be4c16015a744c9fbf595f7c6b32d40278c16c1fc7cf2de88c6348de44ba83612b17565b80156113c6576000805461ff00191690555b5050505050505050505050565b6113db61298b565b6001600160a01b0316336001600160a01b0316148061141257506113fd6128e2565b6001600160a01b0316336001600160a01b0316145b806114355750611420611663565b6001600160a01b0316336001600160a01b0316145b6114515760405162461bcd60e51b8152600401610b699061592d565b611459612b31565b6000611463612c3f565b905061146e81612e3c565b6114766133fe565b610b95613518565b600061148861170c565b6001600160a01b0316826001600160a01b031614806114bf57506114aa611beb565b6001600160a01b0316826001600160a01b0316145b92915050565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa15801561151b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153f919061589a565b61155b5760405162461bcd60e51b8152600401610b69906158b7565b611565600061354d565b61156f6001613586565b611577613518565b61157f611beb565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190615864565b6001556115f4612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561163a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165e9190615864565b600255565b600061167b600080516020615b398339815191525490565b6001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b6000610a397f0af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd975490565b6000610a397f3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b85490565b6000610a397fa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e5305490565b6000610a397fa65533f4b41f3786d877c8fdd4ae6d27ada84e1d9c62ea3aca309e9aa03af1cd5490565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa1580156117b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117da919061589a565b6117f65760405162461bcd60e51b8152600401610b69906158b7565b610b957f1841be4c16015a744c9fbf595f7c6b32d40278c16c1fc7cf2de88c6348de44ba82612b17565b6004818154811061183057600080fd5b6000918252602090912001546001600160a01b0316905081565b600054610100900460ff1680611863575060005460ff16155b61187f5760405162461bcd60e51b8152600401610b69906158df565b600054610100900460ff161580156118a1576000805461ffff19166101011790555b60017f62ae7bf2df4e95c187ea09c8c47c3fc3d9abc36298f5b5b6c5e2e7b4b291fe25558015610b95576000805461ff001916905550565b6000610a397f414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22e5490565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa158015611959573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197d919061589a565b6119995760405162461bcd60e51b8152600401610b69906158b7565b6001600160a01b0381166119ef5760405162461bcd60e51b815260206004820152601e60248201527f6e65772073746f726167652073686f756c646e277420626520656d70747900006044820152606401610b69565b610b9581600080516020615b3983398151915255565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa158015611a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7f919061589a565b611a9b5760405162461bcd60e51b8152600401610b69906158b7565b60405163bdac7ca360e01b81523060048201526001600160a01b03828116602483015283169063bdac7ca3906044015b600060405180830381600087803b158015611ae557600080fd5b505af1158015611af9573d6000803e3d6000fd5b505050505050565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa158015611b57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b7b919061589a565b611b975760405162461bcd60e51b8152600401610b69906158b7565b6115776135b0565b600080611baa6118d9565b15801590611bbe5750611bbb6118d9565b42115b8015611bdb57506000611bcf610aa9565b6001600160a01b031614155b611be3610aa9565b915091509091565b6000610a397f8cdee58637b787efaa2d78bb1da1e053a2c91e61640b32339bfbba65c00abd685490565b6000610a397fc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afc5490565b6000611c496128e2565b6001600160a01b031663a83656936040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a15573d6000803e3d6000fd5b6000610a397f129eccdfbcf3761d8e2f66393221fa8277b7623ad13ed7693a0025435931c64a5490565b60006114bf82611cbe61205c565b6135c4565b6000611ccd6128e2565b6001600160a01b031663b60f151a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a15573d6000803e3d6000fd5b6000610a39611d17611cc3565b610f69611d22610d19565b610f696109ce565b611d3261298b565b6001600160a01b0316336001600160a01b03161480611d695750611d546128e2565b6001600160a01b0316336001600160a01b0316145b80611d8c5750611d77611663565b6001600160a01b0316336001600160a01b0316145b611da85760405162461bcd60e51b8152600401610b699061592d565b6000611db261170c565b9050611dbe600161354d565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611e05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e299190615864565b1115611eb357611eb3611e3a61298b565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015611e7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ea29190615864565b6001600160a01b0384169190612a1a565b611ebb613518565b5061157f611beb565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa158015611f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3e919061589a565b611f5a5760405162461bcd60e51b8152600401610b69906158b7565b611f62610d60565b811115611fbf5760405162461bcd60e51b815260206004820152602560248201527f436f6c6c61746572616c20666163746f722063616e6e6f742062652074686973604482015264040d0d2ced60db1b6064820152608401610b69565b611fc7611736565b81116120335760405162461bcd60e51b815260206004820152603560248201527f436f6c6c61746572616c20666163746f722073686f756c642062652068696768604482015274195c881d1a185b88189bdc9c9bddc81d185c99d95d605a1b6064820152608401610b69565b610b957f129eccdfbcf3761d8e2f66393221fa8277b7623ad13ed7693a0025435931c64a829055565b6060610a397f45418d9b5c2787ae64acbffccad43f2b487c1a16e24385aa9d2b059f9d1d163c61361f565b600054610100900460ff16806120a0575060005460ff16155b6120bc5760405162461bcd60e51b8152600401610b69906158df565b600054610100900460ff161580156120de576000805461ffff19166101011790555b6120e7826136ce565b80156120f9576000805461ff00191690555b5050565b600054610100900460ff1680612116575060005460ff16155b6121325760405162461bcd60e51b8152600401610b69906158df565b600054610100900460ff16158015612154576000805461ffff19166101011790555b61215d87612087565b61216686613743565b61216f8561376c565b61217884613795565b612181836137be565b61218a826137e7565b6121946001613810565b61219e600061383a565b6121a86000613586565b80156121ba576000805461ff00191690555b50505050505050565b6000610a396121d0612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612216573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223a9190615864565b612242611beb565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a08231906024015b602060405180830381865afa158015612289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f9190615864565b6122b561298b565b6001600160a01b0316336001600160a01b031614806122ec57506122d76128e2565b6001600160a01b0316336001600160a01b0316145b8061230f57506122fa611663565b6001600160a01b0316336001600160a01b0316145b61232b5760405162461bcd60e51b8152600401610b699061592d565b612333613863565b600061233d61170c565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015612387573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ab9190615864565b90508083116123d7576123d06123bf61298b565b6001600160a01b0384169085612a1a565b505061248e565b60006123e38483612a90565b90506123ee816138e3565b61240a6123f961298b565b6001600160a01b0385169086612a1a565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa15801561244e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124729190615864565b91508115612482576124826133fe565b61248a613518565b5050505b612496611beb565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125009190615864565b60015561250b612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612551573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125759190615864565b60025550565b6000610a397fa07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591a612a7d565b600080516020615b39833981519152546040516337b87c3960e21b81523360048201526001600160a01b03919091169063dee1f0e490602401602060405180830381865afa1580156125fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612620919061589a565b61263c5760405162461bcd60e51b8152600401610b69906158b7565b6126466000613586565b565b6000610a397f1841be4c16015a744c9fbf595f7c6b32d40278c16c1fc7cf2de88c6348de44ba612a7d565b6000610a397f280539da846b4989609abdccfea039bd1453e4f710c670b29b9eeaca0730c1a25490565b3373ba12222222228d8ba445958a75a0704d566bf2c8146126bd57600080fd5b60035460ff1615806126d75750600354610100900460ff16155b61271a5760405162461bcd60e51b81526020600482015260146024820152734f6e6c79206f6e652063616e206265207472756560601b6044820152606401610b69565b60035460ff16806127325750600354610100900460ff165b6127735760405162461bcd60e51b81526020600482015260126024820152714f6e652068617320746f206265207472756560701b6044820152606401610b69565b600061277d61170c565b905060006127c8846000815181106127975761279761598a565b6020026020010151866000815181106127b2576127b261598a565b60200260200101516129de90919063ffffffff16565b60035490915060ff1615612807576127f9856000815181106127ec576127ec61598a565b6020026020010151613a64565b61280281613b7d565b6128ba565b6000612811612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015612857573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287b9190615864565b905060006128a3876000815181106128955761289561598a565b602002602001015183613c53565b90506128ae81613c69565b6128b783613d58565b50505b611af96001600160a01b03831673ba12222222228d8ba445958a75a0704d566bf2c883612a1a565b60006128fa600080516020615b398339815191525490565b6001600160a01b031663f77c47916040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a85573d6000803e3d6000fd5b6000610a397fdae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bbf5490565b6000610a397f29e482e0e21cdcc43d1f0a48ba975f14078bf56d1ca40ed3f48e655ac06df8cb5490565b6000610a397fefd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d415490565b610b957f29f7fcd4fe2517c1963807a1ec27b0e45e67c60a874d5eeac7a0b1ab1bb84447829055565b60006129ea82846159b6565b9392505050565b610b957f414c5263b05428f1be1bfa98e25407cc78dd031d0d3cd2a2e3d63b488804f22e829055565b6040516001600160a01b038316602482015260448101829052610ca390849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613e20565b6000612a87825490565b60011492915050565b60006129ea82846159c9565b610b957f8cdee58637b787efaa2d78bb1da1e053a2c91e61640b32339bfbba65c00abd68829055565b610b957f29e482e0e21cdcc43d1f0a48ba975f14078bf56d1ca40ed3f48e655ac06df8cb829055565b610b957f4e92df66cc717205e8df80bec55fc1429f703d590a2d456b97b74f0008b4a3ee829055565b6120f98282612b27576000612b2a565b60015b60ff169055565b612b39613863565b6000612b436116b8565b9050612710811115610b9557612b5881613d58565b6000612b6261170c565b6040516370a0823160e01b8152306004820152909150612bd89083906001600160a01b038416906370a0823190602401602060405180830381865afa158015612baf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd39190615864565b613c53565b91506000612bff612be7611d0a565b612bf9612bf2610ca8565b8690613ef5565b90613f01565b9050612c0b8282613f0d565b610ca37f0af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd97612c3b85610f6f6116b8565b9055565b600080612c4a611beb565b90506000816001600160a01b03166375d264136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb0919061587d565b60408051600280825260608201835292935060009290916020830190803683370190505090508281600081518110612cea57612cea61598a565b60200260200101906001600160a01b031690816001600160a01b031681525050612d12612961565b81600181518110612d2557612d2561598a565b6001600160a01b0392831660209182029290920101526040516370a0823160e01b81523060048201526000918516906370a0823190602401602060405180830381865afa158015612d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9e9190615864565b60405163bb492bf560e01b81529091506001600160a01b0384169063bb492bf590612dcf90859030906004016159dc565b600060405180830381600087803b158015612de957600080fd5b505af1158015612dfd573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152612e3392508391506001600160a01b038716906370a082319060240161226c565b94505050505090565b612e44610eb4565b612e8d577f408a4b113351e616bb41bad991f29bbad84b43c3810e7492a6bc7c6388dfe0c2612e71610eb4565b604080519115158252600060208301520160405180910390a150565b6000612e97612937565b90506000612ea3610a3e565b905060005b60045481101561323457600060048281548110612ec757612ec761598a565b60009182526020822001546001600160a01b03169150612ee5611beb565b6001600160a01b0316826001600160a01b031603612f17575084612f0881613d58565b612f1061170c565b915061314e565b6001600160a01b03821660009081526005602052604090205460ff16156130e3576040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612f7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fa09190615864565b905080156130de576000826001600160a01b0316637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015612fe8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061300c919061587d565b9050826001600160a01b031663b16a19de6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561304c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613070919061587d565b604051631a4ca37b60e21b81526001600160a01b03808316600483015260248201859052306044830152919450908216906369328dec90606401600060405180830381600087803b1580156130c457600080fd5b505af11580156130d8573d6000803e3d6000fd5b50505050505b61314e565b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015613127573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061314b9190615864565b90505b8060000361315d57505061322c565b846001600160a01b0316826001600160a01b0316146132295761318b6001600160a01b03831685600061437e565b61319f6001600160a01b038316858361437e565b60405163d5bcb9b560e01b81526001600160a01b0383811660048301528681166024830152604482018390526001606483015230608483015285169063d5bcb9b59060a4016020604051808303816000875af1158015613203573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132279190615864565b505b50505b600101612ea8565b506040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561327c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a09190615864565b90506132ac8382613f0d565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156132f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133179190615864565b905080600003613328575050505050565b600061333261170c565b9050846001600160a01b0316816001600160a01b031614611af9576133626001600160a01b03861685600061437e565b6133766001600160a01b038616858461437e565b60405163d5bcb9b560e01b81526001600160a01b0386811660048301528281166024830152604482018490526001606483015230608483015285169063d5bcb9b59060a4016020604051808303816000875af11580156133da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ba9190615864565b61340661257b565b156134705760405162461bcd60e51b815260206004820152603460248201527f416374696f6e20626c6f636b65642061732074686520737472617465677920696044820152737320696e20656d657267656e637920737461746560601b6064820152608401610b69565b600061347a61170c565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156134c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134e89190615864565b905080156134f9576134f981613a64565b613501612648565b1561350e5761350e614493565b505061157f611beb565b60006135226121c3565b9050610b957f280539da846b4989609abdccfea039bd1453e4f710c670b29b9eeaca0730c1a2829055565b80156135765761355b612b31565b6000613565612c3f565b905061357081612e3c565b5061357e565b61357e613863565b610b956147dd565b610b957fa07a20a2d463a602c2b891eb35f244624d9068572811f63d0e094072fb54591a82612b17565b6135ba60006129b5565b61264660006129f1565b6000805b825181101561361557836001600160a01b03168382815181106135ed576135ed61598a565b60200260200101516001600160a01b03160361360d5760019150506114bf565b6001016135c8565b5060009392505050565b6060613629825490565b67ffffffffffffffff811115613641576136416155fa565b60405190808252806020026020018201604052801561366a578160200160208202803683370190505b50905060005b81518110156136c857613696816136888560016159b6565b61369291906159b6565b5490565b8282815181106136a8576136a861598a565b6001600160a01b0390921660209283029190910190910152600101613670565b50919050565b600054610100900460ff16806136e7575060005460ff16155b6137035760405162461bcd60e51b8152600401610b69906158df565b600054610100900460ff16158015613725576000805461ffff19166101011790555b61373b82600080516020615b3983398151915255565b6120e761184a565b610b957fa1709211eeccf8f4ad5b6700d52a1a9525b5f5ae1e9e5f9e5a0c2fc23c86e530829055565b610b957fefd7c7d9ef1040fc87e7ad11fe15f86e1d11e1df03c6d7c87f7e1f4041f08d41829055565b610b957f3d9bb16e77837e25cada0cf894835418b38e8e18fbec6cfd192eb344bebfa6b8829055565b610b957fdae0aafd977983cb1e78d8f638900ff361dc3c48c43118ca1dd77d1af3f47bbf829055565b610b957f6a7b588c950d46e2de3db2f157e5e0e4f29054c8d60f17bf0c30352e223a458d829055565b610b957f656de32df98753b07482576beb0d00a6b949ebf84c066c765f54f26725221bb682612b17565b610b957fc403216a7704d160f6a3b5c3b149a1226a6080f0a5dd27b27d9ba9c022fa0afc829055565b600061386d612673565b6138756121c3565b11156138b3576000613890613888612673565b610f6f6121c3565b90506138af61389d610ca8565b612bf96138a8611d0a565b8490613ef5565b9150505b6114767f0af7af9f5ccfa82c3497f40c7c382677637aee27293a6243a22216b51481bd97612c3b83610f696116b8565b60006138ed61170c565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015613937573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061395b9190615864565b905061398183613969612648565b61397457600061498e565b61397c611736565b61498e565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa1580156139c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139ec9190615864565b9050836139f98284612a90565b1015613a5e5760405162461bcd60e51b815260206004820152602e60248201527f556e61626c6520746f2077697468647261772074686520656e7469726520616d60448201526d6f756e74556e6465726c79696e6760901b6064820152608401610b69565b50505050565b80600003613a6f5750565b6000613a7961170c565b90506000613a85611beb565b6001600160a01b0316637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ac2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ae6919061587d565b9050613afd6001600160a01b03831682600061437e565b613b116001600160a01b038316828561437e565b60405163617ba03760e01b81526001600160a01b038381166004830152602482018590523060448301526000606483015282169063617ba037906084015b600060405180830381600087803b158015613b6957600080fd5b505af11580156121ba573d6000803e3d6000fd5b80600003613b885750565b6000613b92611beb565b6001600160a01b0316637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bf3919061587d565b9050806001600160a01b031663a415bcad613c0c61170c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052600260448201526000606482015230608482015260a401611acb565b6000818310613c6257816129ea565b5090919050565b80600003613c745750565b6000613c7e61170c565b90506000613c8a611beb565b6001600160a01b0316637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ceb919061587d565b9050613d026001600160a01b03831682600061437e565b613d166001600160a01b038316828561437e565b60405163573ade8160e01b81526001600160a01b038381166004830152602482018590526002604483015230606483015282169063573ade8190608401613b4f565b80600003613d635750565b6000613d6d611beb565b6001600160a01b0316637535d2466040518163ffffffff1660e01b8152600401602060405180830381865afa158015613daa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613dce919061587d565b9050806001600160a01b03166369328dec613de761170c565b6040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260248101859052306044820152606401611acb565b6000613e75826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614cd79092919063ffffffff16565b9050805160001480613e96575080806020019051810190613e96919061589a565b610ca35760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610b69565b60006129ea8284615a06565b60006129ea8284615a1d565b60648111156141fe576000613f20610ca8565b90506000613f3382612bf9612bf26109ce565b90506000613f4d83612bf9613f46610d19565b8790613ef5565b90506000613f6784612bf9613f60611cc3565b8890613ef5565b90506000613f73610cef565b90506000613f7f6128e2565b6001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015613fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fe0919061587d565b6040805189815260208101869052428183015290519192506001600160a01b038a16917f1072be0ffac0739a43e2bbe8b9b7dd277f79e5eed4fc2bac67005b3f09118a7d9181900360600190a2876001600160a01b0316816001600160a01b03167fa9dc538e563d9581dd26a09bae7f821924cec58d0811f80e8462740f2adab4c7898742604051614085939291909283526020830191909152604082015260600190565b60405180910390a3876001600160a01b0316826001600160a01b03167f11b8e2ade018b082c0f17123af08137fdf13800d50b83fda08b49ba4ca2aa5cd8988426040516140e5939291909283526020830191909152604082015260600190565b60405180910390a360006140f76128e2565b6001600160a01b031663a98e929c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015614134573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614158919061587d565b905061416f6001600160a01b038a1682600061437e565b6141836001600160a01b038a16828a61437e565b604051631112a1b760e11b81526001600160a01b038a81166004830152602482018690526044820188905260648201879052821690632225436e90608401600060405180830381600087803b1580156141db57600080fd5b505af11580156141ef573d6000803e3d6000fd5b50505050505050505050505050565b6040805160008082526020820152428183015290516001600160a01b038416917f1072be0ffac0739a43e2bbe8b9b7dd277f79e5eed4fc2bac67005b3f09118a7d919081900360600190a2816001600160a01b031661425b6128e2565b6001600160a01b0316635aa6e6756040518163ffffffff1660e01b8152600401602060405180830381865afa158015614298573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142bc919061587d565b6001600160a01b03167fa9dc538e563d9581dd26a09bae7f821924cec58d0811f80e8462740f2adab4c76000804260405161430a939291909283526020830191909152604082015260600190565b60405180910390a3816001600160a01b0316614324610cef565b6001600160a01b03167f11b8e2ade018b082c0f17123af08137fdf13800d50b83fda08b49ba4ca2aa5cd60008042604051614372939291909283526020830191909152604082015260600190565b60405180910390a35050565b8015806143f85750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156143d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143f69190615864565b155b6144635760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610b69565b6040516001600160a01b038316602482015260448101829052610ca390849063095ea7b360e01b90606401612a46565b600061449d610d60565b905060006144a9611736565b905060006144b5611beb565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156144fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061451f9190615864565b9050600061452b612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015614571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145959190615864565b905060006145a38383612a90565b905060006145be6145b48787612a90565b612bf98488613ef5565b90506000818411156145dc576145d460006138e3565b5060006145e9565b6145e68285612a90565b90505b60006145f361170c565b6040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c860048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015614651573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146759190615864565b9050808311156146905761468b87878b8b614cee565b6147d2565b604080516001808252818301909252600091602080830190803683375050604080516001808252818301909252929350600092915060208083019080368337019050506040805160006020820181905292935001604051602081830303815290604052905084836000815181106147095761470961598a565b60200260200101906001600160a01b031690816001600160a01b031681525050858260008151811061473d5761473d61598a565b60209081029190910101526003805460ff19166001179055604051632e1c224f60e11b815273ba12222222228d8ba445958a75a0704d566bf2c890635c38449e90614792903090879087908790600401615a8f565b600060405180830381600087803b1580156147ac57600080fd5b505af11580156147c0573d6000803e3d6000fd5b50506003805460ff1916905550505050505b505050505050505050565b60006147e7611beb565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015614831573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148559190615864565b90506000614861612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156148a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148cb9190615864565b905060006148e96148df6001610f696116b8565b610f6f8585612a90565b90506148f681600061498e565b6040516370a0823160e01b81523060048201526001600160a01b038516906370a0823190602401602060405180830381865afa15801561493a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061495e9190615864565b92506149686116b8565b831115613a5e57613a5e6149896149826001610f696116b8565b8590612a90565b613d58565b6000614998611beb565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156149de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a029190615864565b90506000614a0e612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015614a54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614a789190615864565b9050600080614a878484612a90565b90506000614a958288612a90565b9050614ab0614aa687610f6f610d60565b612bf98389613ef5565b92505050600081831015614ac657506000614ad3565b614ad08383612a90565b90505b6000614add61170c565b6040516370a0823160e01b815273ba12222222228d8ba445958a75a0704d566bf2c860048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015614b3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614b5f9190615864565b905080831115614b8257614b7d888787614b77610d60565b8b614ed6565b614ccd565b60408051600180825281830190925260009160208083019080368337505060408051600180825281830190925292935060009291506020808301908036833701905050604080516000602082018190529293500160405160208183030381529060405290508483600081518110614bfb57614bfb61598a565b60200260200101906001600160a01b031690816001600160a01b0316815250508582600081518110614c2f57614c2f61598a565b60209081029190910101526003805461ff001916610100179055604051632e1c224f60e11b815273ba12222222228d8ba445958a75a0704d566bf2c890635c38449e90614c86903090879087908790600401615a8f565b600060405180830381600087803b158015614ca057600080fd5b505af1158015614cb4573d6000803e3d6000fd5b50506003805461ff0019169055506113c690508b613d58565b5050505050505050565b6060614ce68484600085615188565b949350505050565b6000614cf861170c565b90506000614d068686612a90565b90506000614d21614d178686612a90565b612bf98487613ef5565b90505b808610156121ba576000614d388288612a90565b90506000614d5688610f6f89612bf9614d4f611c86565b8e90613ef5565b9050614d6a614d658383613c53565b613b7d565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a0823190602401602060405180830381865afa158015614db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dd59190615864565b90508015614de657614de681613a64565b614dee612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015614e34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614e589190615864565b9850614e62611beb565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015614ea8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614ecc9190615864565b9950505050614d24565b6000614ee061170c565b9050600080614eef8787612a90565b90506000614efd828a612a90565b9050614f16614f0c8787612a90565b612bf98388613ef5565b925050505b808511156150de576000614f3a614f30611c86565b612bf98888613ef5565b90506000614f488784612a90565b90506000614f63614f598a85612a90565b612bd38c856129de565b9050614f6e81613d58565b6040516370a0823160e01b81523060048201526000906001600160a01b038716906370a0823190602401602060405180830381865afa158015614fb5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614fd99190615864565b9050614fed614fe88483613c53565b613c69565b614ff5612961565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa15801561503b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061505f9190615864565b9850615069611beb565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa1580156150af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906150d39190615864565b995050505050614f1b565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015615125573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906151499190615864565b905087811015614ccd57600061515f8983612a90565b9050600061516d8989612a90565b905061517c6149898383613c53565b50505050505050505050565b6060824710156151e95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610b69565b600080866001600160a01b031685876040516152059190615b09565b60006040518083038185875af1925050503d8060008114615242576040519150601f19603f3d011682016040523d82523d6000602084013e615247565b606091505b509150915061525887838387615263565b979650505050505050565b606083156152d25782516000036152cb576001600160a01b0385163b6152cb5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610b69565b5081614ce6565b614ce683838151156152e75781518083602001fd5b8060405162461bcd60e51b8152600401610b699190615b25565b828054828255906000526020600020908101928215615356579160200282015b8281111561535657825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615321565b50615362929150615366565b5090565b5b808211156153625760008155600101615367565b6001600160a01b0381168114610b9557600080fd5b6000602082840312156153a257600080fd5b81356129ea8161537b565b6000806000606084860312156153c257600080fd5b83356153cd8161537b565b925060208401356153dd8161537b565b929592945050506040919091013590565b60006020828403121561540057600080fd5b5035919050565b6000806040838503121561541a57600080fd5b82356154258161537b565b915060208301356154358161537b565b809150509250929050565b8015158114610b9557600080fd5b6000806000806000806000806000806101408b8d03121561546e57600080fd5b8a356154798161537b565b995060208b01356154898161537b565b985060408b01356154998161537b565b975060608b01356154a98161537b565b965060808b01356154b98161537b565b955060a08b01356154c98161537b565b945060c08b0135935060e08b013592506101008b013591506101208b01356154f081615440565b809150509295989b9194979a5092959850565b60006020828403121561551557600080fd5b81356129ea81615440565b600081518084526020840193506020830160005b8281101561555b5781516001600160a01b0316865260209586019590910190600101615534565b5093949350505050565b6020815260006129ea6020830184615520565b60008060008060008060c0878903121561559157600080fd5b863561559c8161537b565b955060208701356155ac8161537b565b945060408701356155bc8161537b565b935060608701356155cc8161537b565b925060808701356155dc8161537b565b915060a08701356155ec8161537b565b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715615639576156396155fa565b604052919050565b600067ffffffffffffffff82111561565b5761565b6155fa565b5060051b60200190565b600082601f83011261567657600080fd5b813561568961568482615641565b615610565b8082825260208201915060208360051b8601019250858311156156ab57600080fd5b602085015b838110156156c85780358352602092830192016156b0565b5095945050505050565b600082601f8301126156e357600080fd5b813567ffffffffffffffff8111156156fd576156fd6155fa565b615710601f8201601f1916602001615610565b81815284602083860101111561572557600080fd5b816020850160208301376000918101602001919091529392505050565b6000806000806080858703121561575857600080fd5b843567ffffffffffffffff81111561576f57600080fd5b8501601f8101871361578057600080fd5b803561578e61568482615641565b8082825260208201915060208360051b8501019250898311156157b057600080fd5b6020840193505b828410156157db5783356157ca8161537b565b8252602093840193909101906157b7565b9650505050602085013567ffffffffffffffff8111156157fa57600080fd5b61580687828801615665565b935050604085013567ffffffffffffffff81111561582357600080fd5b61582f87828801615665565b925050606085013567ffffffffffffffff81111561584c57600080fd5b615858878288016156d2565b91505092959194509250565b60006020828403121561587657600080fd5b5051919050565b60006020828403121561588f57600080fd5b81516129ea8161537b565b6000602082840312156158ac57600080fd5b81516129ea81615440565b6020808252600e908201526d4e6f7420676f7665726e616e636560901b604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526039908201527f5468652073656e6465722068617320746f2062652074686520636f6e74726f6c60408201527f6c65722c20676f7665726e616e63652c206f72207661756c7400000000000000606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b808201808211156114bf576114bf6159a0565b818103818111156114bf576114bf6159a0565b6040815260006159ef6040830185615520565b905060018060a01b03831660208301529392505050565b80820281158282048414176114bf576114bf6159a0565b600082615a3a57634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015615a5a578181015183820152602001615a42565b50506000910152565b60008151808452615a7b816020860160208601615a3f565b601f01601f19169290920160200192915050565b6001600160a01b0385168152608060208201819052600090615ab390830186615520565b82810360408401528451808252602080870192019060005b81811015615ae9578351835260209384019390920191600101615acb565b50508381036060850152615afd8186615a63565b98975050505050505050565b60008251615b1b818460208701615a3f565b9190910192915050565b6020815260006129ea6020830184615a6356fea7ec62784904ff31cbcc32d09932a58e7f1e4476e1d041995b37c917990b16dca26469706673582212201daf251063cba22bd3fb3e755ab88f419e879642a1d97072f8f5d0c4728485b564736f6c634300081a0033