0 txs
3 calls
constructor
constructor((address wrappedNativeAssetAddress) baseNativeWrapperConfig, (address admin, address definitiveAdmin, address[] definitive, address[] client) coreAccessControlConfig, (address[] swapTokens, address[] swapOutputTokens, address[] swapHandlers) coreSwapConfig, (address feeAccount) coreFeesConfig, address flashloanProviderAddress)
functions
_swapHandlers
viewfunction _swapHandlers(address) view returns (bool)
_swapOutputTokens
viewfunction _swapOutputTokens(address) view returns (bool)
_swapTokens
viewfunction _swapTokens(address) view returns (bool)
COMET_ADDRESS
viewfunction COMET_ADDRESS() view returns (address)
COMPOUND_POOL
viewfunction COMPOUND_POOL() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
FEE_ACCOUNT
viewfunction FEE_ACCOUNT() view returns (address)
getBalance
viewfunction getBalance(address assetAddress) view returns (uint256)
getCollateralAmount
viewfunction getCollateralAmount() view returns (uint256)
getCollateralToDebtPrice
viewfunction getCollateralToDebtPrice() view returns (uint256, uint256)
getDebtAmount
viewfunction getDebtAmount() view returns (uint256)
getLTV
viewfunction getLTV() view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
MAX_SWAPS_PER_BLOCK
viewfunction MAX_SWAPS_PER_BLOCK() view returns (uint256)
ROLE_CLIENT
viewfunction ROLE_CLIENT() view returns (bytes32)
ROLE_DEFINITIVE_ADMIN
viewfunction ROLE_DEFINITIVE_ADMIN() view returns (bytes32)
ROLE_DEFINITIVE
viewfunction ROLE_DEFINITIVE() view returns (bytes32)
SAFE_HARBOR_MODE_ENABLED
viewfunction SAFE_HARBOR_MODE_ENABLED() view returns (bool)
STAKED_TOKEN
viewfunction STAKED_TOKEN() view returns (address)
STAKING_TOKEN
viewfunction STAKING_TOKEN() view returns (address)
STOP_GUARDIAN_ENABLED
viewfunction STOP_GUARDIAN_ENABLED() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
supportsNativeAssets
purefunction supportsNativeAssets() pure returns (bool)
unclaimedRewards
viewfunction unclaimedRewards() view returns (address[] rewardTokens, uint256[] earnedAmounts)
WRAPPED_NATIVE_ASSET_ADDRESS
viewfunction WRAPPED_NATIVE_ASSET_ADDRESS() view returns (address)
claimAllRewards
nonpayablefunction claimAllRewards(uint256 feePct) returns (address[] rewardTokens, uint256[] earnedAmounts)
deposit
payablefunction deposit(uint256[] amounts, address[] assetAddresses) payable
disableSafeHarborMode
nonpayablefunction disableSafeHarborMode()
disableStopGuardian
nonpayablefunction disableStopGuardian()
disableSwapHandlers
nonpayablefunction disableSwapHandlers(address[] swapHandlers)
disableSwapOutputTokens
nonpayablefunction disableSwapOutputTokens(address[] swapOutputTokens)
disableSwapTokens
nonpayablefunction disableSwapTokens(address[] swapTokens)
enableSafeHarborMode
nonpayablefunction enableSafeHarborMode()
enableStopGuardian
nonpayablefunction enableStopGuardian()
enableSwapHandlers
nonpayablefunction enableSwapHandlers(address[] swapHandlers)
enableSwapOutputTokens
nonpayablefunction enableSwapOutputTokens(address[] swapOutputTokens)
enableSwapTokens
nonpayablefunction enableSwapTokens(address[] swapTokens)
enter
nonpayablefunction enter(uint256 flashloanAmount, tuple swapPayload, uint256 maxLTV)
enterMulticall
nonpayablefunction enterMulticall(uint256 borrowAmount, tuple swapPayload, uint256 maxLTV)
executeOperation
payablefunction executeOperation(address target, bytes payload) payable
exit
nonpayablefunction exit(uint256 flashloanAmount, uint256 repayAmount, uint256 decollateralizeAmount, tuple swapPayload, uint256 maxLTV)
exitMulticall
nonpayablefunction exitMulticall(uint256 decollateralizeAmount, tuple swapPayload, bool repayDebt, uint256 maxLTV)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
receiveFlashLoan
nonpayablefunction receiveFlashLoan(address[] tokens, uint256[] amounts, uint256[] feeAmounts, bytes userData)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setFlashloanProvider
nonpayablefunction setFlashloanProvider(address newProvider)
swap
nonpayablefunction swap(tuple[] payloads, address outputToken, uint256 amountOutMin, uint256 feePct) returns (uint256)
sweepDust
nonpayablefunction sweepDust()
unwrap
nonpayablefunction unwrap(uint256 amount)
unwrapAll
nonpayablefunction unwrapAll()
updateFeeAccount
nonpayablefunction updateFeeAccount(address _feeAccount)
withdraw
nonpayablefunction withdraw(uint256 amount, address erc20Token) returns (bool)
withdrawAll
nonpayablefunction withdrawAll(address[] tokens) returns (bool)
withdrawAllTo
nonpayablefunction withdrawAllTo(address[] tokens, address to) returns (bool)
withdrawTo
nonpayablefunction withdrawTo(uint256 amount, address erc20Token, address to) returns (bool)
wrap
nonpayablefunction wrap(uint256 amount)
events
Deposit
event Deposit(address indexed actor, address[] assetAddresses, uint256[] amounts)
Enter
event Enter(uint256 collateral, uint256 collateralDelta, uint256 debt, uint256 debtDelta, address[] dryAssets, int256[] dryBalanceDeltas, uint256 ltv)
Exit
event Exit(uint256 collateral, uint256 collateralDelta, uint256 debt, uint256 debtDelta, address[] dryAssets, int256[] dryBalanceDeltas, uint256 ltv)
FeeAccountUpdated
event FeeAccountUpdated(address actor, address feeAccount)
NativeAssetWrap
event NativeAssetWrap(address actor, uint256 amount, bool indexed wrappingToNative)
RewardsClaimed
event RewardsClaimed(address[] rewardTokens, uint256[] rewardAmounts, uint256[] feeAmounts)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
SafeHarborModeUpdate
event SafeHarborModeUpdate(address indexed actor, bool indexed isEnabled)
StopGuardianUpdate
event StopGuardianUpdate(address indexed actor, bool indexed isEnabled)
SwapHandled
event SwapHandled(address[] swapTokens, uint256[] swapAmounts, address outputToken, uint256 outputAmount, uint256 feeAmount)
SwapHandlerUpdate
event SwapHandlerUpdate(address actor, address swapHandler, bool isEnabled)
SwapOutputTokenUpdate
event SwapOutputTokenUpdate(address actor, address swapOutputToken, bool isEnabled)
SwapTokenUpdate
event SwapTokenUpdate(address actor, address swapToken, bool isEnabled)
SweepDust
event SweepDust(uint256 collateral, uint256 collateralDelta, uint256 debt, uint256 debtDelta, uint256 ltv)
Withdrawal
event Withdrawal(address indexed erc20Token, uint256 amount, address indexed recipient)
errors
AccountMissingRole
error AccountMissingRole(address _account, bytes32 _role)
AccountNotAdmin
error AccountNotAdmin(address)
AccountNotWhitelisted
error AccountNotWhitelisted(address)
ExceededMaxLTV
error ExceededMaxLTV()
InsufficientSwapTokenBalance
error InsufficientSwapTokenBalance()
InvalidAmount
error InvalidAmount()
InvalidERC20Address
error InvalidERC20Address()
InvalidExecutedOutputAmount
error InvalidExecutedOutputAmount()
InvalidFeePercent
error InvalidFeePercent()
InvalidInputs
error InvalidInputs()
InvalidMsgValue
error InvalidMsgValue()
InvalidOutputToken
error InvalidOutputToken()
InvalidReportedOutputAmount
error InvalidReportedOutputAmount()
InvalidRewardsClaim
error InvalidRewardsClaim()
InvalidSwapHandler
error InvalidSwapHandler()
InvalidSwapOutputToken
error InvalidSwapOutputToken()
InvalidSwapPayload
error InvalidSwapPayload()
SlippageExceeded
error SlippageExceeded(uint256 _outputAmount, uint256 _outputAmountMin)
StopGuardianEnabled
error StopGuardianEnabled()
SwapLimitExceeded
error SwapLimitExceeded()
SwapTokenIsOutputToken
error SwapTokenIsOutputToken()
UnauthenticatedFlashloan
error UnauthenticatedFlashloan()
UntrustedFlashLoanSender
error UntrustedFlashLoanSender(address)
creation bytecode
0x60e06040523480156200001157600080fd5b50604051620067d4380380620067d4833981016040819052620000349162000826565b73a17581a9e3356d9a858b789d68b4d866e593ae948580868686604051806040016040528073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc26001600160a01b03168152602001737f39c581f595b53c5cb19bd0b3f8da6c935e2ca06001600160a01b03168152508780848085808980620000be6000801b82600001516200047f60201b60201c565b620000e3600080516020620067b483398151915282602001516200047f60201b60201c565b620000fe600080516020620067b4833981519152806200048f565b60408101515160005b818110156200016b57620001627fd9c9e1a27f80559d0ef9cb96900d3b37cb5d56df00dca6d004c3b26d13df7898846040015183815181106200014e576200014e6200094f565b60200260200101516200047f60201b60201c565b60010162000107565b50620001a77fd9c9e1a27f80559d0ef9cb96900d3b37cb5d56df00dca6d004c3b26d13df7898600080516020620067b48339815191526200048f565b60608201515160005b818110156200020057620001f77f43023f179164d629e1d761fb32e2db4dbd5ce417a23159d7da9cc7b562689285856060015183815181106200014e576200014e6200094f565b600101620001b0565b50509251600180546001600160a01b0390921661010002610100600160a81b0319909216919091179055505082515160196080529150600090505b818110156200029e57600160046000856000015184815181106200026357620002636200094f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016200023b565b5060208201515160005b818110156200030b5760016005600086602001518481518110620002d057620002d06200094f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055600101620002a8565b5060408301515160005b818110156200037857600160066000876040015184815181106200033d576200033d6200094f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010162000315565b505060016007555050600880546001600160a01b039490941661010002610100600160a81b0319909416939093179092555050604080516002808252606082018352909160208301908036833750508151620003dc9260099250602001906200057a565b5081602001516009600081548110620003f957620003f96200094f565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905581516009805460019081106200043c576200043c6200094f565b600091825260209091200180546001600160a01b0319166001600160a01b039283161790559551861660a05250505050921660c052506200096595505050505050565b6200048b8282620004da565b5050565b600082815260208190526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff166200048b576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620005363390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b828054828255906000526020600020908101928215620005d2579160200282015b82811115620005d257825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906200059b565b50620005e0929150620005e4565b5090565b5b80821115620005e05760008155600101620005e5565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006365762000636620005fb565b60405290565b6001600160a01b03811681146200065257600080fd5b50565b6000602082840312156200066857600080fd5b604051602081016001600160401b03811182821017156200068d576200068d620005fb565b80604052508091508251620006a2816200063c565b905292915050565b8051620006b7816200063c565b919050565b600082601f830112620006ce57600080fd5b815160206001600160401b0380831115620006ed57620006ed620005fb565b8260051b604051601f19603f83011681018181108482111715620007155762000715620005fb565b6040529384528581018301938381019250878511156200073457600080fd5b83870191505b848210156200076057815162000750816200063c565b835291830191908301906200073a565b979650505050505050565b6000606082840312156200077e57600080fd5b604051606081016001600160401b038082118383101715620007a457620007a4620005fb565b816040528293508451915080821115620007bd57600080fd5b620007cb86838701620006bc565b83526020850151915080821115620007e257600080fd5b620007f086838701620006bc565b602084015260408501519150808211156200080a57600080fd5b506200081985828601620006bc565b6040830152505092915050565b600080600080600060a086880312156200083f57600080fd5b6200084b878762000655565b60208701519095506001600160401b03808211156200086957600080fd5b908701906080828a0312156200087e57600080fd5b6200088862000611565b825162000895816200063c565b81526020830151620008a7816200063c565b6020820152604083015182811115620008bf57600080fd5b620008cd8b828601620006bc565b604083015250606083015182811115620008e657600080fd5b620008f48b828601620006bc565b60608301525060408901519096509150808211156200091257600080fd5b5062000921888289016200076b565b93505062000933876060880162000655565b91506200094360808701620006aa565b90509295509295909350565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c051615dcb620009e96000396000818161049401528181612cf301528181612f040152818161346c015281816137060152818161377f0152818161406d015281816140d101526141d3015260008181610952015281816110d401528181613b0d0152613b8001526000818161067401526126d00152615dcb6000f3fe60806040526004361061038e5760003560e01c80637f3c505e116101dc578063cdfe4fd511610102578063ea598cb0116100a0578063f6a1e2bd1161006f578063f6a1e2bd14610aed578063f85f91b414610b0d578063f8b2cb4f14610b22578063fff13ee714610b4257610395565b8063ea598cb014610a7a578063ec5486be14610a9a578063f04f270714610aba578063f31cc89414610ada57610395565b8063de0e9a3e116100dc578063de0e9a3e14610a05578063df1714f514610a25578063e221633014610a3a578063e899d7b114610a5a57610395565b8063cdfe4fd5146109a3578063d547741f146109c5578063da632a27146109e557610395565b8063a53df2e21161017a578063c4cdee8f11610149578063c4cdee8f14610920578063c64fca1114610940578063ca6b7f1914610974578063cc0eb6c81461098957610395565b8063a53df2e21461089e578063ac9650d8146108b3578063b2178c1d146108e0578063b63025281461090057610395565b80638d65a916116101b65780638d65a916146107eb5780638d6cb2091461081b57806391d1485414610845578063a217fddf1461088957610395565b80637f3c505e1461077b5780638a8503961461079b5780638acd025e146107bb57610395565b806336568abe116102c15780635c09967a1161025f5780636d01875d1161022e5780636d01875d146106fe5780637c8bcbc0146107135780637cca687b146107285780637ebd739f1461074d57610395565b80635c09967a146106965780636568a279146106a9578063685dd655146106c9578063686f957f146106de57610395565b80634982e3b71161029b5780634982e3b7146106245780634ed2b8ac146106395780635bec2a5a1461064e5780635befc80e1461066257610395565b806336568abe146105c257806342bd0567146105e257806343520fe11461060257610395565b8063194fe0ef1161032e5780632f2ff15d116103085780632f2ff15d146105585780632f7d6d5b14610578578063312f6b8314610598578063315deeaa146105ad57610395565b8063194fe0ef146104b65780631ace952b146104f8578063248a9ca31461052857610395565b80630479d6441161036a5780630479d6441461040b578063054d026e1461043857806307dceec71461045a578063081bd2981461048257610395565b80621eab831461039c578062f714ce146103cb57806301ffc9a7146103eb57610395565b3661039557005b6060516080f35b3480156103a857600080fd5b506008546103b69060ff1681565b60405190151581526020015b60405180910390f35b3480156103d757600080fd5b506103b66103e6366004614a75565b610b62565b3480156103f757600080fd5b506103b6610406366004614aa5565b610bc3565b34801561041757600080fd5b50610420610c2a565b6040516001600160a01b0390911681526020016103c2565b34801561044457600080fd5b50610458610453366004614afa565b610c5a565b005b34801561046657600080fd5b5061042073a17581a9e3356d9a858b789d68b4d866e593ae9481565b34801561048e57600080fd5b506104207f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c257600080fd5b506104ea7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98681565b6040519081526020016103c2565b34801561050457600080fd5b506103b6610513366004614b5b565b60066020526000908152604090205460ff1681565b34801561053457600080fd5b506104ea610543366004614b78565b60009081526020819052604090206001015490565b34801561056457600080fd5b50610458610573366004614a75565b610ed0565b34801561058457600080fd5b50610458610593366004614c48565b610efa565b3480156105a457600080fd5b50610420610f36565b3480156105b957600080fd5b506104ea610f4c565b3480156105ce57600080fd5b506104586105dd366004614a75565b610f63565b3480156105ee57600080fd5b506103b66105fd366004614d21565b610fef565b34801561060e57600080fd5b506104ea600080516020615d5883398151915281565b34801561063057600080fd5b50610458611087565b34801561064557600080fd5b506104ea6110f8565b34801561065a57600080fd5b5060016103b6565b34801561066e57600080fd5b506104ea7f000000000000000000000000000000000000000000000000000000000000000081565b6104586106a4366004614d78565b61110a565b3480156106b557600080fd5b506103b66106c4366004614de4565b6111b0565b3480156106d557600080fd5b506104586111ff565b3480156106ea57600080fd5b506104586106f9366004614e26565b61128a565b34801561070a57600080fd5b506104ea611425565b34801561071f57600080fd5b5061045861142f565b34801561073457600080fd5b506001546104209061010090046001600160a01b031681565b34801561075957600080fd5b5061076d610768366004614b78565b611443565b6040516103c2929190614efc565b34801561078757600080fd5b50610458610796366004614c48565b611617565b3480156107a757600080fd5b506104586107b6366004614f21565b61166b565b3480156107c757600080fd5b506103b66107d6366004614b5b565b60056020526000908152604090205460ff1681565b3480156107f757600080fd5b506103b6610806366004614b5b565b60046020526000908152604090205460ff1681565b34801561082757600080fd5b506108306117bf565b604080519283526020830191909152016103c2565b34801561085157600080fd5b506103b6610860366004614a75565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561089557600080fd5b506104ea600081565b3480156108aa57600080fd5b50610458611808565b3480156108bf57600080fd5b506108d36108ce366004614de4565b611960565b6040516103c29190614fc1565b3480156108ec57600080fd5b506103b66108fb366004615023565b611a4c565b34801561090c57600080fd5b5061045861091b366004614c48565b611aed565b34801561092c57600080fd5b5061045861093b366004614c48565b611b26565b34801561094c57600080fd5b506104207f000000000000000000000000000000000000000000000000000000000000000081565b34801561098057600080fd5b50610458611b5f565b34801561099557600080fd5b506001546103b69060ff1681565b3480156109af57600080fd5b506104ea600080516020615d7883398151915281565b3480156109d157600080fd5b506104586109e0366004614a75565b611bae565b3480156109f157600080fd5b50610458610a00366004614b5b565b611bd3565b348015610a1157600080fd5b50610458610a20366004614b78565b611c2c565b348015610a3157600080fd5b50610458611cd2565b348015610a4657600080fd5b506104ea610a55366004615189565b611d25565b348015610a6657600080fd5b50610458610a75366004614f21565b611f50565b348015610a8657600080fd5b50610458610a95366004614b78565b6120d4565b348015610aa657600080fd5b50610458610ab5366004614c48565b612153565b348015610ac657600080fd5b50610458610ad53660046152c2565b6121a7565b610458610ae83660046153cd565b612329565b348015610af957600080fd5b50610458610b08366004614c48565b6123a6565b348015610b1957600080fd5b5060608061076d565b348015610b2e57600080fd5b506104ea610b3d366004614b5b565b6123fa565b348015610b4e57600080fd5b50610458610b5d366004614b5b565b612405565b6000610b7b600080516020615d58833981519152612437565b610b83612441565b60015460ff1615610ba7576040516363238ca360e01b815260040160405180910390fd5b610bb1838361249a565b9050610bbd6001600755565b92915050565b60006001600160e01b031982167f7965db0b000000000000000000000000000000000000000000000000000000001480610bbd57507f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b0319831614610bbd565b60006009600181548110610c4057610c40615452565b6000918252602090912001546001600160a01b0316919050565b6000610c74600080516020615d5883398151915233610860565b80610c925750610c92600080516020615d7883398151915233610860565b905080610cde57335b6040517fd52b8d2e0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b60015460ff1615610d02576040516363238ca360e01b815260040160405180910390fd5b610d0a612441565b8160016000806000610d1a610f4c565b610d22611425565b610d5760025b604051908082528060200260200182016040528015610d51578160200160208202803683370190505b506124ae565b925092509250610d668a6125d6565b6000610d70610c2a565b90506000610d7d826125e7565b905060208b013515610e5457604080516001808252818301909252600091816020015b610df46040518060e0016040528060006001600160a01b031681526020016000815260200160006001600160a01b031681526020016000815260200160001515815260200160608152602001606081525090565b815260200190600190039081610da0579050509050610e128c615468565b81600081518110610e2557610e25615452565b6020026020010181905250610e3a818461269b565b505081610e46846125e7565b610e50919061548a565b9150505b8915610e85576000610e64611425565b90506000818310610e755781610e77565b825b9050610e8281612a13565b50505b5050610e9383838387612a3d565b5050505080610ea06110f8565b1115610ebe57604051624d3d2d60e01b815260040160405180910390fd5b50610ec96001600755565b5050505050565b600082815260208190526040902060010154610eeb81612437565b610ef58383612b5c565b505050565b610f046000612437565b60015460ff1615610f28576040516363238ca360e01b815260040160405180910390fd5b610f33816001612bfa565b50565b60006009600081548110610c4057610c40615452565b6000610f5e610f59610f36565b612ccb565b905090565b6001600160a01b0381163314610fe15760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201527f20726f6c657320666f722073656c6600000000000000000000000000000000006064820152608401610cd5565b610feb8282612d78565b5050565b60008061100a600080516020615d5883398151915233610860565b806110285750611028600080516020615d7883398151915233610860565b9050806110355733610c9b565b60015460ff1615611059576040516363238ca360e01b815260040160405180910390fd5b611071600080516020615d5883398151915284612df7565b61107c858585612e63565b91505b509392505050565b60006110a1600080516020615d5883398151915233610860565b806110bf57506110bf600080516020615d7883398151915233610860565b9050806110cc5733610c9b565b610f33610a207f00000000000000000000000000000000000000000000000000000000000000006125e7565b6000610f5e611105610f36565b612eec565b611121600080516020615d58833981519152612437565b611129612441565b60015460ff161561114d576040516363238ca360e01b815260040160405180910390fd5b61115984848484613061565b336001600160a01b03167f83c419f8f26f4f5e29c5cde4c8ad1698228be27d717a8954b2465009955428ae83838787604051611198949392919061549d565b60405180910390a26111aa6001600755565b50505050565b60006111c9600080516020615d58833981519152612437565b6111d1612441565b60015460ff16156111f5576040516363238ca360e01b815260040160405180910390fd5b610bb183836131d7565b600061120b8133610860565b8061123b575061123b7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610860565b90508061128257335b6040517f3ba76d110000000000000000000000000000000000000000000000000000000081526001600160a01b039091166004820152602401610cd5565b610f336131e4565b60006112a4600080516020615d5883398151915233610860565b806112c257506112c2600080516020615d7883398151915233610860565b9050806112cf5733610c9b565b60015460ff16156112f3576040516363238ca360e01b815260040160405180910390fd5b6112fb612441565b816001600080600061130b610f4c565b611313611425565b61131d6002610d28565b92509250925060006040518060a001604052808d81526020018c81526020018b81526020018a61134c90615468565b815260200189905290508b156113b2576113ad611367610c2a565b8d60018460405160200161137b91906155ac565b60408051601f19818403018152908290526113999291602001615612565b604051602081830303815290604052613229565b6113da565b6113da816040516020016113c691906155ac565b604051602081830303815290604052613360565b506113e783838387612a3d565b50505050806113f46110f8565b111561141257604051624d3d2d60e01b815260040160405180910390fd5b5061141d6001600755565b505050505050565b6000610f5e613454565b6114396000612437565b6114416134df565b565b6060806000611460600080516020615d5883398151915233610860565b8061147e575061147e600080516020615d7883398151915233610860565b90508061148b5733610c9b565b611493612441565b60015460ff16156114b7576040516363238ca360e01b815260040160405180910390fd5b6114bf6134f1565b8151919450925060008167ffffffffffffffff8111156114e1576114e1614b91565b60405190808252806020026020018201604052801561150a578160200160208202803683370190505b5060015490915061010090046001600160a01b03161580159061152d5750600086115b156115ca5760005b828110156115c85784818151811061154f5761154f615452565b602002602001015160000361156657600101611535565b6115a386828151811061157b5761157b615452565b602002602001015186838151811061159557611595615452565b602002602001015189613526565b8282815181106115b5576115b5615452565b6020908102919091010152600101611535565b505b7fc7eae855adfe2fa05433c7329cfb31d150a38d037e9e7dabc4c2a6ea05b05dbb8585836040516115fd93929190615649565b60405180910390a150506116116001600755565b50915091565b60006116238133610860565b8061165357506116537f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610860565b9050806116605733611244565b610feb826000612bfa565b6000611685600080516020615d5883398151915233610860565b806116a357506116a3600080516020615d7883398151915233610860565b9050806116b05733610c9b565b60015460ff16156116d4576040516363238ca360e01b815260040160405180910390fd5b6116dc612441565b816000806000806116eb610f4c565b6116f3611425565b6116fd6002610d28565b925092509250600060405180606001604052808b81526020018a61172090615468565b8152602001899052905089156117545761174f61173b610c2a565b8b60008460405160200161137b9190615682565b61177c565b61177c816040516020016117689190615682565b6040516020818303038152906040526135cd565b5061178983838387612a3d565b50505050806117966110f8565b11156117b457604051624d3d2d60e01b815260040160405180910390fd5b506111aa6001600755565b6000806000806117d56117d0610f36565b6136c7565b90925090506117ec82670de0b6b3a76400006156be565b6117fe82670de0b6b3a76400006156be565b9350935050509091565b6000611822600080516020615d5883398151915233610860565b806118405750611840600080516020615d7883398151915233610860565b90508061184d5733610c9b565b60015460ff1615611871576040516363238ca360e01b815260040160405180910390fd5b611879612441565b600080611884610f4c565b61188c611425565b915091506000821180156118a05750600081115b156118bd576118bd6118b86118b3610c2a565b6125e7565b612a13565b6118d06118cb6118b3610f36565b613827565b6000806118db610f4c565b6118e3611425565b90925090507fe8c4a4d11814d75355591f17d35b50f2c5b749ca6cfa2d07d0ab6b8abc67988e82611914868261548a565b8361191f818861548a565b6119276110f8565b604080519586526020860194909452928401919091526060830152608082015260a00160405180910390a150505050610f336001600755565b6060818067ffffffffffffffff81111561197c5761197c614b91565b6040519080825280602002602001820160405280156119af57816020015b606081526020019060019003908161199a5790505b50915060005b81811015611a4457611a1f308686848181106119d3576119d3615452565b90506020028101906119e591906156e0565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061383892505050565b838281518110611a3157611a31615452565b60209081029190910101526001016119b5565b505092915050565b600080611a67600080516020615d5883398151915233610860565b80611a855750611a85600080516020615d7883398151915233610860565b905080611a925733610c9b565b611a9a612441565b60015460ff1615611abe576040516363238ca360e01b815260040160405180910390fd5b611ad6600080516020615d5883398151915284612df7565b611ae185858561385d565b915061107f6001600755565b611af76000612437565b60015460ff1615611b1b576040516363238ca360e01b815260040160405180910390fd5b610f338160016138fd565b611b306000612437565b60015460ff1615611b54576040516363238ca360e01b815260040160405180910390fd5b610f338160016139ce565b6000611b79600080516020615d5883398151915233610860565b80611b975750611b97600080516020615d7883398151915233610860565b905080611ba45733610c9b565b610f336001613a9f565b600082815260208190526040902060010154611bc981612437565b610ef58383612d78565b611bfc7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc986612437565b6008805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b0384160217905550565b6000611c46600080516020615d5883398151915233610860565b80611c645750611c64600080516020615d7883398151915233610860565b905080611c715733610c9b565b611c79612441565b611c8282613ade565b60007fdef0dc72021788040d6ab985a42aa3d5efe5a52d77485682afa2fc1525df6b7f335b604080516001600160a01b039092168252602082018690520160405180910390a2610feb6001600755565b6000611cde8133610860565b80611d0e5750611d0e7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610860565b905080611d1b5733611244565b610f336000613a9f565b600080611d40600080516020615d5883398151915233610860565b80611d5e5750611d5e600080516020615d7883398151915233610860565b905080611d6b5733610c9b565b611d73612441565b60015460ff1615611d97576040516363238ca360e01b815260040160405180910390fd5b612710831115611dba57604051638a81d3b360e01b815260040160405180910390fd5b600080611dc7888861269b565b9150915085811015611e0f576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101879052604401610cd5565b6000885167ffffffffffffffff811115611e2b57611e2b614b91565b604051908082528060200260200182016040528015611e54578160200160208202803683370190505b50805190915060005b81811015611eb5578a8181518110611e7757611e77615452565b602002602001015160400151838281518110611e9557611e95615452565b6001600160a01b0390921660209283029190910190910152600101611e5d565b5060015460009061010090046001600160a01b031615801590611ed85750600084115b8015611ee45750600088115b15611ef757611ef48a858a613526565b90505b7ffbc1db932504c9fa40e26af5592335c371e6e180dd0c10c75d7ce23bb8a1ccde83868c8785604051611f2e959493929190615727565b60405180910390a150919450505050611f476001600755565b50949350505050565b6000611f6a600080516020615d5883398151915233610860565b80611f885750611f88600080516020615d7883398151915233610860565b905080611f955733610c9b565b60015460ff1615611fb9576040516363238ca360e01b815260040160405180910390fd5b611fc1612441565b81600080600080611fd0610f4c565b611fd8611425565b611fe26002610d28565b9250925092506000611ff2610f36565b90506120006118cb826125e7565b6120098a613b6d565b60208901351561177c57604080516001808252818301909252600091816020015b61207e6040518060e0016040528060006001600160a01b031681526020016000815260200160006001600160a01b031681526020016000815260200160001515815260200160608152602001606081525090565b81526020019060019003908161202a57905050905061209c8a615468565b816000815181106120af576120af615452565b60200260200101819052506120c4818361269b565b5050505061178983838387612a3d565b60006120ee600080516020615d5883398151915233610860565b8061210c575061210c600080516020615d7883398151915233610860565b9050806121195733610c9b565b612121612441565b61212a82613b7e565b60017fdef0dc72021788040d6ab985a42aa3d5efe5a52d77485682afa2fc1525df6b7f33611ca7565b600061215f8133610860565b8061218f575061218f7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610860565b90508061219c5733611244565b610feb8260006139ce565b60085461010090046001600160a01b031633146121f2576040517f662602e5000000000000000000000000000000000000000000000000000000008152336004820152602401610cd5565b600854600160a81b900460ff16612235576040517f78a2bd6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008805460ff60a81b19169055835161229d90859060009061225957612259615452565b60200260200101518460008151811061227457612274615452565b60200260200101518460008151811061228f5761228f615452565b602002602001015184613bed565b6111aa600860019054906101000a90046001600160a01b0316836000815181106122c9576122c9615452565b6020026020010151856000815181106122e4576122e4615452565b60200260200101516122f691906157a5565b8660008151811061230957612309615452565b60200260200101516001600160a01b0316613c549092919063ffffffff16565b6123336000612437565b600080846001600160a01b03163485856040516123519291906157b8565b60006040518083038185875af1925050503d806000811461238e576040519150601f19603f3d011682016040523d82523d6000602084013e612393565b606091505b509150915081610ec957610ec981613ca4565b60006123b28133610860565b806123e257506123e27f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc98633610860565b9050806123ef5733611244565b610feb8260006138fd565b6000610bbd826125e7565b61242e7f71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc986612437565b610f3381613dc8565b610f338133612df7565b6002600754036124935760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610cd5565b6002600755565b60006124a783833361385d565b9392505050565b60606000600980548060200260200160405190810160405280929190818152602001828054801561250857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116124ea575b50505050509050805167ffffffffffffffff81111561252957612529614b91565b604051908082528060200260200182016040528015612552578160200160208202803683370190505b50815190925060005b818110156125ce5784818151811061257557612575615452565b602002602001015161259f84838151811061259257612592615452565b60200260200101516125e7565b6125a991906157c8565b8482815181106125bb576125bb615452565b602090810291909101015260010161255b565b505050919050565b610f336125e1610f36565b82613e3c565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03831601612615575047919050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015612672573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bbd91906157ef565b919050565b606060008360035443146126b3574360035560006002555b8051600260008282546126c691906157a5565b90915550506002547f00000000000000000000000000000000000000000000000000000000000000001015612727576040517f7468c7a800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03841660009081526005602052604090205460ff16612779576040517fd49aa89300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84518067ffffffffffffffff81111561279457612794614b91565b6040519080825280602002602001820160405280156127bd578160200160208202803683370190505b50935060006127cb866125e7565b905060005b828110156129f25760008882815181106127ec576127ec615452565b60209081029190910181015180516001600160a01b03166000908152600690925260409091205490915060ff1661284f576040517f2de948b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80604001516001600160a01b0316886001600160a01b03160361289e576040517ff7d6ef2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006128a9896125e7565b90506128b882604001516125e7565b8884815181106128ca576128ca615452565b6020026020010181815250506000806128e3848c613e65565b915091508a6001600160a01b0316816001600160a01b031614612918576040516231010160e51b815260040160405180910390fd5b8360600151821015612956576040517fa9fe672d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006129618c6125e7565b6060860151909150612973858361548a565b10156129ab576040517fc73b8cbc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129b885604001516125e7565b8b87815181106129ca576129ca615452565b602002602001018181516129de919061548a565b90525050600190940193506127d092505050565b50806129fd876125e7565b612a07919061548a565b93505050509250929050565b6000612a1d611425565b9050610feb612a2a610c2a565b828411612a375783613fce565b82613fce565b600080600080612a4b610f4c565b612a53611425565b612a5c886124ae565b612a646110f8565b929650909450925090506000856001811115612a8257612a826155fc565b03612ae2577f645277b71c30a3f0974624ea80277595c99572708dc58898cc2472a82a4aecf184612ab38a8261548a565b85612abe8b8261548a565b60098787604051612ad59796959493929190615808565b60405180910390a1612b52565b6001856001811115612af657612af66155fc565b03612b52577fdf72eaee67e40d79e8acfd072850a63186970e7894c5f48cbbf98597c888364a84612b27818b61548a565b85612b32818c61548a565b60098787604051612b499796959493929190615808565b60405180910390a15b5050505050505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610feb576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055612bb63390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b815160005b818110156111aa578260046000868481518110612c1e57612c1e615452565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790557fb7fb7a204fdbb641615538cf2a147d3682ea2307c8f45a172d8fed1addb1bcc133858381518110612c8457612c84615452565b602002602001015185604051612cbb939291906001600160a01b039384168152919092166020820152901515604082015260600190565b60405180910390a1600101612bff565b604051632e12a4f760e11b81523060048201526001600160a01b0382811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690635c2549ee90604401602060405180830381865afa158015612d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d6091906158b5565b6fffffffffffffffffffffffffffffffff1692915050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1615610feb576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610feb576040517f106571f00000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610cd5565b600082815b81811015612ee0576000612e9c878784818110612e8757612e87615452565b90506020020160208101906118b39190614b5b565b90508015612ed757612ed581888885818110612eba57612eba615452565b9050602002016020810190612ecf9190614b5b565b8761385d565b505b50600101612e68565b50600195945050505050565b604051630dd3126d60e21b81523060048201526000907f000000000000000000000000000000000000000000000000000000000000000090829081906001600160a01b0384169063374c49b490602401602060405180830381865afa158015612f59573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7d91906157ef565b604051632e12a4f760e11b81523060048201526001600160a01b038781166024830152851690635c2549ee90604401602060405180830381865afa158015612fc9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fed91906158b5565b6fffffffffffffffffffffffffffffffff169150915060008061300f876136c7565b909250905061301e82846158d0565b156130535761302d82846158d0565b8161303a866127106158d0565b61304491906158d0565b61304e91906156be565b613056565b60005b979650505050505050565b8083811461309b576040517ff34cfab600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060005b8381101561315f5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8686838181106130d0576130d0615452565b90506020020160208101906130e59190614b5b565b6001600160a01b031603613101576001925090508181016130a1565b61315733308a8a8581811061311857613118615452565b9050602002013589898681811061313157613131615452565b90506020020160208101906131469190614b5b565b6001600160a01b0316929190613ff6565b6001016130a1565b508115801561316d57503415155b1561318b57604051631841b4e160e01b815260040160405180910390fd5b8180156131b057508686828181106131a5576131a5615452565b905060200201353414155b156131ce57604051631841b4e160e01b815260040160405180910390fd5b50505050505050565b60006124a7838333612e63565b6001805460ff191681178155335b6001600160a01b03167fddde86bf56483edaa0fa1fc39207f2c0b047851d6969f86042875f26c432580e60405160405180910390a3565b6040805160018082528183019092526000918291906020808301908036833750506040805160018082528183019092529150602080830190803683370190505091509150848260008151811061328157613281615452565b60200260200101906001600160a01b031690816001600160a01b03168152505083816000815181106132b5576132b5615452565b602090810291909101015260088054600160a81b60ff60a81b1990911617908190556040517f5c38449e0000000000000000000000000000000000000000000000000000000081526101009091046001600160a01b031690635c38449e906133279030908690869089906004016158e7565b600060405180830381600087803b15801561334157600080fd5b505af1158015613355573d6000803e3d6000fd5b505050505050505050565b6000818060200190518101906133769190615a34565b90506133858160200151612a13565b61339281604001516125d6565b60608101516020015115610feb57604080516001808252818301909252600091816020015b61340b6040518060e0016040528060006001600160a01b031681526020016000815260200160006001600160a01b031681526020016000815260200160001515815260200160608152602001606081525090565b8152602001906001900390816133b757905050905081606001518160008151811061343857613438615452565b6020026020010181905250610ec98161344f610c2a565b61269b565b604051630dd3126d60e21b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063374c49b490602401602060405180830381865afa1580156134bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f5e91906157ef565b6001805460ff191690556000336131f2565b6060806040517faf73709900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006127108083111561354c57604051638a81d3b360e01b815260040160405180910390fd5b8061355784866158d0565b61356191906156be565b9150811561107f5773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038616016135ae576001546135a99061010090046001600160a01b031683614047565b61107f565b60015461107f906001600160a01b038781169161010090041684613c54565b6000818060200190518101906135e39190615acc565b905060006135ef610f36565b6020808401510151909150156136b057604080516001808252818301909252600091816020015b61366a6040518060e0016040528060006001600160a01b031681526020016000815260200160006001600160a01b031681526020016000815260200160001515815260200160608152602001606081525090565b81526020019060019003908161361657905050905082602001518160008151811061369757613697615452565b60200260200101819052506136ac818361269b565b5050505b6136bc6118cb826125e7565b8151610ef590613b6d565b6040517f3b3bec2e0000000000000000000000000000000000000000000000000000000081526001600160a01b038281166004830152600091829182917f000000000000000000000000000000000000000000000000000000000000000090911690633b3bec2e9060240161010060405180830381865afa158015613750573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137749190615b7e565b5050505050925050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166341976e09826040518263ffffffff1660e01b81526004016137d891906001600160a01b0391909116815260200190565b602060405180830381865afa1580156137f5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381991906157ef565b946305f5e100945092505050565b610f33613832610f36565b82614057565b60606124a78383604051806060016040528060278152602001615d9860279139614116565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038416016138935761388e8285614047565b6138a7565b6138a76001600160a01b0384168386613c54565b816001600160a01b0316836001600160a01b03167e1a143d5b175701cb3246058ffac3d63945192075a926ff73a19930f09d587a866040516138eb91815260200190565b60405180910390a35060019392505050565b815160005b818110156111aa57826006600086848151811061392157613921615452565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790557f5733671486228f19db2618b94a60764871edfd11635129ec2f88a9e76163784a3385838151811061398757613987615452565b6020026020010151856040516139be939291906001600160a01b039384168152919092166020820152901515604082015260600190565b60405180910390a1600101613902565b815160005b818110156111aa5782600560008684815181106139f2576139f2615452565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790557f022b5880fc0cf768365ffc145d8cf634cd8d1de03ea1f32b925ac5ddfe7a690e33858381518110613a5857613a58615452565b602002602001015185604051613a8f939291906001600160a01b039384168152919092166020820152901515604082015260600190565b60405180910390a16001016139d3565b6008805460ff191682151590811790915560405133907f1d77290adeca4b6b665ebfa3cc7baa148cb14968d7c4b3fdfef9527a29d91d6590600090a350565b6040517f2e1a7d4d000000000000000000000000000000000000000000000000000000008152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b158015613b5957600080fd5b505af1158015610ec9573d6000803e3d6000fd5b610f33613b78610c2a565b8261418e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bd957600080fd5b505af115801561141d573d6000803e3d6000fd5b60008082806020019051810190613c049190615c23565b90925090506000826001811115613c1d57613c1d6155fc565b03613c3257613c2b816135cd565b50506111aa565b6001826001811115613c4657613c466155fc565b0361141d57613c2b81613360565b8273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601613c93576040516376fe282b60e11b815260040160405180910390fd5b81156111aa576111aa848484614202565b600481511015613cf65760405162461bcd60e51b815260206004820152601a60248201527f43616c6c5574696c733a207461726765742072657665727428290000000000006044820152606401610cd5565b60208101517fb1b7848f000000000000000000000000000000000000000000000000000000006001600160e01b0319821601613dbf5760408051808201825260208082527f43616c6c5574696c733a207461726765742070616e69636b65643a2030785f5f90820190815260248501517f43616c6c5574696c733a207461726765742070616e69636b65643a2030780000600482811c600f908116603090810160081b918516011791909117909252925162461bcd60e51b8152919291610cd591849101615c78565b81518060208401fd5b6001805474ffffffffffffffffffffffffffffffffffffffff0019166101006001600160a01b038416021790557f63f8f609737c2dc01ff1d619040ccd6cb6d0e1e7b04f5271d959deefa09ef54b33604080516001600160a01b03928316815291841660208301520160405180910390a150565b6000613e4783612ccb565b905080821115613e5b57610ef5838261418e565b610ef5838361418e565b600080613e7184614293565b6020808601919091526040808601516001600160a01b031660009081526004909252812054608086015160ff909116159190613eb29087908790859061430e565b905060006060876080015115613f295787600001516001600160a01b031683604051613ede9190615c8b565b600060405180830381855af49150503d8060008114613f19576040519150601f19603f3d011682016040523d82523d6000602084013e613f1e565b606091505b509092509050613f9c565b613f37888960200151614473565b87600001516001600160a01b031683604051613f539190615c8b565b6000604051808303816000865af19150503d8060008114613f90576040519150601f19603f3d011682016040523d82523d6000602084013e613f95565b606091505b5090925090505b81613faa57613faa81613ca4565b80806020019051810190613fbe9190615ca7565b95509550505050505b9250929050565b6000613fd8613454565b905080821115613fec57610ef58382614057565b610ef58383614057565b8373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b03821601614035576040516376fe282b60e11b815260040160405180910390fd5b8115610ec957610ec9858585856144cf565b8015610feb57610feb8282614520565b8015610feb576140926001600160a01b038316307f00000000000000000000000000000000000000000000000000000000000000008461457b565b6040517ff2b9fdb80000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f2b9fdb8906044015b600060405180830381600087803b158015613bd957600080fd5b6060600080856001600160a01b0316856040516141339190615c8b565b600060405180830381855af49150503d806000811461416e576040519150601f19603f3d011682016040523d82523d6000602084013e614173565b606091505b50915091506141848683838761464d565b9695505050505050565b8015610feb576040517ff3fef3a30000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063f3fef3a3906044016140fc565b6040516001600160a01b038316602482015260448101829052610ef59084907fa9059cbb00000000000000000000000000000000000000000000000000000000906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b0319909316929092179091526146c6565b6000806142a383604001516125e7565b90506142ae816147ae565b6020830151915081158015906142c357508181105b156142fa576040517fd852310600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b816000036143085792915050565b50919050565b606082801561431a5750815b15614351576040517fad54954000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000831561438057507f40eb4409000000000000000000000000000000000000000000000000000000006143b6565b826143915762edfd6d60e81b6143b3565b7f6a89cd49000000000000000000000000000000000000000000000000000000005b90505b60006040518060c0016040528088604001516001600160a01b0316815260200188602001518152602001876001600160a01b03168152602001886060015181526020018860a0015181526020018860c001518152509050818160405160240161441f9190615ccc565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166001600160e01b031990931692909217909152925050505b949350505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b031682604001516001600160a01b0316036144b0578151610feb9082614047565b81516040830151610feb916001600160a01b039091169030908461457b565b6040516001600160a01b03808516602483015283166044820152606481018290526111aa9085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401614247565b600080600080600085875af1905080610ef55760405162461bcd60e51b815260206004820152601360248201527f4554485f5452414e534645525f4641494c4544000000000000000000000000006044820152606401610cd5565b8373eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeed196001600160a01b038216016145ba576040516376fe282b60e11b815260040160405180910390fd5b604051636eb1769f60e11b81526001600160a01b03858116600483015284811660248301526000919087169063dd62ed3e90604401602060405180830381865afa15801561460c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061463091906157ef565b111561464257614642858460006147e8565b610ec9858484614904565b606083156146bc5782516000036146b5576001600160a01b0385163b6146b55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610cd5565b508161446b565b61446b83836149b1565b600061471b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166149db9092919063ffffffff16565b905080516000148061473c57508080602001905181019061473c9190615d3a565b610ef55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610cd5565b80600003610f33576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015806148625750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801561483c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061486091906157ef565b155b6148d45760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e6365000000000000000000006064820152608401610cd5565b6040516001600160a01b038316602482015260448101829052610ef590849063095ea7b360e01b90606401614247565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015614954573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061497891906157ef565b90506111aa8463095ea7b360e01b8561499186866157a5565b6040516001600160a01b0390921660248301526044820152606401614247565b8151156149c15781518083602001fd5b8060405162461bcd60e51b8152600401610cd59190615c78565b606061446b848460008585600080866001600160a01b03168587604051614a029190615c8b565b60006040518083038185875af1925050503d8060008114614a3f576040519150601f19603f3d011682016040523d82523d6000602084013e614a44565b606091505b50915091506130568783838761464d565b6001600160a01b0381168114610f3357600080fd5b803561269681614a55565b60008060408385031215614a8857600080fd5b823591506020830135614a9a81614a55565b809150509250929050565b600060208284031215614ab757600080fd5b81356001600160e01b0319811681146124a757600080fd5b600060e0828403121561430857600080fd5b8015158114610f3357600080fd5b803561269681614ae1565b60008060008060808587031215614b1057600080fd5b84359350602085013567ffffffffffffffff811115614b2e57600080fd5b614b3a87828801614acf565b9350506040850135614b4b81614ae1565b9396929550929360600135925050565b600060208284031215614b6d57600080fd5b81356124a781614a55565b600060208284031215614b8a57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b60405160e0810167ffffffffffffffff81118282101715614bca57614bca614b91565b60405290565b60405160a0810167ffffffffffffffff81118282101715614bca57614bca614b91565b604051601f8201601f1916810167ffffffffffffffff81118282101715614c1c57614c1c614b91565b604052919050565b600067ffffffffffffffff821115614c3e57614c3e614b91565b5060051b60200190565b60006020808385031215614c5b57600080fd5b823567ffffffffffffffff811115614c7257600080fd5b8301601f81018513614c8357600080fd5b8035614c96614c9182614c24565b614bf3565b81815260059190911b82018301908381019087831115614cb557600080fd5b928401925b82841015613056578335614ccd81614a55565b82529284019290840190614cba565b60008083601f840112614cee57600080fd5b50813567ffffffffffffffff811115614d0657600080fd5b6020830191508360208260051b8501011115613fc757600080fd5b600080600060408486031215614d3657600080fd5b833567ffffffffffffffff811115614d4d57600080fd5b614d5986828701614cdc565b9094509250506020840135614d6d81614a55565b809150509250925092565b60008060008060408587031215614d8e57600080fd5b843567ffffffffffffffff80821115614da657600080fd5b614db288838901614cdc565b90965094506020870135915080821115614dcb57600080fd5b50614dd887828801614cdc565b95989497509550505050565b60008060208385031215614df757600080fd5b823567ffffffffffffffff811115614e0e57600080fd5b614e1a85828601614cdc565b90969095509350505050565b600080600080600060a08688031215614e3e57600080fd5b853594506020860135935060408601359250606086013567ffffffffffffffff811115614e6a57600080fd5b614e7688828901614acf565b95989497509295608001359392505050565b600081518084526020808501945080840160005b83811015614ec15781516001600160a01b031687529582019590820190600101614e9c565b509495945050505050565b600081518084526020808501945080840160005b83811015614ec157815187529582019590820190600101614ee0565b604081526000614f0f6040830185614e88565b828103602084015261107c8185614ecc565b600080600060608486031215614f3657600080fd5b83359250602084013567ffffffffffffffff811115614f5457600080fd5b614f6086828701614acf565b925050604084013590509250925092565b60005b83811015614f8c578181015183820152602001614f74565b50506000910152565b60008151808452614fad816020860160208601614f71565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561501657603f19888603018452615004858351614f95565b94509285019290850190600101614fe8565b5092979650505050505050565b60008060006060848603121561503857600080fd5b83359250602084013561504a81614a55565b91506040840135614d6d81614a55565b600067ffffffffffffffff82111561507457615074614b91565b50601f01601f191660200190565b600082601f83011261509357600080fd5b81356150a1614c918261505a565b8181528460208386010111156150b657600080fd5b816020850160208301376000918101602001919091529392505050565b600060e082840312156150e557600080fd5b6150ed614ba7565b90506150f882614a6a565b81526020820135602082015261511060408301614a6a565b60408201526060820135606082015261512b60808301614aef565b608082015260a082013567ffffffffffffffff8082111561514b57600080fd5b61515785838601615082565b60a084015260c084013591508082111561517057600080fd5b5061517d84828501615082565b60c08301525092915050565b6000806000806080858703121561519f57600080fd5b843567ffffffffffffffff808211156151b757600080fd5b818701915087601f8301126151cb57600080fd5b813560206151db614c9183614c24565b82815260059290921b8401810191818101908b8411156151fa57600080fd5b8286015b84811015615232578035868111156152165760008081fd5b6152248e86838b01016150d3565b8452509183019183016151fe565b5098506152429050898201614a6a565b979a97995050505060408601359560600135949350505050565b600082601f83011261526d57600080fd5b8135602061527d614c9183614c24565b82815260059290921b8401810191818101908684111561529c57600080fd5b8286015b848110156152b757803583529183019183016152a0565b509695505050505050565b600080600080608085870312156152d857600080fd5b843567ffffffffffffffff808211156152f057600080fd5b818701915087601f83011261530457600080fd5b81356020615314614c9183614c24565b82815260059290921b8401810191818101908b84111561533357600080fd5b948201945b8386101561535a57853561534b81614a55565b82529482019490820190615338565b9850508801359250508082111561537057600080fd5b61537c8883890161525c565b9450604087013591508082111561539257600080fd5b61539e8883890161525c565b935060608701359150808211156153b457600080fd5b506153c187828801615082565b91505092959194509250565b6000806000604084860312156153e257600080fd5b83356153ed81614a55565b9250602084013567ffffffffffffffff8082111561540a57600080fd5b818601915086601f83011261541e57600080fd5b81358181111561542d57600080fd5b87602082850101111561543f57600080fd5b6020830194508093505050509250925092565b634e487b7160e01b600052603260045260246000fd5b6000610bbd36836150d3565b634e487b7160e01b600052601160045260246000fd5b81810381811115610bbd57610bbd615474565b6040808252810184905260008560608301825b878110156154e05782356154c381614a55565b6001600160a01b03168252602092830192909101906001016154b0565b5083810360208501528481527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85111561551957600080fd5b8460051b915081866020830137016020019695505050505050565b60006001600160a01b0380835116845260208301516020850152806040840151166040850152506060820151606084015260808201511515608084015260a082015160e060a085015261558a60e0850182614f95565b905060c083015184820360c08601526155a38282614f95565b95945050505050565b602081528151602082015260208201516040820152604082015160608201526000606083015160a060808401526155e660c0840182615534565b9050608084015160a08401528091505092915050565b634e487b7160e01b600052602160045260246000fd5b60006002841061563257634e487b7160e01b600052602160045260246000fd5b8382526040602083015261446b6040830184614f95565b60608152600061565c6060830186614e88565b828103602084015261566e8186614ecc565b905082810360408401526141848185614ecc565b602081528151602082015260006020830151606060408401526156a86080840182615534565b9050604084015160608401528091505092915050565b6000826156db57634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e198436030181126156f757600080fd5b83018035915067ffffffffffffffff82111561571257600080fd5b602001915036819003821315613fc757600080fd5b60a0808252865190820181905260009060209060c0840190828a01845b828110156157695781516001600160a01b031684529284019290840190600101615744565b5050508381038285015261577d8189614ecc565b6001600160a01b03979097166040850152505050606081019290925260809091015292915050565b80820180821115610bbd57610bbd615474565b8183823760009101908152919050565b81810360008312801583831316838312821617156157e8576157e8615474565b5092915050565b60006020828403121561580157600080fd5b5051919050565b600060e082018983526020898185015288604085015287606085015260e06080850152818754808452610100860191508860005282600020935060005b8181101561586a5784546001600160a01b031683526001948501949284019201615845565b505084810360a086015261587e8188614ecc565b93505050508260c083015298975050505050505050565b80516fffffffffffffffffffffffffffffffff8116811461269657600080fd5b6000602082840312156158c757600080fd5b6124a782615895565b8082028115828204841417610bbd57610bbd615474565b6001600160a01b03851681526080602082015260006159096080830186614e88565b828103604084015261591b8186614ecc565b905082810360608401526130568185614f95565b805161269681614a55565b805161269681614ae1565b600082601f83011261595657600080fd5b8151615964614c918261505a565b81815284602083860101111561597957600080fd5b61446b826020830160208701614f71565b600060e0828403121561599c57600080fd5b6159a4614ba7565b90506159af8261592f565b8152602082015160208201526159c76040830161592f565b6040820152606082015160608201526159e26080830161593a565b608082015260a082015167ffffffffffffffff80821115615a0257600080fd5b615a0e85838601615945565b60a084015260c0840151915080821115615a2757600080fd5b5061517d84828501615945565b600060208284031215615a4657600080fd5b815167ffffffffffffffff80821115615a5e57600080fd5b9083019060a08286031215615a7257600080fd5b615a7a614bd0565b825181526020830151602082015260408301516040820152606083015182811115615aa457600080fd5b615ab08782860161598a565b6060830152506080830151608082015280935050505092915050565b600060208284031215615ade57600080fd5b815167ffffffffffffffff80821115615af657600080fd5b9083019060608286031215615b0a57600080fd5b604051606081018181108382111715615b2557615b25614b91565b60405282518152602083015182811115615b3e57600080fd5b615b4a8782860161598a565b6020830152506040830151604082015280935050505092915050565b805167ffffffffffffffff8116811461269657600080fd5b600080600080600080600080610100898b031215615b9b57600080fd5b885160ff81168114615bac57600080fd5b60208a0151909850615bbd81614a55565b60408a0151909750615bce81614a55565b9550615bdc60608a01615b66565b9450615bea60808a01615b66565b9350615bf860a08a01615b66565b9250615c0660c08a01615b66565b9150615c1460e08a01615895565b90509295985092959890939650565b60008060408385031215615c3657600080fd5b825160028110615c4557600080fd5b602084015190925067ffffffffffffffff811115615c6257600080fd5b615c6e85828601615945565b9150509250929050565b6020815260006124a76020830184614f95565b60008251615c9d818460208701614f71565b9190910192915050565b60008060408385031215615cba57600080fd5b825191506020830151614a9a81614a55565b6020815260006001600160a01b03808451166020840152602084015160408401528060408501511660608401525060608301516080830152608083015160c060a0840152615d1d60e0840182614f95565b905060a0840151601f198483030160c08501526155a38282614f95565b600060208284031215615d4c57600080fd5b81516124a781614ae156fe43023f179164d629e1d761fb32e2db4dbd5ce417a23159d7da9cc7b562689285d9c9e1a27f80559d0ef9cb96900d3b37cb5d56df00dca6d004c3b26d13df7898416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c6343000812000a71b4013af46185a424aaa4fe1eb172247581306dd750cb51be59e3864d3dc986000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc200000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000001a00000000000000000000000003b016025cd3d213c5779e10fe94a35ba440bd1c9000000000000000000000000ba12222222228d8ba445958a75a0704d566bf2c80000000000000000000000003b016025cd3d213c5779e10fe94a35ba440bd1c90000000000000000000000003b016025cd3d213c5779e10fe94a35ba440bd1c9000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d056c0eee354b24fe7c5d4ee762c4d7574badac10000000000000000000000000000000000000000000000000000000000000001000000000000000000000000d4d70647651e84536eb218d5889ab764115c4d82000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000003000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca00000000000000000000000000000000000000000000000000000000000000006000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc20000000000000000000000007f39c581f595b53c5cb19bd0b3f8da6c935e2ca0000000000000000000000000dac17f958d2ee523a2206206994597c13d831ec7000000000000000000000000a0b86991c6218b36c1d19d4a2e9eb0ce3606eb480000000000000000000000006b175474e89094c44da98b954eedeac495271d0f0000000000000000000000000000000000000000000000000000000000000002000000000000000000000000f155735395a323b2a12051b5bc076c2c49eebeb300000000000000000000000081261c3ae484d2c0873bbea019eaecebc0056f95