43 txs
73 calls
constructor
constructor(address _defaultAdmin, address _rwaToken, address _rousg, uint256 _minimumDepositAmount, uint256 _minimumRedemptionAmount)
functions
acceptedRedemptionTokens
viewfunction acceptedRedemptionTokens(address) view returns (bool)
acceptedSubscriptionTokens
viewfunction acceptedSubscriptionTokens(address) view returns (bool)
ADMIN_SUBSCRIPTION_ROLE
viewfunction ADMIN_SUBSCRIPTION_ROLE() view returns (bytes32)
adminSubscriptionChecker
viewfunction adminSubscriptionChecker() view returns (address)
CONFIGURER_ROLE
viewfunction CONFIGURER_ROLE() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
minimumDepositUSD
viewfunction minimumDepositUSD() view returns (uint256)
minimumRedemptionUSD
viewfunction minimumRedemptionUSD() view returns (uint256)
minimumRwaPrice
viewfunction minimumRwaPrice() view returns (uint256)
ondoCompliance
viewfunction ondoCompliance() view returns (address)
ondoIDRegistry
viewfunction ondoIDRegistry() view returns (address)
ondoOracle
viewfunction ondoOracle() view returns (address)
ondoRateLimiter
viewfunction ondoRateLimiter() view returns (address)
ondoRedemptionFees
viewfunction ondoRedemptionFees() view returns (address)
ondoSubscriptionFees
viewfunction ondoSubscriptionFees() view returns (address)
ondoTokenRouter
viewfunction ondoTokenRouter() view returns (address)
OUSG_TO_ROUSG_SHARES_MULTIPLIER
viewfunction OUSG_TO_ROUSG_SHARES_MULTIPLIER() view returns (uint256)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
redeemPaused
viewfunction redeemPaused() view returns (bool)
rousg
viewfunction rousg() view returns (address)
RWA_NORMALIZER
viewfunction RWA_NORMALIZER() view returns (uint256)
rwaToken
viewfunction rwaToken() view returns (address)
subscribePaused
viewfunction subscribePaused() view returns (bool)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
USD_NORMALIZER
viewfunction USD_NORMALIZER() view returns (uint256)
adminSubscribe
nonpayablefunction adminSubscribe(address recipient, uint256 rwaAmount, bytes32 metadata)
adminSubscribeRebasingOUSG
nonpayablefunction adminSubscribeRebasingOUSG(address recipient, uint256 rousgAmount, bytes32 metadata)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
pauseRedeem
nonpayablefunction pauseRedeem()
pauseSubscribe
nonpayablefunction pauseSubscribe()
redeem
nonpayablefunction redeem(uint256 rwaAmount, address receivingToken, uint256 minimumTokenReceived) returns (uint256 receiveTokenAmount)
redeemRebasingOUSG
nonpayablefunction redeemRebasingOUSG(uint256 rousgAmount, address receivingToken, uint256 minimumTokenReceived) returns (uint256 receiveTokenAmount)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
retrieveTokens
nonpayablefunction retrieveTokens(address token, address to, uint256 amount)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAcceptedRedemptionToken
nonpayablefunction setAcceptedRedemptionToken(address token, bool accepted)
setAcceptedSubscriptionToken
nonpayablefunction setAcceptedSubscriptionToken(address token, bool accepted)
setAdminSubscriptionChecker
nonpayablefunction setAdminSubscriptionChecker(address _adminSubscriptionChecker)
setMinimumDepositAmount
nonpayablefunction setMinimumDepositAmount(uint256 _minimumDepositUSD)
setMinimumRedemptionAmount
nonpayablefunction setMinimumRedemptionAmount(uint256 _minimumRedemptionUSD)
setMinimumRwaPrice
nonpayablefunction setMinimumRwaPrice(uint256 _minimumRwaPrice)
setOndoCompliance
nonpayablefunction setOndoCompliance(address _ondoCompliance)
setOndoIDRegistry
nonpayablefunction setOndoIDRegistry(address _ondoIDRegistry)
setOndoOracle
nonpayablefunction setOndoOracle(address _ondoOracle)
setOndoRateLimiter
nonpayablefunction setOndoRateLimiter(address _ondoRateLimiter)
setOndoRedemptionFees
nonpayablefunction setOndoRedemptionFees(address _ondoRedemptionFees)
setOndoSubscriptionFees
nonpayablefunction setOndoSubscriptionFees(address _ondoSubscriptionFees)
setOndoTokenRouter
nonpayablefunction setOndoTokenRouter(address _ondoTokenRouter)
subscribe
nonpayablefunction subscribe(address depositToken, uint256 depositAmount, uint256 minimumRwaReceived) returns (uint256 rwaAmountOut)
subscribeRebasingOUSG
nonpayablefunction subscribeRebasingOUSG(address depositToken, uint256 depositAmount, uint256 minimumRousgReceived) returns (uint256 rousgAmountOut)
unpauseRedeem
nonpayablefunction unpauseRedeem()
unpauseSubscribe
nonpayablefunction unpauseSubscribe()
events
AcceptedRedemptionTokenSet
event AcceptedRedemptionTokenSet(address indexed token, bool indexed accepted)
AcceptedSubscriptionTokenSet
event AcceptedSubscriptionTokenSet(address indexed token, bool indexed accepted)
AdminSubscription
event AdminSubscription(address indexed adminCaller, address indexed recipient, bytes32 indexed recipientId, uint256 rwaAmount, uint256 usdAmount, bytes32 metadata)
AdminSubscriptionCheckerSet
event AdminSubscriptionCheckerSet(address indexed oldAdminSubscriptionChecker, address indexed newAdminSubscriptionChecker)
AdminSubscriptionRebasingOUSG
event AdminSubscriptionRebasingOUSG(address indexed recipient, uint256 ousgAmount, uint256 rousgAmount, bytes32 metadata)
InstantRedemptionRebasingOUSG
event InstantRedemptionRebasingOUSG(address indexed redeemer, uint256 ousgAmountIn, uint256 rousgAmountIn, address receivingToken, uint256 receiveTokenAmount)
InstantSubscriptionRebasingOUSG
event InstantSubscriptionRebasingOUSG(address indexed recipient, uint256 ousgAmountOut, uint256 rousgAmountOut, address depositToken, uint256 depositAmount)
MinimumDepositAmountSet
event MinimumDepositAmountSet(uint256 indexed oldMinDepositAmount, uint256 indexed newMinDepositAmount)
MinimumRedemptionAmountSet
event MinimumRedemptionAmountSet(uint256 indexed oldMinRedemptionAmount, uint256 indexed newMinRedemptionAmount)
MinimumRwaPriceSet
event MinimumRwaPriceSet(uint256 indexed oldMinimumRwaPrice, uint256 indexed newMinimumRwaPrice)
OndoComplianceSet
event OndoComplianceSet(address indexed oldOndoCompliance, address indexed newOndoCompliance)
OndoIDRegistrySet
event OndoIDRegistrySet(address indexed oldOndoIDRegistry, address indexed newOndoIDRegistry)
OndoOracleSet
event OndoOracleSet(address indexed oldOndoOracle, address indexed newOndoOracle)
OndoRateLimiterSet
event OndoRateLimiterSet(address indexed oldOndoRateLimiter, address indexed newOndoRateLimiter)
OndoRedemptionFeesSet
event OndoRedemptionFeesSet(address indexed oldOndoRedemptionFees, address indexed newOndoRedemptionFees)
OndoSubscriptionFeesSet
event OndoSubscriptionFeesSet(address indexed oldOndoSubscriptionFees, address indexed newOndoSubscriptionFees)
OndoTokenRouterSet
event OndoTokenRouterSet(address indexed oldOndoTokenRouter, address indexed newOndoTokenRouter)
RedeemPaused
event RedeemPaused()
RedeemUnpaused
event RedeemUnpaused()
Redemption
event Redemption(address indexed redeemer, bytes32 indexed redeemerId, uint256 rwaAmount, address receivingToken, uint256 receiveTokenAmount, uint256 redemptionUSDValue, uint256 fee)
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)
SubscribePaused
event SubscribePaused()
SubscribeUnpaused
event SubscribeUnpaused()
Subscription
event Subscription(address indexed subscriber, bytes32 indexed subscriberId, uint256 rwaAmount, address depositToken, uint256 depositAmount, uint256 depositUSDValue, uint256 fee)
errors
AdminSubscriptionCheckerAddressCantBeZero
error AdminSubscriptionCheckerAddressCantBeZero()
ComplianceAddressCantBeZero
error ComplianceAddressCantBeZero()
DepositAmountTooSmall
error DepositAmountTooSmall()
FeeGreaterThanRedemption
error FeeGreaterThanRedemption()
FeeGreaterThanSubscription
error FeeGreaterThanSubscription()
FeesAddressCantBeZero
error FeesAddressCantBeZero()
IDRegistryAddressCantBeZero
error IDRegistryAddressCantBeZero()
OracleAddressCantBeZero
error OracleAddressCantBeZero()
RateLimiterAddressCantBeZero
error RateLimiterAddressCantBeZero()
RebasingOUSGCantBeZeroAddress
error RebasingOUSGCantBeZeroAddress()
ReceiveAmountTooSmall
error ReceiveAmountTooSmall()
RedemptionAmountTooSmall
error RedemptionAmountTooSmall()
RedemptionsPaused
error RedemptionsPaused()
RouterAddressCantBeZero
error RouterAddressCantBeZero()
RWAPriceTooLow
error RWAPriceTooLow()
RwaReceiveAmountTooSmall
error RwaReceiveAmountTooSmall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SubscriptionsPaused
error SubscriptionsPaused()
TokenAddressCantBeZero
error TokenAddressCantBeZero()
TokenNotAccepted
error TokenNotAccepted()
UserNotRegistered
error UserNotRegistered()
creation bytecode
0x60e06040523480156200001157600080fd5b50604051620041b9380380620041b983398101604081905262000034916200029c565b6001600055848483836001600160a01b038316620000655760405163885ce5f160e01b815260040160405180910390fd5b6001600160a01b03831660a08190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015620000b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000d69190620002f9565b620000e390600a62000438565b60805260038290556004819055620000fd60008562000141565b5050506001600160a01b03841690506200012a5760405163981a52bd60e01b815260040160405180910390fd5b50506001600160a01b031660c05250620004499050565b6200015882826200018460201b620020b41760201c565b60008281526002602090815260409091206200017f9183906200211f6200020d821b17901c565b505050565b60008281526001602090815260408083206001600160a01b038516845290915290205460ff16620002095760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45b5050565b600062000224836001600160a01b0384166200022d565b90505b92915050565b6000818152600183016020526040812054620002765750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000227565b50600062000227565b80516001600160a01b03811681146200029757600080fd5b919050565b600080600080600060a08688031215620002b557600080fd5b620002c0866200027f565b9450620002d0602087016200027f565b9350620002e0604087016200027f565b6060870151608090970151959894975095949392505050565b6000602082840312156200030c57600080fd5b815160ff811681146200031e57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156200037c57816000190482111562000360576200036062000325565b808516156200036e57918102915b93841c939080029062000340565b509250929050565b600082620003955750600162000227565b81620003a45750600062000227565b8160018114620003bd5760028114620003c857620003e8565b600191505062000227565b60ff841115620003dc57620003dc62000325565b50506001821b62000227565b5060208310610133831016604e8410600b84101617156200040d575081810a62000227565b6200041983836200033b565b806000190482111562000430576200043062000325565b029392505050565b60006200022460ff84168362000384565b60805160a05160c051613c2862000591600039600081816104580152818161122e01528181611381015281816114050152818161146b015281816116cd01528181611760015281816117e901528181611cd601528181611e2401528181611ea80152611f0e0152600081816103aa0152818161088f015281816109b101528181610a6a01528181610c8301528181610fed015281816112d4015281816113520152818161187701528181611b8401528181611c1701528181611d7701528181611df5015281816121dc01528181612276015281816123630152818161250001528181612629015281816127d001528181612857015281816129b101528181612b9701528181612c3101528181612d4a01528181612e0901528181612fb001526131b00152600081816105ce0152818161259e015281816128e60152612cc00152613c286000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c80637ead09e8116101d3578063afb6794e11610104578063d8780161116100a2578063ef2f3d761161007c578063ef2f3d76146107c4578063f3a408da146107d7578063fd84a072146107df578063fe6f14c5146107f257600080fd5b8063d878016114610777578063e63ab1e91461078a578063e6433834146107b157600080fd5b8063c768b145116100de578063c768b1451461072b578063c8e1585d1461073e578063ca15c87314610751578063d547741f1461076457600080fd5b8063afb6794e146106df578063b235d468146106f2578063ba2a1c4d1461070457600080fd5b806391d1485411610171578063aab483d61161014b578063aab483d61461069c578063abbb9f4c146106af578063ad129e77146106c4578063af3345d1146106d757600080fd5b806391d148541461066e578063a217fddf14610681578063a833df251461068957600080fd5b8063884a0501116101ad578063884a0501146106165780638f4f9613146106395780638f8eb812146106525780639010d07c1461065b57600080fd5b80637ead09e8146105c9578063811400fa146105f057806386dd535c1461060357600080fd5b80633faed166116102ad578063608505741161024b578063695e122d11610225578063695e122d146105875780636d3b7f9a1461059a57806371c2d6e5146105ad5780637b0e1c57146105b657600080fd5b8063608505741461055c57806361fca4551461056557806368f26f821461057857600080fd5b80634ef1ccd1116102875780634ef1ccd114610520578063531acc131461053357806359e0f36f1461053c5780635f1270791461054f57600080fd5b80633faed166146104f257806340db35e0146105055780634ce784901461051857600080fd5b80632404e9711161031a5780632f2ff15d116102f45780632f2ff15d146104b157806332ec84d2146104c457806336568abe146104cc5780633e4af11f146104df57600080fd5b80632404e97114610453578063248a9ca31461047a5780632d7d41ab1461049e57600080fd5b80631ee547e7116103565780631ee547e7146103f757806321e0e0cf1461040a57806322d4a1751461041d57806323991e4b1461043e57600080fd5b806301ffc9a71461037d5780630c5bf351146103a55780630ded4a6f146103e4575b600080fd5b61039061038b366004613642565b610815565b60405190151581526020015b60405180910390f35b6103cc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161039c565b600d546103cc906001600160a01b031681565b6008546103cc906001600160a01b031681565b6007546103cc906001600160a01b031681565b61043061042b366004613688565b610840565b60405190815260200161039c565b61045161044c3660046136bb565b61090d565b005b6103cc7f000000000000000000000000000000000000000000000000000000000000000081565b6104306104883660046136d6565b6000908152600160208190526040909120015490565b6104516104ac366004613688565b610a21565b6104516104bf3660046136ef565b610add565b610451610b04565b6104516104da3660046136ef565b610b6a565b6104516104ed3660046136bb565b610be8565b61045161050036600461372c565b610d1c565b6104516105133660046136bb565b610e29565b610451610eb9565b61045161052e3660046136d6565b610efb565b61043060035481565b61045161054a3660046136bb565b610f49565b6006546103909060ff1681565b61043060055481565b6104516105733660046136bb565b61104d565b610430670de0b6b3a764000081565b61045161059536600461372c565b6110dc565b6104306105a8366004613688565b6111e9565b61043061271081565b6104516105c4366004613763565b61158e565b6104307f000000000000000000000000000000000000000000000000000000000000000081565b600a546103cc906001600160a01b031681565b6104516106113660046136bb565b6115b4565b6103906106243660046136bb565b600f6020526000908152604090205460ff1681565b6006546103cc906201000090046001600160a01b031681565b61043060045481565b6103cc61066936600461379f565b611643565b61039061067c3660046136ef565b611662565b610430600081565b6104306106973660046137c1565b61168d565b6104516106aa3660046136d6565b611947565b610430600080516020613bd383398151915281565b6104516106d23660046136bb565b611995565b610451611a25565b6104516106ed3660046136bb565b611a68565b60065461039090610100900460ff1681565b6104307fb94da9555321002e2f278a8e588b6b5c51fa2748893b00f6e45fc41af53493ab81565b6009546103cc906001600160a01b031681565b600b546103cc906001600160a01b031681565b61043061075f3660046136d6565b611b06565b6104516107723660046136ef565b611b1d565b6104306107853660046137c1565b611b44565b6104307f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b600c546103cc906001600160a01b031681565b6104516107d2366004613688565b611c93565b610451612002565b6104516107ed3660046136d6565b612066565b6103906108003660046136bb565b600e6020526000908152604090205460ff1681565b60006001600160e01b03198216635a05180f60e01b148061083a575061083a82612134565b92915050565b600060026000540361086d5760405162461bcd60e51b8152600401610864906137e6565b60405180910390fd5b600260005561087d848484612169565b6040516340c10f1960e01b81529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906340c10f19906108ce903390859060040161381d565b600060405180830381600087803b1580156108e857600080fd5b505af11580156108fc573d6000803e3d6000fd5b505060016000555090949350505050565b600061091981336126f5565b6001600160a01b03821661094057604051633d04535360e21b815260040160405180910390fd5b6009546040516001600160a01b038085169216907ff78e014ab86d7bb38135262d64726cef2e151dae47c0947a1d6bb970702c30d690600090a3600980546001600160a01b0319166001600160a01b038416908117909155604051637f19077160e01b8152637f190771906109db907f0000000000000000000000000000000000000000000000000000000000000000903090600401613836565b602060405180830381865afa1580156109f8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a1c9190613850565b505050565b600260005403610a435760405162461bcd60e51b8152600401610864906137e6565b6002600055610a53838383612759565b6040516340c10f1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990610aa1908690869060040161381d565b600060405180830381600087803b158015610abb57600080fd5b505af1158015610acf573d6000803e3d6000fd5b505060016000555050505050565b60008281526001602081905260409091200154610afa81336126f5565b610a1c8383612a77565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a610b2f81336126f5565b6006805461ff0019166101001790556040517f60b78ed2d882d2d2387ad2b7119495f7c99dd9a9c191d3d02c35982a0750bcc690600090a150565b6001600160a01b0381163314610bda5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610864565b610be48282612a99565b5050565b6000610bf481336126f5565b6001600160a01b038216610c1b57604051632233f8fd60e21b815260040160405180910390fd5b6007546040516001600160a01b038085169216907f6c9074ba8ab5c258404464c9703de55127adb996134fd80d450ce94eb76ff59090600090a3600780546001600160a01b0319166001600160a01b0384811691821790925560405163b3596f0760e01b81527f0000000000000000000000000000000000000000000000000000000000000000909216600483015260009163b3596f0790602401602060405180830381865afa158015610cd3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cf79190613850565b9050600554811015610a1c57604051633b2f2ac960e11b815260040160405180910390fd5b6000610d2881336126f5565b6001600160a01b038316610d4f5760405163885ce5f160e01b815260040160405180910390fd5b8115610dc55760075460405163b3596f0760e01b81526001600160a01b0385811660048301529091169063b3596f0790602401602060405180830381865afa158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190613850565b505b604051821515906001600160a01b038516907fb69d0cdc257fe2726a8ebd7602c8a681fd8152961d1c38a5d5b3090a4d96b20c90600090a3506001600160a01b03919091166000908152600e60205260409020805460ff1916911515919091179055565b6000610e3581336126f5565b6001600160a01b038216610e5c5760405163524d94d960e11b815260040160405180910390fd5b600d546040516001600160a01b038085169216907ff68d3e8139cf85c4c8ea147060134c79e97dbfa33f3f6a9d4cdec44ef467c74790600090a350600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610ec581336126f5565b6006805460ff191690556040517f849babeb0c1b4e2b3842433574a5cdfe23ffde54c64651d42a6b02e8f98cbf8a90600090a150565b600080516020613bd3833981519152610f1481336126f5565b6004546040518391907ffdaf6ed728cef208e62328a008209556f8281f3062b14dd08aaaa90fa159421190600090a350600455565b6000610f5581336126f5565b6001600160a01b038216610f7c57604051630b69326560e11b815260040160405180910390fd5b6008546040516001600160a01b038085169216907fdbc2a9769fa2b31eadfb16b690e3c783592becd0b822401b274a90a34d80b6dc90600090a3600880546001600160a01b0319166001600160a01b0384169081179091556040516334dae8d560e01b81526334dae8d590611017907f0000000000000000000000000000000000000000000000000000000000000000903090600401613836565b600060405180830381600087803b15801561103157600080fd5b505af1158015611045573d6000803e3d6000fd5b505050505050565b600061105981336126f5565b6001600160a01b03821661107f576040516291d13760e51b815260040160405180910390fd5b600b546040516001600160a01b038085169216907f24fdea3a24a4edda22c10620f63628ed57f6b60d457d833035a316ab15684c9490600090a350600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60006110e881336126f5565b6001600160a01b03831661110f5760405163885ce5f160e01b815260040160405180910390fd5b81156111855760075460405163b3596f0760e01b81526001600160a01b0385811660048301529091169063b3596f0790602401602060405180830381865afa15801561115f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111839190613850565b505b604051821515906001600160a01b038516907f34e319579e041b2d04a5a9ff137ef4511e2db49d2da0512cdbe3845c32bc933a90600090a3506001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b600060026000540361120d5760405162461bcd60e51b8152600401610864906137e6565b600260009081556040516375b4df3760e01b815260048101849052612710907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b4df3790602401602060405180830381865afa15801561127d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a19190613850565b6112ab919061387f565b905060006112ba868684612169565b6040516340c10f1960e01b81529091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340c10f199061130b903090859060040161381d565b600060405180830381600087803b15801561132557600080fd5b505af1158015611339573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063095ea7b391506113ab907f000000000000000000000000000000000000000000000000000000000000000090859060040161381d565b6020604051808303816000875af11580156113ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113ee91906138a1565b50604051630ea598cb60e41b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea598cb090602401600060405180830381600087803b15801561145157600080fd5b505af1158015611465573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638fcb4e5b61149f3390565b6114ab612710856138be565b6040518363ffffffff1660e01b81526004016114c892919061381d565b6020604051808303816000875af11580156114e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150b9190613850565b92508383101561152e5760405163c5db0fc160e01b815260040160405180910390fd5b60408051828152602081018590526001600160a01b0388168183015260608101879052905133917ff4a2b0a22878e6c23b1055ebe49a847cab8978e82d532d7eee632ff473aa7976919081900360800190a2505060016000559392505050565b600061159a81336126f5565b6115ae6001600160a01b0385168484612abb565b50505050565b60006115c081336126f5565b6001600160a01b0382166115e6576040516291d13760e51b815260040160405180910390fd5b600c546040516001600160a01b038085169216907f849fba91aaeaa62c2a7f48c8ff7c26b006ca3ae247c1640072ecf571e31040c890600090a350600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600082815260026020526040812061165b9083612b13565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60006002600054036116b15760405162461bcd60e51b8152600401610864906137e6565b60026000556040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90611706903390309089906004016138dd565b6020604051808303816000875af1158015611725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174991906138a1565b50604051636f074d1f60e11b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063de0e9a3e90602401600060405180830381600087803b1580156117ac57600080fd5b505af11580156117c0573d6000803e3d6000fd5b50506040516375b4df3760e01b8152600481018790526000925061271091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906375b4df3790602401602060405180830381865afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190613850565b61185e919061387f565b604051630852cd8d60e31b8152600481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b1580156118c357600080fd5b505af11580156118d7573d6000803e3d6000fd5b505050506118e6818585612b1f565b60408051838152602081018890526001600160a01b0387168183015260608101839052905191935033917f9001fec7b692d83b4fcb0f7f8a6ee0c327a8ec0c7ff76be2d4bf7000ae9ce76a9181900360800190a25060016000559392505050565b600080516020613bd383398151915261196081336126f5565b6003546040518391907fe6e25add7363f8f8a40cbea9810d3115a33703b10972ef759104219b0065743690600090a350600355565b60006119a181336126f5565b6001600160a01b0382166119c857604051633aa9ba3360e01b815260040160405180910390fd5b600a546040516001600160a01b038085169216907fc54bf4c3067c1d8f65e053dafb5dbb699615b1b527d2866bd0223102bb2e692d90600090a350600a80546001600160a01b0319166001600160a01b0392909216919091179055565b6000611a3181336126f5565b6006805461ff00191690556040517f687bf6e69dbabcc95e11041b4816a83f36dcf6ef647f6acf63e7469d28f5ea7390600090a150565b6000611a7481336126f5565b6001600160a01b038216611a9b5760405163341d47c360e01b815260040160405180910390fd5b6006546040516001600160a01b038085169262010000900416907f132a375a3726b76fcc71a6992f19961145ed03f35eca19ad07381f43501c2b5e90600090a350600680546001600160a01b03909216620100000262010000600160b01b0319909216919091179055565b600081815260026020526040812061083a90613083565b60008281526001602081905260409091200154611b3a81336126f5565b610a1c8383612a99565b6000600260005403611b685760405162461bcd60e51b8152600401610864906137e6565b60026000556040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd90611bbd903390309089906004016138dd565b6020604051808303816000875af1158015611bdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c0091906138a1565b50604051630852cd8d60e31b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b158015611c6357600080fd5b505af1158015611c77573d6000803e3d6000fd5b50505050611c86848484612b1f565b6001600055949350505050565b600260005403611cb55760405162461bcd60e51b8152600401610864906137e6565b600260009081556040516375b4df3760e01b815260048101849052612710907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906375b4df3790602401602060405180830381865afa158015611d25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d499190613850565b611d53919061387f565b9050611d60848284612759565b6040516340c10f1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906340c10f1990611dae903090859060040161381d565b600060405180830381600087803b158015611dc857600080fd5b505af1158015611ddc573d6000803e3d6000fd5b505060405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925063095ea7b39150611e4e907f000000000000000000000000000000000000000000000000000000000000000090859060040161381d565b6020604051808303816000875af1158015611e6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9191906138a1565b50604051630ea598cb60e41b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ea598cb090602401600060405180830381600087803b158015611ef457600080fd5b505af1158015611f08573d6000803e3d6000fd5b505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638fcb4e5b8561271084611f4a91906138be565b6040518363ffffffff1660e01b8152600401611f6792919061381d565b6020604051808303816000875af1158015611f86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611faa9190613850565b5060408051828152602081018590529081018390526001600160a01b038516907f620a15c4f06215797ea88be4369abe13f24d7a9c5691ecc30f3babdb0eca5b739060600160405180910390a2505060016000555050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61202d81336126f5565b6006805460ff191660011790556040517fb9964f53255ea6cb323618cebc0c47de4f99089e9993d1862f24e2fdaf2a31e590600090a150565b600080516020613bd383398151915261207f81336126f5565b6005546040518391907f8ba90cff6e6e2b8e73cee7f3c5356cca13f1715f39f5eaa6164a99b49e497c8e90600090a350600555565b6120be8282611662565b610be45760008281526001602081815260408084206001600160a01b0386168086529252808420805460ff19169093179092559051339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b600061165b836001600160a01b03841661308d565b60006001600160e01b03198216637965db0b60e01b148061083a57506301ffc9a760e01b6001600160e01b031983161461083a565b60065460009060ff1615612190576040516302822dcd60e51b815260040160405180910390fd5b6001600160a01b0384166000908152600e602052604090205460ff166121c95760405163e51cf7bf60e01b815260040160405180910390fd5b6008546001600160a01b03166334dae8d57f0000000000000000000000000000000000000000000000000000000000000000336040518363ffffffff1660e01b8152600401612219929190613836565b600060405180830381600087803b15801561223357600080fd5b505af1158015612247573d6000803e3d6000fd5b5050600954604051637f19077160e01b8152600093506001600160a01b039091169150637f190771906122a0907f0000000000000000000000000000000000000000000000000000000000000000903390600401613836565b602060405180830381865afa1580156122bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122e19190613850565b90508061230157604051632163950f60e01b815260040160405180910390fd5b6123166001600160a01b0386163330876130dc565b600654612336906001600160a01b03878116916201000090041686613104565b600654604051631f61f2f560e31b8152620100009091046001600160a01b03169063fb0f97a89061238f907f000000000000000000000000000000000000000000000000000000000000000090899089906004016138dd565b600060405180830381600087803b1580156123a957600080fd5b505af11580156123bd573d6000803e3d6000fd5b505050506000856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612401573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124259190613901565b61243090600a613a08565b60075460405163b3596f0760e01b81526001600160a01b0389811660048301528892169063b3596f0790602401602060405180830381865afa15801561247a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249e9190613850565b6124a891906138be565b6124b2919061387f565b90506003548110156124d7576040516367627d0760e01b815260040160405180910390fd5b600b5460405163c75af63560e01b81526000916001600160a01b03169063c75af6359061252e907f0000000000000000000000000000000000000000000000000000000000000000908b9088908890600401613a17565b6020604051808303816000875af115801561254d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125719190613850565b9050818111156125945760405163566f172560e11b815260040160405180910390fd5b61259c613196565b7f00000000000000000000000000000000000000000000000000000000000000006125c78385613a40565b6125d191906138be565b6125db919061387f565b9350848410156125fe5760405163c5db0fc160e01b815260040160405180910390fd5b600a54604051637d4945b760e01b81526001600160a01b0390911690637d4945b790612655906000907f00000000000000000000000000000000000000000000000000000000000000009088908890600401613a53565b600060405180830381600087803b15801561266f57600080fd5b505af1158015612683573d6000803e3d6000fd5b505050508261268f3390565b604080518781526001600160a01b038b811660208301529181018a905260608101869052608081018590529116907f5c88561b046569d4773b016d48f154d22685738bfb692bb0f8478ec2ef36b79f9060a0015b60405180910390a35050509392505050565b6126ff8282611662565b610be457612717816001600160a01b0316601461324d565b61272283602061324d565b604051602001612733929190613abe565b60408051601f198184030181529082905262461bcd60e51b825261086491600401613b33565b60065460ff161561277d576040516302822dcd60e51b815260040160405180910390fd5b7fb94da9555321002e2f278a8e588b6b5c51fa2748893b00f6e45fc41af53493ab6127a881336126f5565b6008546040516334dae8d560e01b81526001600160a01b03909116906334dae8d5906127fa907f0000000000000000000000000000000000000000000000000000000000000000908890600401613836565b600060405180830381600087803b15801561281457600080fd5b505af1158015612828573d6000803e3d6000fd5b5050600954604051637f19077160e01b8152600093506001600160a01b039091169150637f19077190612881907f0000000000000000000000000000000000000000000000000000000000000000908990600401613836565b602060405180830381865afa15801561289e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c29190613850565b9050806128e257604051632163950f60e01b815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000061290d613196565b61291790876138be565b612921919061387f565b600d54604051631e03bab960e21b81529192506001600160a01b03169063780eeae490612954903390859060040161381d565b600060405180830381600087803b15801561296e57600080fd5b505af1158015612982573d6000803e3d6000fd5b5050600a54604051637d4945b760e01b81526001600160a01b039091169250637d4945b791506129dd906000907f00000000000000000000000000000000000000000000000000000000000000009087908790600401613a53565b600060405180830381600087803b1580156129f757600080fd5b505af1158015612a0b573d6000803e3d6000fd5b5050505081866001600160a01b0316612a213390565b60408051898152602081018690529081018890526001600160a01b0391909116907f8153c95a1826b81124293b12cbbc293c0dfba473b563c61d9a9ff82aa4a1c7ad9060600160405180910390a4505050505050565b612a8182826120b4565b6000828152600260205260409020610a1c908261211f565b612aa382826133e9565b6000828152600260205260409020610a1c9082613450565b610a1c83846001600160a01b031663a9059cbb8585604051602401612ae192919061381d565b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050613465565b600061165b83836134d6565b600654600090610100900460ff1615612b4b57604051630df65d9f60e01b815260040160405180910390fd5b6001600160a01b0383166000908152600f602052604090205460ff16612b845760405163e51cf7bf60e01b815260040160405180910390fd5b6008546001600160a01b03166334dae8d57f0000000000000000000000000000000000000000000000000000000000000000336040518363ffffffff1660e01b8152600401612bd4929190613836565b600060405180830381600087803b158015612bee57600080fd5b505af1158015612c02573d6000803e3d6000fd5b5050600954604051637f19077160e01b8152600093506001600160a01b039091169150637f19077190612c5b907f0000000000000000000000000000000000000000000000000000000000000000903390600401613836565b602060405180830381865afa158015612c78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9c9190613850565b905080612cbc57604051632163950f60e01b815260040160405180910390fd5b60007f000000000000000000000000000000000000000000000000000000000000000086612ce8613196565b612cf291906138be565b612cfc919061387f565b9050600454811015612d215760405163680116dd60e11b815260040160405180910390fd5b600c5460405163c75af63560e01b81526000916001600160a01b03169063c75af63590612d78907f0000000000000000000000000000000000000000000000000000000000000000908a9088908890600401613a17565b6020604051808303816000875af1158015612d97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbb9190613850565b905081811115612dde57604051635774f9b360e11b815260040160405180910390fd5b600a54604051637d4945b760e01b81526001600160a01b0390911690637d4945b790612e35906001907f00000000000000000000000000000000000000000000000000000000000000009088908890600401613a53565b600060405180830381600087803b158015612e4f57600080fd5b505af1158015612e63573d6000803e3d6000fd5b505060075460405163b3596f0760e01b81526001600160a01b038a81166004830152909116925063b3596f079150602401602060405180830381865afa158015612eb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ed59190613850565b866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f379190613901565b612f4290600a613a08565b612f4c8385613a40565b612f5691906138be565b612f60919061387f565b935084841015612f8357604051638f19033960e01b815260040160405180910390fd5b60065460405163071f2cab60e51b8152620100009091046001600160a01b03169063e3e5956090612fde907f0000000000000000000000000000000000000000000000000000000000000000908a9088908a90600401613a17565b600060405180830381600087803b158015612ff857600080fd5b505af115801561300c573d6000803e3d6000fd5b5050505061302b61301a3390565b6001600160a01b0388169086612abb565b604080518881526001600160a01b03881660208201529081018590526060810183905260808101829052839033907f7023b7bcd020761014c9e1590603f4effceabc102cf0b8023c3f2b14db9ffb6e9060a0016126e3565b600061083a825490565b60008181526001830160205260408120546130d45750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561083a565b50600061083a565b6115ae84856001600160a01b03166323b872dd868686604051602401612ae1939291906138dd565b6000836001600160a01b031663095ea7b3848460405160240161312892919061381d565b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505090506131618482613500565b6115ae5761318c84856001600160a01b031663095ea7b3866000604051602401612ae192919061381d565b6115ae8482613465565b60075460405163b3596f0760e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152600092169063b3596f0790602401602060405180830381865afa158015613201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132259190613850565b905060055481101561324a57604051633b2f2ac960e11b815260040160405180910390fd5b90565b6060600061325c8360026138be565b613267906002613b66565b67ffffffffffffffff81111561327f5761327f613b79565b6040519080825280601f01601f1916602001820160405280156132a9576020820181803683370190505b509050600360fc1b816000815181106132c4576132c4613b8f565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106132f3576132f3613b8f565b60200101906001600160f81b031916908160001a90535060006133178460026138be565b613322906001613b66565b90505b600181111561339a576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061335657613356613b8f565b1a60f81b82828151811061336c5761336c613b8f565b60200101906001600160f81b031916908160001a90535060049490941c9361339381613ba5565b9050613325565b50831561165b5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610864565b6133f38282611662565b15610be45760008281526001602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b600061165b836001600160a01b03841661354f565b600080602060008451602086016000885af180613488576040513d6000823e3d81fd5b50506000513d915081156134a05780600114156134ad565b6001600160a01b0384163b155b156115ae57604051635274afe760e01b81526001600160a01b0385166004820152602401610864565b60008260000182815481106134ed576134ed613b8f565b9060005260206000200154905092915050565b6000806000806020600086516020880160008a5af192503d91506000519050828015613545575081156135365780600114613545565b6000866001600160a01b03163b115b9695505050505050565b60008181526001830160205260408120548015613638576000613573600183613a40565b855490915060009061358790600190613a40565b90508181146135ec5760008660000182815481106135a7576135a7613b8f565b90600052602060002001549050808760000184815481106135ca576135ca613b8f565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806135fd576135fd613bbc565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061083a565b600091505061083a565b60006020828403121561365457600080fd5b81356001600160e01b03198116811461165b57600080fd5b80356001600160a01b038116811461368357600080fd5b919050565b60008060006060848603121561369d57600080fd5b6136a68461366c565b95602085013595506040909401359392505050565b6000602082840312156136cd57600080fd5b61165b8261366c565b6000602082840312156136e857600080fd5b5035919050565b6000806040838503121561370257600080fd5b823591506137126020840161366c565b90509250929050565b801515811461372957600080fd5b50565b6000806040838503121561373f57600080fd5b6137488361366c565b915060208301356137588161371b565b809150509250929050565b60008060006060848603121561377857600080fd5b6137818461366c565b925061378f6020850161366c565b9150604084013590509250925092565b600080604083850312156137b257600080fd5b50508035926020909101359150565b6000806000606084860312156137d657600080fd5b8335925061378f6020850161366c565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b60006020828403121561386257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008261389c57634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156138b357600080fd5b815161165b8161371b565b60008160001904831182151516156138d8576138d8613869565b500290565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60006020828403121561391357600080fd5b815160ff8116811461165b57600080fd5b600181815b8085111561395f57816000190482111561394557613945613869565b8085161561395257918102915b93841c9390800290613929565b509250929050565b6000826139765750600161083a565b816139835750600061083a565b816001811461399957600281146139a3576139bf565b600191505061083a565b60ff8411156139b4576139b4613869565b50506001821b61083a565b5060208310610133831016604e8410600b84101617156139e2575081810a61083a565b6139ec8383613924565b8060001904821115613a0057613a00613869565b029392505050565b600061165b60ff841683613967565b6001600160a01b0394851681529290931660208301526040820152606081019190915260800190565b8181038181111561083a5761083a613869565b6080810160028610613a7557634e487b7160e01b600052602160045260246000fd5b9481526001600160a01b03939093166020840152604083019190915260609091015290565b60005b83811015613ab5578181015183820152602001613a9d565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613af6816017850160208801613a9a565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613b27816028840160208801613a9a565b01602801949350505050565b6020815260008251806020840152613b52816040850160208701613a9a565b601f01601f19169190910160400192915050565b8082018082111561083a5761083a613869565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600081613bb457613bb4613869565b506000190190565b634e487b7160e01b600052603160045260246000fdfef45c97b23e2beeefda80e1ce5cb3e234aa7b6888ad5cbabb75bfd654dd8e102da2646970667358221220985b471eebe3ce266214b0b3a85610f4cf0f7f16903c0f35a8af7e3d691358eb64736f6c63430008100033000000000000000000000000094bee6b74ec29d32869ae3140a659cac04828820000000000000000000000001b19c19393e2d034d8ff31ff34c81252fcbbee9200000000000000000000000054043c656f0fad0652d9ae2603cdf347c5578d0000000000000000000000000000000000000000000000010f0cf064dd5920000000000000000000000000000000000000000000000000010f0cf064dd59200000