0 txs
0 calls
constructor
constructor(address _initialRescuer, address _initialExecutor)
functions
executor
viewfunction executor() view returns (address)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
getMarketIdByTokens
purefunction getMarketIdByTokens(address userBuyToken, address userSellToken) pure returns (bytes32)
getOtcMarketIds
viewfunction getOtcMarketIds() view returns (bytes32[])
getOtcMarketInfo
viewfunction getOtcMarketInfo(address userBuyToken, address userSellToken) view returns (tuple)
getOtcMarketInfo
viewfunction getOtcMarketInfo(bytes32 marketId) view returns (tuple)
getOtcMarketTokens
viewfunction getOtcMarketTokens(bytes32 marketId) view returns (tuple tokens)
inRescueMode
viewfunction inRescueMode() view returns (bool)
OFFER_PRICE_DECIMALS
viewfunction OFFER_PRICE_DECIMALS() view returns (uint8)
paused
viewfunction paused() view returns (bool)
quote
viewfunction quote(address userBuyToken, address userSellToken, uint256 sellTokenAmount) view returns (uint256 buyTokenAmount)
quote
viewfunction quote(bytes32 marketId, uint256 sellTokenAmount) view returns (uint256 buyTokenAmount)
rescuer
viewfunction rescuer() view returns (address)
tokenPairExists
viewfunction tokenPairExists(address userBuyToken, address userSellToken) view returns (bool)
userBuyTokenAvailable
viewfunction userBuyTokenAvailable(address _userBuyToken, address _userSellToken) view returns (uint256)
acceptExecutor
nonpayablefunction acceptExecutor()
acceptRescuer
nonpayablefunction acceptRescuer()
addOtcMarket
nonpayablefunction addOtcMarket(tuple _otcMarketInfo) returns (bytes32 marketId)
pause
nonpayablefunction pause()
proposeNewExecutor
nonpayablefunction proposeNewExecutor(address account)
proposeNewRescuer
nonpayablefunction proposeNewRescuer(address account)
removeOtcMarket
nonpayablefunction removeOtcMarket(address userBuyToken, address userSellToken)
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setMarketFundsOwner
nonpayablefunction setMarketFundsOwner(address _userBuyToken, address _userSellToken, address _fundsOwner)
setOfferPrice
nonpayablefunction setOfferPrice(address _userBuyToken, address _userSellToken, uint256 _offerPrice)
setOfferPriceRange
nonpayablefunction setOfferPriceRange(address userBuyToken, address userSellToken, uint128 minValidOfferPrice, uint128 maxValidOfferPrice)
setRescueMode
nonpayablefunction setRescueMode(bool value)
swap
nonpayablefunction swap(address userBuyToken, address userSellToken, uint256 sellTokenAmount) returns (uint256)
swap
nonpayablefunction swap(bytes32 marketId, uint256 sellTokenAmount) returns (uint256)
unpause
nonpayablefunction unpause()
events
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
FundsOwnerSet
event FundsOwnerSet(bytes32 marketId, address indexed fundsOwner)
NewExecutorAccepted
event NewExecutorAccepted(address indexed oldExecutor, address indexed newExecutor)
NewExecutorProposed
event NewExecutorProposed(address indexed oldExecutor, address indexed oldProposedExecutor, address indexed newProposedExecutor)
NewRescuerAccepted
event NewRescuerAccepted(address indexed oldRescuer, address indexed newRescuer)
NewRescuerProposed
event NewRescuerProposed(address indexed oldRescuer, address indexed oldProposedRescuer, address indexed newProposedRescuer)
OfferPriceRangeSet
event OfferPriceRangeSet(bytes32 marketId, uint128 minValidOfferPrice, uint128 maxValidOfferPrice)
OfferPriceSet
event OfferPriceSet(bytes32 marketId, uint256 _offerPrice)
OtcMarketAdded
event OtcMarketAdded(bytes32 marketId, address userBuyToken, address userSellToken)
OtcMarketRemoved
event OtcMarketRemoved(bytes32 marketId, address userBuyToken, address userSellToken)
Paused
event Paused(address account)
RescueModeSet
event RescueModeSet(bool indexed value)
Swap
event Swap(address indexed account, address indexed fundsOwner, uint256 userSellTokenAmount, uint256 userBuyTokenAmount)
Unpaused
event Unpaused(address account)
errors
ExpectedNonZero
error ExpectedNonZero()
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress()
InvalidMarketId
error InvalidMarketId(bytes32 marketId)
InvalidParam
error InvalidParam()
InvalidTokenPair
error InvalidTokenPair(address token0, address token1)
MarketPairExists
error MarketPairExists()
OfferPriceNotValid
error OfferPriceNotValid()
creation bytecode
0x60806040523480156200001157600080fd5b506040516200384d3803806200384d83398101604081905262000034916200011f565b6000805460ff1916905581816001600160a01b038216620000685760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038116620000905760405163e6c4247b60e01b815260040160405180910390fd5b816001600160a01b0316816001600160a01b031603620000c35760405163e6c4247b60e01b815260040160405180910390fd5b60008054610100600160a81b0319166101006001600160a01b0394851602179055600180546001600160a01b0319169190921617905550620001579050565b80516001600160a01b03811681146200011a57600080fd5b919050565b600080604083850312156200013357600080fd5b6200013e8362000102565b91506200014e6020840162000102565b90509250929050565b6136e680620001676000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c80638112c4af11610104578063c34c08e5116100a2578063d9a349c111610071578063d9a349c11461049a578063daeccc79146104ad578063de060743146104db578063df791e50146104ee57600080fd5b8063c34c08e514610441578063c67a70d414610461578063d0d99b4614610474578063d6e7444d1461048757600080fd5b8063afecb84f116100de578063afecb84f146103ee578063b646638414610401578063b873d80614610414578063bfccf0ec1461042e57600080fd5b80638112c4af146103cb57806382f36c79146103d35780638456cb59146103e657600080fd5b806332a35be91161017c5780635c975abb1161014b5780635c975abb146102ff5780636920bf401461030a5780636a6217a51461031d5780637b998555146103b857600080fd5b806332a35be91461028557806338a63183146102985780633f4ba83a146102e257806343420e22146102ea57600080fd5b80631187b0e1116101b85780631187b0e11461022d5780631810fe7f1461024057806318fefd571461025d5780631f2114051461027d57600080fd5b8063032ef901146101df57806307f184f1146101f45780630bf7bc1b14610207575b600080fd5b6101f26101ed366004612c17565b610501565b005b6101f2610202366004612c56565b6105b5565b61021a610215366004612c73565b6106f2565b6040519081526020015b60405180910390f35b6101f261023b366004612cac565b610958565b60035461024d9060ff1681565b6040519015158152602001610224565b61027061026b366004612c73565b610aa3565b6040516102249190612d26565b6101f2610c22565b6101f2610293366004612c73565b610d46565b6000546102bd90610100900473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610224565b6101f2610ec4565b6102f2610f32565b6040516102249190612e08565b60005460ff1661024d565b6101f2610318366004612e6a565b610f43565b61038461032b366004612ec6565b6040805180820190915260008082526020820152506000908152600860209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff9081168452600190910154169082015290565b60408051825173ffffffffffffffffffffffffffffffffffffffff9081168252602093840151169281019290925201610224565b61021a6103c6366004612edf565b61109d565b6101f26110f9565b6102706103e1366004612ec6565b611225565b6101f2611356565b61021a6103fc366004612f01565b6113c2565b61021a61040f366004612f1a565b611b75565b61041c601281565b60405160ff9091168152602001610224565b6101f261043c366004612f5b565b611b97565b6001546102bd9073ffffffffffffffffffffffffffffffffffffffff1681565b61021a61046f366004612c73565b611d9e565b6101f2610482366004612f1a565b611dfd565b61024d610495366004612c73565b611f4a565b6101f26104a8366004612c56565b611fc4565b61024d6104bb366004613018565b600260209081526000928352604080842090915290825290205460ff1681565b61021a6104e9366004612edf565b612109565b61021a6104fc366004612f1a565b612161565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314610557576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051811515907f18f4a9a726c72020fd959c636d2fd464c6cefe90afeaea3c830b971614cf70b690600090a2600380547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600054610100900473ffffffffffffffffffffffffffffffffffffffff16331461060b576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116610658576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035460405173ffffffffffffffffffffffffffffffffffffffff808416926101009004169033907f374d23b359cab0f8963c5c1715a6de7974f53af00aecc27de50d93906b70943e90600090a46003805473ffffffffffffffffffffffffffffffffffffffff909216610100027fffffffffffffffffffffff0000000000000000000000000000000000000000ff909216919091179055565b6000806106ff8484612183565b6000818152600560209081526040808320815161010081018352815473ffffffffffffffffffffffffffffffffffffffff908116825260018084015482169583019590955260028301549081169382019390935294955092939291606084019174010000000000000000000000000000000000000000900460ff169081111561078a5761078a612cf7565b600181111561079b5761079b612cf7565b815260038201546fffffffffffffffffffffffffffffffff80821660208085019190915270010000000000000000000000000000000090920416604080840191909152600480850154606085015260059094015460809093019290925283519084015191517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8083169482019490945293945092600092909116906370a0823190602401602060405180830381865afa158015610873573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610897919061304d565b60208401516040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85811660048301523060248301529293506000929091169063dd62ed3e90604401602060405180830381865afa158015610915573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610939919061304d565b9050808210610948578061094a565b815b955050505050505b92915050565b610986336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b6109bc576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006109c88484612183565b905073ffffffffffffffffffffffffffffffffffffffff8216610a17576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526005602090815260409182902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8616908117825592518481529092917f2be7a581c73304a6aaf44db732d67d3bccde9cf662ceb3c9db082e3216d5c5a4910160405180910390a25050505050565b60408051610100810182526000808252602080830182905282840182905260608084018390526080840183905260a0840183905260c0840183905260e08401839052845187821b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000908116828501529187901b909116603482015284516028818303018152604882018087528151918401919091208085526005909352928590206101488201909552845473ffffffffffffffffffffffffffffffffffffffff908116845260018087015482166068840152600287015491821660888401529495929460a8909201917401000000000000000000000000000000000000000090910460ff1690811115610bb857610bb8612cf7565b6001811115610bc957610bc9612cf7565b815260038201546fffffffffffffffffffffffffffffffff808216602084015270010000000000000000000000000000000090910416604082015260048201546060820152600590910154608090910152949350505050565b60045473ffffffffffffffffffffffffffffffffffffffff163314610c73576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600054610100900473ffffffffffffffffffffffffffffffffffffffff163303610cc9576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600154604051339173ffffffffffffffffffffffffffffffffffffffff16907fe963dc9c0d2165b080440a5d2665566142f2426b1ea15f3da8390b0fd336b06490600090a3600180547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600480549091169055565b610d74336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b610daa576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610db68383612183565b9050610dc36006826122e6565b50600081815260056020818152604080842080547fffffffffffffffffffffffff0000000000000000000000000000000000000000908116825560018083018054831690556002830180547fffffffffffffffffffffff0000000000000000000000000000000000000000001690556003830187905560048301879055919094018590556008909252928390208054831681550180549091169055517f62c7d324e161e818b9811d399edc78f572739e0d47d43f7c067d8c89fd7b776390610eb79083908690869092835273ffffffffffffffffffffffffffffffffffffffff918216602084015216604082015260600190565b60405180910390a1505050565b610ef2336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b610f28576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f306122f2565b565b6060610f3e600661236f565b905090565b610f71336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b610fa7576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610fb38585612183565b9050816fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161115611013576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600560209081526040918290206fffffffffffffffffffffffffffffffff86811670010000000000000000000000000000000091871691820281176003840155845186815293840152928201929092527f52333a91b2bb5658c8bd57bb27f13ebc982917c14a0abefe1d449f7bdda0bc099060600160405180910390a1505050505050565b60006110aa60068461237c565b6110e8576040517f6fd3cba2000000000000000000000000000000000000000000000000000000008152600481018490526024015b60405180910390fd5b6110f28383612394565b9392505050565b600354610100900473ffffffffffffffffffffffffffffffffffffffff16331461114f576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60015473ffffffffffffffffffffffffffffffffffffffff1633036111a0576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054604051339261010090920473ffffffffffffffffffffffffffffffffffffffff16917ff07131157ebea15896dc89264eb9a7572e67cc9fad6b855015730fcec10704e091a36000805461010033027fffffffffffffffffffffff0000000000000000000000000000000000000000ff91821617909155600380549091169055565b6040805161010081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810191909152600082815260056020908152604091829020825161010081018452815473ffffffffffffffffffffffffffffffffffffffff9081168252600180840154821694830194909452600283015490811694820194909452929091606084019174010000000000000000000000000000000000000000900460ff16908111156112ee576112ee612cf7565b60018111156112ff576112ff612cf7565b815260038201546fffffffffffffffffffffffffffffffff80821660208401527001000000000000000000000000000000009091041660408201526004820154606082015260059091015460809091015292915050565b611384336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b6113ba576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f3061241a565b60006113f2336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b611428576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006114376020840184612c56565b73ffffffffffffffffffffffffffffffffffffffff16148061147e575060006114666040840160208501612c56565b73ffffffffffffffffffffffffffffffffffffffff16145b806114ae575060006114966060840160408501612c56565b73ffffffffffffffffffffffffffffffffffffffff16145b156114e5576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114f56060830160408401612c56565b73ffffffffffffffffffffffffffffffffffffffff1661151b6040840160208501612c56565b73ffffffffffffffffffffffffffffffffffffffff16036115a8576115466040830160208401612c56565b6115566060840160408501612c56565b6040517fec998d1d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9283166004820152911660248201526044016110df565b6115b860a0830160808401613066565b6fffffffffffffffffffffffffffffffff16158061161757506115e160c0830160a08401613066565b6fffffffffffffffffffffffffffffffff1661160360a0840160808501613066565b6fffffffffffffffffffffffffffffffff16115b1561164e576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61165e60a0830160808401613066565b6fffffffffffffffffffffffffffffffff168260e0013510806116a5575061168c60c0830160a08401613066565b6fffffffffffffffffffffffffffffffff168260e00135115b156116dc576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61175c6116ef6040840160208501612c56565b6116ff6060850160408601612c56565b6040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b9050611769600682612475565b61179f576040517f6b5e401f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260086020908152604091829020916117c191908501908501612c56565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff919091161781556118116060840160408501612c56565b6001820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905560008281526005602052604090208390611872828261310f565b505060008281526005602052604081209080600283015474010000000000000000000000000000000000000000900460ff1660018111156118b5576118b5612cf7565b146119d0576118ca6060860160408701612c56565b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611914573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061193891906132d3565b6119486040870160208801612c56565b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611992573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b691906132d3565b6119c1906012613325565b6119cb919061333e565b611ae1565b6119e06040860160208701612c56565b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4e91906132d3565b611a5e6060870160408801612c56565b73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acc91906132d3565b611ad7906012613325565b611ae1919061333e565b60ff169050611af181600a613477565b60048301557f98267f643e06406a602e14155071dc0d59fcdc784c6d616496bd74817378655584611b286040880160208901612c56565b611b386060890160408a01612c56565b6040805193845273ffffffffffffffffffffffffffffffffffffffff928316602085015291169082015260600160405180910390a1505050919050565b600080611b828585612183565b9050611b8e8184612394565b95945050505050565b611bc5336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b611bfb576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8316611c48576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805180820190915260008082526020820152819060005b82811015611d9657848482818110611c7b57611c7b613483565b905060400201803603810190611c9191906134b2565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168773ffffffffffffffffffffffffffffffffffffffff167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a460208281015173ffffffffffffffffffffffffffffffffffffffff8816600090815260028352604080822086517fffffffff000000000000000000000000000000000000000000000000000000001683529093529190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055611d8f81613536565b9050611c61565b505050505050565b60408051606084811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529185901b16603483015282516028818403018152604890920190925280519101206000906110f2565b611e2b336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b611e61576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611e6d8484612183565b60008181526005602052604090206003810154919250906fffffffffffffffffffffffffffffffff16831080611ecc5750600381015470010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683115b15611f03576040517f9aa5f25100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6005810183905560408051838152602081018590527f5096a5022f3faaf2fb2279d89d1bfac1a89e6e3c2db40424791145d2e9ba2f9a910160405180910390a15050505050565b600080611faf84846040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b9050611fbc60068261237c565b949350505050565b611ff2336000357fffffffff000000000000000000000000000000000000000000000000000000001661221e565b612028576040517fc0185c6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8116612075576040517fe6c4247b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045460015460405173ffffffffffffffffffffffffffffffffffffffff8085169381169216907f4857570a90fe0a0fc580e89a287e77576141ac8e2e8b3710cd26db44f44156c190600090a4600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b6000612113612481565b61211e60068461237c565b612157576040517f6fd3cba2000000000000000000000000000000000000000000000000000000008152600481018490526024016110df565b6110f283836124ee565b600061216b612481565b60006121778585612183565b9050611b8e81846124ee565b60408051606084811b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009081166020808501919091529185901b16603483015282516028818403018152604890920190925280519101206121e560068261237c565b610952576040517f6fd3cba2000000000000000000000000000000000000000000000000000000008152600481018290526024016110df565b60035460009060ff1615612255575060005473ffffffffffffffffffffffffffffffffffffffff8381166101009092041614610952565b60015473ffffffffffffffffffffffffffffffffffffffff848116911614806122d0575073ffffffffffffffffffffffffffffffffffffffff831660009081526002602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff165b156122dd57506001610952565b50600092915050565b60006110f283836126dc565b6122fa6127cf565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b606060006110f28361283b565b600081815260018301602052604081205415156110f2565b600082815260056020526040812081600282015474010000000000000000000000000000000000000000900460ff1660018111156123d4576123d4612cf7565b146123fc57600581015460048201546123ed908561356e565b6123f79190613585565b611fbc565b60048101546005820154612410908561356e565b611fbc9190613585565b612422612481565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586123453390565b60006110f28383612897565b60005460ff1615610f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016110df565b60008160000361252a576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600560209081526040808320815161010081018352815473ffffffffffffffffffffffffffffffffffffffff908116825260018084015482169583019590955260028301549081169382019390935292909160608401917401000000000000000000000000000000000000000090910460ff16908111156125b2576125b2612cf7565b60018111156125c3576125c3612cf7565b815260038201546fffffffffffffffffffffffffffffffff80821660208401527001000000000000000000000000000000009091041660408201526004820154606082015260059091015460809091015290506126208484612394565b815160408084015160208501519151939550919273ffffffffffffffffffffffffffffffffffffffff84169033907ffa2dda1cc1b86e41239702756b13effbc1a092b5c57e3ad320fbe4f3b13fe23590612686908a908a90918252602082015260400190565b60405180910390a36126b073ffffffffffffffffffffffffffffffffffffffff83163385896128e6565b6126d273ffffffffffffffffffffffffffffffffffffffff82168433886128e6565b5050505092915050565b600081815260018301602052604081205480156127c55760006127006001836135c0565b8554909150600090612714906001906135c0565b905081811461277957600086600001828154811061273457612734613483565b906000526020600020015490508087600001848154811061275757612757613483565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061278a5761278a6135d3565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610952565b6000915050610952565b60005460ff16610f30576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016110df565b60608160000180548060200260200160405190810160405280929190818152602001828054801561288b57602002820191906000526020600020905b815481526020019060010190808311612877575b50505050509050919050565b60008181526001830160205260408120546128de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610952565b506000610952565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017905261297b908590612981565b50505050565b60006129e3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612a959092919063ffffffff16565b9050805160001480612a04575080806020019051810190612a049190613602565b612a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f7420737563636565640000000000000000000000000000000000000000000060648201526084016110df565b505050565b6060611fbc8484600085856000808673ffffffffffffffffffffffffffffffffffffffff168587604051612ac99190613643565b60006040518083038185875af1925050503d8060008114612b06576040519150601f19603f3d011682016040523d82523d6000602084013e612b0b565b606091505b5091509150612b1c87838387612b27565b979650505050505050565b60608315612bbd578251600003612bb65773ffffffffffffffffffffffffffffffffffffffff85163b612bb6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016110df565b5081611fbc565b611fbc8383815115612bd25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110df919061365f565b8015158114612c1457600080fd5b50565b600060208284031215612c2957600080fd5b81356110f281612c06565b73ffffffffffffffffffffffffffffffffffffffff81168114612c1457600080fd5b600060208284031215612c6857600080fd5b81356110f281612c34565b60008060408385031215612c8657600080fd5b8235612c9181612c34565b91506020830135612ca181612c34565b809150509250929050565b600080600060608486031215612cc157600080fd5b8335612ccc81612c34565b92506020840135612cdc81612c34565b91506040840135612cec81612c34565b809150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006101008201905073ffffffffffffffffffffffffffffffffffffffff80845116835280602085015116602084015280604085015116604084015250606083015160028110612d9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b806060840152506080830151612dc960808401826fffffffffffffffffffffffffffffffff169052565b5060a0830151612ded60a08401826fffffffffffffffffffffffffffffffff169052565b5060c083015160c083015260e083015160e083015292915050565b6020808252825182820181905260009190848201906040850190845b81811015612e4057835183529284019291840191600101612e24565b50909695505050505050565b6fffffffffffffffffffffffffffffffff81168114612c1457600080fd5b60008060008060808587031215612e8057600080fd5b8435612e8b81612c34565b93506020850135612e9b81612c34565b92506040850135612eab81612e4c565b91506060850135612ebb81612e4c565b939692955090935050565b600060208284031215612ed857600080fd5b5035919050565b60008060408385031215612ef257600080fd5b50508035926020909101359150565b60006101008284031215612f1457600080fd5b50919050565b600080600060608486031215612f2f57600080fd5b8335612f3a81612c34565b92506020840135612f4a81612c34565b929592945050506040919091013590565b600080600060408486031215612f7057600080fd5b8335612f7b81612c34565b9250602084013567ffffffffffffffff80821115612f9857600080fd5b818601915086601f830112612fac57600080fd5b813581811115612fbb57600080fd5b8760208260061b8501011115612fd057600080fd5b6020830194508093505050509250925092565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461301357600080fd5b919050565b6000806040838503121561302b57600080fd5b823561303681612c34565b915061304460208401612fe3565b90509250929050565b60006020828403121561305f57600080fd5b5051919050565b60006020828403121561307857600080fd5b81356110f281612e4c565b600282106130ba577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b805474ff00000000000000000000000000000000000000008360a01b167fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8216178255505050565b6000813561095281612e4c565b813561311a81612c34565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff821617825550602082013561316781612c34565b6001820180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8316179055506002810160408301356131bc81612c34565b81547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff82161782555060608301356002811061320d57600080fd5b6132178183613083565b50506003810161326a61322c60808501613102565b82547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff91909116178255565b6132ba61327960a08501613102565b82546fffffffffffffffffffffffffffffffff1660809190911b7fffffffffffffffffffffffffffffffff0000000000000000000000000000000016178255565b5060c0820135600482015560e082013560058201555050565b6000602082840312156132e557600080fd5b815160ff811681146110f257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff8181168382160190811115610952576109526132f6565b60ff8281168282160390811115610952576109526132f6565b600181815b808511156133b057817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115613396576133966132f6565b808516156133a357918102915b93841c939080029061335c565b509250929050565b6000826133c757506001610952565b816133d457506000610952565b81600181146133ea57600281146133f457613410565b6001915050610952565b60ff841115613405576134056132f6565b50506001821b610952565b5060208310610133831016604e8410600b8410161715613433575081810a610952565b61343d8383613357565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561346f5761346f6132f6565b029392505050565b60006110f283836133b8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000604082840312156134c457600080fd5b6040516040810181811067ffffffffffffffff8211171561350e577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405261351a83612fe3565b8152602083013561352a81612c06565b60208201529392505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203613567576135676132f6565b5060010190565b8082028115828204841417610952576109526132f6565b6000826135bb577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b81810381811115610952576109526132f6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006020828403121561361457600080fd5b81516110f281612c06565b60005b8381101561363a578181015183820152602001613622565b50506000910152565b6000825161365581846020870161361f565b9190910192915050565b602081526000825180602084015261367e81604085016020870161361f565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220d96ae9d7682ecd7c81c6499687c3fbe3988c715c1ee71e21380e56dca5db559e64736f6c634300081300330000000000000000000000009f90430179d9b67341bfa50559bc7b8e35629f1b00000000000000000000000094b62a27a2f23cbdc0220826a8452fb5055cf273