UNPKG

test-contracts-sovryn

Version:

Smart contracts for the Sovryn protocol and external integrations.

603 lines (602 loc) 37.6 kB
{ "_format": "hh-sol-artifact-1", "contractName": "PriceFeeds", "sourceName": "contracts/feeds/PriceFeeds.sol", "abi": [ { "inputs": [ { "internalType": "address", "name": "_wrbtcTokenAddress", "type": "address" }, { "internalType": "address", "name": "_protocolTokenAddress", "type": "address" }, { "internalType": "address", "name": "_baseTokenAddress", "type": "address" } ], "payable": false, "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "GlobalPricingPaused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "amountInEth", "outputs": [ { "internalType": "uint256", "name": "ethAmount", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "baseToken", "outputs": [ { "internalType": "contract IWrbtcERC20", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "sourceToken", "type": "address" }, { "internalType": "address", "name": "destToken", "type": "address" }, { "internalType": "uint256", "name": "sourceAmount", "type": "uint256" }, { "internalType": "uint256", "name": "destAmount", "type": "uint256" }, { "internalType": "uint256", "name": "maxSlippage", "type": "uint256" } ], "name": "checkPriceDisagreement", "outputs": [ { "internalType": "uint256", "name": "sourceToDestSwapRate", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "decimals", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "loanToken", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "loanAmount", "type": "uint256" }, { "internalType": "uint256", "name": "collateralAmount", "type": "uint256" } ], "name": "getCurrentMargin", "outputs": [ { "internalType": "uint256", "name": "currentMargin", "type": "uint256" }, { "internalType": "uint256", "name": "collateralToLoanRate", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "loanToken", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "loanAmount", "type": "uint256" }, { "internalType": "uint256", "name": "collateralAmount", "type": "uint256" } ], "name": "getCurrentMarginAndCollateralSize", "outputs": [ { "internalType": "uint256", "name": "currentMargin", "type": "uint256" }, { "internalType": "uint256", "name": "collateralInEthAmount", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "loanToken", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "loanAmount", "type": "uint256" }, { "internalType": "uint256", "name": "collateralAmount", "type": "uint256" }, { "internalType": "uint256", "name": "margin", "type": "uint256" } ], "name": "getMaxDrawdown", "outputs": [ { "internalType": "uint256", "name": "maxDrawdown", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "globalPricingPaused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "isOwner", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "pricesFeeds", "outputs": [ { "internalType": "contract IPriceFeedsExt", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [], "name": "protocolTokenEthPrice", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "sourceToken", "type": "address" }, { "internalType": "address", "name": "destToken", "type": "address" } ], "name": "queryPrecision", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "sourceToken", "type": "address" }, { "internalType": "address", "name": "destToken", "type": "address" } ], "name": "queryRate", "outputs": [ { "internalType": "uint256", "name": "rate", "type": "uint256" }, { "internalType": "uint256", "name": "precision", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "sourceToken", "type": "address" }, { "internalType": "address", "name": "destToken", "type": "address" }, { "internalType": "uint256", "name": "sourceAmount", "type": "uint256" } ], "name": "queryReturn", "outputs": [ { "internalType": "uint256", "name": "destAmount", "type": "uint256" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "contract IERC20[]", "name": "tokens", "type": "address[]" } ], "name": "setDecimals", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "bool", "name": "isPaused", "type": "bool" } ], "name": "setGlobalPricingPaused", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address[]", "name": "tokens", "type": "address[]" }, { "internalType": "contract IPriceFeedsExt[]", "name": "feeds", "type": "address[]" } ], "name": "setPriceFeed", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "uint256", "name": "newPrice", "type": "uint256" } ], "name": "setProtocolTokenEthPrice", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [ { "internalType": "address", "name": "loanToken", "type": "address" }, { "internalType": "address", "name": "collateralToken", "type": "address" }, { "internalType": "uint256", "name": "loanAmount", "type": "uint256" }, { "internalType": "uint256", "name": "collateralAmount", "type": "uint256" }, { "internalType": "uint256", "name": "maintenanceMargin", "type": "uint256" } ], "name": "shouldLiquidate", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "payable": false, "stateMutability": "view", "type": "function" }, { "constant": false, "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "payable": false, "stateMutability": "nonpayable", "type": "function" }, { "constant": true, "inputs": [], "name": "wrbtcToken", "outputs": [ { "internalType": "contract IWrbtcERC20", "name": "", "type": "address" } ], "payable": false, "stateMutability": "view", "type": "function" } ], "bytecode": "0x608060405265b5e620f480006006556007805460ff191690553480156200002557600080fd5b506040516200198938038062001989833981810160405260608110156200004b57600080fd5b50805160208201516040909201519091906000620000716001600160e01b036200014316565b600380546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600560205260127f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc8190556001600160a01b0384166000908152604090205562000112836001600160e01b036200014716565b62000126826001600160e01b03620001bc16565b6200013a816001600160e01b036200023116565b505050620002f8565b3390565b6200015d81620002bb60201b620015841760201c565b6200019a5760405162461bcd60e51b8152600401808060200182810382526021815260200180620019446021913960400191505060405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b620001d281620002bb60201b620015841760201c565b6200020f5760405162461bcd60e51b8152600401808060200182810382526024815260200180620019656024913960400191505060405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6200024781620002bb60201b620015841760201c565b62000299576040805162461bcd60e51b815260206004820181905260248201527f5f62617365546f6b656e41646472657373206e6f74206120636f6e7472616374604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470818114801590620002f057508115155b949350505050565b61163c80620003086000396000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c80638f32d59b116100b8578063d138f9a11161007c578063d138f9a1146104a8578063d449a832146104de578063d601e3ff14610504578063ecc5382d1461050c578063f2fde38b14610548578063f80b25fb1461056e57610142565b80638f32d59b146103f4578063aa2ec710146103fc578063afe840091461046c578063b2cf54ea14610474578063c55dae63146104a057610142565b80632d485c5c1161010a5780632d485c5c1461025f5780632ff0d012146102a15780635034709c146102dd578063524efd4b1461039f5780637c2badb7146103cd5780638da5cb5b146103ec57610142565b806310f54166146101475780631e2c62d31461016657806322340070146101ba57806329d5277c146101c25780632a88770214610209575b600080fd5b6101646004803603602081101561015d57600080fd5b50356105b0565b005b6101a8600480360360a081101561017c57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561063f565b60408051918252519081900360200190f35b6101a8610743565b6101f0600480360360408110156101d857600080fd5b506001600160a01b0381358116916020013516610749565b6040805192835260208301919091528051918290030190f35b61024b600480360360a081101561021f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610762565b604080519115158252519081900360200190f35b6102856004803603602081101561027557600080fd5b50356001600160a01b0316610780565b604080516001600160a01b039092168252519081900360200190f35b6101f0600480360360808110156102b757600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013561079b565b610164600480360360408110156102f357600080fd5b81019060208101813564010000000081111561030e57600080fd5b82018360208201111561032057600080fd5b8035906020019184602083028401116401000000008311171561034257600080fd5b91939092909160208101903564010000000081111561036057600080fd5b82018360208201111561037257600080fd5b8035906020019184602083028401116401000000008311171561039457600080fd5b509092509050610874565b6101a8600480360360408110156103b557600080fd5b506001600160a01b0381358116916020013516610985565b610164600480360360208110156103e357600080fd5b503515156109c2565b610285610a5a565b61024b610a69565b6101646004803603602081101561041257600080fd5b81019060208101813564010000000081111561042d57600080fd5b82018360208201111561043f57600080fd5b8035906020019184602083028401116401000000008311171561046157600080fd5b509092509050610a8f565b610285610ba5565b6101a86004803603604081101561048a57600080fd5b506001600160a01b038135169060200135610bb4565b610285610c0e565b6101a8600480360360608110156104be57600080fd5b506001600160a01b03813581169160208101359091169060400135610c1d565b6101a8600480360360208110156104f457600080fd5b50356001600160a01b0316610c65565b61024b610c77565b6101f06004803603608081101561052257600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610c80565b6101646004803603602081101561055e57600080fd5b50356001600160a01b0316610ca7565b6101a8600480360360a081101561058457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610cf8565b6105b8610a69565b6105f8576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b8061063a576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c696420707269636560981b604482015290519081900360640190fd5b600655565b60075460009060ff161561068e576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b60008061069b8888610d96565b90925090506106c0866106b4878463ffffffff61114216565b9063ffffffff61119b16565b925082821115610738578282036106ea846106b48368056bc75e2d6310000063ffffffff61114216565b905084811115610736576040805162461bcd60e51b81526020600482015260126024820152711c1c9a58d948191a5cd859dc99595b595b9d60721b604482015290519081900360640190fd5b505b505095945050505050565b60065481565b6000806107568484610d96565b915091505b9250929050565b6000806107718787878761079b565b50909210159695505050505050565b6004602052600090815260409020546001600160a01b031681565b6000806000866001600160a01b0316866001600160a01b031614156107cc5750670de0b6b3a764000090508261081b565b60006107d88789610749565b90935090506107f9816106b485670de0b6b3a764000063ffffffff61114216565b9250610817670de0b6b3a76400006106b4878663ffffffff61114216565b9150505b841580159061082a5750848110155b156108655761085c856106b468056bc75e2d63100000610850858463ffffffff6111dd16565b9063ffffffff61114216565b925061086b9050565b50600091505b94509492505050565b61087c610a69565b6108bc576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b828114610901576040805162461bcd60e51b815260206004820152600e60248201526d0c6deeadce840dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b60005b8381101561097e5782828281811061091857fe5b905060200201356001600160a01b03166004600087878581811061093857fe5b6001600160a01b03602091820293909301358316845283019390935260409091016000208054939091166001600160a01b03199093169290921790915550600101610904565b5050505050565b6000816001600160a01b0316836001600160a01b031614156109af57670de0b6b3a76400006109b9565b6109b9838361121f565b90505b92915050565b6109ca610a69565b610a0a576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b60075460ff16151581151514610a57576007805460ff191682151590811790915560405133907fd72570f3e3995824c4448eca84a22aed922dab8c58e23e9c5e60e74d0714f7f190600090a35b50565b6003546001600160a01b031690565b6003546000906001600160a01b0316610a80611389565b6001600160a01b031614905090565b610a97610a69565b610ad7576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b60005b81811015610ba057828282818110610aee57fe5b905060200201356001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3657600080fd5b505afa158015610b4a573d6000803e3d6000fd5b505050506040513d6020811015610b6057600080fd5b505160ff1660056000858585818110610b7557fe5b602090810292909201356001600160a01b031683525081019190915260400160002055600101610ada565b505050565b6000546001600160a01b031681565b600080546001600160a01b0384811691161415610bd25750806109bc565b600080548190610bec9086906001600160a01b0316610749565b9092509050610c05816106b4868563ffffffff61114216565b95945050505050565b6001546001600160a01b031681565b60075460009060ff1615610c3357506000610c5e565b600080610c408686610d96565b9092509050610c59816106b4868563ffffffff61114216565b925050505b9392505050565b60056020526000908152604090205481565b60075460ff1681565b600080610c8f8686868661079b565b509150610c9c8584610bb4565b905094509492505050565b610caf610a69565b610cef576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b610a578161138d565b600080866001600160a01b0316866001600160a01b03161415610d1c575083610d47565b600080610d298989610749565b9092509050610d42816106b4898563ffffffff61114216565b925050505b6000610d76610d6968056bc75e2d631000006106b4858863ffffffff61114216565b839063ffffffff61142e16565b9050808511610d86576000610d8a565b8085035b98975050505050505050565b600754600090819060ff1615610de7576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161461112f576001546000906001600160a01b03868116911614801590610e2f57506002546001600160a01b03868116911614155b15610f55576001600160a01b038086166000908152600460205260409020541680610e98576040805162461bcd60e51b81526020600482015260146024820152731d5b9cdd5c1c1bdc9d1959081cdc98c81999595960621b604482015290519081900360640190fd5b806001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed157600080fd5b505afa158015610ee5573d6000803e3d6000fd5b505050506040513d6020811015610efb57600080fd5b505191508115801590610f105750608082901c155b610f4f576040805162461bcd60e51b815260206004820152600b60248201526a383934b1b29032b93937b960a91b604482015290519081900360640190fd5b50610f7f565b6002546001600160a01b03868116911614610f7857670de0b6b3a7640000610f7c565b6006545b90505b6001546000906001600160a01b03868116911614801590610fae57506002546001600160a01b03868116911614155b156110d4576001600160a01b038086166000908152600460205260409020541680611017576040805162461bcd60e51b81526020600482015260146024820152731d5b9cdd5c1c1bdc9d195908191cdd081999595960621b604482015290519081900360640190fd5b806001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561105057600080fd5b505afa158015611064573d6000803e3d6000fd5b505050506040513d602081101561107a57600080fd5b50519150811580159061108f5750608082901c155b6110ce576040805162461bcd60e51b815260206004820152600b60248201526a383934b1b29032b93937b960a91b604482015290519081900360640190fd5b506110fe565b6002546001600160a01b038681169116146110f757670de0b6b3a76400006110fb565b6006545b90505b61111a816106b484670de0b6b3a764000063ffffffff61114216565b9350611126868661121f565b9250505061075b565b50670de0b6b3a764000093849350915050565b600082611151575060006109bc565b8282028284828161115e57fe5b04146109b95760405162461bcd60e51b81526004018080602001828103825260218152602001806115e76021913960400191505060405180910390fd5b60006109b983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611488565b60006109b983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061152a565b6000816001600160a01b0316836001600160a01b0316141561124a5750670de0b6b3a76400006109bc565b6001600160a01b038316600090815260056020526040902054806112d357836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a157600080fd5b505afa1580156112b5573d6000803e3d6000fd5b505050506040513d60208110156112cb57600080fd5b505160ff1690505b6001600160a01b0383166000908152600560205260409020548061135c57836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561132a57600080fd5b505afa15801561133e573d6000803e3d6000fd5b505050506040513d602081101561135457600080fd5b505160ff1690505b81811061137c5761137060128383036111dd565b600a0a925050506109bc565b611370601282840361142e565b3390565b6001600160a01b0381166113d25760405162461bcd60e51b81526004018080602001828103825260268152602001806115c16026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156109b9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081836115145760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114d95781810151838201526020016114c1565b50505050905090810190601f1680156115065780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161152057fe5b0495945050505050565b6000818484111561157c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156114d95781810151838201526020016114c1565b505050900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906115b857508115155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a7231582038bdee8ce4471747639c489957b799d3f0ca97863da5e16e540c0e84fd50e85764736f6c634300051100325f7772627463546f6b656e41646472657373206e6f74206120636f6e74726163745f70726f746f636f6c546f6b656e41646472657373206e6f74206120636f6e7472616374", "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101425760003560e01c80638f32d59b116100b8578063d138f9a11161007c578063d138f9a1146104a8578063d449a832146104de578063d601e3ff14610504578063ecc5382d1461050c578063f2fde38b14610548578063f80b25fb1461056e57610142565b80638f32d59b146103f4578063aa2ec710146103fc578063afe840091461046c578063b2cf54ea14610474578063c55dae63146104a057610142565b80632d485c5c1161010a5780632d485c5c1461025f5780632ff0d012146102a15780635034709c146102dd578063524efd4b1461039f5780637c2badb7146103cd5780638da5cb5b146103ec57610142565b806310f54166146101475780631e2c62d31461016657806322340070146101ba57806329d5277c146101c25780632a88770214610209575b600080fd5b6101646004803603602081101561015d57600080fd5b50356105b0565b005b6101a8600480360360a081101561017c57600080fd5b506001600160a01b0381358116916020810135909116906040810135906060810135906080013561063f565b60408051918252519081900360200190f35b6101a8610743565b6101f0600480360360408110156101d857600080fd5b506001600160a01b0381358116916020013516610749565b6040805192835260208301919091528051918290030190f35b61024b600480360360a081101561021f57600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610762565b604080519115158252519081900360200190f35b6102856004803603602081101561027557600080fd5b50356001600160a01b0316610780565b604080516001600160a01b039092168252519081900360200190f35b6101f0600480360360808110156102b757600080fd5b506001600160a01b0381358116916020810135909116906040810135906060013561079b565b610164600480360360408110156102f357600080fd5b81019060208101813564010000000081111561030e57600080fd5b82018360208201111561032057600080fd5b8035906020019184602083028401116401000000008311171561034257600080fd5b91939092909160208101903564010000000081111561036057600080fd5b82018360208201111561037257600080fd5b8035906020019184602083028401116401000000008311171561039457600080fd5b509092509050610874565b6101a8600480360360408110156103b557600080fd5b506001600160a01b0381358116916020013516610985565b610164600480360360208110156103e357600080fd5b503515156109c2565b610285610a5a565b61024b610a69565b6101646004803603602081101561041257600080fd5b81019060208101813564010000000081111561042d57600080fd5b82018360208201111561043f57600080fd5b8035906020019184602083028401116401000000008311171561046157600080fd5b509092509050610a8f565b610285610ba5565b6101a86004803603604081101561048a57600080fd5b506001600160a01b038135169060200135610bb4565b610285610c0e565b6101a8600480360360608110156104be57600080fd5b506001600160a01b03813581169160208101359091169060400135610c1d565b6101a8600480360360208110156104f457600080fd5b50356001600160a01b0316610c65565b61024b610c77565b6101f06004803603608081101561052257600080fd5b506001600160a01b03813581169160208101359091169060408101359060600135610c80565b6101646004803603602081101561055e57600080fd5b50356001600160a01b0316610ca7565b6101a8600480360360a081101561058457600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060800135610cf8565b6105b8610a69565b6105f8576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b8061063a576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c696420707269636560981b604482015290519081900360640190fd5b600655565b60075460009060ff161561068e576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b60008061069b8888610d96565b90925090506106c0866106b4878463ffffffff61114216565b9063ffffffff61119b16565b925082821115610738578282036106ea846106b48368056bc75e2d6310000063ffffffff61114216565b905084811115610736576040805162461bcd60e51b81526020600482015260126024820152711c1c9a58d948191a5cd859dc99595b595b9d60721b604482015290519081900360640190fd5b505b505095945050505050565b60065481565b6000806107568484610d96565b915091505b9250929050565b6000806107718787878761079b565b50909210159695505050505050565b6004602052600090815260409020546001600160a01b031681565b6000806000866001600160a01b0316866001600160a01b031614156107cc5750670de0b6b3a764000090508261081b565b60006107d88789610749565b90935090506107f9816106b485670de0b6b3a764000063ffffffff61114216565b9250610817670de0b6b3a76400006106b4878663ffffffff61114216565b9150505b841580159061082a5750848110155b156108655761085c856106b468056bc75e2d63100000610850858463ffffffff6111dd16565b9063ffffffff61114216565b925061086b9050565b50600091505b94509492505050565b61087c610a69565b6108bc576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b828114610901576040805162461bcd60e51b815260206004820152600e60248201526d0c6deeadce840dad2e6dac2e8c6d60931b604482015290519081900360640190fd5b60005b8381101561097e5782828281811061091857fe5b905060200201356001600160a01b03166004600087878581811061093857fe5b6001600160a01b03602091820293909301358316845283019390935260409091016000208054939091166001600160a01b03199093169290921790915550600101610904565b5050505050565b6000816001600160a01b0316836001600160a01b031614156109af57670de0b6b3a76400006109b9565b6109b9838361121f565b90505b92915050565b6109ca610a69565b610a0a576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b60075460ff16151581151514610a57576007805460ff191682151590811790915560405133907fd72570f3e3995824c4448eca84a22aed922dab8c58e23e9c5e60e74d0714f7f190600090a35b50565b6003546001600160a01b031690565b6003546000906001600160a01b0316610a80611389565b6001600160a01b031614905090565b610a97610a69565b610ad7576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b60005b81811015610ba057828282818110610aee57fe5b905060200201356001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610b3657600080fd5b505afa158015610b4a573d6000803e3d6000fd5b505050506040513d6020811015610b6057600080fd5b505160ff1660056000858585818110610b7557fe5b602090810292909201356001600160a01b031683525081019190915260400160002055600101610ada565b505050565b6000546001600160a01b031681565b600080546001600160a01b0384811691161415610bd25750806109bc565b600080548190610bec9086906001600160a01b0316610749565b9092509050610c05816106b4868563ffffffff61114216565b95945050505050565b6001546001600160a01b031681565b60075460009060ff1615610c3357506000610c5e565b600080610c408686610d96565b9092509050610c59816106b4868563ffffffff61114216565b925050505b9392505050565b60056020526000908152604090205481565b60075460ff1681565b600080610c8f8686868661079b565b509150610c9c8584610bb4565b905094509492505050565b610caf610a69565b610cef576040805162461bcd60e51b815260206004820152600c60248201526b1d5b985d5d1a1bdc9a5e995960a21b604482015290519081900360640190fd5b610a578161138d565b600080866001600160a01b0316866001600160a01b03161415610d1c575083610d47565b600080610d298989610749565b9092509050610d42816106b4898563ffffffff61114216565b925050505b6000610d76610d6968056bc75e2d631000006106b4858863ffffffff61114216565b839063ffffffff61142e16565b9050808511610d86576000610d8a565b8085035b98975050505050505050565b600754600090819060ff1615610de7576040805162461bcd60e51b81526020600482015260116024820152701c1c9a58da5b99c81a5cc81c185d5cd959607a1b604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b03161461112f576001546000906001600160a01b03868116911614801590610e2f57506002546001600160a01b03868116911614155b15610f55576001600160a01b038086166000908152600460205260409020541680610e98576040805162461bcd60e51b81526020600482015260146024820152731d5b9cdd5c1c1bdc9d1959081cdc98c81999595960621b604482015290519081900360640190fd5b806001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed157600080fd5b505afa158015610ee5573d6000803e3d6000fd5b505050506040513d6020811015610efb57600080fd5b505191508115801590610f105750608082901c155b610f4f576040805162461bcd60e51b815260206004820152600b60248201526a383934b1b29032b93937b960a91b604482015290519081900360640190fd5b50610f7f565b6002546001600160a01b03868116911614610f7857670de0b6b3a7640000610f7c565b6006545b90505b6001546000906001600160a01b03868116911614801590610fae57506002546001600160a01b03868116911614155b156110d4576001600160a01b038086166000908152600460205260409020541680611017576040805162461bcd60e51b81526020600482015260146024820152731d5b9cdd5c1c1bdc9d195908191cdd081999595960621b604482015290519081900360640190fd5b806001600160a01b03166350d25bcd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561105057600080fd5b505afa158015611064573d6000803e3d6000fd5b505050506040513d602081101561107a57600080fd5b50519150811580159061108f5750608082901c155b6110ce576040805162461bcd60e51b815260206004820152600b60248201526a383934b1b29032b93937b960a91b604482015290519081900360640190fd5b506110fe565b6002546001600160a01b038681169116146110f757670de0b6b3a76400006110fb565b6006545b90505b61111a816106b484670de0b6b3a764000063ffffffff61114216565b9350611126868661121f565b9250505061075b565b50670de0b6b3a764000093849350915050565b600082611151575060006109bc565b8282028284828161115e57fe5b04146109b95760405162461bcd60e51b81526004018080602001828103825260218152602001806115e76021913960400191505060405180910390fd5b60006109b983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611488565b60006109b983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061152a565b6000816001600160a01b0316836001600160a01b0316141561124a5750670de0b6b3a76400006109bc565b6001600160a01b038316600090815260056020526040902054806112d357836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156112a157600080fd5b505afa1580156112b5573d6000803e3d6000fd5b505050506040513d60208110156112cb57600080fd5b505160ff1690505b6001600160a01b0383166000908152600560205260409020548061135c57836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561132a57600080fd5b505afa15801561133e573d6000803e3d6000fd5b505050506040513d602081101561135457600080fd5b505160ff1690505b81811061137c5761137060128383036111dd565b600a0a925050506109bc565b611370601282840361142e565b3390565b6001600160a01b0381166113d25760405162461bcd60e51b81526004018080602001828103825260268152602001806115c16026913960400191505060405180910390fd5b6003546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600380546001600160a01b0319166001600160a01b0392909216919091179055565b6000828201838110156109b9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600081836115145760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156114d95781810151838201526020016114c1565b50505050905090810190601f1680156115065780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161152057fe5b0495945050505050565b6000818484111561157c5760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156114d95781810151838201526020016114c1565b505050900390565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4708181148015906115b857508115155b94935050505056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a265627a7a7231582038bdee8ce4471747639c489957b799d3f0ca97863da5e16e540c0e84fd50e85764736f6c63430005110032", "linkReferences": {}, "deployedLinkReferences": {} }