From 881c820551dc04b8c8037a03619080436f80e67c Mon Sep 17 00:00:00 2001 From: cgewecke Date: Wed, 29 Sep 2021 07:56:22 -0700 Subject: [PATCH 1/6] Add perp artifacts and initial fixture setup --- external/abi/perp/PerpV2AccountBalance.json | 645 ++++++++++++ external/abi/perp/PerpV2BaseToken.json | 492 ++++++++++ .../abi/perp/PerpV2ChainlinkPriceFeed.json | 56 ++ external/abi/perp/PerpV2ClearingHouse.json | 789 +++++++++++++++ .../abi/perp/PerpV2ClearingHouseConfig.json | 272 +++++ external/abi/perp/PerpV2Exchange.json | 729 ++++++++++++++ external/abi/perp/PerpV2InsuranceFund.json | 220 +++++ external/abi/perp/PerpV2MarketRegistry.json | 420 ++++++++ external/abi/perp/PerpV2OrderBook.json | 928 ++++++++++++++++++ external/abi/perp/PerpV2QuoteToken.json | 455 +++++++++ external/abi/perp/PerpV2Quoter.json | 133 +++ external/abi/perp/PerpV2TestAggregatorV3.json | 122 +++ external/abi/perp/PerpV2Vault.json | 493 ++++++++++ external/abi/perp/PerpV2VirtualToken.json | 437 +++++++++ package.json | 1 + utils/contracts/perpV2.ts | 14 + utils/deploys/deployExternal.ts | 84 ++ utils/fixtures/index.ts | 1 + utils/fixtures/perpV2Fixture.ts | 244 +++++ yarn.lock | 69 +- 20 files changed, 6603 insertions(+), 1 deletion(-) create mode 100644 external/abi/perp/PerpV2AccountBalance.json create mode 100644 external/abi/perp/PerpV2BaseToken.json create mode 100644 external/abi/perp/PerpV2ChainlinkPriceFeed.json create mode 100644 external/abi/perp/PerpV2ClearingHouse.json create mode 100644 external/abi/perp/PerpV2ClearingHouseConfig.json create mode 100644 external/abi/perp/PerpV2Exchange.json create mode 100644 external/abi/perp/PerpV2InsuranceFund.json create mode 100644 external/abi/perp/PerpV2MarketRegistry.json create mode 100644 external/abi/perp/PerpV2OrderBook.json create mode 100644 external/abi/perp/PerpV2QuoteToken.json create mode 100644 external/abi/perp/PerpV2Quoter.json create mode 100644 external/abi/perp/PerpV2TestAggregatorV3.json create mode 100644 external/abi/perp/PerpV2Vault.json create mode 100644 external/abi/perp/PerpV2VirtualToken.json create mode 100644 utils/contracts/perpV2.ts create mode 100644 utils/fixtures/perpV2Fixture.ts diff --git a/external/abi/perp/PerpV2AccountBalance.json b/external/abi/perp/PerpV2AccountBalance.json new file mode 100644 index 000000000..65681de66 --- /dev/null +++ b/external/abi/perp/PerpV2AccountBalance.json @@ -0,0 +1,645 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2AccountBalance", + "sourceName": "contracts/AccountBalance.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "clearingHouse", + "type": "address" + } + ], + "name": "ClearingHouseChanged", + "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" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "int256", + "name": "base", + "type": "int256" + }, + { + "internalType": "int256", + "name": "quote", + "type": "int256" + }, + { + "internalType": "int256", + "name": "owedRealizedPnl", + "type": "int256" + } + ], + "name": "addBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "int256", + "name": "delta", + "type": "int256" + } + ], + "name": "addOwedRealizedPnl", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clearingHouse", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clearingHouseConfig", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "deregisterBaseToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "exchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getAccountInfo", + "outputs": [ + { + "components": [ + { + "internalType": "int256", + "name": "baseBalance", + "type": "int256" + }, + { + "internalType": "int256", + "name": "quoteBalance", + "type": "int256" + }, + { + "internalType": "int256", + "name": "lastTwPremiumGrowthGlobalX96", + "type": "int256" + } + ], + "internalType": "struct AccountMarket.Info", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getBase", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getBaseTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getNetQuoteBalance", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getOwedRealizedPnl", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getPositionSize", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getPositionValue", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getQuote", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getTotalAbsPositionValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getTotalDebtValue", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getTotalUnrealizedPnl", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "hasOrder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "clearingHouseConfigArg", + "type": "address" + }, + { + "internalType": "address", + "name": "marketRegistryArg", + "type": "address" + }, + { + "internalType": "address", + "name": "exchangeArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "marketRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "orderBook", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "registerBaseToken", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "clearingHouseArg", + "type": "address" + } + ], + "name": "setClearingHouse", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vaultArg", + "type": "address" + } + ], + "name": "setVault", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "settle", + "outputs": [ + { + "internalType": "int256", + "name": "pnl", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + } + ], + "name": "settleQuoteToPnl", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "int256", + "name": "lastTwPremiumGrowthGlobalX96", + "type": "int256" + } + ], + "name": "updateTwPremiumGrowthGlobal", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50612859806100206000396000f3fe608060405234801561001057600080fd5b506004361061018b5760003560e01c80630af968001461019057806313af4035146101ae578063293a5077146101c35780632bea7936146101e35780632e4586c3146101f65780633772470214610209578063449323d81461021c5780636332fef61461022f5780636817031b1461024f5780636a256b29146102625780636c8381f8146102755780636ccdc82e1461027d578063715018a614610290578063776af5ba1461029857806377b57b07146102a05780637a5b45a0146102b35780638227bc3e146102c65780638da25bbe146102d95780638da5cb5b146102ec578063af74e736146102f4578063b3bd6e1214610314578063bc5920ba14610327578063beb56a751461032f578063c0c53b8b14610342578063c2075b2114610355578063cb3c7b8e1461035d578063d2f7265a1461037d578063ecb96fe614610385578063ee817e8b1461038d578063f0c79797146103a0578063fa8e30af146103b3578063fbfa77cf146103c6578063fc737214146103ce575b600080fd5b6101986103e1565b6040516101a59190612457565b60405180910390f35b6101c16101bc366004612265565b6103f0565b005b6101d66101d1366004612265565b61054b565b6040516101a59190612543565b6101d66101f1366004612265565b610661565b6101c161020436600461231f565b6106fc565b6101c16102173660046123af565b61076e565b6101c161022a366004612265565b610810565b61024261023d36600461229d565b6108e5565b6040516101a591906126b8565b6101c161025d366004612265565b610940565b6101d6610270366004612265565b6109ed565b610198610a4a565b6101d661028b366004612265565b610a59565b6101c1610b27565b610198610bc8565b6101d66102ae36600461229d565b610bd7565b6101d66102c136600461229d565b610c26565b6101d66102d4366004612265565b610c54565b6101d66102e736600461229d565b610d94565b610198610e53565b610307610302366004612265565b610e62565b6040516101a591906124eb565b6101d661032236600461229d565b610ed8565b6101c1610f03565b6101c161033d36600461235f565b610fef565b6101c16103503660046122d5565b6110dc565b6101986112c5565b61037061036b366004612265565b6112d4565b6040516101a59190612538565b610198611368565b610198611377565b6101d661039b366004612265565b611386565b6101c16103ae36600461231f565b6113a1565b6101c16103c136600461229d565b611459565b610198611775565b6101c16103dc36600461229d565b611784565b6068546001600160a01b031681565b6103f86119d0565b6001600160a01b0316610409610e53565b6001600160a01b03161461044d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610491576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156104dd576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610529576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260a0602052604081205481908190815b8181101561062d576001600160a01b038616600090815260a06020526040812080548390811061059657fe5b60009182526020822001546001600160a01b031691506105b68883610ed8565b905060008082136105d2576105cd826000036119d4565b6105d5565b60005b905060006105f46105ef6105e886611a2f565b8490611b32565b611b8b565b905060006106028b86610c26565b905061060e8883611b9f565b975061061a8982611bf7565b9850506001909401935061056a92505050565b50600080841361064857610643846000036119d4565b61064b565b60005b90506106578184611b9f565b9695505050505050565b60008060005b6001600160a01b038416600090815260a060205260409020548110156106e1576001600160a01b038416600090815260a0602052604081208054839081106106ab57fe5b6000918252602090912001546001600160a01b031690506106d66106cf8683610bd7565b8490611bf7565b925050600101610667565b506106f5816106ef85610c54565b90611bf7565b9392505050565b609c546001600160a01b03166107106119d0565b6001600160a01b03161461073f5760405162461bcd60e51b815260040161073690612659565b60405180910390fd5b6001600160a01b03928316600090815260a1602090815260408083209490951682529290925291902060020155565b609c546001600160a01b03166107826119d0565b6001600160a01b031614806107b157506068546001600160a01b03166107a66119d0565b6001600160a01b0316145b6107cd5760405162461bcd60e51b815260040161073690612635565b6001600160a01b0382166000908152609f60205260409020546107f09082611bf7565b6001600160a01b039092166000908152609f602052604090209190915550565b6108186119d0565b6001600160a01b0316610829610e53565b6001600160a01b03161461086d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61087f816001600160a01b0316611c5c565b61089b5760405162461bcd60e51b8152600401610736906125f2565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6108ed612244565b506001600160a01b03808316600090815260a16020908152604080832093851683529281529082902082516060810184528154815260018201549281019290925260020154918101919091525b92915050565b6109486119d0565b6001600160a01b0316610959610e53565b6001600160a01b03161461099d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6109af816001600160a01b0316611c5c565b6109cb5760405162461bcd60e51b815260040161073690612698565b609e80546001600160a01b0319166001600160a01b0392909216919091179055565b609e546000906001600160a01b0316610a046119d0565b6001600160a01b031614610a2a5760405162461bcd60e51b815260040161073690612679565b506001600160a01b03166000908152609f60205260408120805491905590565b6034546001600160a01b031690565b6001600160a01b038116600090815260a06020908152604080832080548251818502810185019093528083528493830182828015610ac057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa2575b505050505090506000808251905060005b81811015610b1d576000848281518110610ae757fe5b602002602001015190506000610b05610b008984610bd7565b611c62565b9050610b118582611b9f565b94505050600101610ad1565b5090949350505050565b610b2f6119d0565b6001600160a01b0316610b40610e53565b6001600160a01b031614610b84576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020612791833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b609d546001600160a01b031681565b600080610be48484610d94565b905080610bf557600091505061093a565b6000610c0084611a2f565b9050610c1d610c18610c1183611c85565b8490611cc9565b611d72565b95945050505050565b6001600160a01b03918216600090815260a16020908152604080832093909416825291909152206001015490565b6001600160a01b038116600090815260a0602052604081205481805b82811015610ccb576001600160a01b038516600090815260a060205260408120805483908110610c9c57fe5b6000918252602090912001546001600160a01b03169050610cc06106cf8783610c26565b925050600101610c70565b50609d546001600160a01b03858116600090815260a060205260408082209051632196f33360e21b81529193929092169163865bcccc91610d1091899160040161248f565b60206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6091906123fa565b90506000610d706106cf83611c85565b9050600a610d7d82611c62565b10610d885780610657565b50600095945050505050565b600080610e30610da48585610ed8565b609d5460405163bf0b1abb60e01b81526106ef916001600160a01b03169063bf0b1abb90610ddb908a908a9060019060040161246b565b60206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b91906123fa565b611c85565b9050600a610e3d82611c62565b10610e485780610e4b565b60005b949350505050565b6033546001600160a01b031690565b6001600160a01b038116600090815260a06020908152604091829020805483518184028101840190945280845260609392830182828015610ecc57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eae575b50505050509050919050565b6001600160a01b03918216600090815260a16020908152604080832093909416825291909152205490565b6034546001600160a01b0316610f48576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610f506119d0565b6034546001600160a01b03908116911614610f9b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061279183398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b609c546001600160a01b03166110036119d0565b6001600160a01b0316148061103257506068546001600160a01b03166110276119d0565b6001600160a01b0316145b61104e5760405162461bcd60e51b815260040161073690612635565b6001600160a01b03808616600090815260a160209081526040808320938816835292905220805461107f9085611bf7565b815560018101546110909084611bf7565b60018201556001600160a01b0386166000908152609f60205260409020546110b89083611bf7565b6001600160a01b039096166000908152609f60205260409020959095555050505050565b600054610100900460ff16806110f557506110f5611d86565b80611103575060005460ff16155b61113e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015611169576000805460ff1961ff0019909116610100171660011790555b61117b846001600160a01b0316611c5c565b6111975760405162461bcd60e51b81526004016107369061254c565b6111a9826001600160a01b0316611c5c565b6111c55760405162461bcd60e51b8152600401610736906125b1565b6000826001600160a01b031663776af5ba6040518163ffffffff1660e01b815260040160206040518083038186803b15801561120057600080fd5b505afa158015611214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190612281565b905061124c816001600160a01b0316611c5c565b6112685760405162461bcd60e51b815260040161073690612614565b61127184611d97565b609b80546001600160a01b038088166001600160a01b031992831617909255609c8054868416908316179055609d805493909216921691909117905580156112bf576000805461ff00191690555b50505050565b609b546001600160a01b031681565b609d546001600160a01b03828116600090815260a060205260408082209051634dffaee560e01b815291939290921691634dffaee59161131891869160040161248f565b60206040518083038186803b15801561133057600080fd5b505afa158015611344573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906123da565b609c546001600160a01b031681565b6067546001600160a01b031681565b6001600160a01b03166000908152609f602052604090205490565b609c546001600160a01b03166113b56119d0565b6001600160a01b0316146113db5760405162461bcd60e51b815260040161073690612659565b6001600160a01b03808416600090815260a160209081526040808320938616835292905220600181015461140f9083611e8a565b60018201556001600160a01b0384166000908152609f60205260409020546114379083611bf7565b6001600160a01b039094166000908152609f6020526040902093909355505050565b6068546001600160a01b031661146d6119d0565b6001600160a01b0316146114935760405162461bcd60e51b815260040161073690612590565b600a6114a2610b008484610ed8565b1015806114bc5750600a6114b9610b008484610c26565b10155b156114c657611771565b609d5460405163bf0b1abb60e01b81526000916001600160a01b03169063bf0b1abb906114fc908690869060019060040161246b565b60206040518083038186803b15801561151457600080fd5b505afa158015611528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906123fa565b609d5460405163bf0b1abb60e01b81529192506000916001600160a01b039091169063bf0b1abb906115869087908790869060040161246b565b60206040518083038186803b15801561159e57600080fd5b505afa1580156115b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d691906123fa565b905060008211806115e75750600081115b156115f3575050611771565b6001600160a01b03808516600081815260a16020908152604080832094881683529381528382208281556001810183905560020182905591815260a090915290812054905b8181101561176c576001600160a01b03868116600090815260a0602052604090208054918716918390811061166957fe5b6000918252602090912001546001600160a01b031614156117645760018203811461171c576001600160a01b038616600090815260a060205260409020805460001984019081106116b657fe5b60009182526020808320909101546001600160a01b03898116845260a090925260409092208054919092169190839081106116ed57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b038616600090815260a06020526040902080548061173d57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561176c565b600101611638565b505050505b5050565b609e546001600160a01b031681565b6068546001600160a01b03166117986119d0565b6001600160a01b0316146117be5760405162461bcd60e51b815260040161073690612590565b6001600160a01b038216600090815260a0602090815260408083208054825181850281018501909352808352919290919083018282801561182857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161180a575b5050505050905080516000141561187d57506001600160a01b03828116600090815260a0602090815260408220805460018101825590835291200180546001600160a01b031916918316919091179055611771565b6118878383610ed8565b6119cb576000805b82518110156118d657836001600160a01b03168382815181106118ae57fe5b60200260200101516001600160a01b031614156118ce57600191506118d6565b60010161188f565b50806112bf57609b546040805163f652b52760e01b815290516000926001600160a01b03169163f652b527916004808301926020929190829003018186803b15801561192157600080fd5b505afa158015611935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119599190612436565b905060ff8116158061196e57508060ff168351105b61198a5760405162461bcd60e51b8152600401610736906125d2565b50506001600160a01b03838116600090815260a0602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b505050565b3390565b600080821215611a2b576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000816001600160a01b03166312080647609b60009054906101000a90046001600160a01b03166001600160a01b0316633c1d5df06040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac69190612412565b6040518263ffffffff1660e01b8152600401611ae291906126d9565b60206040518083038186803b158015611afa57600080fd5b505afa158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906123fa565b600082611b415750600061093a565b82820282848281611b4e57fe5b04146106f55760405162461bcd60e51b81526004018080602001828103825260218152602001806127706021913960400191505060405180910390fd5b600061093a82670de0b6b3a7640000611eef565b6000828201838110156106f5576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6000828201818312801590611c0c5750838112155b80611c215750600083128015611c2157508381125b6106f55760405162461bcd60e51b81526004018080602001828103825260218152602001806127006021913960400191505060405180910390fd5b3b151590565b6000808213611c7c57611c77826000036119d4565b61093a565b61093a826119d4565b6000600160ff1b8210611a2b5760405162461bcd60e51b81526004018080602001828103825260288152602001806127d86028913960400191505060405180910390fd5b600082611cd85750600061093a565b82600019148015611cec5750600160ff1b82145b15611d285760405162461bcd60e51b81526004018080602001828103825260278152602001806127b16027913960400191505060405180910390fd5b82820282848281611d3557fe5b05146106f55760405162461bcd60e51b81526004018080602001828103825260278152602001806127b16027913960400191505060405180910390fd5b600061093a82670de0b6b3a7640000611f53565b6000611d9130611c5c565b15905090565b600054610100900460ff1680611db05750611db0611d86565b80611dbe575060005460ff16155b611df95760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015611e24576000805460ff1961ff0019909116610100171660011790555b611e2c61200b565b611e3e826001600160a01b0316611c5c565b611e5a5760405162461bcd60e51b81526004016107369061256e565b606780546001600160a01b0319166001600160a01b0384161790558015611771576000805461ff00191690555050565b6000818303818312801590611e9f5750838113155b80611eb45750600083128015611eb457508381135b6106f55760405162461bcd60e51b81526004018080602001828103825260248152602001806128006024913960400191505060405180910390fd5b6000808211611f42576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b818381611f4b57fe5b049392505050565b600081611fa7576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015611fbb5750600160ff1b83145b15611ff75760405162461bcd60e51b815260040180806020018281038252602181526020018061274f6021913960400191505060405180910390fd5b600082848161200257fe5b05949350505050565b600054610100900460ff16806120245750612024611d86565b80612032575060005460ff16155b61206d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612098576000805460ff1961ff0019909116610100171660011790555b6120a06120fb565b60006120aa6119d0565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020612791833981519152908290a35080156120f8576000805461ff00191690555b50565b600054610100900460ff16806121145750612114611d86565b80612122575060005460ff16155b61215d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612188576000805460ff1961ff0019909116610100171660011790555b6121906121a4565b80156120f8576000805461ff001916905550565b600054610100900460ff16806121bd57506121bd611d86565b806121cb575060005460ff16155b6122065760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612190576000805460ff1961ff00199091166101001716600117905580156120f8576000805461ff001916905550565b60405180606001604052806000815260200160008152602001600081525090565b600060208284031215612276578081fd5b81356106f5816126ea565b600060208284031215612292578081fd5b81516106f5816126ea565b600080604083850312156122af578081fd5b82356122ba816126ea565b915060208301356122ca816126ea565b809150509250929050565b6000806000606084860312156122e9578081fd5b83356122f4816126ea565b92506020840135612304816126ea565b91506040840135612314816126ea565b809150509250925092565b600080600060608486031215612333578283fd5b833561233e816126ea565b9250602084013561234e816126ea565b929592945050506040919091013590565b600080600080600060a08688031215612376578081fd5b8535612381816126ea565b94506020860135612391816126ea565b94979496505050506040830135926060810135926080909101359150565b600080604083850312156123c1578182fd5b82356123cc816126ea565b946020939093013593505050565b6000602082840312156123eb578081fd5b815180151581146106f5578182fd5b60006020828403121561240b578081fd5b5051919050565b600060208284031215612423578081fd5b815163ffffffff811681146106f5578182fd5b600060208284031215612447578081fd5b815160ff811681146106f5578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b60006040820160018060a01b03808616845260206040818601528286548085526060870191508786528286209450855b818110156124dd5785548516835260019586019592840192016124bf565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561252c5783516001600160a01b031683529284019291840191600101612507565b50909695505050505050565b901515815260200190565b90815260200190565b60208082526008908201526741425f4348434e4360c01b604082015260600190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526007908201526641425f45584e4360c81b604082015260600190565b60208082526006908201526541425f4d4e4560d01b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b60208082526007908201526641425f4f424e4360c81b604082015260600190565b6020808252600a908201526908284be9ebe8ab0f886960b31b604082015260600190565b60208082526006908201526508284be9e8ab60d31b604082015260600190565b60208082526005908201526420a12fa7ab60d91b604082015260600190565b60208082526006908201526541425f564e4360d01b604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b63ffffffff91909116815260200190565b6001600160a01b03811681146120f857600080fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212202da684f185ac6b99f554451f1ae68716d97a979e7aabb160748e2f7298307b4564736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018b5760003560e01c80630af968001461019057806313af4035146101ae578063293a5077146101c35780632bea7936146101e35780632e4586c3146101f65780633772470214610209578063449323d81461021c5780636332fef61461022f5780636817031b1461024f5780636a256b29146102625780636c8381f8146102755780636ccdc82e1461027d578063715018a614610290578063776af5ba1461029857806377b57b07146102a05780637a5b45a0146102b35780638227bc3e146102c65780638da25bbe146102d95780638da5cb5b146102ec578063af74e736146102f4578063b3bd6e1214610314578063bc5920ba14610327578063beb56a751461032f578063c0c53b8b14610342578063c2075b2114610355578063cb3c7b8e1461035d578063d2f7265a1461037d578063ecb96fe614610385578063ee817e8b1461038d578063f0c79797146103a0578063fa8e30af146103b3578063fbfa77cf146103c6578063fc737214146103ce575b600080fd5b6101986103e1565b6040516101a59190612457565b60405180910390f35b6101c16101bc366004612265565b6103f0565b005b6101d66101d1366004612265565b61054b565b6040516101a59190612543565b6101d66101f1366004612265565b610661565b6101c161020436600461231f565b6106fc565b6101c16102173660046123af565b61076e565b6101c161022a366004612265565b610810565b61024261023d36600461229d565b6108e5565b6040516101a591906126b8565b6101c161025d366004612265565b610940565b6101d6610270366004612265565b6109ed565b610198610a4a565b6101d661028b366004612265565b610a59565b6101c1610b27565b610198610bc8565b6101d66102ae36600461229d565b610bd7565b6101d66102c136600461229d565b610c26565b6101d66102d4366004612265565b610c54565b6101d66102e736600461229d565b610d94565b610198610e53565b610307610302366004612265565b610e62565b6040516101a591906124eb565b6101d661032236600461229d565b610ed8565b6101c1610f03565b6101c161033d36600461235f565b610fef565b6101c16103503660046122d5565b6110dc565b6101986112c5565b61037061036b366004612265565b6112d4565b6040516101a59190612538565b610198611368565b610198611377565b6101d661039b366004612265565b611386565b6101c16103ae36600461231f565b6113a1565b6101c16103c136600461229d565b611459565b610198611775565b6101c16103dc36600461229d565b611784565b6068546001600160a01b031681565b6103f86119d0565b6001600160a01b0316610409610e53565b6001600160a01b03161461044d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610491576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156104dd576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610529576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260a0602052604081205481908190815b8181101561062d576001600160a01b038616600090815260a06020526040812080548390811061059657fe5b60009182526020822001546001600160a01b031691506105b68883610ed8565b905060008082136105d2576105cd826000036119d4565b6105d5565b60005b905060006105f46105ef6105e886611a2f565b8490611b32565b611b8b565b905060006106028b86610c26565b905061060e8883611b9f565b975061061a8982611bf7565b9850506001909401935061056a92505050565b50600080841361064857610643846000036119d4565b61064b565b60005b90506106578184611b9f565b9695505050505050565b60008060005b6001600160a01b038416600090815260a060205260409020548110156106e1576001600160a01b038416600090815260a0602052604081208054839081106106ab57fe5b6000918252602090912001546001600160a01b031690506106d66106cf8683610bd7565b8490611bf7565b925050600101610667565b506106f5816106ef85610c54565b90611bf7565b9392505050565b609c546001600160a01b03166107106119d0565b6001600160a01b03161461073f5760405162461bcd60e51b815260040161073690612659565b60405180910390fd5b6001600160a01b03928316600090815260a1602090815260408083209490951682529290925291902060020155565b609c546001600160a01b03166107826119d0565b6001600160a01b031614806107b157506068546001600160a01b03166107a66119d0565b6001600160a01b0316145b6107cd5760405162461bcd60e51b815260040161073690612635565b6001600160a01b0382166000908152609f60205260409020546107f09082611bf7565b6001600160a01b039092166000908152609f602052604090209190915550565b6108186119d0565b6001600160a01b0316610829610e53565b6001600160a01b03161461086d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61087f816001600160a01b0316611c5c565b61089b5760405162461bcd60e51b8152600401610736906125f2565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6108ed612244565b506001600160a01b03808316600090815260a16020908152604080832093851683529281529082902082516060810184528154815260018201549281019290925260020154918101919091525b92915050565b6109486119d0565b6001600160a01b0316610959610e53565b6001600160a01b03161461099d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6109af816001600160a01b0316611c5c565b6109cb5760405162461bcd60e51b815260040161073690612698565b609e80546001600160a01b0319166001600160a01b0392909216919091179055565b609e546000906001600160a01b0316610a046119d0565b6001600160a01b031614610a2a5760405162461bcd60e51b815260040161073690612679565b506001600160a01b03166000908152609f60205260408120805491905590565b6034546001600160a01b031690565b6001600160a01b038116600090815260a06020908152604080832080548251818502810185019093528083528493830182828015610ac057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa2575b505050505090506000808251905060005b81811015610b1d576000848281518110610ae757fe5b602002602001015190506000610b05610b008984610bd7565b611c62565b9050610b118582611b9f565b94505050600101610ad1565b5090949350505050565b610b2f6119d0565b6001600160a01b0316610b40610e53565b6001600160a01b031614610b84576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020612791833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b609d546001600160a01b031681565b600080610be48484610d94565b905080610bf557600091505061093a565b6000610c0084611a2f565b9050610c1d610c18610c1183611c85565b8490611cc9565b611d72565b95945050505050565b6001600160a01b03918216600090815260a16020908152604080832093909416825291909152206001015490565b6001600160a01b038116600090815260a0602052604081205481805b82811015610ccb576001600160a01b038516600090815260a060205260408120805483908110610c9c57fe5b6000918252602090912001546001600160a01b03169050610cc06106cf8783610c26565b925050600101610c70565b50609d546001600160a01b03858116600090815260a060205260408082209051632196f33360e21b81529193929092169163865bcccc91610d1091899160040161248f565b60206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6091906123fa565b90506000610d706106cf83611c85565b9050600a610d7d82611c62565b10610d885780610657565b50600095945050505050565b600080610e30610da48585610ed8565b609d5460405163bf0b1abb60e01b81526106ef916001600160a01b03169063bf0b1abb90610ddb908a908a9060019060040161246b565b60206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b91906123fa565b611c85565b9050600a610e3d82611c62565b10610e485780610e4b565b60005b949350505050565b6033546001600160a01b031690565b6001600160a01b038116600090815260a06020908152604091829020805483518184028101840190945280845260609392830182828015610ecc57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eae575b50505050509050919050565b6001600160a01b03918216600090815260a16020908152604080832093909416825291909152205490565b6034546001600160a01b0316610f48576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610f506119d0565b6034546001600160a01b03908116911614610f9b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061279183398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b609c546001600160a01b03166110036119d0565b6001600160a01b0316148061103257506068546001600160a01b03166110276119d0565b6001600160a01b0316145b61104e5760405162461bcd60e51b815260040161073690612635565b6001600160a01b03808616600090815260a160209081526040808320938816835292905220805461107f9085611bf7565b815560018101546110909084611bf7565b60018201556001600160a01b0386166000908152609f60205260409020546110b89083611bf7565b6001600160a01b039096166000908152609f60205260409020959095555050505050565b600054610100900460ff16806110f557506110f5611d86565b80611103575060005460ff16155b61113e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015611169576000805460ff1961ff0019909116610100171660011790555b61117b846001600160a01b0316611c5c565b6111975760405162461bcd60e51b81526004016107369061254c565b6111a9826001600160a01b0316611c5c565b6111c55760405162461bcd60e51b8152600401610736906125b1565b6000826001600160a01b031663776af5ba6040518163ffffffff1660e01b815260040160206040518083038186803b15801561120057600080fd5b505afa158015611214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190612281565b905061124c816001600160a01b0316611c5c565b6112685760405162461bcd60e51b815260040161073690612614565b61127184611d97565b609b80546001600160a01b038088166001600160a01b031992831617909255609c8054868416908316179055609d805493909216921691909117905580156112bf576000805461ff00191690555b50505050565b609b546001600160a01b031681565b609d546001600160a01b03828116600090815260a060205260408082209051634dffaee560e01b815291939290921691634dffaee59161131891869160040161248f565b60206040518083038186803b15801561133057600080fd5b505afa158015611344573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906123da565b609c546001600160a01b031681565b6067546001600160a01b031681565b6001600160a01b03166000908152609f602052604090205490565b609c546001600160a01b03166113b56119d0565b6001600160a01b0316146113db5760405162461bcd60e51b815260040161073690612659565b6001600160a01b03808416600090815260a160209081526040808320938616835292905220600181015461140f9083611e8a565b60018201556001600160a01b0384166000908152609f60205260409020546114379083611bf7565b6001600160a01b039094166000908152609f6020526040902093909355505050565b6068546001600160a01b031661146d6119d0565b6001600160a01b0316146114935760405162461bcd60e51b815260040161073690612590565b600a6114a2610b008484610ed8565b1015806114bc5750600a6114b9610b008484610c26565b10155b156114c657611771565b609d5460405163bf0b1abb60e01b81526000916001600160a01b03169063bf0b1abb906114fc908690869060019060040161246b565b60206040518083038186803b15801561151457600080fd5b505afa158015611528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906123fa565b609d5460405163bf0b1abb60e01b81529192506000916001600160a01b039091169063bf0b1abb906115869087908790869060040161246b565b60206040518083038186803b15801561159e57600080fd5b505afa1580156115b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d691906123fa565b905060008211806115e75750600081115b156115f3575050611771565b6001600160a01b03808516600081815260a16020908152604080832094881683529381528382208281556001810183905560020182905591815260a090915290812054905b8181101561176c576001600160a01b03868116600090815260a0602052604090208054918716918390811061166957fe5b6000918252602090912001546001600160a01b031614156117645760018203811461171c576001600160a01b038616600090815260a060205260409020805460001984019081106116b657fe5b60009182526020808320909101546001600160a01b03898116845260a090925260409092208054919092169190839081106116ed57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b038616600090815260a06020526040902080548061173d57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561176c565b600101611638565b505050505b5050565b609e546001600160a01b031681565b6068546001600160a01b03166117986119d0565b6001600160a01b0316146117be5760405162461bcd60e51b815260040161073690612590565b6001600160a01b038216600090815260a0602090815260408083208054825181850281018501909352808352919290919083018282801561182857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161180a575b5050505050905080516000141561187d57506001600160a01b03828116600090815260a0602090815260408220805460018101825590835291200180546001600160a01b031916918316919091179055611771565b6118878383610ed8565b6119cb576000805b82518110156118d657836001600160a01b03168382815181106118ae57fe5b60200260200101516001600160a01b031614156118ce57600191506118d6565b60010161188f565b50806112bf57609b546040805163f652b52760e01b815290516000926001600160a01b03169163f652b527916004808301926020929190829003018186803b15801561192157600080fd5b505afa158015611935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119599190612436565b905060ff8116158061196e57508060ff168351105b61198a5760405162461bcd60e51b8152600401610736906125d2565b50506001600160a01b03838116600090815260a0602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b505050565b3390565b600080821215611a2b576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000816001600160a01b03166312080647609b60009054906101000a90046001600160a01b03166001600160a01b0316633c1d5df06040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac69190612412565b6040518263ffffffff1660e01b8152600401611ae291906126d9565b60206040518083038186803b158015611afa57600080fd5b505afa158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906123fa565b600082611b415750600061093a565b82820282848281611b4e57fe5b04146106f55760405162461bcd60e51b81526004018080602001828103825260218152602001806127706021913960400191505060405180910390fd5b600061093a82670de0b6b3a7640000611eef565b6000828201838110156106f5576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6000828201818312801590611c0c5750838112155b80611c215750600083128015611c2157508381125b6106f55760405162461bcd60e51b81526004018080602001828103825260218152602001806127006021913960400191505060405180910390fd5b3b151590565b6000808213611c7c57611c77826000036119d4565b61093a565b61093a826119d4565b6000600160ff1b8210611a2b5760405162461bcd60e51b81526004018080602001828103825260288152602001806127d86028913960400191505060405180910390fd5b600082611cd85750600061093a565b82600019148015611cec5750600160ff1b82145b15611d285760405162461bcd60e51b81526004018080602001828103825260278152602001806127b16027913960400191505060405180910390fd5b82820282848281611d3557fe5b05146106f55760405162461bcd60e51b81526004018080602001828103825260278152602001806127b16027913960400191505060405180910390fd5b600061093a82670de0b6b3a7640000611f53565b6000611d9130611c5c565b15905090565b600054610100900460ff1680611db05750611db0611d86565b80611dbe575060005460ff16155b611df95760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015611e24576000805460ff1961ff0019909116610100171660011790555b611e2c61200b565b611e3e826001600160a01b0316611c5c565b611e5a5760405162461bcd60e51b81526004016107369061256e565b606780546001600160a01b0319166001600160a01b0384161790558015611771576000805461ff00191690555050565b6000818303818312801590611e9f5750838113155b80611eb45750600083128015611eb457508381135b6106f55760405162461bcd60e51b81526004018080602001828103825260248152602001806128006024913960400191505060405180910390fd5b6000808211611f42576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b818381611f4b57fe5b049392505050565b600081611fa7576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015611fbb5750600160ff1b83145b15611ff75760405162461bcd60e51b815260040180806020018281038252602181526020018061274f6021913960400191505060405180910390fd5b600082848161200257fe5b05949350505050565b600054610100900460ff16806120245750612024611d86565b80612032575060005460ff16155b61206d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612098576000805460ff1961ff0019909116610100171660011790555b6120a06120fb565b60006120aa6119d0565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020612791833981519152908290a35080156120f8576000805461ff00191690555b50565b600054610100900460ff16806121145750612114611d86565b80612122575060005460ff16155b61215d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612188576000805460ff1961ff0019909116610100171660011790555b6121906121a4565b80156120f8576000805461ff001916905550565b600054610100900460ff16806121bd57506121bd611d86565b806121cb575060005460ff16155b6122065760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612190576000805460ff1961ff00199091166101001716600117905580156120f8576000805461ff001916905550565b60405180606001604052806000815260200160008152602001600081525090565b600060208284031215612276578081fd5b81356106f5816126ea565b600060208284031215612292578081fd5b81516106f5816126ea565b600080604083850312156122af578081fd5b82356122ba816126ea565b915060208301356122ca816126ea565b809150509250929050565b6000806000606084860312156122e9578081fd5b83356122f4816126ea565b92506020840135612304816126ea565b91506040840135612314816126ea565b809150509250925092565b600080600060608486031215612333578283fd5b833561233e816126ea565b9250602084013561234e816126ea565b929592945050506040919091013590565b600080600080600060a08688031215612376578081fd5b8535612381816126ea565b94506020860135612391816126ea565b94979496505050506040830135926060810135926080909101359150565b600080604083850312156123c1578182fd5b82356123cc816126ea565b946020939093013593505050565b6000602082840312156123eb578081fd5b815180151581146106f5578182fd5b60006020828403121561240b578081fd5b5051919050565b600060208284031215612423578081fd5b815163ffffffff811681146106f5578182fd5b600060208284031215612447578081fd5b815160ff811681146106f5578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b60006040820160018060a01b03808616845260206040818601528286548085526060870191508786528286209450855b818110156124dd5785548516835260019586019592840192016124bf565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561252c5783516001600160a01b031683529284019291840191600101612507565b50909695505050505050565b901515815260200190565b90815260200190565b60208082526008908201526741425f4348434e4360c01b604082015260600190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526007908201526641425f45584e4360c81b604082015260600190565b60208082526006908201526541425f4d4e4560d01b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b60208082526007908201526641425f4f424e4360c81b604082015260600190565b6020808252600a908201526908284be9ebe8ab0f886960b31b604082015260600190565b60208082526006908201526508284be9e8ab60d31b604082015260600190565b60208082526005908201526420a12fa7ab60d91b604082015260600190565b60208082526006908201526541425f564e4360d01b604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b63ffffffff91909116815260200190565b6001600160a01b03811681146120f857600080fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212202da684f185ac6b99f554451f1ae68716d97a979e7aabb160748e2f7298307b4564736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2BaseToken.json b/external/abi/perp/PerpV2BaseToken.json new file mode 100644 index 000000000..4708c5703 --- /dev/null +++ b/external/abi/perp/PerpV2BaseToken.json @@ -0,0 +1,492 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2BaseToken", + "sourceName": "contracts/BaseToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "WhitelistAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "WhitelistRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "interval", + "type": "uint256" + } + ], + "name": "getIndexPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "nameArg", + "type": "string" + }, + { + "internalType": "string", + "name": "symbolArg", + "type": "string" + }, + { + "internalType": "address", + "name": "priceFeedArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isInWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "mintMaximumTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "priceFeed", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50611ca8806100206000396000f3fe608060405234801561001057600080fd5b506004361061011d5760003560e01c806306fdde0314610122578063077f224a1461019f578063095ea7b3146102d557806309fd821214610315578063120806471461033b57806313af40351461036a57806318160ddd1461039057806323b872dd14610398578063313ce567146103ce57806339509351146103ec5780636c8381f81461041857806370a082311461043c578063715018a614610462578063741bef1a1461046a57806378c8cda7146104725780638da5cb5b1461049857806395d89b41146104a0578063a457c2d7146104a8578063a9059cbb146104d4578063bc5920ba14610500578063dd62ed3e14610508578063f52e308e14610536578063f80f5dd51461055c575b600080fd5b61012a610582565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561016457818101518382015260200161014c565b50505050905090810190601f1680156101915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d3600480360360608110156101b557600080fd5b810190602081018135600160201b8111156101cf57600080fd5b8201836020820111156101e157600080fd5b803590602001918460018302840111600160201b8311171561020257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561025457600080fd5b82018360208201111561026657600080fd5b803590602001918460018302840111600160201b8311171561028757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506106189050565b005b610301600480360360408110156102eb57600080fd5b506001600160a01b038135169060200135610859565b604080519115158252519081900360200190f35b6103016004803603602081101561032b57600080fd5b50356001600160a01b0316610877565b6103586004803603602081101561035157600080fd5b5035610895565b60408051918252519081900360200190f35b6102d36004803603602081101561038057600080fd5b50356001600160a01b0316610924565b610358610a7f565b610301600480360360608110156103ae57600080fd5b506001600160a01b03813581169160208101359091169060400135610a85565b6103d6610b0c565b6040805160ff9092168252519081900360200190f35b6103016004803603604081101561040257600080fd5b506001600160a01b038135169060200135610b15565b610420610b63565b604080516001600160a01b039092168252519081900360200190f35b6103586004803603602081101561045257600080fd5b50356001600160a01b0316610b72565b6102d3610b8d565b610420610c2e565b6102d36004803603602081101561048857600080fd5b50356001600160a01b0316610c42565b610420610cf7565b61012a610d06565b610301600480360360408110156104be57600080fd5b506001600160a01b038135169060200135610d67565b610301600480360360408110156104ea57600080fd5b506001600160a01b038135169060200135610dcf565b6102d3610de3565b6103586004803603604081101561051e57600080fd5b506001600160a01b0381358116916020013516610ecf565b6102d36004803603602081101561054c57600080fd5b50356001600160a01b0316610efa565b6102d36004803603602081101561057257600080fd5b50356001600160a01b0316610f66565b606a8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b5050505050905090565b600054610100900460ff1680610631575061063161101e565b8061063f575060005460ff16155b61067a5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156106a5576000805460ff1961ff0019909116610100171660011790555b6106af848461102f565b6001600160a01b0382166106f2576040805162461bcd60e51b815260206004820152600560248201526442545f494160d81b604482015290519081900360640190fd5b6106fa610b0c565b60ff16826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561073657600080fd5b505afa15801561074a573d6000803e3d6000fd5b505050506040513d602081101561076057600080fd5b505160ff1611156107a2576040805162461bcd60e51b8152602060048201526007602482015266109517d254119160ca1b604482015290519081900360640190fd5b8160cc60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561080257600080fd5b505afa158015610816573d6000803e3d6000fd5b505050506040513d602081101561082c57600080fd5b505160cc805460ff191660ff9092169190911790558015610853576000805461ff00191690555b50505050565b600061086d61086661111a565b848461111e565b5060015b92915050565b6001600160a01b031660009081526099602052604090205460ff1690565b600061087160cc60019054906101000a90046001600160a01b03166001600160a01b031663e7572230846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d602081101561091d57600080fd5b505161120a565b61092c61111a565b6001600160a01b031661093d610cf7565b6001600160a01b031614610981576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166109c5576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610a11576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610a5d576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b6000610a92848484611238565b610b0284610a9e61111a565b610afd85604051806060016040528060288152602001611b9d602891396001600160a01b038a16600090815260686020526040812090610adc61111a565b6001600160a01b031681526020810191909152604001600020549190611383565b61111e565b5060019392505050565b606c5460ff1690565b600061086d610b2261111a565b84610afd8560686000610b3361111a565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061141a565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b610b9561111a565b6001600160a01b0316610ba6610cf7565b6001600160a01b031614610bea576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611bc5833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b60cc5461010090046001600160a01b031681565b610c4a61111a565b6001600160a01b0316610c5b610cf7565b6001600160a01b031614610c9f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561060e5780601f106105e35761010080835404028352916020019161060e565b600061086d610d7461111a565b84610afd85604051806060016040528060258152602001611c4e6025913960686000610d9e61111a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611383565b600061086d610ddc61111a565b8484611238565b6034546001600160a01b0316610e28576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610e3061111a565b6034546001600160a01b03908116911614610e7b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020611bc583398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610f0261111a565b6001600160a01b0316610f13610cf7565b6001600160a01b031614610f57576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610f6381600019611479565b50565b610f6e61111a565b6001600160a01b0316610f7f610cf7565b6001600160a01b031614610fc3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b600061102930611559565b15905090565b600054610100900460ff1680611048575061104861101e565b80611056575060005460ff16155b6110915760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156110bc576000805460ff1961ff0019909116610100171660011790555b6110c461155f565b6110ce838361164e565b6000805260996020527f235d629dc802037ded8c61cb27fb29e40fa01b299719d8f991ffe20bdcc59f4f805460ff191660011790558015611115576000805461ff00191690555b505050565b3390565b6001600160a01b0383166111635760405162461bcd60e51b8152600401808060200182810382526024815260200180611c2a6024913960400191505060405180910390fd5b6001600160a01b0382166111a85760405162461bcd60e51b8152600401808060200182810382526022815260200180611b066022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60cc546000906108719060ff16600a0a611232611225610b0c565b859060ff16600a0a611703565b9061175c565b6001600160a01b03831661127d5760405162461bcd60e51b8152600401808060200182810382526025815260200180611c056025913960400191505060405180910390fd5b6001600160a01b0382166112c25760405162461bcd60e51b8152600401808060200182810382526023815260200180611ae36023913960400191505060405180910390fd5b6112cd8383836117c0565b61130a81604051806060016040528060268152602001611b28602691396001600160a01b0386166000908152606760205260409020549190611383565b6001600160a01b038085166000908152606760205260408082209390935590841681522054611339908261141a565b6001600160a01b038084166000818152606760209081526040918290209490945580518581529051919392871692600080516020611be583398151915292918290030190a3505050565b600081848411156114125760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113d75781810151838201526020016113bf565b50505050905090810190601f1680156114045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611472576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166114d4576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6114e0600083836117c0565b6069546114ed908261141a565b6069556001600160a01b038216600090815260676020526040902054611513908261141a565b6001600160a01b0383166000818152606760209081526040808320949094558351858152935192939192600080516020611be58339815191529281900390910190a35050565b3b151590565b600054610100900460ff1680611578575061157861101e565b80611586575060005460ff16155b6115c15760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156115ec576000805460ff1961ff0019909116610100171660011790555b6115f4611820565b60006115fe61111a565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611bc5833981519152908290a3508015610f63576000805461ff001916905550565b600054610100900460ff1680611667575061166761101e565b80611675575060005460ff16155b6116b05760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156116db576000805460ff1961ff0019909116610100171660011790555b6116e36118c9565b6116ed8383611969565b8015611115576000805461ff0019169055505050565b60008261171257506000610871565b8282028284828161171f57fe5b04146114725760405162461bcd60e51b8152600401808060200182810382526021815260200180611b7c6021913960400191505060405180910390fd5b60008082116117af576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b8183816117b857fe5b049392505050565b6117cb838383611115565b6001600160a01b03831660009081526099602052604090205460ff16611115576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b600054610100900460ff1680611839575061183961101e565b80611847575060005460ff16155b6118825760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156118ad576000805460ff1961ff0019909116610100171660011790555b6118b56118c9565b8015610f63576000805461ff001916905550565b600054610100900460ff16806118e257506118e261101e565b806118f0575060005460ff16155b61192b5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156118b5576000805460ff1961ff0019909116610100171660011790558015610f63576000805461ff001916905550565b600054610100900460ff1680611982575061198261101e565b80611990575060005460ff16155b6119cb5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156119f6576000805460ff1961ff0019909116610100171660011790555b8251611a0990606a906020860190611a41565b508151611a1d90606b906020850190611a41565b50606c805460ff191660121790558015611115576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611a775760008555611abd565b82601f10611a9057805160ff1916838001178555611abd565b82800160010185558215611abd579182015b82811115611abd578251825591602001919060010190611aa2565b50611ac9929150611acd565b5090565b5b80821115611ac95760008155600101611ace56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d71e9f209b04673a3bde66be118f3099c95f8262c4dc0765ed1aba85f16139064736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011d5760003560e01c806306fdde0314610122578063077f224a1461019f578063095ea7b3146102d557806309fd821214610315578063120806471461033b57806313af40351461036a57806318160ddd1461039057806323b872dd14610398578063313ce567146103ce57806339509351146103ec5780636c8381f81461041857806370a082311461043c578063715018a614610462578063741bef1a1461046a57806378c8cda7146104725780638da5cb5b1461049857806395d89b41146104a0578063a457c2d7146104a8578063a9059cbb146104d4578063bc5920ba14610500578063dd62ed3e14610508578063f52e308e14610536578063f80f5dd51461055c575b600080fd5b61012a610582565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561016457818101518382015260200161014c565b50505050905090810190601f1680156101915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d3600480360360608110156101b557600080fd5b810190602081018135600160201b8111156101cf57600080fd5b8201836020820111156101e157600080fd5b803590602001918460018302840111600160201b8311171561020257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561025457600080fd5b82018360208201111561026657600080fd5b803590602001918460018302840111600160201b8311171561028757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506106189050565b005b610301600480360360408110156102eb57600080fd5b506001600160a01b038135169060200135610859565b604080519115158252519081900360200190f35b6103016004803603602081101561032b57600080fd5b50356001600160a01b0316610877565b6103586004803603602081101561035157600080fd5b5035610895565b60408051918252519081900360200190f35b6102d36004803603602081101561038057600080fd5b50356001600160a01b0316610924565b610358610a7f565b610301600480360360608110156103ae57600080fd5b506001600160a01b03813581169160208101359091169060400135610a85565b6103d6610b0c565b6040805160ff9092168252519081900360200190f35b6103016004803603604081101561040257600080fd5b506001600160a01b038135169060200135610b15565b610420610b63565b604080516001600160a01b039092168252519081900360200190f35b6103586004803603602081101561045257600080fd5b50356001600160a01b0316610b72565b6102d3610b8d565b610420610c2e565b6102d36004803603602081101561048857600080fd5b50356001600160a01b0316610c42565b610420610cf7565b61012a610d06565b610301600480360360408110156104be57600080fd5b506001600160a01b038135169060200135610d67565b610301600480360360408110156104ea57600080fd5b506001600160a01b038135169060200135610dcf565b6102d3610de3565b6103586004803603604081101561051e57600080fd5b506001600160a01b0381358116916020013516610ecf565b6102d36004803603602081101561054c57600080fd5b50356001600160a01b0316610efa565b6102d36004803603602081101561057257600080fd5b50356001600160a01b0316610f66565b606a8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b5050505050905090565b600054610100900460ff1680610631575061063161101e565b8061063f575060005460ff16155b61067a5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156106a5576000805460ff1961ff0019909116610100171660011790555b6106af848461102f565b6001600160a01b0382166106f2576040805162461bcd60e51b815260206004820152600560248201526442545f494160d81b604482015290519081900360640190fd5b6106fa610b0c565b60ff16826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561073657600080fd5b505afa15801561074a573d6000803e3d6000fd5b505050506040513d602081101561076057600080fd5b505160ff1611156107a2576040805162461bcd60e51b8152602060048201526007602482015266109517d254119160ca1b604482015290519081900360640190fd5b8160cc60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561080257600080fd5b505afa158015610816573d6000803e3d6000fd5b505050506040513d602081101561082c57600080fd5b505160cc805460ff191660ff9092169190911790558015610853576000805461ff00191690555b50505050565b600061086d61086661111a565b848461111e565b5060015b92915050565b6001600160a01b031660009081526099602052604090205460ff1690565b600061087160cc60019054906101000a90046001600160a01b03166001600160a01b031663e7572230846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d602081101561091d57600080fd5b505161120a565b61092c61111a565b6001600160a01b031661093d610cf7565b6001600160a01b031614610981576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166109c5576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610a11576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610a5d576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b6000610a92848484611238565b610b0284610a9e61111a565b610afd85604051806060016040528060288152602001611b9d602891396001600160a01b038a16600090815260686020526040812090610adc61111a565b6001600160a01b031681526020810191909152604001600020549190611383565b61111e565b5060019392505050565b606c5460ff1690565b600061086d610b2261111a565b84610afd8560686000610b3361111a565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061141a565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b610b9561111a565b6001600160a01b0316610ba6610cf7565b6001600160a01b031614610bea576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611bc5833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b60cc5461010090046001600160a01b031681565b610c4a61111a565b6001600160a01b0316610c5b610cf7565b6001600160a01b031614610c9f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561060e5780601f106105e35761010080835404028352916020019161060e565b600061086d610d7461111a565b84610afd85604051806060016040528060258152602001611c4e6025913960686000610d9e61111a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611383565b600061086d610ddc61111a565b8484611238565b6034546001600160a01b0316610e28576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610e3061111a565b6034546001600160a01b03908116911614610e7b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020611bc583398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610f0261111a565b6001600160a01b0316610f13610cf7565b6001600160a01b031614610f57576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610f6381600019611479565b50565b610f6e61111a565b6001600160a01b0316610f7f610cf7565b6001600160a01b031614610fc3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b600061102930611559565b15905090565b600054610100900460ff1680611048575061104861101e565b80611056575060005460ff16155b6110915760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156110bc576000805460ff1961ff0019909116610100171660011790555b6110c461155f565b6110ce838361164e565b6000805260996020527f235d629dc802037ded8c61cb27fb29e40fa01b299719d8f991ffe20bdcc59f4f805460ff191660011790558015611115576000805461ff00191690555b505050565b3390565b6001600160a01b0383166111635760405162461bcd60e51b8152600401808060200182810382526024815260200180611c2a6024913960400191505060405180910390fd5b6001600160a01b0382166111a85760405162461bcd60e51b8152600401808060200182810382526022815260200180611b066022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60cc546000906108719060ff16600a0a611232611225610b0c565b859060ff16600a0a611703565b9061175c565b6001600160a01b03831661127d5760405162461bcd60e51b8152600401808060200182810382526025815260200180611c056025913960400191505060405180910390fd5b6001600160a01b0382166112c25760405162461bcd60e51b8152600401808060200182810382526023815260200180611ae36023913960400191505060405180910390fd5b6112cd8383836117c0565b61130a81604051806060016040528060268152602001611b28602691396001600160a01b0386166000908152606760205260409020549190611383565b6001600160a01b038085166000908152606760205260408082209390935590841681522054611339908261141a565b6001600160a01b038084166000818152606760209081526040918290209490945580518581529051919392871692600080516020611be583398151915292918290030190a3505050565b600081848411156114125760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113d75781810151838201526020016113bf565b50505050905090810190601f1680156114045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611472576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166114d4576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6114e0600083836117c0565b6069546114ed908261141a565b6069556001600160a01b038216600090815260676020526040902054611513908261141a565b6001600160a01b0383166000818152606760209081526040808320949094558351858152935192939192600080516020611be58339815191529281900390910190a35050565b3b151590565b600054610100900460ff1680611578575061157861101e565b80611586575060005460ff16155b6115c15760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156115ec576000805460ff1961ff0019909116610100171660011790555b6115f4611820565b60006115fe61111a565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611bc5833981519152908290a3508015610f63576000805461ff001916905550565b600054610100900460ff1680611667575061166761101e565b80611675575060005460ff16155b6116b05760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156116db576000805460ff1961ff0019909116610100171660011790555b6116e36118c9565b6116ed8383611969565b8015611115576000805461ff0019169055505050565b60008261171257506000610871565b8282028284828161171f57fe5b04146114725760405162461bcd60e51b8152600401808060200182810382526021815260200180611b7c6021913960400191505060405180910390fd5b60008082116117af576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b8183816117b857fe5b049392505050565b6117cb838383611115565b6001600160a01b03831660009081526099602052604090205460ff16611115576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b600054610100900460ff1680611839575061183961101e565b80611847575060005460ff16155b6118825760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156118ad576000805460ff1961ff0019909116610100171660011790555b6118b56118c9565b8015610f63576000805461ff001916905550565b600054610100900460ff16806118e257506118e261101e565b806118f0575060005460ff16155b61192b5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156118b5576000805460ff1961ff0019909116610100171660011790558015610f63576000805461ff001916905550565b600054610100900460ff1680611982575061198261101e565b80611990575060005460ff16155b6119cb5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156119f6576000805460ff1961ff0019909116610100171660011790555b8251611a0990606a906020860190611a41565b508151611a1d90606b906020850190611a41565b50606c805460ff191660121790558015611115576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611a775760008555611abd565b82601f10611a9057805160ff1916838001178555611abd565b82800160010185558215611abd579182015b82811115611abd578251825591602001919060010190611aa2565b50611ac9929150611acd565b5090565b5b80821115611ac95760008155600101611ace56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d71e9f209b04673a3bde66be118f3099c95f8262c4dc0765ed1aba85f16139064736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2ChainlinkPriceFeed.json b/external/abi/perp/PerpV2ChainlinkPriceFeed.json new file mode 100644 index 000000000..a60d6c36d --- /dev/null +++ b/external/abi/perp/PerpV2ChainlinkPriceFeed.json @@ -0,0 +1,56 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2ChainlinkPriceFeed", + "sourceName": "contracts/oracle/ChainlinkPriceFeed.sol", + "abi": [ + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "interval", + "type": "uint256" + } + ], + "name": "getPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract AggregatorV3Interface", + "name": "aggregator", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50610837806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063313ce56714610046578063c4d66de814610064578063e75722301461008c575b600080fd5b61004e6100bb565b6040805160ff9092168252519081900360200190f35b61008a6004803603602081101561007a57600080fd5b50356001600160a01b031661013b565b005b6100a9600480360360208110156100a257600080fd5b503561024d565b60408051918252519081900360200190f35b60008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561010a57600080fd5b505afa15801561011e573d6000803e3d6000fd5b505050506040513d602081101561013457600080fd5b5051905090565b600054610100900460ff1680610154575061015461038f565b80610162575060005460ff16155b61019d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806107b3602e913960400191505060405180910390fd5b600054610100900460ff161580156101c8576000805460ff1961ff0019909116610100171660011790555b6101da826001600160a01b03166103a0565b610215576040805162461bcd60e51b81526020600482015260076024820152664350465f414e4360c81b604482015290519081900360640190fd5b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610249576000805461ff00191690555b5050565b60008060008061025b6103a6565b92509250925084600014156102745750915061038a9050565b600061028886610282610472565b90610476565b90508082108061029f57506001600160501b038416155b156102b0578294505050505061038a565b8160006102bf82610282610472565b905060006102cd86836104d8565b90505b6001600160501b0387166102f6576102e88183610538565b97505050505050505061038a565b6001870396506000806103088961059c565b925092505085811161033b5761033261032b6103248789610476565b84906104d8565b849061070f565b92505050610376565b60006103478683610476565b905061035d61035684836104d8565b859061070f565b9350610369858261070f565b94508195505050506102d0565b610380818a610538565b9750505050505050505b919050565b600061039a306103a0565b15905090565b3b151590565b600080600080600080600060029054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156103fd57600080fd5b505afa158015610411573d6000803e3d6000fd5b505050506040513d60a081101561042757600080fd5b50805160208201516060909201519196509350859250905060008212156104665761045183610767565b61045d6001840361059c565b90965090935090505b91945090915050909192565b4290565b6000828211156104cd576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000826104e7575060006104d2565b828202828482816104f457fe5b04146105315760405162461bcd60e51b81526004018080602001828103825260218152602001806107e16021913960400191505060405180910390fd5b9392505050565b600080821161058b576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b81838161059457fe5b049392505050565b600080600080600080600060029054906101000a90046001600160a01b03166001600160a01b0316639a6fc8f5886040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b15801561060757600080fd5b505afa15801561061b573d6000803e3d6000fd5b505050506040513d60a081101561063157600080fd5b508051602082015160609092015190945090925090505b60008212156107025761065a83610767565b600183039250600060029054906101000a90046001600160a01b03166001600160a01b0316639a6fc8f5846040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60a08110156106ec57600080fd5b5060208101516060909101519092509050610648565b9196909550909350915050565b600082820183811015610531576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6000816001600160501b0316116107af576040805162461bcd60e51b8152602060048201526007602482015266086a08cbe9c8a960cb1b604482015290519081900360640190fd5b5056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212208742471b83f095ebc0179b7261a07aaba2987cc2ec3155f546eef37c125bc90364736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063313ce56714610046578063c4d66de814610064578063e75722301461008c575b600080fd5b61004e6100bb565b6040805160ff9092168252519081900360200190f35b61008a6004803603602081101561007a57600080fd5b50356001600160a01b031661013b565b005b6100a9600480360360208110156100a257600080fd5b503561024d565b60408051918252519081900360200190f35b60008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561010a57600080fd5b505afa15801561011e573d6000803e3d6000fd5b505050506040513d602081101561013457600080fd5b5051905090565b600054610100900460ff1680610154575061015461038f565b80610162575060005460ff16155b61019d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806107b3602e913960400191505060405180910390fd5b600054610100900460ff161580156101c8576000805460ff1961ff0019909116610100171660011790555b6101da826001600160a01b03166103a0565b610215576040805162461bcd60e51b81526020600482015260076024820152664350465f414e4360c81b604482015290519081900360640190fd5b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610249576000805461ff00191690555b5050565b60008060008061025b6103a6565b92509250925084600014156102745750915061038a9050565b600061028886610282610472565b90610476565b90508082108061029f57506001600160501b038416155b156102b0578294505050505061038a565b8160006102bf82610282610472565b905060006102cd86836104d8565b90505b6001600160501b0387166102f6576102e88183610538565b97505050505050505061038a565b6001870396506000806103088961059c565b925092505085811161033b5761033261032b6103248789610476565b84906104d8565b849061070f565b92505050610376565b60006103478683610476565b905061035d61035684836104d8565b859061070f565b9350610369858261070f565b94508195505050506102d0565b610380818a610538565b9750505050505050505b919050565b600061039a306103a0565b15905090565b3b151590565b600080600080600080600060029054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156103fd57600080fd5b505afa158015610411573d6000803e3d6000fd5b505050506040513d60a081101561042757600080fd5b50805160208201516060909201519196509350859250905060008212156104665761045183610767565b61045d6001840361059c565b90965090935090505b91945090915050909192565b4290565b6000828211156104cd576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000826104e7575060006104d2565b828202828482816104f457fe5b04146105315760405162461bcd60e51b81526004018080602001828103825260218152602001806107e16021913960400191505060405180910390fd5b9392505050565b600080821161058b576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b81838161059457fe5b049392505050565b600080600080600080600060029054906101000a90046001600160a01b03166001600160a01b0316639a6fc8f5886040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b15801561060757600080fd5b505afa15801561061b573d6000803e3d6000fd5b505050506040513d60a081101561063157600080fd5b508051602082015160609092015190945090925090505b60008212156107025761065a83610767565b600183039250600060029054906101000a90046001600160a01b03166001600160a01b0316639a6fc8f5846040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60a08110156106ec57600080fd5b5060208101516060909101519092509050610648565b9196909550909350915050565b600082820183811015610531576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6000816001600160501b0316116107af576040805162461bcd60e51b8152602060048201526007602482015266086a08cbe9c8a960cb1b604482015290519081900360640190fd5b5056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212208742471b83f095ebc0179b7261a07aaba2987cc2ec3155f546eef37c125bc90364736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2ClearingHouse.json b/external/abi/perp/PerpV2ClearingHouse.json new file mode 100644 index 000000000..7c611cc1d --- /dev/null +++ b/external/abi/perp/PerpV2ClearingHouse.json @@ -0,0 +1,789 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2ClearingHouse", + "sourceName": "contracts/ClearingHouse.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "positionNotional", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "positionSize", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "liquidationFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "liquidator", + "type": "address" + } + ], + "name": "PositionLiquidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "referralCode", + "type": "bytes32" + } + ], + "name": "ReferredPositionChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "trustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "accountBalance", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quote", + "type": "uint256" + }, + { + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "internalType": "int24", + "name": "upperTick", + "type": "int24" + }, + { + "internalType": "uint256", + "name": "minBase", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minQuote", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "internalType": "struct ClearingHouse.AddLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quote", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + } + ], + "internalType": "struct ClearingHouse.AddLiquidityResponse", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "cancelAllExcessOrders", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "bytes32[]", + "name": "orderIds", + "type": "bytes32[]" + } + ], + "name": "cancelExcessOrders", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clearingHouseConfig", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + }, + { + "internalType": "uint256", + "name": "oppositeAmountBound", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "bytes32", + "name": "referralCode", + "type": "bytes32" + } + ], + "internalType": "struct ClearingHouse.ClosePositionParams", + "name": "params", + "type": "tuple" + } + ], + "name": "closePosition", + "outputs": [ + { + "internalType": "uint256", + "name": "deltaBase", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deltaQuote", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "exchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getAccountValue", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "clearingHouseConfigArg", + "type": "address" + }, + { + "internalType": "address", + "name": "vaultArg", + "type": "address" + }, + { + "internalType": "address", + "name": "quoteTokenArg", + "type": "address" + }, + { + "internalType": "address", + "name": "uniV3FactoryArg", + "type": "address" + }, + { + "internalType": "address", + "name": "exchangeArg", + "type": "address" + }, + { + "internalType": "address", + "name": "accountBalanceArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "isTrustedForwarder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "liquidate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "isBaseToQuote", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isExactInput", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "oppositeAmountBound", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + }, + { + "internalType": "bytes32", + "name": "referralCode", + "type": "bytes32" + } + ], + "internalType": "struct ClearingHouse.OpenPositionParams", + "name": "params", + "type": "tuple" + } + ], + "name": "openPosition", + "outputs": [ + { + "internalType": "uint256", + "name": "deltaBase", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deltaQuote", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "orderBook", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quoteToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "internalType": "int24", + "name": "upperTick", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "uint256", + "name": "minBase", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minQuote", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deadline", + "type": "uint256" + } + ], + "internalType": "struct ClearingHouse.RemoveLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quote", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "internalType": "struct ClearingHouse.RemoveLiquidityResponse", + "name": "response", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trustedForwarderArg", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "trustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Owed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Owed", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3MintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Delta", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Delta", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3SwapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "vault", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "versionRecipient", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50614c56806100206000396000f3fe608060405234801561001057600080fd5b50600436106101695760003560e01c8062aa9a891461016e57806313af40351461019857806313f3d56e146101ad578063217a4b70146101cd5780633f4ba83a146101e2578063486ff0cd146101ea578063572b6c05146101ff5780635ae809511461021f5780635b5491821461023f5780635c975abb146102475780636c8381f81461024f578063715018a614610257578063776af5ba1461025f5780637da0a8771461026757806380a983321461026f5780638456cb591461028257806386b9d81f1461028a5780638da5cb5b1461029d578063b0a1c1c4146102a5578063b6b1b6c3146102ad578063bc5920ba146102c0578063c2075b21146102c8578063cc2a9a5b146102d0578063cc3606dc146102e3578063cde109b6146102f6578063d2f7265a14610316578063d34879971461031e578063da74222814610331578063fa461e3314610344578063fbfa77cf14610357575b600080fd5b61018161017c36600461414f565b61035f565b60405161018f929190614a30565b60405180910390f35b6101ab6101a6366004613e14565b6105f3565b005b6101c06101bb3660046140d3565b61074e565b60405161018f9190614911565b6101d5610b92565b60405161018f9190614479565b6101ab610ba2565b6101f2610c09565b60405161018f9190614585565b61021261020d366004613e14565b610c98565b60405161018f9190614571565b61023261022d366004613e14565b610cb0565b60405161018f919061457c565b6101d5610d5c565b610212610d6c565b6101d5610d76565b6101ab610d85565b6101d5610e26565b6101d5610e36565b6101ab61027d366004613f05565b610e46565b6101ab610f29565b6101ab610298366004613e4c565b610f8e565b6101d561144c565b6101d561145b565b6101816102bb3660046141fe565b61146b565b6101ab611759565b6101d5611845565b6101ab6102de366004613e84565b611855565b6101ab6102f1366004613e4c565b611c8d565b6103096103043660046142a2565b611dc3565b60405161018f9190614993565b6101d5611f8f565b6101ab61032c366004614083565b611f9f565b6101ab61033f366004613e14565b6121fa565b6101ab610352366004614083565b612291565b6101d5612494565b60008061036a610d6c565b156103af576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156103f5576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b60026001556060830135806104086124a4565b1115610444576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b6104596104546020860186613e14565b6124a8565b6000610463612551565b610167549091506000906001600160a01b0316631e81ac338361048960208a018a613e14565b6040518363ffffffff1660e01b81526004016104a692919061448d565b6040805180830381600087803b1580156104bf57600080fd5b505af11580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190614160565b905060006105626040518060800160405280856001600160a01b0316815260200189600001602081019061052b9190613e14565b6001600160a01b0316815260200189602001602081019061054c9190613e14565b6001600160a01b03168152602001849052612560565b905060008082604001511261057857600061057b565b60015b90506105bc6040518060a001604052808315158152602001831515815260200184602001518152602001846000015181526020018a604001358152506126ac565b604051608089013590600080516020614b1f83398151915290600090a2508051602090910151600180559097909650945050505050565b6105fb612551565b6001600160a01b031661060c61144c565b6001600160a01b031614610650576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610694576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6097546001600160a01b03828116911614156106e0576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6098546001600160a01b038281169116141561072c576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b609880546001600160a01b0319166001600160a01b0392909216919091179055565b610756613ca0565b61075e610d6c565b156107a3576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156107e9576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560e0820135806107fc6124a4565b1115610838576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b6108486104546020850185613e14565b6000610852612551565b610169549091506001600160a01b031663fc737214826108756020880188613e14565b6040518363ffffffff1660e01b815260040161089292919061448d565b600060405180830381600087803b1580156108ac57600080fd5b505af11580156108c0573d6000803e3d6000fd5b505061016754600092506001600160a01b03169050631e81ac33836108e86020890189613e14565b6040518363ffffffff1660e01b815260040161090592919061448d565b6040805180830381600087803b15801561091e57600080fd5b505af1158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190614160565b610168546040805160e081019091526001600160a01b0385811682529293506000929091169063e8ab2fb390602080820190610994908b018b613e14565b6001600160a01b0316815260200189602001358152602001896040013581526020018960600160208101906109c9919061404f565b60020b81526020016109e160a08b0160808c0161404f565b60020b8152602001858152506040518263ffffffff1660e01b8152600401610a0991906148a7565b608060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b91906140eb565b90508560a00135816000015110158015610a7d57508560c00135816020015110155b610aa25760405162461bcd60e51b8152600401610a9990614847565b60405180910390fd5b610169546001600160a01b031663beb56a7584610ac260208a018a613e14565b8451610acd9061277f565b600003610add866020015161277f565b600003610aed876040015161277f565b6040518663ffffffff1660e01b8152600401610b0d959493929190614509565b600060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b50505050610b48836127c7565b604051806080016040528082600001518152602001826020015181526020018260400151815260200182606001516001600160801b031681525094505050505b5060018055919050565b610162546001600160a01b031681565b610baa612551565b6001600160a01b0316610bbb61144c565b6001600160a01b031614610bff576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610c07612877565b565b610164805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c905780601f10610c6557610100808354040283529160200191610c90565b820191906000526020600020905b815481529060010190602001808311610c7357829003601f168201915b505050505081565b61012f546001600160a01b038281169116145b919050565b610169546040516315f53c9b60e11b8152600091610d56916001600160a01b0390911690632bea793690610ce8908690600401614479565b60206040518083038186803b158015610d0057600080fd5b505afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d38919061406b565b61016354600160a01b900460ff16610d4f85612917565b9190612ac4565b92915050565b610163546001600160a01b031681565b60cb5460ff165b90565b6098546001600160a01b031690565b610d8d612551565b6001600160a01b0316610d9e61144c565b6001600160a01b031614610de2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6097546040516000916001600160a01b031690600080516020614b8e833981519152908390a3609780546001600160a01b0319908116909155609880549091169055565b610168546001600160a01b031681565b61012f546001600160a01b031681565b610e4e610d6c565b15610e93576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415610ed9576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b6002600181905550610f1f8484848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612aed92505050565b5050600180555050565b610f31612551565b6001600160a01b0316610f4261144c565b6001600160a01b031614610f86576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610c07612d6a565b610f96610d6c565b15610fdb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611021576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015561102f816124a8565b61016654604051630261422d60e51b81526110d0916001600160a01b031690634c2845a090611062908690600401614479565b60206040518083038186803b15801561107a57600080fd5b505afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b2919061406b565b61016354600160a01b900460ff166110c985610cb0565b9190612ded565b6110ec5760405162461bcd60e51b8152600401610a99906145fa565b6101695460405163659e3dc760e11b81526001600160a01b039091169063cb3c7b8e9061111d908590600401614479565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190614033565b1561118a5760405162461bcd60e51b8152600401610a9990614887565b61016754604051631e81ac3360e01b81526000916001600160a01b031690631e81ac33906111be908690869060040161448d565b6040805180830381600087803b1580156111d757600080fd5b505af11580156111eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120f9190614160565b905060006112586040518060800160405280866001600160a01b03168152602001856001600160a01b0316815260200160006001600160a01b0316815260200184815250612560565b905060006112f961016560009054906101000a90046001600160a01b03166001600160a01b031663d0144c6c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e6919061441a565b6112f38460600151612e03565b90612e26565b610169549091506001600160a01b03166337724702866113188461277f565b6000036040518363ffffffff1660e01b815260040161133892919061453a565b600060405180830381600087803b15801561135257600080fd5b505af1158015611366573d6000803e3d6000fd5b505050506000611374612551565b610169549091506001600160a01b03166337724702826113938561277f565b6040518363ffffffff1660e01b81526004016113b092919061453a565b600060405180830381600087803b1580156113ca57600080fd5b505af11580156113de573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167fd9aced30440caca81570436bc942f816cfd95a3f08f700a2aeb6334c7cb5b4976114248660600151612e03565b865160405161143892919088908890614a3e565b60405180910390a350506001805550505050565b6097546001600160a01b031690565b610169546001600160a01b031681565b600080611476610d6c565b156114bb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611501576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560a0830151806115146124a4565b1115611550576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b600061155a612551565b905061156985600001516124a8565b610169548551604051633f1cdc8560e21b81526001600160a01b039092169163fc7372149161159d9185919060040161448d565b600060405180830381600087803b1580156115b757600080fd5b505af11580156115cb573d6000803e3d6000fd5b5050610167548751604051631e81ac3360e01b8152600094506001600160a01b039092169250631e81ac339161160591869160040161448d565b6040805180830381600087803b15801561161e57600080fd5b505af1158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190614160565b905060006116db604051806101200160405280856001600160a01b0316815260200189600001516001600160a01b03168152602001896020015115158152602001896040015115158152602001600015158152602001896060015181526020018960c001516001600160a01b0316815260200160001515815260200184815250612e3b565b90506117246040518060a00160405280896020015115158152602001896040015115158152602001836020015181526020018360000151815260200189608001518152506126ac565b60e0870151604051600080516020614b1f83398151915290600090a28051602090910151600180559097909650945050505050565b6098546001600160a01b031661179e576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6117a6612551565b6098546001600160a01b039081169116146117f1576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6098546097546040516001600160a01b039283169290911690600080516020614b8e83398151915290600090a360988054609780546001600160a01b03199081166001600160a01b03841617909155169055565b610165546001600160a01b031681565b600054610100900460ff168061186e575061186e612fae565b8061187c575060005460ff16155b6118b75760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156118e2576000805460ff1961ff0019909116610100171660011790555b6118f4866001600160a01b0316612fbf565b6119105760405162461bcd60e51b8152600401610a99906147c3565b611922856001600160a01b0316612fbf565b61193e5760405162461bcd60e51b8152600401610a99906146df565b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561197757600080fd5b505afa15801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190614436565b60ff166012146119d15760405162461bcd60e51b8152600401610a99906145d8565b6119e3846001600160a01b0316612fbf565b6119ff5760405162461bcd60e51b8152600401610a999061467b565b611a11876001600160a01b0316612fbf565b611a2d5760405162461bcd60e51b8152600401610a9990614720565b611a3f826001600160a01b0316612fbf565b611a5b5760405162461bcd60e51b8152600401610a999061465a565b611a6d836001600160a01b0316612fbf565b611a895760405162461bcd60e51b8152600401610a9990614741565b6000836001600160a01b031663776af5ba6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ac457600080fd5b505afa158015611ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afc9190613e30565b9050611b10816001600160a01b0316612fbf565b611b2c5760405162461bcd60e51b8152600401610a9990614761565b611b34612fc5565b611b3c61306e565b61016580546001600160a01b03199081166001600160a01b038b811691909117909255610166805482168a84161790819055610162805483168a85161790556101638054831689851617905561016780548316888516179055610168805483168585161790556101698054909216868416179091556040805163313ce56760e01b81529051919092169163313ce567916004828101926020929190829003018186803b158015611beb57600080fd5b505afa158015611bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c239190614436565b610163805460ff92909216600160a01b0260ff60a01b19909216919091179055604080518082019091526005808252640322e302e360dc1b6020909201918252611c709161016491613cc8565b50508015611c84576000805461ff00191690555b50505050505050565b611c95610d6c565b15611cda576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611d20576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b6002600155610168546040516321b499f560e11b81526000916001600160a01b03169063436933ea90611d59908690869060040161448d565b60006040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dad9190810190613f93565b9050611dba838383612aed565b50506001805550565b611dcb613d50565b611dd3610d6c565b15611e18576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611e5e576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560c082013580611e716124a4565b1115611ead576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b611ebd6104546020850185613e14565b611f516040518060a00160405280611ed3612551565b6001600160a01b03168152602090810190611ef090870187613e14565b6001600160a01b03168152602001856020016020810190611f11919061404f565b60020b8152602001611f29606087016040880161404f565b60020b8152602001611f4160808701606088016143fe565b6001600160801b0316905261310b565b91508260800135826000015110158015611f7357508260a00135826020015110155b610b885760405162461bcd60e51b8152600401610a9990614847565b610167546001600160a01b031681565b610168546001600160a01b0316611fb4612551565b6001600160a01b031614611fda5760405162461bcd60e51b8152600401610a9990614782565b6000611fe8828401846141a7565b905084156120f057600081602001516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561202f57600080fd5b505afa158015612043573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120679190613e30565b602083015160405163a9059cbb60e01b81529192506001600160a01b0383169163a9059cbb9161209b918a9060040161453a565b602060405180830381600087803b1580156120b557600080fd5b505af11580156120c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ed9190614033565b50505b83156121f357600081602001516001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561213557600080fd5b505afa158015612149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216d9190613e30565b602083015160405163a9059cbb60e01b81529192506001600160a01b0383169163a9059cbb916121a191899060040161453a565b602060405180830381600087803b1580156121bb57600080fd5b505af11580156121cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c849190614033565b5050505050565b612202612551565b6001600160a01b031661221361144c565b6001600160a01b031614612257576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b612269816001600160a01b0316612fbf565b6122855760405162461bcd60e51b8152600401610a9990614741565b61228e816132e8565b50565b610167546001600160a01b03166122a6612551565b6001600160a01b0316146122cc5760405162461bcd60e51b8152600401610a999061461a565b60008413806122db5750600083135b6122f75760405162461bcd60e51b8152600401610a9990614700565b600061230582840184614307565b604081015190915060008080881361238e57826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561235057600080fd5b505afa158015612364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123889190613e30565b87612401565b826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff9190613e30565b885b91509150816001600160a01b031663a9059cbb8560400151836040518363ffffffff1660e01b815260040161243792919061453a565b602060405180830381600087803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190614033565b505050505050505050565b610166546001600160a01b031681565b4290565b6101675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db906124da908590600401614479565b60206040518083038186803b1580156124f257600080fd5b505afa158015612506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252a9190613e30565b6001600160a01b0316141561228e5760405162461bcd60e51b8152600401610a99906147a2565b600061255b613383565b905090565b612568613d71565b61016954825160208401516040516346d12ddf60e11b81526000936001600160a01b031692638da25bbe9261259f9260040161448d565b60206040518083038186803b1580156125b757600080fd5b505afa1580156125cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ef919061406b565b90508061260e5760405162461bcd60e51b8152600401610a9990614867565b600080821361261e576000612621565b60015b90506126a460405180610120016040528086600001516001600160a01b0316815260200186602001516001600160a01b031681526020018315158152602001831515815260200160011515815260200161267a85612e03565b81526040808801516001600160a01b03166020830152600190820152606080880151910152612e3b565b949350505050565b60808101516126ba5761228e565b805115612725578060200151156126f8578060800151816040015110156126f35760405162461bcd60e51b8152600401610a9990614805565b612720565b8060800151816060015111156127205760405162461bcd60e51b8152600401610a9990614639565b61228e565b806020015115612757578060800151816060015110156127205760405162461bcd60e51b8152600401610a99906147e4565b80608001518160400151111561228e5760405162461bcd60e51b8152600401610a999061469c565b6000600160ff1b82106127c35760405162461bcd60e51b8152600401808060200182810382526028815260200180614bd56028913960400191505060405180910390fd5b5090565b60006128598261016560009054906101000a90046001600160a01b03166001600160a01b0316632f60a1516040518163ffffffff1660e01b815260040160206040518083038186803b15801561281c57600080fd5b505afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612854919061441a565b6133b5565b121561228e5760405162461bcd60e51b8152600401610a99906146bd565b61287f610d6c565b6128c7576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b60cb805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128fa612551565b604080516001600160a01b039092168252519081900360200190a1565b610167546040516380f57f1160e01b815260009182916001600160a01b03909116906380f57f119061294d908690600401614479565b60206040518083038186803b15801561296557600080fd5b505afa158015612979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299d919061406b565b6101695460405163ee817e8b60e01b81529192506000916001600160a01b039091169063ee817e8b906129d4908790600401614479565b60206040518083038186803b1580156129ec57600080fd5b505afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a24919061406b565b90506126a4612a338284613439565b61016354610166546040516370a0823160e01b8152600160a01b90920460ff16916001600160a01b03909116906370a0823190612a74908a90600401614479565b60206040518083038186803b158015612a8c57600080fd5b505afa158015612aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061406b565b6000612ae3612add84612ad7878661349e565b906134b4565b83613519565b90505b9392505050565b612af6826124a8565b6000612b4b8461016560009054906101000a90046001600160a01b03166001600160a01b0316639f044f316040518163ffffffff1660e01b815260040160206040518083038186803b15801561281c57600080fd5b1280612bec575061016654604051630261422d60e51b8152612bec916001600160a01b031690634c2845a090612b85908790600401614479565b60206040518083038186803b158015612b9d57600080fd5b505afa158015612bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd5919061406b565b61016354600160a01b900460ff166110c986610cb0565b612c085760405162461bcd60e51b8152600401610a9990614826565b61016754604051631e81ac3360e01b81526001600160a01b0390911690631e81ac3390612c3b908690869060040161448d565b6040805180830381600087803b158015612c5457600080fd5b505af1158015612c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614160565b506101685460405163398dbcfd60e01b81526000916001600160a01b03169063398dbcfd90612cc3908790879087906004016144a7565b606060405180830381600087803b158015612cdd57600080fd5b505af1158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1591906142b3565b9050612d646040518060a00160405280866001600160a01b03168152602001856001600160a01b031681526020018360000151815260200183602001518152602001836040015181525061352f565b50505050565b612d72610d6c565b15612db7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60cb805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128fa612551565b600082612dfa858461349e565b12949350505050565b6000808213612e1d57612e188260000361362c565b610d56565b610d568261362c565b6000612ae6838362ffffff16620f4240613683565b612e43613d71565b6101675460408051610100818101835285516001600160a01b0390811683526020808801518216908401528684015115158385015260608088015115159084015260808088015115159084015260a0808801519084015260c0808801518216908401529086015160e083015291516348fa72d560e01b815260009392909216916348fa72d591612ed5916004016149b4565b60a060405180830381600087803b158015612eef57600080fd5b505af1158015612f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f279190614390565b90508260e00151612f3d578251612f3d906127c7565b610169548351602085015160405163fa8e30af60e01b81526001600160a01b039093169263fa8e30af92612f7592909160040161448d565b600060405180830381600087803b158015612f8f57600080fd5b505af1158015612fa3573d6000803e3d6000fd5b509295945050505050565b6000612fb930612fbf565b15905090565b3b151590565b600054610100900460ff1680612fde5750612fde612fae565b80612fec575060005460ff16155b6130275760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613052576000805460ff1961ff0019909116610100171660011790555b61305a613732565b801561228e576000805461ff001916905550565b600054610100900460ff16806130875750613087612fae565b80613095575060005460ff16155b6130d05760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156130fb576000805460ff1961ff0019909116610100171660011790555b6131036137d7565b61305a6138c6565b613113613d50565b6101675482516020840151604051631e81ac3360e01b81526001600160a01b0390931692631e81ac339261314b92909160040161448d565b6040805180830381600087803b15801561316457600080fd5b505af1158015613178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319c9190614160565b50610168546040805160a08101825284516001600160a01b03908116825260208087015182169083015285830151600290810b8385015260608088015190910b908301526080808701516001600160801b0316908301529151635b778b9d60e01b81526000939290921691635b778b9d916132199160040161493c565b606060405180830381600087803b15801561323357600080fd5b505af1158015613247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326b91906142b3565b90506132c26040518060a0016040528085600001516001600160a01b0316815260200185602001516001600160a01b031681526020018360000151815260200183602001518152602001836040015181525061352f565b604080516060810182528251815260208084015190820152918101519082015292915050565b6001600160a01b03811661332e576040805162461bcd60e51b81526020600482015260086024820152674252435f4954464160c01b604482015290519081900360640190fd5b61012f80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd119181900360200190a150565b60006018361080159061339a575061339a33610c98565b156133ae575060131936013560601c610d73565b5033610d73565b61016654604051633ffd130360e01b81526000916001600160a01b031690633ffd1303906133e99086908690600401614553565b60206040518083038186803b15801561340157600080fd5b505afa158015613415573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae6919061406b565b600081830381831280159061344e5750838113155b80613463575060008312801561346357508381135b612ae65760405162461bcd60e51b8152600401808060200182810382526024815260200180614bfd6024913960400191505060405180910390fd5b6000612ae68360ff601285900316600a0a613963565b60008282018183128015906134c95750838112155b806134de57506000831280156134de57508381125b612ae65760405162461bcd60e51b8152600401808060200182810382526021815260200180614afe6021913960400191505060405180910390fd5b6000612ae68360ff601285900316600a0a613a0c565b610169548151602083015160408401516001600160a01b039093169263beb56a7592919061355c9061277f565b613569866060015161277f565b613576876080015161277f565b6040518663ffffffff1660e01b8152600401613596959493929190614509565b600060405180830381600087803b1580156135b057600080fd5b505af11580156135c4573d6000803e3d6000fd5b5050610169548351602085015160405163fa8e30af60e01b81526001600160a01b03909316945063fa8e30af93506135fe9260040161448d565b600060405180830381600087803b15801561361857600080fd5b505af11580156121f3573d6000803e3d6000fd5b6000808212156127c3576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b60008080600019858709868602925082811090839003039050806136b957600084116136ae57600080fd5b508290049050612ae6565b8084116136c557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600054610100900460ff168061374b575061374b612fae565b80613759575060005460ff16155b6137945760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156137bf576000805460ff1961ff0019909116610100171660011790555b60018055801561228e576000805461ff001916905550565b600054610100900460ff16806137f057506137f0612fae565b806137fe575060005460ff16155b6138395760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613864576000805460ff1961ff0019909116610100171660011790555b61386c613ac4565b6000613876612551565b609780546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020614b8e833981519152908290a350801561228e576000805461ff001916905550565b600054610100900460ff16806138df57506138df612fae565b806138ed575060005460ff16155b6139285760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613953576000805460ff1961ff0019909116610100171660011790555b61395b613b55565b61305a613bf5565b60008261397257506000610d56565b826000191480156139865750600160ff1b82145b156139c25760405162461bcd60e51b8152600401808060200182810382526027815260200180614bae6027913960400191505060405180910390fd5b828202828482816139cf57fe5b0514612ae65760405162461bcd60e51b8152600401808060200182810382526027815260200180614bae6027913960400191505060405180910390fd5b600081613a60576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015613a745750600160ff1b83145b15613ab05760405162461bcd60e51b8152600401808060200182810382526021815260200180614b6d6021913960400191505060405180910390fd5b6000828481613abb57fe5b05949350505050565b600054610100900460ff1680613add5750613add612fae565b80613aeb575060005460ff16155b613b265760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613b51576000805460ff1961ff0019909116610100171660011790555b61305a5b600054610100900460ff1680613b6e5750613b6e612fae565b80613b7c575060005460ff16155b613bb75760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff1615801561305a576000805460ff1961ff001990911661010017166001179055801561228e576000805461ff001916905550565b600054610100900460ff1680613c0e5750613c0e612fae565b80613c1c575060005460ff16155b613c575760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613c82576000805460ff1961ff0019909116610100171660011790555b60cb805460ff19169055801561228e576000805461ff001916905550565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613cfe5760008555613d44565b82601f10613d1757805160ff1916838001178555613d44565b82800160010185558215613d44579182015b82811115613d44578251825591602001919060010190613d29565b506127c3929150613da3565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600060020b81525090565b5b808211156127c35760008155600101613da4565b8035610cab81614a85565b8035610cab81614a9a565b60008083601f840112613ddf578182fd5b5081356001600160401b03811115613df5578182fd5b602083019150836020828501011115613e0d57600080fd5b9250929050565b600060208284031215613e25578081fd5b8135612ae681614a85565b600060208284031215613e41578081fd5b8151612ae681614a85565b60008060408385031215613e5e578081fd5b8235613e6981614a85565b91506020830135613e7981614a85565b809150509250929050565b60008060008060008060c08789031215613e9c578182fd5b8635613ea781614a85565b95506020870135613eb781614a85565b94506040870135613ec781614a85565b93506060870135613ed781614a85565b92506080870135613ee781614a85565b915060a0870135613ef781614a85565b809150509295509295509295565b60008060008060608587031215613f1a578182fd5b8435613f2581614a85565b93506020850135613f3581614a85565b925060408501356001600160401b0380821115613f50578384fd5b818701915087601f830112613f63578384fd5b813581811115613f71578485fd5b8860208083028501011115613f84578485fd5b95989497505060200194505050565b60006020808385031215613fa5578182fd5b82516001600160401b0380821115613fbb578384fd5b818501915085601f830112613fce578384fd5b815181811115613fda57fe5b8381029150613fea848301614a62565b8181528481019084860184860187018a1015614004578788fd5b8795505b83861015614026578051835260019590950194918601918601614008565b5098975050505050505050565b600060208284031215614044578081fd5b8151612ae681614a9a565b600060208284031215614060578081fd5b8135612ae681614aa8565b60006020828403121561407c578081fd5b5051919050565b60008060008060608587031215614098578182fd5b843593506020850135925060408501356001600160401b038111156140bb578283fd5b6140c787828801613dce565b95989497509550505050565b600061010082840312156140e5578081fd5b50919050565b6000608082840312156140fc578081fd5b604051608081016001600160401b038111828210171561411857fe5b8060405250825181526020830151602082015260408301516040820152606083015161414381614ab7565b60608201529392505050565b600060a082840312156140e5578081fd5b600060408284031215614171578081fd5b604080519081016001600160401b038111828210171561418d57fe5b604052825181526020928301519281019290925250919050565b6000604082840312156141b8578081fd5b604080519081016001600160401b03811182821017156141d457fe5b60405282356141e281614a85565b815260208301356141f281614a85565b60208201529392505050565b6000610100808385031215614211578182fd5b604051908101906001600160401b038211818310171561422d57fe5b8160405261423a84613db8565b815261424860208501613dc3565b602082015261425960408501613dc3565b6040820152606084013560608201526080840135608082015260a084013560a082015261428860c08501613db8565b60c082015260e084013560e0820152809250505092915050565b600060e082840312156140e5578081fd5b6000606082840312156142c4578081fd5b604051606081016001600160401b03811182821017156142e057fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600060a08284031215614318578081fd5b60405160a081016001600160401b038111828210171561433457fe5b604052823561434281614a85565b8152602083013561435281614a85565b6020820152604083013561436581614a85565b6040820152606083013561437881614acc565b60608201526080928301359281019290925250919050565b600060a082840312156143a1578081fd5b60405160a081016001600160401b03811182821017156143bd57fe5b80604052508251815260208301516020820152604083015160408201526060830151606082015260808301516143f281614aa8565b60808201529392505050565b60006020828403121561440f578081fd5b8135612ae681614ab7565b60006020828403121561442b578081fd5b8151612ae681614acc565b600060208284031215614447578081fd5b815160ff81168114612ae6578182fd5b15159052565b80518252602090810151910152565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0384811682528316602080830191909152606060408301819052835190830181905260009184810191608085019190845b818110156144fb578451845293820193928201926001016144df565b509198975050505050505050565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825262ffffff16602082015260400190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156145b157858101830151858201604001528201614595565b818111156145c25783604083870101525b50601f01601f1916929092016040019392505050565b60208082526008908201526708690bea2889c62760c31b604082015260600190565b60208082526006908201526521a42fa2a0ab60d11b604082015260600190565b60208082526005908201526443485f4f4560d81b604082015260600190565b60208082526007908201526643485f544d525360c81b604082015260600190565b60208082526007908201526643485f41424e4360c81b604082015260600190565b60208082526007908201526643485f55414e4360c81b604082015260600190565b60208082526007908201526610d217d513549360ca1b604082015260600190565b60208082526008908201526743485f4e4546434960c01b604082015260600190565b60208082526007908201526643485f51414e4360c81b604082015260600190565b60208082526006908201526543485f46305360d01b604082015260600190565b60208082526007908201526643485f43434e4360c81b604082015260600190565b60208082526006908201526543485f414e4360d01b604082015260600190565b60208082526007908201526643485f4f424e4360c81b604082015260600190565b60208082526006908201526521a42fa727a160d11b604082015260600190565b60208082526007908201526643485f42544e4560c81b604082015260600190565b60208082526007908201526643485f56414e4360c81b604082015260600190565b60208082526007908201526610d217d513149360ca1b604082015260600190565b60208082526007908201526643485f544c525360c81b604082015260600190565b60208082526007908201526643485f4e45584f60c81b604082015260600190565b60208082526006908201526543485f50534360d01b604082015260600190565b60208082526006908201526521a42fa829ad60d11b604082015260600190565b60208082526006908201526543485f4e454f60d01b604082015260600190565b60006101008201905060018060a01b03808451168352806020850151166020840152506040830151604083015260608301516060830152608083015160020b608083015260a083015160020b60a083015260c083015161490a60c084018261445d565b5092915050565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b81516001600160a01b03908116825260208084015190911690820152604080830151600290810b9183019190915260608084015190910b908201526080918201516001600160801b03169181019190915260a00190565b81518152602080830151908201526040918201519181019190915260600190565b81516001600160a01b03908116825260208084015190911690820152604080830151151590820152606080830151151590820152608080830151610120830191614a0090840182614457565b5060a083015160a083015260c0830151614a1d60c084018261446c565b5060e083015161490a60e084018261445d565b918252602082015260400190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b6040518181016001600160401b0381118282101715614a7d57fe5b604052919050565b6001600160a01b038116811461228e57600080fd5b801515811461228e57600080fd5b8060020b811461228e57600080fd5b6001600160801b038116811461228e57600080fd5b62ffffff8116811461228e57600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c005369676e6564536166654d6174683a206164646974696f6e206f766572666c6f7709a07769667a46c2b89124a4d731c76fb5203061073aec16319ba9c6a79a3248496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212201d3bf1ad0405b59cd96c3a215e22bcda076aa2e7df77b7b8006e303220a7dc0964736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101695760003560e01c8062aa9a891461016e57806313af40351461019857806313f3d56e146101ad578063217a4b70146101cd5780633f4ba83a146101e2578063486ff0cd146101ea578063572b6c05146101ff5780635ae809511461021f5780635b5491821461023f5780635c975abb146102475780636c8381f81461024f578063715018a614610257578063776af5ba1461025f5780637da0a8771461026757806380a983321461026f5780638456cb591461028257806386b9d81f1461028a5780638da5cb5b1461029d578063b0a1c1c4146102a5578063b6b1b6c3146102ad578063bc5920ba146102c0578063c2075b21146102c8578063cc2a9a5b146102d0578063cc3606dc146102e3578063cde109b6146102f6578063d2f7265a14610316578063d34879971461031e578063da74222814610331578063fa461e3314610344578063fbfa77cf14610357575b600080fd5b61018161017c36600461414f565b61035f565b60405161018f929190614a30565b60405180910390f35b6101ab6101a6366004613e14565b6105f3565b005b6101c06101bb3660046140d3565b61074e565b60405161018f9190614911565b6101d5610b92565b60405161018f9190614479565b6101ab610ba2565b6101f2610c09565b60405161018f9190614585565b61021261020d366004613e14565b610c98565b60405161018f9190614571565b61023261022d366004613e14565b610cb0565b60405161018f919061457c565b6101d5610d5c565b610212610d6c565b6101d5610d76565b6101ab610d85565b6101d5610e26565b6101d5610e36565b6101ab61027d366004613f05565b610e46565b6101ab610f29565b6101ab610298366004613e4c565b610f8e565b6101d561144c565b6101d561145b565b6101816102bb3660046141fe565b61146b565b6101ab611759565b6101d5611845565b6101ab6102de366004613e84565b611855565b6101ab6102f1366004613e4c565b611c8d565b6103096103043660046142a2565b611dc3565b60405161018f9190614993565b6101d5611f8f565b6101ab61032c366004614083565b611f9f565b6101ab61033f366004613e14565b6121fa565b6101ab610352366004614083565b612291565b6101d5612494565b60008061036a610d6c565b156103af576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156103f5576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b60026001556060830135806104086124a4565b1115610444576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b6104596104546020860186613e14565b6124a8565b6000610463612551565b610167549091506000906001600160a01b0316631e81ac338361048960208a018a613e14565b6040518363ffffffff1660e01b81526004016104a692919061448d565b6040805180830381600087803b1580156104bf57600080fd5b505af11580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190614160565b905060006105626040518060800160405280856001600160a01b0316815260200189600001602081019061052b9190613e14565b6001600160a01b0316815260200189602001602081019061054c9190613e14565b6001600160a01b03168152602001849052612560565b905060008082604001511261057857600061057b565b60015b90506105bc6040518060a001604052808315158152602001831515815260200184602001518152602001846000015181526020018a604001358152506126ac565b604051608089013590600080516020614b1f83398151915290600090a2508051602090910151600180559097909650945050505050565b6105fb612551565b6001600160a01b031661060c61144c565b6001600160a01b031614610650576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610694576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6097546001600160a01b03828116911614156106e0576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6098546001600160a01b038281169116141561072c576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b609880546001600160a01b0319166001600160a01b0392909216919091179055565b610756613ca0565b61075e610d6c565b156107a3576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156107e9576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560e0820135806107fc6124a4565b1115610838576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b6108486104546020850185613e14565b6000610852612551565b610169549091506001600160a01b031663fc737214826108756020880188613e14565b6040518363ffffffff1660e01b815260040161089292919061448d565b600060405180830381600087803b1580156108ac57600080fd5b505af11580156108c0573d6000803e3d6000fd5b505061016754600092506001600160a01b03169050631e81ac33836108e86020890189613e14565b6040518363ffffffff1660e01b815260040161090592919061448d565b6040805180830381600087803b15801561091e57600080fd5b505af1158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190614160565b610168546040805160e081019091526001600160a01b0385811682529293506000929091169063e8ab2fb390602080820190610994908b018b613e14565b6001600160a01b0316815260200189602001358152602001896040013581526020018960600160208101906109c9919061404f565b60020b81526020016109e160a08b0160808c0161404f565b60020b8152602001858152506040518263ffffffff1660e01b8152600401610a0991906148a7565b608060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b91906140eb565b90508560a00135816000015110158015610a7d57508560c00135816020015110155b610aa25760405162461bcd60e51b8152600401610a9990614847565b60405180910390fd5b610169546001600160a01b031663beb56a7584610ac260208a018a613e14565b8451610acd9061277f565b600003610add866020015161277f565b600003610aed876040015161277f565b6040518663ffffffff1660e01b8152600401610b0d959493929190614509565b600060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b50505050610b48836127c7565b604051806080016040528082600001518152602001826020015181526020018260400151815260200182606001516001600160801b031681525094505050505b5060018055919050565b610162546001600160a01b031681565b610baa612551565b6001600160a01b0316610bbb61144c565b6001600160a01b031614610bff576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610c07612877565b565b610164805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c905780601f10610c6557610100808354040283529160200191610c90565b820191906000526020600020905b815481529060010190602001808311610c7357829003601f168201915b505050505081565b61012f546001600160a01b038281169116145b919050565b610169546040516315f53c9b60e11b8152600091610d56916001600160a01b0390911690632bea793690610ce8908690600401614479565b60206040518083038186803b158015610d0057600080fd5b505afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d38919061406b565b61016354600160a01b900460ff16610d4f85612917565b9190612ac4565b92915050565b610163546001600160a01b031681565b60cb5460ff165b90565b6098546001600160a01b031690565b610d8d612551565b6001600160a01b0316610d9e61144c565b6001600160a01b031614610de2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6097546040516000916001600160a01b031690600080516020614b8e833981519152908390a3609780546001600160a01b0319908116909155609880549091169055565b610168546001600160a01b031681565b61012f546001600160a01b031681565b610e4e610d6c565b15610e93576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415610ed9576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b6002600181905550610f1f8484848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612aed92505050565b5050600180555050565b610f31612551565b6001600160a01b0316610f4261144c565b6001600160a01b031614610f86576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610c07612d6a565b610f96610d6c565b15610fdb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611021576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015561102f816124a8565b61016654604051630261422d60e51b81526110d0916001600160a01b031690634c2845a090611062908690600401614479565b60206040518083038186803b15801561107a57600080fd5b505afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b2919061406b565b61016354600160a01b900460ff166110c985610cb0565b9190612ded565b6110ec5760405162461bcd60e51b8152600401610a99906145fa565b6101695460405163659e3dc760e11b81526001600160a01b039091169063cb3c7b8e9061111d908590600401614479565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190614033565b1561118a5760405162461bcd60e51b8152600401610a9990614887565b61016754604051631e81ac3360e01b81526000916001600160a01b031690631e81ac33906111be908690869060040161448d565b6040805180830381600087803b1580156111d757600080fd5b505af11580156111eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120f9190614160565b905060006112586040518060800160405280866001600160a01b03168152602001856001600160a01b0316815260200160006001600160a01b0316815260200184815250612560565b905060006112f961016560009054906101000a90046001600160a01b03166001600160a01b031663d0144c6c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e6919061441a565b6112f38460600151612e03565b90612e26565b610169549091506001600160a01b03166337724702866113188461277f565b6000036040518363ffffffff1660e01b815260040161133892919061453a565b600060405180830381600087803b15801561135257600080fd5b505af1158015611366573d6000803e3d6000fd5b505050506000611374612551565b610169549091506001600160a01b03166337724702826113938561277f565b6040518363ffffffff1660e01b81526004016113b092919061453a565b600060405180830381600087803b1580156113ca57600080fd5b505af11580156113de573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167fd9aced30440caca81570436bc942f816cfd95a3f08f700a2aeb6334c7cb5b4976114248660600151612e03565b865160405161143892919088908890614a3e565b60405180910390a350506001805550505050565b6097546001600160a01b031690565b610169546001600160a01b031681565b600080611476610d6c565b156114bb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611501576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560a0830151806115146124a4565b1115611550576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b600061155a612551565b905061156985600001516124a8565b610169548551604051633f1cdc8560e21b81526001600160a01b039092169163fc7372149161159d9185919060040161448d565b600060405180830381600087803b1580156115b757600080fd5b505af11580156115cb573d6000803e3d6000fd5b5050610167548751604051631e81ac3360e01b8152600094506001600160a01b039092169250631e81ac339161160591869160040161448d565b6040805180830381600087803b15801561161e57600080fd5b505af1158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190614160565b905060006116db604051806101200160405280856001600160a01b0316815260200189600001516001600160a01b03168152602001896020015115158152602001896040015115158152602001600015158152602001896060015181526020018960c001516001600160a01b0316815260200160001515815260200184815250612e3b565b90506117246040518060a00160405280896020015115158152602001896040015115158152602001836020015181526020018360000151815260200189608001518152506126ac565b60e0870151604051600080516020614b1f83398151915290600090a28051602090910151600180559097909650945050505050565b6098546001600160a01b031661179e576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6117a6612551565b6098546001600160a01b039081169116146117f1576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6098546097546040516001600160a01b039283169290911690600080516020614b8e83398151915290600090a360988054609780546001600160a01b03199081166001600160a01b03841617909155169055565b610165546001600160a01b031681565b600054610100900460ff168061186e575061186e612fae565b8061187c575060005460ff16155b6118b75760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156118e2576000805460ff1961ff0019909116610100171660011790555b6118f4866001600160a01b0316612fbf565b6119105760405162461bcd60e51b8152600401610a99906147c3565b611922856001600160a01b0316612fbf565b61193e5760405162461bcd60e51b8152600401610a99906146df565b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561197757600080fd5b505afa15801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190614436565b60ff166012146119d15760405162461bcd60e51b8152600401610a99906145d8565b6119e3846001600160a01b0316612fbf565b6119ff5760405162461bcd60e51b8152600401610a999061467b565b611a11876001600160a01b0316612fbf565b611a2d5760405162461bcd60e51b8152600401610a9990614720565b611a3f826001600160a01b0316612fbf565b611a5b5760405162461bcd60e51b8152600401610a999061465a565b611a6d836001600160a01b0316612fbf565b611a895760405162461bcd60e51b8152600401610a9990614741565b6000836001600160a01b031663776af5ba6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ac457600080fd5b505afa158015611ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afc9190613e30565b9050611b10816001600160a01b0316612fbf565b611b2c5760405162461bcd60e51b8152600401610a9990614761565b611b34612fc5565b611b3c61306e565b61016580546001600160a01b03199081166001600160a01b038b811691909117909255610166805482168a84161790819055610162805483168a85161790556101638054831689851617905561016780548316888516179055610168805483168585161790556101698054909216868416179091556040805163313ce56760e01b81529051919092169163313ce567916004828101926020929190829003018186803b158015611beb57600080fd5b505afa158015611bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c239190614436565b610163805460ff92909216600160a01b0260ff60a01b19909216919091179055604080518082019091526005808252640322e302e360dc1b6020909201918252611c709161016491613cc8565b50508015611c84576000805461ff00191690555b50505050505050565b611c95610d6c565b15611cda576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611d20576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b6002600155610168546040516321b499f560e11b81526000916001600160a01b03169063436933ea90611d59908690869060040161448d565b60006040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dad9190810190613f93565b9050611dba838383612aed565b50506001805550565b611dcb613d50565b611dd3610d6c565b15611e18576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611e5e576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560c082013580611e716124a4565b1115611ead576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b611ebd6104546020850185613e14565b611f516040518060a00160405280611ed3612551565b6001600160a01b03168152602090810190611ef090870187613e14565b6001600160a01b03168152602001856020016020810190611f11919061404f565b60020b8152602001611f29606087016040880161404f565b60020b8152602001611f4160808701606088016143fe565b6001600160801b0316905261310b565b91508260800135826000015110158015611f7357508260a00135826020015110155b610b885760405162461bcd60e51b8152600401610a9990614847565b610167546001600160a01b031681565b610168546001600160a01b0316611fb4612551565b6001600160a01b031614611fda5760405162461bcd60e51b8152600401610a9990614782565b6000611fe8828401846141a7565b905084156120f057600081602001516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561202f57600080fd5b505afa158015612043573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120679190613e30565b602083015160405163a9059cbb60e01b81529192506001600160a01b0383169163a9059cbb9161209b918a9060040161453a565b602060405180830381600087803b1580156120b557600080fd5b505af11580156120c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ed9190614033565b50505b83156121f357600081602001516001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561213557600080fd5b505afa158015612149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216d9190613e30565b602083015160405163a9059cbb60e01b81529192506001600160a01b0383169163a9059cbb916121a191899060040161453a565b602060405180830381600087803b1580156121bb57600080fd5b505af11580156121cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c849190614033565b5050505050565b612202612551565b6001600160a01b031661221361144c565b6001600160a01b031614612257576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b612269816001600160a01b0316612fbf565b6122855760405162461bcd60e51b8152600401610a9990614741565b61228e816132e8565b50565b610167546001600160a01b03166122a6612551565b6001600160a01b0316146122cc5760405162461bcd60e51b8152600401610a999061461a565b60008413806122db5750600083135b6122f75760405162461bcd60e51b8152600401610a9990614700565b600061230582840184614307565b604081015190915060008080881361238e57826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561235057600080fd5b505afa158015612364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123889190613e30565b87612401565b826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff9190613e30565b885b91509150816001600160a01b031663a9059cbb8560400151836040518363ffffffff1660e01b815260040161243792919061453a565b602060405180830381600087803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190614033565b505050505050505050565b610166546001600160a01b031681565b4290565b6101675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db906124da908590600401614479565b60206040518083038186803b1580156124f257600080fd5b505afa158015612506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252a9190613e30565b6001600160a01b0316141561228e5760405162461bcd60e51b8152600401610a99906147a2565b600061255b613383565b905090565b612568613d71565b61016954825160208401516040516346d12ddf60e11b81526000936001600160a01b031692638da25bbe9261259f9260040161448d565b60206040518083038186803b1580156125b757600080fd5b505afa1580156125cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ef919061406b565b90508061260e5760405162461bcd60e51b8152600401610a9990614867565b600080821361261e576000612621565b60015b90506126a460405180610120016040528086600001516001600160a01b0316815260200186602001516001600160a01b031681526020018315158152602001831515815260200160011515815260200161267a85612e03565b81526040808801516001600160a01b03166020830152600190820152606080880151910152612e3b565b949350505050565b60808101516126ba5761228e565b805115612725578060200151156126f8578060800151816040015110156126f35760405162461bcd60e51b8152600401610a9990614805565b612720565b8060800151816060015111156127205760405162461bcd60e51b8152600401610a9990614639565b61228e565b806020015115612757578060800151816060015110156127205760405162461bcd60e51b8152600401610a99906147e4565b80608001518160400151111561228e5760405162461bcd60e51b8152600401610a999061469c565b6000600160ff1b82106127c35760405162461bcd60e51b8152600401808060200182810382526028815260200180614bd56028913960400191505060405180910390fd5b5090565b60006128598261016560009054906101000a90046001600160a01b03166001600160a01b0316632f60a1516040518163ffffffff1660e01b815260040160206040518083038186803b15801561281c57600080fd5b505afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612854919061441a565b6133b5565b121561228e5760405162461bcd60e51b8152600401610a99906146bd565b61287f610d6c565b6128c7576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b60cb805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128fa612551565b604080516001600160a01b039092168252519081900360200190a1565b610167546040516380f57f1160e01b815260009182916001600160a01b03909116906380f57f119061294d908690600401614479565b60206040518083038186803b15801561296557600080fd5b505afa158015612979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299d919061406b565b6101695460405163ee817e8b60e01b81529192506000916001600160a01b039091169063ee817e8b906129d4908790600401614479565b60206040518083038186803b1580156129ec57600080fd5b505afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a24919061406b565b90506126a4612a338284613439565b61016354610166546040516370a0823160e01b8152600160a01b90920460ff16916001600160a01b03909116906370a0823190612a74908a90600401614479565b60206040518083038186803b158015612a8c57600080fd5b505afa158015612aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061406b565b6000612ae3612add84612ad7878661349e565b906134b4565b83613519565b90505b9392505050565b612af6826124a8565b6000612b4b8461016560009054906101000a90046001600160a01b03166001600160a01b0316639f044f316040518163ffffffff1660e01b815260040160206040518083038186803b15801561281c57600080fd5b1280612bec575061016654604051630261422d60e51b8152612bec916001600160a01b031690634c2845a090612b85908790600401614479565b60206040518083038186803b158015612b9d57600080fd5b505afa158015612bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd5919061406b565b61016354600160a01b900460ff166110c986610cb0565b612c085760405162461bcd60e51b8152600401610a9990614826565b61016754604051631e81ac3360e01b81526001600160a01b0390911690631e81ac3390612c3b908690869060040161448d565b6040805180830381600087803b158015612c5457600080fd5b505af1158015612c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614160565b506101685460405163398dbcfd60e01b81526000916001600160a01b03169063398dbcfd90612cc3908790879087906004016144a7565b606060405180830381600087803b158015612cdd57600080fd5b505af1158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1591906142b3565b9050612d646040518060a00160405280866001600160a01b03168152602001856001600160a01b031681526020018360000151815260200183602001518152602001836040015181525061352f565b50505050565b612d72610d6c565b15612db7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60cb805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128fa612551565b600082612dfa858461349e565b12949350505050565b6000808213612e1d57612e188260000361362c565b610d56565b610d568261362c565b6000612ae6838362ffffff16620f4240613683565b612e43613d71565b6101675460408051610100818101835285516001600160a01b0390811683526020808801518216908401528684015115158385015260608088015115159084015260808088015115159084015260a0808801519084015260c0808801518216908401529086015160e083015291516348fa72d560e01b815260009392909216916348fa72d591612ed5916004016149b4565b60a060405180830381600087803b158015612eef57600080fd5b505af1158015612f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f279190614390565b90508260e00151612f3d578251612f3d906127c7565b610169548351602085015160405163fa8e30af60e01b81526001600160a01b039093169263fa8e30af92612f7592909160040161448d565b600060405180830381600087803b158015612f8f57600080fd5b505af1158015612fa3573d6000803e3d6000fd5b509295945050505050565b6000612fb930612fbf565b15905090565b3b151590565b600054610100900460ff1680612fde5750612fde612fae565b80612fec575060005460ff16155b6130275760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613052576000805460ff1961ff0019909116610100171660011790555b61305a613732565b801561228e576000805461ff001916905550565b600054610100900460ff16806130875750613087612fae565b80613095575060005460ff16155b6130d05760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156130fb576000805460ff1961ff0019909116610100171660011790555b6131036137d7565b61305a6138c6565b613113613d50565b6101675482516020840151604051631e81ac3360e01b81526001600160a01b0390931692631e81ac339261314b92909160040161448d565b6040805180830381600087803b15801561316457600080fd5b505af1158015613178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319c9190614160565b50610168546040805160a08101825284516001600160a01b03908116825260208087015182169083015285830151600290810b8385015260608088015190910b908301526080808701516001600160801b0316908301529151635b778b9d60e01b81526000939290921691635b778b9d916132199160040161493c565b606060405180830381600087803b15801561323357600080fd5b505af1158015613247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326b91906142b3565b90506132c26040518060a0016040528085600001516001600160a01b0316815260200185602001516001600160a01b031681526020018360000151815260200183602001518152602001836040015181525061352f565b604080516060810182528251815260208084015190820152918101519082015292915050565b6001600160a01b03811661332e576040805162461bcd60e51b81526020600482015260086024820152674252435f4954464160c01b604482015290519081900360640190fd5b61012f80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd119181900360200190a150565b60006018361080159061339a575061339a33610c98565b156133ae575060131936013560601c610d73565b5033610d73565b61016654604051633ffd130360e01b81526000916001600160a01b031690633ffd1303906133e99086908690600401614553565b60206040518083038186803b15801561340157600080fd5b505afa158015613415573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae6919061406b565b600081830381831280159061344e5750838113155b80613463575060008312801561346357508381135b612ae65760405162461bcd60e51b8152600401808060200182810382526024815260200180614bfd6024913960400191505060405180910390fd5b6000612ae68360ff601285900316600a0a613963565b60008282018183128015906134c95750838112155b806134de57506000831280156134de57508381125b612ae65760405162461bcd60e51b8152600401808060200182810382526021815260200180614afe6021913960400191505060405180910390fd5b6000612ae68360ff601285900316600a0a613a0c565b610169548151602083015160408401516001600160a01b039093169263beb56a7592919061355c9061277f565b613569866060015161277f565b613576876080015161277f565b6040518663ffffffff1660e01b8152600401613596959493929190614509565b600060405180830381600087803b1580156135b057600080fd5b505af11580156135c4573d6000803e3d6000fd5b5050610169548351602085015160405163fa8e30af60e01b81526001600160a01b03909316945063fa8e30af93506135fe9260040161448d565b600060405180830381600087803b15801561361857600080fd5b505af11580156121f3573d6000803e3d6000fd5b6000808212156127c3576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b60008080600019858709868602925082811090839003039050806136b957600084116136ae57600080fd5b508290049050612ae6565b8084116136c557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600054610100900460ff168061374b575061374b612fae565b80613759575060005460ff16155b6137945760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156137bf576000805460ff1961ff0019909116610100171660011790555b60018055801561228e576000805461ff001916905550565b600054610100900460ff16806137f057506137f0612fae565b806137fe575060005460ff16155b6138395760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613864576000805460ff1961ff0019909116610100171660011790555b61386c613ac4565b6000613876612551565b609780546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020614b8e833981519152908290a350801561228e576000805461ff001916905550565b600054610100900460ff16806138df57506138df612fae565b806138ed575060005460ff16155b6139285760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613953576000805460ff1961ff0019909116610100171660011790555b61395b613b55565b61305a613bf5565b60008261397257506000610d56565b826000191480156139865750600160ff1b82145b156139c25760405162461bcd60e51b8152600401808060200182810382526027815260200180614bae6027913960400191505060405180910390fd5b828202828482816139cf57fe5b0514612ae65760405162461bcd60e51b8152600401808060200182810382526027815260200180614bae6027913960400191505060405180910390fd5b600081613a60576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015613a745750600160ff1b83145b15613ab05760405162461bcd60e51b8152600401808060200182810382526021815260200180614b6d6021913960400191505060405180910390fd5b6000828481613abb57fe5b05949350505050565b600054610100900460ff1680613add5750613add612fae565b80613aeb575060005460ff16155b613b265760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613b51576000805460ff1961ff0019909116610100171660011790555b61305a5b600054610100900460ff1680613b6e5750613b6e612fae565b80613b7c575060005460ff16155b613bb75760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff1615801561305a576000805460ff1961ff001990911661010017166001179055801561228e576000805461ff001916905550565b600054610100900460ff1680613c0e5750613c0e612fae565b80613c1c575060005460ff16155b613c575760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613c82576000805460ff1961ff0019909116610100171660011790555b60cb805460ff19169055801561228e576000805461ff001916905550565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613cfe5760008555613d44565b82601f10613d1757805160ff1916838001178555613d44565b82800160010185558215613d44579182015b82811115613d44578251825591602001919060010190613d29565b506127c3929150613da3565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600060020b81525090565b5b808211156127c35760008155600101613da4565b8035610cab81614a85565b8035610cab81614a9a565b60008083601f840112613ddf578182fd5b5081356001600160401b03811115613df5578182fd5b602083019150836020828501011115613e0d57600080fd5b9250929050565b600060208284031215613e25578081fd5b8135612ae681614a85565b600060208284031215613e41578081fd5b8151612ae681614a85565b60008060408385031215613e5e578081fd5b8235613e6981614a85565b91506020830135613e7981614a85565b809150509250929050565b60008060008060008060c08789031215613e9c578182fd5b8635613ea781614a85565b95506020870135613eb781614a85565b94506040870135613ec781614a85565b93506060870135613ed781614a85565b92506080870135613ee781614a85565b915060a0870135613ef781614a85565b809150509295509295509295565b60008060008060608587031215613f1a578182fd5b8435613f2581614a85565b93506020850135613f3581614a85565b925060408501356001600160401b0380821115613f50578384fd5b818701915087601f830112613f63578384fd5b813581811115613f71578485fd5b8860208083028501011115613f84578485fd5b95989497505060200194505050565b60006020808385031215613fa5578182fd5b82516001600160401b0380821115613fbb578384fd5b818501915085601f830112613fce578384fd5b815181811115613fda57fe5b8381029150613fea848301614a62565b8181528481019084860184860187018a1015614004578788fd5b8795505b83861015614026578051835260019590950194918601918601614008565b5098975050505050505050565b600060208284031215614044578081fd5b8151612ae681614a9a565b600060208284031215614060578081fd5b8135612ae681614aa8565b60006020828403121561407c578081fd5b5051919050565b60008060008060608587031215614098578182fd5b843593506020850135925060408501356001600160401b038111156140bb578283fd5b6140c787828801613dce565b95989497509550505050565b600061010082840312156140e5578081fd5b50919050565b6000608082840312156140fc578081fd5b604051608081016001600160401b038111828210171561411857fe5b8060405250825181526020830151602082015260408301516040820152606083015161414381614ab7565b60608201529392505050565b600060a082840312156140e5578081fd5b600060408284031215614171578081fd5b604080519081016001600160401b038111828210171561418d57fe5b604052825181526020928301519281019290925250919050565b6000604082840312156141b8578081fd5b604080519081016001600160401b03811182821017156141d457fe5b60405282356141e281614a85565b815260208301356141f281614a85565b60208201529392505050565b6000610100808385031215614211578182fd5b604051908101906001600160401b038211818310171561422d57fe5b8160405261423a84613db8565b815261424860208501613dc3565b602082015261425960408501613dc3565b6040820152606084013560608201526080840135608082015260a084013560a082015261428860c08501613db8565b60c082015260e084013560e0820152809250505092915050565b600060e082840312156140e5578081fd5b6000606082840312156142c4578081fd5b604051606081016001600160401b03811182821017156142e057fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600060a08284031215614318578081fd5b60405160a081016001600160401b038111828210171561433457fe5b604052823561434281614a85565b8152602083013561435281614a85565b6020820152604083013561436581614a85565b6040820152606083013561437881614acc565b60608201526080928301359281019290925250919050565b600060a082840312156143a1578081fd5b60405160a081016001600160401b03811182821017156143bd57fe5b80604052508251815260208301516020820152604083015160408201526060830151606082015260808301516143f281614aa8565b60808201529392505050565b60006020828403121561440f578081fd5b8135612ae681614ab7565b60006020828403121561442b578081fd5b8151612ae681614acc565b600060208284031215614447578081fd5b815160ff81168114612ae6578182fd5b15159052565b80518252602090810151910152565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0384811682528316602080830191909152606060408301819052835190830181905260009184810191608085019190845b818110156144fb578451845293820193928201926001016144df565b509198975050505050505050565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825262ffffff16602082015260400190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156145b157858101830151858201604001528201614595565b818111156145c25783604083870101525b50601f01601f1916929092016040019392505050565b60208082526008908201526708690bea2889c62760c31b604082015260600190565b60208082526006908201526521a42fa2a0ab60d11b604082015260600190565b60208082526005908201526443485f4f4560d81b604082015260600190565b60208082526007908201526643485f544d525360c81b604082015260600190565b60208082526007908201526643485f41424e4360c81b604082015260600190565b60208082526007908201526643485f55414e4360c81b604082015260600190565b60208082526007908201526610d217d513549360ca1b604082015260600190565b60208082526008908201526743485f4e4546434960c01b604082015260600190565b60208082526007908201526643485f51414e4360c81b604082015260600190565b60208082526006908201526543485f46305360d01b604082015260600190565b60208082526007908201526643485f43434e4360c81b604082015260600190565b60208082526006908201526543485f414e4360d01b604082015260600190565b60208082526007908201526643485f4f424e4360c81b604082015260600190565b60208082526006908201526521a42fa727a160d11b604082015260600190565b60208082526007908201526643485f42544e4560c81b604082015260600190565b60208082526007908201526643485f56414e4360c81b604082015260600190565b60208082526007908201526610d217d513149360ca1b604082015260600190565b60208082526007908201526643485f544c525360c81b604082015260600190565b60208082526007908201526643485f4e45584f60c81b604082015260600190565b60208082526006908201526543485f50534360d01b604082015260600190565b60208082526006908201526521a42fa829ad60d11b604082015260600190565b60208082526006908201526543485f4e454f60d01b604082015260600190565b60006101008201905060018060a01b03808451168352806020850151166020840152506040830151604083015260608301516060830152608083015160020b608083015260a083015160020b60a083015260c083015161490a60c084018261445d565b5092915050565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b81516001600160a01b03908116825260208084015190911690820152604080830151600290810b9183019190915260608084015190910b908201526080918201516001600160801b03169181019190915260a00190565b81518152602080830151908201526040918201519181019190915260600190565b81516001600160a01b03908116825260208084015190911690820152604080830151151590820152606080830151151590820152608080830151610120830191614a0090840182614457565b5060a083015160a083015260c0830151614a1d60c084018261446c565b5060e083015161490a60e084018261445d565b918252602082015260400190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b6040518181016001600160401b0381118282101715614a7d57fe5b604052919050565b6001600160a01b038116811461228e57600080fd5b801515811461228e57600080fd5b8060020b811461228e57600080fd5b6001600160801b038116811461228e57600080fd5b62ffffff8116811461228e57600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c005369676e6564536166654d6174683a206164646974696f6e206f766572666c6f7709a07769667a46c2b89124a4d731c76fb5203061073aec16319ba9c6a79a3248496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212201d3bf1ad0405b59cd96c3a215e22bcda076aa2e7df77b7b8006e303220a7dc0964736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2ClearingHouseConfig.json b/external/abi/perp/PerpV2ClearingHouseConfig.json new file mode 100644 index 000000000..a47b0b873 --- /dev/null +++ b/external/abi/perp/PerpV2ClearingHouseConfig.json @@ -0,0 +1,272 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2ClearingHouseConfig", + "sourceName": "contracts/ClearingHouseConfig.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint24", + "name": "liquidationPenaltyRatio", + "type": "uint24" + } + ], + "name": "LiquidationPenaltyRatioChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "maxMarketsPerAccount", + "type": "uint8" + } + ], + "name": "MaxMarketsPerAccountChanged", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint24", + "name": "partialCloseRatio", + "type": "uint24" + } + ], + "name": "PartialCloseRatioChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "twapInterval", + "type": "uint256" + } + ], + "name": "TwapIntervalChanged", + "type": "event" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "imRatio", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "liquidationPenaltyRatio", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "maxMarketsPerAccount", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "mmRatio", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "partialCloseRatio", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "liquidationPenaltyRatioArg", + "type": "uint24" + } + ], + "name": "setLiquidationPenaltyRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "maxMarketsPerAccountArg", + "type": "uint8" + } + ], + "name": "setMaxMarketsPerAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint24", + "name": "partialCloseRatioArg", + "type": "uint24" + } + ], + "name": "setPartialCloseRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint32", + "name": "twapIntervalArg", + "type": "uint32" + } + ], + "name": "setTwapInterval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "twapInterval", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50610d58806100206000396000f3fe608060405234801561001057600080fd5b50600436106100d05760003560e01c8063050a0ba3146100d557806313af4035146100f95780631d27050f1461011f5780632f60a151146101425780633c1d5df0146101625780633fa7ffc7146101835780636c8381f81461018b578063715018a6146101af57806373f62501146101b75780637bce35ae146101d75780638129fc1c146101f95780638da5cb5b146102015780639f044f3114610209578063bc5920ba14610211578063d0144c6c14610219578063f652b52714610221575b600080fd5b6100f7600480360360208110156100eb57600080fd5b503562ffffff1661023f565b005b6100f76004803603602081101561010f57600080fd5b50356001600160a01b031661033c565b6100f76004803603602081101561013557600080fd5b503563ffffffff16610497565b61014a610590565b6040805162ffffff9092168252519081900360200190f35b61016a6105a0565b6040805163ffffffff9092168252519081900360200190f35b61014a6105b3565b6101936105c5565b604080516001600160a01b039092168252519081900360200190f35b6100f76105d4565b6100f7600480360360208110156101cd57600080fd5b503560ff16610675565b6100f7600480360360208110156101ed57600080fd5b503562ffffff1661071a565b6100f761085c565b610193610959565b61014a610968565b6100f761097a565b61014a610a66565b610229610a78565b6040805160ff9092168252519081900360200190f35b80620f42408162ffffff161115610286576040805162461bcd60e51b81526020600482015260066024820152654348435f524f60d01b604482015290519081900360640190fd5b61028e610a81565b6001600160a01b031661029f610959565b6001600160a01b0316146102e3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6067805462ffffff8416600160381b810262ffffff60381b199092169190911790915560408051918252517ff95b3e2798060899824a0bebdd89ff5df3d51c51c5d30f5184bd30d7a6b017089181900360200190a15050565b610344610a81565b6001600160a01b0316610355610959565b6001600160a01b031614610399576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166103dd576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610429576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610475576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b61049f610a81565b6001600160a01b03166104b0610959565b6001600160a01b0316146104f4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b63ffffffff8116610536576040805162461bcd60e51b81526020600482015260076024820152664348435f49544960c81b604482015290519081900360640190fd5b6067805463ffffffff8316600160681b810263ffffffff60681b199092169190911790915560408051918252517f0bd5e02c0d6277fdf7c7c72fae10042c4c832b26ea94623a04b79a50a35a217e9181900360200190a150565b606754610100900462ffffff1681565b606754600160681b900463ffffffff1681565b606754600160501b900462ffffff1681565b6034546001600160a01b031690565b6105dc610a81565b6001600160a01b03166105ed610959565b6001600160a01b031614610631576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020610d03833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b61067d610a81565b6001600160a01b031661068e610959565b6001600160a01b0316146106d2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6067805460ff831660ff19909116811790915560408051918252517fa7b4760b38e2a630f3073fcd5119972cbf81bd50e3761f86534a69661caf81109181900360200190a150565b80620f42408162ffffff161115610761576040805162461bcd60e51b81526020600482015260066024820152654348435f524f60d01b604482015290519081900360640190fd5b610769610a81565b6001600160a01b031661077a610959565b6001600160a01b0316146107be576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b60008262ffffff1611610803576040805162461bcd60e51b815260206004820152600860248201526721a421afa4a821a960c11b604482015290519081900360640190fd5b6067805462ffffff8416600160501b810262ffffff60501b199092169190911790915560408051918252517f4757c16c46bedf5171cc1e2c53c99225da1bff2c0a5cb51b0f852909dbae1ebd9181900360200190a15050565b600054610100900460ff16806108755750610875610a85565b80610883575060005460ff16155b6108be5760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff161580156108e9576000805460ff1961ff0019909116610100171660011790555b6108f1610a96565b6067805463ffffff001916630186a0001762ffffff60201b1916613d0960221b1762ffffff60381b1916610c35603b1b1762ffffff60501b1916613d0960541b1763ffffffff60681b191660e1606a1b1790558015610956576000805461ff00191690555b50565b6033546001600160a01b031690565b606754600160201b900462ffffff1681565b6034546001600160a01b03166109bf576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6109c7610a81565b6034546001600160a01b03908116911614610a12576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020610d0383398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b606754600160381b900462ffffff1681565b60675460ff1681565b3390565b6000610a9030610b85565b15905090565b600054610100900460ff1680610aaf5750610aaf610a85565b80610abd575060005460ff16155b610af85760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610b23576000805460ff1961ff0019909116610100171660011790555b610b2b610b8b565b6000610b35610a81565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020610d03833981519152908290a3508015610956576000805461ff001916905550565b3b151590565b600054610100900460ff1680610ba45750610ba4610a85565b80610bb2575060005460ff16155b610bed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610c18576000805460ff1961ff0019909116610100171660011790555b610c20610c34565b8015610956576000805461ff001916905550565b600054610100900460ff1680610c4d5750610c4d610a85565b80610c5b575060005460ff16155b610c965760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610c20576000805460ff1961ff0019909116610100171660011790558015610956576000805461ff00191690555056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122055882c19308d40b97b732e7958992d11c59bf5d54ba495b04d78dc9be82aa0e864736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d05760003560e01c8063050a0ba3146100d557806313af4035146100f95780631d27050f1461011f5780632f60a151146101425780633c1d5df0146101625780633fa7ffc7146101835780636c8381f81461018b578063715018a6146101af57806373f62501146101b75780637bce35ae146101d75780638129fc1c146101f95780638da5cb5b146102015780639f044f3114610209578063bc5920ba14610211578063d0144c6c14610219578063f652b52714610221575b600080fd5b6100f7600480360360208110156100eb57600080fd5b503562ffffff1661023f565b005b6100f76004803603602081101561010f57600080fd5b50356001600160a01b031661033c565b6100f76004803603602081101561013557600080fd5b503563ffffffff16610497565b61014a610590565b6040805162ffffff9092168252519081900360200190f35b61016a6105a0565b6040805163ffffffff9092168252519081900360200190f35b61014a6105b3565b6101936105c5565b604080516001600160a01b039092168252519081900360200190f35b6100f76105d4565b6100f7600480360360208110156101cd57600080fd5b503560ff16610675565b6100f7600480360360208110156101ed57600080fd5b503562ffffff1661071a565b6100f761085c565b610193610959565b61014a610968565b6100f761097a565b61014a610a66565b610229610a78565b6040805160ff9092168252519081900360200190f35b80620f42408162ffffff161115610286576040805162461bcd60e51b81526020600482015260066024820152654348435f524f60d01b604482015290519081900360640190fd5b61028e610a81565b6001600160a01b031661029f610959565b6001600160a01b0316146102e3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6067805462ffffff8416600160381b810262ffffff60381b199092169190911790915560408051918252517ff95b3e2798060899824a0bebdd89ff5df3d51c51c5d30f5184bd30d7a6b017089181900360200190a15050565b610344610a81565b6001600160a01b0316610355610959565b6001600160a01b031614610399576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166103dd576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610429576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610475576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b61049f610a81565b6001600160a01b03166104b0610959565b6001600160a01b0316146104f4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b63ffffffff8116610536576040805162461bcd60e51b81526020600482015260076024820152664348435f49544960c81b604482015290519081900360640190fd5b6067805463ffffffff8316600160681b810263ffffffff60681b199092169190911790915560408051918252517f0bd5e02c0d6277fdf7c7c72fae10042c4c832b26ea94623a04b79a50a35a217e9181900360200190a150565b606754610100900462ffffff1681565b606754600160681b900463ffffffff1681565b606754600160501b900462ffffff1681565b6034546001600160a01b031690565b6105dc610a81565b6001600160a01b03166105ed610959565b6001600160a01b031614610631576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020610d03833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b61067d610a81565b6001600160a01b031661068e610959565b6001600160a01b0316146106d2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6067805460ff831660ff19909116811790915560408051918252517fa7b4760b38e2a630f3073fcd5119972cbf81bd50e3761f86534a69661caf81109181900360200190a150565b80620f42408162ffffff161115610761576040805162461bcd60e51b81526020600482015260066024820152654348435f524f60d01b604482015290519081900360640190fd5b610769610a81565b6001600160a01b031661077a610959565b6001600160a01b0316146107be576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b60008262ffffff1611610803576040805162461bcd60e51b815260206004820152600860248201526721a421afa4a821a960c11b604482015290519081900360640190fd5b6067805462ffffff8416600160501b810262ffffff60501b199092169190911790915560408051918252517f4757c16c46bedf5171cc1e2c53c99225da1bff2c0a5cb51b0f852909dbae1ebd9181900360200190a15050565b600054610100900460ff16806108755750610875610a85565b80610883575060005460ff16155b6108be5760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff161580156108e9576000805460ff1961ff0019909116610100171660011790555b6108f1610a96565b6067805463ffffff001916630186a0001762ffffff60201b1916613d0960221b1762ffffff60381b1916610c35603b1b1762ffffff60501b1916613d0960541b1763ffffffff60681b191660e1606a1b1790558015610956576000805461ff00191690555b50565b6033546001600160a01b031690565b606754600160201b900462ffffff1681565b6034546001600160a01b03166109bf576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6109c7610a81565b6034546001600160a01b03908116911614610a12576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020610d0383398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b606754600160381b900462ffffff1681565b60675460ff1681565b3390565b6000610a9030610b85565b15905090565b600054610100900460ff1680610aaf5750610aaf610a85565b80610abd575060005460ff16155b610af85760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610b23576000805460ff1961ff0019909116610100171660011790555b610b2b610b8b565b6000610b35610a81565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020610d03833981519152908290a3508015610956576000805461ff001916905550565b3b151590565b600054610100900460ff1680610ba45750610ba4610a85565b80610bb2575060005460ff16155b610bed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610c18576000805460ff1961ff0019909116610100171660011790555b610c20610c34565b8015610956576000805461ff001916905550565b600054610100900460ff1680610c4d5750610c4d610a85565b80610c5b575060005460ff16155b610c965760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610c20576000805460ff1961ff0019909116610100171660011790558015610956576000805461ff00191690555056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122055882c19308d40b97b732e7958992d11c59bf5d54ba495b04d78dc9be82aa0e864736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2Exchange.json b/external/abi/perp/PerpV2Exchange.json new file mode 100644 index 000000000..98e1feae3 --- /dev/null +++ b/external/abi/perp/PerpV2Exchange.json @@ -0,0 +1,729 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2Exchange", + "sourceName": "contracts/Exchange.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "clearingHouse", + "type": "address" + } + ], + "name": "ClearingHouseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "fundingPayment", + "type": "int256" + } + ], + "name": "FundingPaymentSettled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "markTwap", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "indexTwap", + "type": "uint256" + } + ], + "name": "FundingUpdated", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "int256", + "name": "exchangedPositionSize", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "exchangedPositionNotional", + "type": "int256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "openNotional", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "realizedPnl", + "type": "int256" + } + ], + "name": "PositionChanged", + "type": "event" + }, + { + "inputs": [], + "name": "accountBalance", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clearingHouse", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clearingHouseConfig", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getAllPendingFundingPayment", + "outputs": [ + { + "internalType": "int256", + "name": "pendingFundingPayment", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getFundingGrowthGlobalAndTwaps", + "outputs": [ + { + "components": [ + { + "internalType": "int256", + "name": "twPremiumX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "twPremiumDivBySqrtPriceX96", + "type": "int256" + } + ], + "internalType": "struct Funding.Growth", + "name": "fundingGrowthGlobal", + "type": "tuple" + }, + { + "internalType": "uint256", + "name": "markTwap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "indexTwap", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getMaxTickCrossedWithinBlock", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getOpenNotional", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getPendingFundingPayment", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "uint32", + "name": "twapInterval", + "type": "uint32" + } + ], + "name": "getSqrtMarkTwapX96", + "outputs": [ + { + "internalType": "uint160", + "name": "", + "type": "uint160" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getTick", + "outputs": [ + { + "internalType": "int24", + "name": "", + "type": "int24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "marketRegistryArg", + "type": "address" + }, + { + "internalType": "address", + "name": "orderBookArg", + "type": "address" + }, + { + "internalType": "address", + "name": "clearingHouseConfigArg", + "type": "address" + }, + { + "internalType": "address", + "name": "insuranceFundArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "insuranceFund", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "marketRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "orderBook", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "accountBalanceArg", + "type": "address" + } + ], + "name": "setAccountBalance", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "clearingHouseArg", + "type": "address" + } + ], + "name": "setClearingHouse", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "uint24", + "name": "maxTickCrossedWithinBlock", + "type": "uint24" + } + ], + "name": "setMaxTickCrossedWithinBlock", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "settleAllFunding", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "settleFunding", + "outputs": [ + { + "components": [ + { + "internalType": "int256", + "name": "twPremiumX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "twPremiumDivBySqrtPriceX96", + "type": "int256" + } + ], + "internalType": "struct Funding.Growth", + "name": "fundingGrowthGlobal", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "isBaseToQuote", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isExactInput", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isClose", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + }, + { + "components": [ + { + "internalType": "int256", + "name": "twPremiumX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "twPremiumDivBySqrtPriceX96", + "type": "int256" + } + ], + "internalType": "struct Funding.Growth", + "name": "fundingGrowthGlobal", + "type": "tuple" + } + ], + "internalType": "struct Exchange.SwapParams", + "name": "params", + "type": "tuple" + } + ], + "name": "swap", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "deltaAvailableBase", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deltaAvailableQuote", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "exchangedPositionSize", + "type": "int256" + }, + { + "internalType": "int256", + "name": "exchangedPositionNotional", + "type": "int256" + }, + { + "internalType": "int24", + "name": "tick", + "type": "int24" + } + ], + "internalType": "struct Exchange.SwapResponse", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Owed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Owed", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3MintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Delta", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Delta", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3SwapCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506145ee806100206000396000f3fe608060405234801561001057600080fd5b50600436106101545760003560e01c80630af968001461015957806313af403514610177578063199387cc1461018c5780631e81ac331461019f57806329386b7b146101bf578063449323d8146101df57806348fa72d5146101f257806350709710146102125780635eb8a4e6146102325780636c8381f814610245578063715018a61461024d578063776af5ba1461025557806380f57f111461025d5780638da5cb5b1461027d57806399e4a77114610285578063b0a1c1c414610298578063b7902303146102a0578063b7c7ec6a146102a8578063bbe4f6db146102bb578063bc5920ba146102ce578063c2075b21146102d6578063cb379aa2146102de578063d3487997146102f1578063eb9b912e14610304578063ecb96fe614610317578063f8c8765e1461031f578063f9cbb47114610332578063fa461e3314610354575b600080fd5b610161610367565b60405161016e9190613e92565b60405180910390f35b61018a610185366004613897565b610376565b005b61018a61019a366004613897565b6104d1565b6101b26101ad3660046138cf565b61057f565b60405161016e91906142c8565b6101d26101cd366004613897565b610858565b60405161016e9190614400565b61018a6101ed366004613897565b61087c565b610205610200366004613cd0565b610951565b60405161016e91906143c3565b610225610220366004613897565b610f42565b60405161016e9190614040565b61018a610240366004613962565b610fce565b61016161115a565b61018a611169565b61016161120a565b61027061026b366004613897565b611219565b60405161016e919061404e565b6101616112e8565b61016161029336600461398f565b6112f7565b61016161138b565b61016161139a565b6102706102b63660046138cf565b6113a9565b6101616102c9366004613897565b6114c4565b61018a611545565b610161611631565b6102706102ec3660046138cf565b611640565b61018a6102ff366004613b56565b611780565b61018a610312366004613897565b611828565b6101616118e6565b61018a61032d366004613907565b6118f5565b610345610340366004613897565b611a6b565b60405161016e939291906142d6565b61018a610362366004613b56565b611d22565b6068546001600160a01b031681565b61037e611ec2565b6001600160a01b031661038f6112e8565b6001600160a01b0316146103d3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610417576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610463576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156104af576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6104d9611ec2565b6001600160a01b03166104ea6112e8565b6001600160a01b03161461052e576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661055d5760405162461bcd60e51b815260040161055490614120565b60405180910390fd5b609c80546001600160a01b0319166001600160a01b0392909216919091179055565b6105876136cf565b60008061059384611a6b565b609c546040516331997f7b60e11b815293965091945092506000916001600160a01b0390911690636332fef6906105d09089908990600401613ea6565b60606040518083038186803b1580156105e857600080fd5b505afa1580156105fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106209190613ba6565b9050600061063987878460000151856040015189611ec6565b905080156106fa57609c5460405163beb56a7560e01b81526001600160a01b039091169063beb56a759061067c908a906000908190819088820390600401613ec0565b600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f733330d4aad1a878654bf888817b79bc6478013399be29fa3b8845c81305249e836040516106f1919061404e565b60405180910390a35b6001600160a01b038616600090815260a1602052604090205461071b611f6c565b146107e7576001600160a01b038616600090815260a260205260409020610740611f6c565b86516020808901516001600160a01b038b16600090815260a1909252604090912060018501919091559083555561077687610f42565b6001600160a01b0388166000818152609f602052604090819020805460029490940b62ffffff1662ffffff199094169390931790925590517f54e4482fe1d38392effe5d53f0e9e72f60221a75a10cea7abbb684bfb03519bf906107dd9088908890614410565b60405180910390a2505b609c548551604051632e4586c360e01b81526001600160a01b0390921691632e4586c39161081b918b918b91600401613f15565b600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50505050505050505b92915050565b6001600160a01b038116600090815260a3602052604090205462ffffff165b919050565b610884611ec2565b6001600160a01b03166108956112e8565b6001600160a01b0316146108d9576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6108eb816001600160a01b0316611f70565b6109075760405162461bcd60e51b815260040161055490614181565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6109596136e9565b6068546001600160a01b031661096d611ec2565b6001600160a01b0316146109935760405162461bcd60e51b8152600401610554906140dd565b609c54825160208401516040516346d12ddf60e11b81526000936001600160a01b031692638da25bbe926109c992600401613ea6565b60206040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190613b1b565b90506000808212610a2b576000610a2e565b60015b90506000821580610a46575084604001511515821515145b159050846080015115610b9257610a608560200151611f76565b80610a755750610a7585602001518385611f8e565b15610b8d5784516001600160a01b03908116600090815260a460209081526040808320828a015190941683529290522054610aae611f6c565b1415610acc5760405162461bcd60e51b8152600401610554906140fe565b610ad4611f6c565b85516001600160a01b03908116600090815260a460209081526040808320828b01518516845282529182902093909355609d548151633fa7ffc760e01b81529151610b87949190931692633fa7ffc7926004808201939291829003018186803b158015610b4057600080fd5b505afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190613e18565b610b8185611ff4565b90612017565b60a08601525b610bc2565b8015610bc257610ba58560200151611f76565b15610bc25760405162461bcd60e51b815260040161055490614227565b6000610bd6866000015187602001516113a9565b90506000610be38761202c565b90508660800151158015610bf45750825b15610c2857610c0b87602001518260c001516123eb565b15610c285760405162461bcd60e51b81526004016105549061415f565b609c5487516020890151604084015160808501516001600160a01b039094169363beb56a7593929190610c6990610c5e90612462565b6060880151906124aa565b60006040518663ffffffff1660e01b8152600401610c8b959493929190613ec0565b600060405180830381600087803b158015610ca557600080fd5b505af1158015610cb9573d6000803e3d6000fd5b505050506000610cd1886000015189602001516113a9565b905060008415610e18576000610cfc8460000151670de0b6b3a7640000610cf78b611ff4565b61250f565b905060008a60400151610d1e57610d168560200151612462565b600003610d2b565b610d2b8560200151612462565b9050670de0b6b3a76400008211610d6d576000610d59610d54610d4d85612462565b89906125be565b612667565b9050610d65828261267b565b935050610da3565b6000610d93610d7b84612462565b610d8d84670de0b6b3a76400006125be565b906126e0565b9050610d9f878261267b565b9350505b8215610e1557609c548b5160208d015160405163f0c7979760e01b81526001600160a01b039093169263f0c7979792610de29290918890600401613f15565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505b50505b609c54609e5460a08501516001600160a01b03928316926337724702921690610e4090612462565b6040518363ffffffff1660e01b8152600401610e5d929190613fdd565b600060405180830381600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b5050505088602001516001600160a01b031689600001516001600160a01b03167fd50383521b86aced5c8a23f3e6249ed36a8419e9408218e2d712a69ec3710be08560400151866060015187608001518787604051610eee959493929190614077565b60405180910390a36040518060a00160405280846000015181526020018460200151815260200184604001518152602001846060015181526020018460c0015160020b815250975050505050505050919050565b60675460405163bbe4f6db60e01b8152600091610852916001600160a01b039091169063bbe4f6db90610f79908690600401613e92565b60206040518083038186803b158015610f9157600080fd5b505afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc991906138b3565b612798565b610fd6611ec2565b6001600160a01b0316610fe76112e8565b6001600160a01b03161461102b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61103d826001600160a01b0316611f70565b6110595760405162461bcd60e51b8152600401610554906141c7565b60675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db9061108a908690600401613e92565b60206040518083038186803b1580156110a257600080fd5b505afa1580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da91906138b3565b6001600160a01b031614156111015760405162461bcd60e51b81526004016105549061409a565b620d89e862ffffff821611156111295760405162461bcd60e51b8152600401610554906141a3565b6001600160a01b0391909116600090815260a360205260409020805462ffffff191662ffffff909216919091179055565b6034546001600160a01b031690565b611171611ec2565b6001600160a01b03166111826112e8565b6001600160a01b0316146111c6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020614526833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b609b546001600160a01b031681565b609c546040516357ba739b60e11b815260009182916001600160a01b039091169063af74e7369061124e908690600401613e92565b60006040518083038186803b15801561126657600080fd5b505afa15801561127a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112a291908101906139bc565b905060005b81518110156112e1576112d76112d0858484815181106112c357fe5b6020026020010151611640565b849061267b565b92506001016112a7565b5050919050565b6033546001600160a01b031690565b60675460405163bbe4f6db60e01b8152600091611384916001600160a01b039091169063bbe4f6db9061132e908790600401613e92565b60206040518083038186803b15801561134657600080fd5b505afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e91906138b3565b83612818565b9392505050565b609c546001600160a01b031681565b609e546001600160a01b031681565b609c546040516303d2da2d60e51b8152600091611384916001600160a01b0390911690637a5b45a0906113e29087908790600401613ea6565b60206040518083038186803b1580156113fa57600080fd5b505afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613b1b565b609b5460405163bf0b1abb60e01b81526114be916001600160a01b03169063bf0b1abb906114699089908990600090600401613ef1565b60206040518083038186803b15801561148157600080fd5b505afa158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b99190613b1b565b612462565b9061267b565b60675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db906114f5908590600401613e92565b60206040518083038186803b15801561150d57600080fd5b505afa158015611521573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085291906138b3565b6034546001600160a01b031661158a576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b611592611ec2565b6034546001600160a01b039081169116146115dd576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061452683398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b609d546001600160a01b031681565b60008061164c83611a6b565b5050609c546040516331997f7b60e11b81529192506000916001600160a01b0390911690636332fef6906116869088908890600401613ea6565b60606040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d69190613ba6565b609b546040516347b52fb760e01b81529192506000916001600160a01b03909116906347b52fb79061171090899089908890600401613f39565b60206040518083038186803b15801561172857600080fd5b505afa15801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613b1b565b9050611776826000015183604001518584612971565b9695505050505050565b609b546001600160a01b0316611794611ec2565b6001600160a01b0316146117ba5760405162461bcd60e51b8152600401610554906142a9565b60685460405163d348799760e01b81526001600160a01b039091169063d3487997906117f0908790879087908790600401614057565b600060405180830381600087803b15801561180a57600080fd5b505af115801561181e573d6000803e3d6000fd5b5050505050505050565b609c546040516357ba739b60e11b81526000916001600160a01b03169063af74e73690611859908590600401613e92565b60006040518083038186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118ad91908101906139bc565b905060005b81518110156118e1576118d8838383815181106118cb57fe5b602002602001015161057f565b506001016118b2565b505050565b6067546001600160a01b031681565b600054610100900460ff168061190e575061190e6129a2565b8061191c575060005460ff16155b6119575760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611982576000805460ff1961ff0019909116610100171660011790555b61198b856129b3565b61199d846001600160a01b0316611f70565b6119b95760405162461bcd60e51b81526004016105549061413f565b6119cb836001600160a01b0316611f70565b6119e75760405162461bcd60e51b8152600401610554906141e7565b6119f9826001600160a01b0316611f70565b611a155760405162461bcd60e51b815260040161055490614288565b609e80546001600160a01b038085166001600160a01b031992831617909255609b8054878416908316179055609d8054928616929091169190911790558015611a64576000805461ff00191690555b5050505050565b611a736136cf565b6001600160a01b03808316600090815260a260209081526040808320609d5482516303c1d5df60e41b8152925194958695929486949290911692633c1d5df0926004808201939291829003018186803b158015611acf57600080fd5b505afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613e34565b6001600160a01b038716600090815260a06020526040902054909150611b2f57506000611b8f565b6001600160a01b038616600090815260a06020526040902054611b5a90611b54611f6c565b90612aa7565b8163ffffffff161115611b8f576001600160a01b038616600090815260a06020526040902054611b8c90611b54611f6c565b90505b6000611bac611b9e88846112f7565b6001600160a01b0316612b04565b9050611bb781612b1e565b604051631208064760e01b81529095506001600160a01b03881690631208064790611be690859060040161441e565b60206040518083038186803b158015611bfe57600080fd5b505afa158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190613b1b565b6001600160a01b038816600090815260a1602052604090205490945080611c5b611f6c565b14158015611c6857508015155b15611cfc576000611ca5611c816114b984611b54611f6c565b611c9f611c906114b98a612b37565b611c9987612462565b906124aa565b906125be565b8554909150611cb4908261267b565b8852611cf1611ce6611cd8611cca8c60006112f7565b6001600160a01b0316612462565b610d8d84600160601b6125be565b60018701549061267b565b602089015250611d17565b60408051808201909152845481526001850154602082015296505b505050509193909250565b6000611d2c611ec2565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da191906138b3565b60675460405163bbe4f6db60e01b81529192506001600160a01b03169063bbe4f6db90611dd2908490600401613e92565b60206040518083038186803b158015611dea57600080fd5b505afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2291906138b3565b6001600160a01b0316826001600160a01b031614611e525760405162461bcd60e51b815260040161055490614207565b60685460405163fa461e3360e01b81526001600160a01b039091169063fa461e3390611e88908990899089908990600401614057565b600060405180830381600087803b158015611ea257600080fd5b505af1158015611eb6573d6000803e3d6000fd5b50505050505050505050565b3390565b609b54604051633fe1339b60e11b815260009182916001600160a01b0390911690637fc2673690611eff908a908a908890600401613f39565b602060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f519190613b1b565b9050611f5f85858584612971565b9150505b95945050505050565b4290565b3b151590565b600080611f8283610f42565b905061138483826123eb565b6000806040518060a00160405280866001600160a01b03168152602001851515158152602001851515158152602001611fc685611ff4565b8152602001611fd58787612b50565b6001600160a01b031690529050611f6385611fef83612ba3565b6123eb565b600080821361200e5761200982600003612d4b565b610852565b61085282612d4b565b6000611384838362ffffff16620f424061250f565b61203461371b565b606754602083015160405163033e16f360e21b81526000926001600160a01b031691630cf85bcc916120699190600401613e92565b60806040518083038186803b15801561208157600080fd5b505afa158015612095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b99190613bfa565b90506000806120df856040015186606001518760a0015186602001518760400151612da2565b609b5460408051610100810182526020808b01516001600160a01b0390811683528b8401511515828401526001838501526060830186905260c0808d015182166080850152918a015162ffffff90811660a08501528a850151169183019190915260e0808c0151908301529151631477e1bf60e31b815294965092945060009391169163a3bf0df89161217591906004016142f5565b606060405180830381600087803b15801561218f57600080fd5b505af11580156121a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c79190613c77565b905060006122c36040518060e0016040528087600001516001600160a01b03168152602001606860009054906101000a90046001600160a01b03166001600160a01b031681526020018960400151151581526020018960600151151581526020018681526020018960c001516001600160a01b031681526020016040518060a001604052808b600001516001600160a01b031681526020018b602001516001600160a01b0316815260200189600001516001600160a01b03168152602001896040015162ffffff16815260200186602001518152506040516020016122ac9190614379565b604051602081830303815290604052815250612dee565b9050600080886040015115612302576122e96114b9846000015189604001516000612fc6565b60000391506122fb8360200151612462565b905061232c565b825161230d90612462565b91506123266114b9846020015189604001516000612fc6565b60000390505b6020808a01516001600160a01b0316600090815260a0909152604090205461237557612356611f6c565b6020808b01516001600160a01b0316600090815260a090915260409020555b6040518060e0016040528061238984611ff4565b81526020016123ad6123a86123a18860200151612462565b85906124aa565b611ff4565b81526020018381526020018281526020018560200151815260200185604001518152602001856000015160020b815250975050505050505050919050565b6001600160a01b038216600090815260a3602052604081205462ffffff1680612418576000915050610852565b6001600160a01b0384166000908152609f6020526040902054600290810b90828201908383039081810b9087900b128061245757508160020b8660020b135b979650505050505050565b6000600160ff1b82106124a65760405162461bcd60e51b815260040180806020018281038252602881526020018061456d6028913960400191505060405180910390fd5b5090565b60008183038183128015906124bf5750838113155b806124d457506000831280156124d457508381135b6113845760405162461bcd60e51b81526004018080602001828103825260248152602001806145956024913960400191505060405180910390fd5b6000808060001985870986860292508281109083900303905080612545576000841161253a57600080fd5b508290049050611384565b80841161255157600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000826125cd57506000610852565b826000191480156125e15750600160ff1b82145b1561261d5760405162461bcd60e51b81526004018080602001828103825260278152602001806145466027913960400191505060405180910390fd5b8282028284828161262a57fe5b05146113845760405162461bcd60e51b81526004018080602001828103825260278152602001806145466027913960400191505060405180910390fd5b600061085282670de0b6b3a76400006126e0565b60008282018183128015906126905750838112155b806126a557506000831280156126a557508381125b6113845760405162461bcd60e51b81526004018080602001828103825260218152602001806144b66021913960400191505060405180910390fd5b600081612734576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b816000191480156127485750600160ff1b83145b156127845760405162461bcd60e51b81526004018080602001828103825260218152602001806145056021913960400191505060405180910390fd5b600082848161278f57fe5b05949350505050565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156127d357600080fd5b505afa1580156127e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280b9190613d85565b5093979650505050505050565b6000600a8263ffffffff161015612839576128328361300d565b9050610852565b604080516002808252606082018352600092602083019080368337019050509050828160008151811061286857fe5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061289157fe5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0386169063883bdbfd906128d5908590600401613ff6565b60006040518083038186803b1580156128ed57600080fd5b505afa158015612901573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129299190810190613a54565b509050611f638463ffffffff168260008151811061294357fe5b60200260200101518360018151811061295857fe5b60200260200101510360060b8161296b57fe5b0561308d565b600080612983868560000151876133b4565b905061299662015180610d8d858461267b565b9150505b949350505050565b60006129ad30611f70565b15905090565b600054610100900460ff16806129cc57506129cc6129a2565b806129da575060005460ff16155b612a155760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff16158015612a40576000805460ff1961ff0019909116610100171660011790555b612a486133d2565b612a5a826001600160a01b0316611f70565b612a765760405162461bcd60e51b8152600401610554906140bb565b606780546001600160a01b0319166001600160a01b0384161790558015612aa3576000805461ff00191690555b5050565b600082821115612afe576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006108526001600160a01b03831680600160601b61250f565b600061085282670de0b6b3a7640000600160601b61250f565b600061085282600160601b670de0b6b3a764000061250f565b6001600160a01b0382166000908152609f602090815260408083205460a390925282205460029190910b9062ffffff168284612b9157600182840303612b98565b8183016001015b90506117768161308d565b606754815160405163033e16f360e21b815260009283926001600160a01b0390911691630cf85bcc91612bd891600401613e92565b60806040518083038186803b158015612bf057600080fd5b505afa158015612c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c289190613bfa565b90506000816020015190506000826040015190506000612c578660200151876040015188606001518686612da2565b609b5460408051610100810182528a516001600160a01b0390811682526020808d01511515818401526000838501819052606084018790526080808f015184169085015262ffffff808c1660a08601528a1660c08501528451808601865281815291820181905260e08401919091529251631477e1bf60e31b815294965091945091169163a3bf0df891612ced916004016142f5565b606060405180830381600087803b158015612d0757600080fd5b505af1158015612d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3f9190613c77565b51979650505050505050565b6000808212156124a6576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b600080612db287878787876134c2565b915086612dc757612dc285612462565b612dd0565b612dd082612462565b905085612de05780600003612de2565b805b90509550959350505050565b612df66136cf565b6000826080015111612e1a5760405162461bcd60e51b815260040161055490614249565b60008260600151612e3a57612e328360800151612462565b600003612e47565b612e478360800151612462565b905060008084600001516001600160a01b031663128acb0886602001518760400151868960a001516001600160a01b0316600014612e89578960a00151612eb3565b8960400151612eac5773fffd8963efd1fc6a506488495d951d5263988d25612eb3565b6401000276a45b8a60c001516040518663ffffffff1660e01b8152600401612ed8959493929190613f5e565b6040805180830381600087803b158015612ef157600080fd5b505af1158015612f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f299190613b33565b91509150600080612f3984611ff4565b612f4284611ff4565b915091506000876040015115158860600151151514612f615781612f63565b825b90508760600151158015612f82575060a08801516001600160a01b0316155b15612faa5787608001518114612faa5760405162461bcd60e51b815260040161055490614268565b5060408051808201909152918252602082015295945050505050565b600081612ff157612fec84612fe3620f424062ffffff8716612aa7565b620f424061250f565b61299a565b61299a84620f42406130088162ffffff8816612aa7565b61350b565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561304857600080fd5b505afa15801561305c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130809190613d85565b5094979650505050505050565b60008060008360020b126130a4578260020b6130ac565b8260020b6000035b9050620d89e88111156130ea576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b6000600182166130fe57600160801b613110565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561313a576ffff97272373d413259a46990580e213a0260801c5b6004821615613159576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613178576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613197576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156131b6576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156131d5576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156131f4576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613214576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613234576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613254576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613274576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613294576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156132b4576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156132d4576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156132f4576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613315576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613335576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613354576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613371576b048a170391f7dc42444e8fa20260801c5b60008460020b131561338c57806000198161338857fe5b0490505b600160201b81061561339f5760016133a2565b60005b60ff16602082901c0192505050919050565b600061299a600160601b610d8d6133cb86866124aa565b87906125be565b600054610100900460ff16806133eb57506133eb6129a2565b806133f9575060005460ff16155b6134345760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff1615801561345f576000805460ff1961ff0019909116610100171660011790555b613467613545565b6000613471611ec2565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020614526833981519152908290a35080156134bf576000805461ff00191690555b50565b600085156134f357846134e0576134db84846001612fc6565b6134ec565b6134ec84836001612fc6565b9050611f63565b846134fe5783611776565b61177684838560016135ee565b600061351884848461250f565b90506000828061352457fe5b848609111561138457600019811061353b57600080fd5b6001019392505050565b600054610100900460ff168061355e575061355e6129a2565b8061356c575060005460ff16155b6135a75760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff161580156135d2576000805460ff1961ff0019909116610100171660011790555b6135da61362f565b80156134bf576000805461ff001916905550565b6000806000836135ff578585613602565b84865b90925090506124578761361d620f424062ffffff8616612aa7565b613008620f424062ffffff8616612aa7565b600054610100900460ff168061364857506136486129a2565b80613656575060005460ff16155b6136915760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff161580156135da576000805460ff1961ff00199091166101001716600117905580156134bf576000805461ff001916905550565b604051806040016040528060008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600060020b81525090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060020b81525090565b80356108778161446f565b600082601f830112613776578081fd5b8151602061378b61378683614452565b61442f565b82815281810190858301838502870184018810156137a7578586fd5b855b858110156137ce5781516137bc8161446f565b845292840192908401906001016137a9565b5090979650505050505050565b803561087781614484565b60008083601f8401126137f7578182fd5b5081356001600160401b0381111561380d578182fd5b60208301915083602082850101111561382557600080fd5b9250929050565b8051600281900b811461087757600080fd5b60006040828403121561384f578081fd5b604080519081016001600160401b038111828210171561386b57fe5b604052823581526020928301359281019290925250919050565b805161ffff8116811461087757600080fd5b6000602082840312156138a8578081fd5b81356113848161446f565b6000602082840312156138c4578081fd5b81516113848161446f565b600080604083850312156138e1578081fd5b82356138ec8161446f565b915060208301356138fc8161446f565b809150509250929050565b6000806000806080858703121561391c578182fd5b84356139278161446f565b935060208501356139378161446f565b925060408501356139478161446f565b915060608501356139578161446f565b939692955090935050565b60008060408385031215613974578182fd5b823561397f8161446f565b915060208301356138fc81614492565b600080604083850312156139a1578182fd5b82356139ac8161446f565b915060208301356138fc816144a3565b600060208083850312156139ce578182fd5b82516001600160401b038111156139e3578283fd5b8301601f810185136139f3578283fd5b8051613a0161378682614452565b8181528381019083850185840285018601891015613a1d578687fd5b8694505b83851015613a48578051613a348161446f565b835260019490940193918501918501613a21565b50979650505050505050565b60008060408385031215613a66578182fd5b82516001600160401b0380821115613a7c578384fd5b818501915085601f830112613a8f578384fd5b81516020613a9f61378683614452565b82815281810190858301838502870184018b1015613abb578889fd5b8896505b84871015613aeb5780518060060b8114613ad757898afd5b835260019690960195918301918301613abf565b5091880151919650909350505080821115613b04578283fd5b50613b1185828601613766565b9150509250929050565b600060208284031215613b2c578081fd5b5051919050565b60008060408385031215613b45578182fd5b505080516020909101519092909150565b60008060008060608587031215613b6b578182fd5b843593506020850135925060408501356001600160401b03811115613b8e578283fd5b613b9a878288016137e6565b95989497509550505050565b600060608284031215613bb7578081fd5b604051606081016001600160401b0381118282101715613bd357fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600060808284031215613c0b578081fd5b604051608081016001600160401b0381118282101715613c2757fe5b6040528251613c358161446f565b81526020830151613c4581614492565b60208201526040830151613c5881614492565b60408201526060830151613c6b81614492565b60608201529392505050565b600060608284031215613c88578081fd5b604051606081016001600160401b0381118282101715613ca457fe5b604052613cb08361382c565b815260208301516020820152604083015160408201528091505092915050565b60006101208284031215613ce2578081fd5b60405161010081016001600160401b0381118282101715613cff57fe5b604052613d0b8361375b565b8152613d196020840161375b565b6020820152613d2a604084016137db565b6040820152613d3b606084016137db565b6060820152613d4c608084016137db565b608082015260a083013560a0820152613d6760c0840161375b565b60c0820152613d798460e0850161383e565b60e08201529392505050565b600080600080600080600060e0888a031215613d9f578485fd5b8751613daa8161446f565b9650613db86020890161382c565b9550613dc660408901613885565b9450613dd460608901613885565b9350613de260808901613885565b925060a088015160ff81168114613df7578283fd5b60c0890151909250613e0881614484565b8091505092959891949750929550565b600060208284031215613e29578081fd5b815161138481614492565b600060208284031215613e45578081fd5b8151611384816144a3565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b80518252602090810151910152565b62ffffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038481168252831660208201526080810161299a6040830184613e7a565b600060018060a01b038088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b82811015613fb25785810182015185820160c001528101613f96565b82811115613fc3578360c084870101525b5050601f01601f19169190910160c0019695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561403457835163ffffffff1683529284019291840191600101614012565b50909695505050505050565b60029190910b815260200190565b90815260200190565b600085825284602083015260606040830152611776606083018486613e50565b948552602085019390935260408401919091526060830152608082015260a00190565b60208082526007908201526645585f42544e4560c81b604082015260600190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526008908201526745585f414f504c4f60c01b604082015260600190565b6020808252600590820152640455f4142360dc1b604082015260600190565b602080825260069082015265455f4f424e4360d01b604082015260600190565b60208082526008908201526745585f4f5049415360c01b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b6020808252600a908201526922ac2fa6aa21a627a7a960b11b604082015260600190565b60208082526006908201526545585f414e4360d01b604082015260600190565b602080825260069082015265455f43484e4360d01b604082015260600190565b60208082526006908201526522ac2fa321ab60d11b604082015260600190565b60208082526008908201526745585f4f5049425360c01b604082015260600190565b60208082526005908201526455425f5a4960d81b604082015260600190565b60208082526006908201526555425f554f4160d01b604082015260600190565b602080825260079082015266455f4946414e4360c81b604082015260600190565b60208082526005908201526422afa727a160d91b604082015260600190565b604081016108528284613e7a565b608081016142e48286613e7a565b604082019390935260600152919050565b60006101208201905060018060a01b03808451168352602084015115156020840152604084015115156040840152606084015160608401528060808501511660808401525060a083015161434c60a0840182613e89565b5060c083015161435f60c0840182613e89565b5060e083015161437260e0840182613e7a565b5092915050565b81516001600160a01b0390811682526020808401518216908301526040808401519091169082015260608083015162ffffff16908201526080918201519181019190915260a00190565b600060a08201905082518252602083015160208301526040830151604083015260608301516060830152608083015160020b608083015292915050565b62ffffff91909116815260200190565b918252602082015260400190565b63ffffffff91909116815260200190565b6040518181016001600160401b038111828210171561444a57fe5b604052919050565b60006001600160401b0382111561446557fe5b5060209081020190565b6001600160a01b03811681146134bf57600080fd5b80151581146134bf57600080fd5b62ffffff811681146134bf57600080fd5b63ffffffff811681146134bf57600080fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212209136ee2af7268b353383abbb544bf5d36d579840d84fa6bd01e2fd2b8b54b97b64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101545760003560e01c80630af968001461015957806313af403514610177578063199387cc1461018c5780631e81ac331461019f57806329386b7b146101bf578063449323d8146101df57806348fa72d5146101f257806350709710146102125780635eb8a4e6146102325780636c8381f814610245578063715018a61461024d578063776af5ba1461025557806380f57f111461025d5780638da5cb5b1461027d57806399e4a77114610285578063b0a1c1c414610298578063b7902303146102a0578063b7c7ec6a146102a8578063bbe4f6db146102bb578063bc5920ba146102ce578063c2075b21146102d6578063cb379aa2146102de578063d3487997146102f1578063eb9b912e14610304578063ecb96fe614610317578063f8c8765e1461031f578063f9cbb47114610332578063fa461e3314610354575b600080fd5b610161610367565b60405161016e9190613e92565b60405180910390f35b61018a610185366004613897565b610376565b005b61018a61019a366004613897565b6104d1565b6101b26101ad3660046138cf565b61057f565b60405161016e91906142c8565b6101d26101cd366004613897565b610858565b60405161016e9190614400565b61018a6101ed366004613897565b61087c565b610205610200366004613cd0565b610951565b60405161016e91906143c3565b610225610220366004613897565b610f42565b60405161016e9190614040565b61018a610240366004613962565b610fce565b61016161115a565b61018a611169565b61016161120a565b61027061026b366004613897565b611219565b60405161016e919061404e565b6101616112e8565b61016161029336600461398f565b6112f7565b61016161138b565b61016161139a565b6102706102b63660046138cf565b6113a9565b6101616102c9366004613897565b6114c4565b61018a611545565b610161611631565b6102706102ec3660046138cf565b611640565b61018a6102ff366004613b56565b611780565b61018a610312366004613897565b611828565b6101616118e6565b61018a61032d366004613907565b6118f5565b610345610340366004613897565b611a6b565b60405161016e939291906142d6565b61018a610362366004613b56565b611d22565b6068546001600160a01b031681565b61037e611ec2565b6001600160a01b031661038f6112e8565b6001600160a01b0316146103d3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610417576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610463576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156104af576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6104d9611ec2565b6001600160a01b03166104ea6112e8565b6001600160a01b03161461052e576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661055d5760405162461bcd60e51b815260040161055490614120565b60405180910390fd5b609c80546001600160a01b0319166001600160a01b0392909216919091179055565b6105876136cf565b60008061059384611a6b565b609c546040516331997f7b60e11b815293965091945092506000916001600160a01b0390911690636332fef6906105d09089908990600401613ea6565b60606040518083038186803b1580156105e857600080fd5b505afa1580156105fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106209190613ba6565b9050600061063987878460000151856040015189611ec6565b905080156106fa57609c5460405163beb56a7560e01b81526001600160a01b039091169063beb56a759061067c908a906000908190819088820390600401613ec0565b600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f733330d4aad1a878654bf888817b79bc6478013399be29fa3b8845c81305249e836040516106f1919061404e565b60405180910390a35b6001600160a01b038616600090815260a1602052604090205461071b611f6c565b146107e7576001600160a01b038616600090815260a260205260409020610740611f6c565b86516020808901516001600160a01b038b16600090815260a1909252604090912060018501919091559083555561077687610f42565b6001600160a01b0388166000818152609f602052604090819020805460029490940b62ffffff1662ffffff199094169390931790925590517f54e4482fe1d38392effe5d53f0e9e72f60221a75a10cea7abbb684bfb03519bf906107dd9088908890614410565b60405180910390a2505b609c548551604051632e4586c360e01b81526001600160a01b0390921691632e4586c39161081b918b918b91600401613f15565b600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50505050505050505b92915050565b6001600160a01b038116600090815260a3602052604090205462ffffff165b919050565b610884611ec2565b6001600160a01b03166108956112e8565b6001600160a01b0316146108d9576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6108eb816001600160a01b0316611f70565b6109075760405162461bcd60e51b815260040161055490614181565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6109596136e9565b6068546001600160a01b031661096d611ec2565b6001600160a01b0316146109935760405162461bcd60e51b8152600401610554906140dd565b609c54825160208401516040516346d12ddf60e11b81526000936001600160a01b031692638da25bbe926109c992600401613ea6565b60206040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190613b1b565b90506000808212610a2b576000610a2e565b60015b90506000821580610a46575084604001511515821515145b159050846080015115610b9257610a608560200151611f76565b80610a755750610a7585602001518385611f8e565b15610b8d5784516001600160a01b03908116600090815260a460209081526040808320828a015190941683529290522054610aae611f6c565b1415610acc5760405162461bcd60e51b8152600401610554906140fe565b610ad4611f6c565b85516001600160a01b03908116600090815260a460209081526040808320828b01518516845282529182902093909355609d548151633fa7ffc760e01b81529151610b87949190931692633fa7ffc7926004808201939291829003018186803b158015610b4057600080fd5b505afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190613e18565b610b8185611ff4565b90612017565b60a08601525b610bc2565b8015610bc257610ba58560200151611f76565b15610bc25760405162461bcd60e51b815260040161055490614227565b6000610bd6866000015187602001516113a9565b90506000610be38761202c565b90508660800151158015610bf45750825b15610c2857610c0b87602001518260c001516123eb565b15610c285760405162461bcd60e51b81526004016105549061415f565b609c5487516020890151604084015160808501516001600160a01b039094169363beb56a7593929190610c6990610c5e90612462565b6060880151906124aa565b60006040518663ffffffff1660e01b8152600401610c8b959493929190613ec0565b600060405180830381600087803b158015610ca557600080fd5b505af1158015610cb9573d6000803e3d6000fd5b505050506000610cd1886000015189602001516113a9565b905060008415610e18576000610cfc8460000151670de0b6b3a7640000610cf78b611ff4565b61250f565b905060008a60400151610d1e57610d168560200151612462565b600003610d2b565b610d2b8560200151612462565b9050670de0b6b3a76400008211610d6d576000610d59610d54610d4d85612462565b89906125be565b612667565b9050610d65828261267b565b935050610da3565b6000610d93610d7b84612462565b610d8d84670de0b6b3a76400006125be565b906126e0565b9050610d9f878261267b565b9350505b8215610e1557609c548b5160208d015160405163f0c7979760e01b81526001600160a01b039093169263f0c7979792610de29290918890600401613f15565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505b50505b609c54609e5460a08501516001600160a01b03928316926337724702921690610e4090612462565b6040518363ffffffff1660e01b8152600401610e5d929190613fdd565b600060405180830381600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b5050505088602001516001600160a01b031689600001516001600160a01b03167fd50383521b86aced5c8a23f3e6249ed36a8419e9408218e2d712a69ec3710be08560400151866060015187608001518787604051610eee959493929190614077565b60405180910390a36040518060a00160405280846000015181526020018460200151815260200184604001518152602001846060015181526020018460c0015160020b815250975050505050505050919050565b60675460405163bbe4f6db60e01b8152600091610852916001600160a01b039091169063bbe4f6db90610f79908690600401613e92565b60206040518083038186803b158015610f9157600080fd5b505afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc991906138b3565b612798565b610fd6611ec2565b6001600160a01b0316610fe76112e8565b6001600160a01b03161461102b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61103d826001600160a01b0316611f70565b6110595760405162461bcd60e51b8152600401610554906141c7565b60675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db9061108a908690600401613e92565b60206040518083038186803b1580156110a257600080fd5b505afa1580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da91906138b3565b6001600160a01b031614156111015760405162461bcd60e51b81526004016105549061409a565b620d89e862ffffff821611156111295760405162461bcd60e51b8152600401610554906141a3565b6001600160a01b0391909116600090815260a360205260409020805462ffffff191662ffffff909216919091179055565b6034546001600160a01b031690565b611171611ec2565b6001600160a01b03166111826112e8565b6001600160a01b0316146111c6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020614526833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b609b546001600160a01b031681565b609c546040516357ba739b60e11b815260009182916001600160a01b039091169063af74e7369061124e908690600401613e92565b60006040518083038186803b15801561126657600080fd5b505afa15801561127a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112a291908101906139bc565b905060005b81518110156112e1576112d76112d0858484815181106112c357fe5b6020026020010151611640565b849061267b565b92506001016112a7565b5050919050565b6033546001600160a01b031690565b60675460405163bbe4f6db60e01b8152600091611384916001600160a01b039091169063bbe4f6db9061132e908790600401613e92565b60206040518083038186803b15801561134657600080fd5b505afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e91906138b3565b83612818565b9392505050565b609c546001600160a01b031681565b609e546001600160a01b031681565b609c546040516303d2da2d60e51b8152600091611384916001600160a01b0390911690637a5b45a0906113e29087908790600401613ea6565b60206040518083038186803b1580156113fa57600080fd5b505afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613b1b565b609b5460405163bf0b1abb60e01b81526114be916001600160a01b03169063bf0b1abb906114699089908990600090600401613ef1565b60206040518083038186803b15801561148157600080fd5b505afa158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b99190613b1b565b612462565b9061267b565b60675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db906114f5908590600401613e92565b60206040518083038186803b15801561150d57600080fd5b505afa158015611521573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085291906138b3565b6034546001600160a01b031661158a576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b611592611ec2565b6034546001600160a01b039081169116146115dd576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061452683398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b609d546001600160a01b031681565b60008061164c83611a6b565b5050609c546040516331997f7b60e11b81529192506000916001600160a01b0390911690636332fef6906116869088908890600401613ea6565b60606040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d69190613ba6565b609b546040516347b52fb760e01b81529192506000916001600160a01b03909116906347b52fb79061171090899089908890600401613f39565b60206040518083038186803b15801561172857600080fd5b505afa15801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613b1b565b9050611776826000015183604001518584612971565b9695505050505050565b609b546001600160a01b0316611794611ec2565b6001600160a01b0316146117ba5760405162461bcd60e51b8152600401610554906142a9565b60685460405163d348799760e01b81526001600160a01b039091169063d3487997906117f0908790879087908790600401614057565b600060405180830381600087803b15801561180a57600080fd5b505af115801561181e573d6000803e3d6000fd5b5050505050505050565b609c546040516357ba739b60e11b81526000916001600160a01b03169063af74e73690611859908590600401613e92565b60006040518083038186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118ad91908101906139bc565b905060005b81518110156118e1576118d8838383815181106118cb57fe5b602002602001015161057f565b506001016118b2565b505050565b6067546001600160a01b031681565b600054610100900460ff168061190e575061190e6129a2565b8061191c575060005460ff16155b6119575760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611982576000805460ff1961ff0019909116610100171660011790555b61198b856129b3565b61199d846001600160a01b0316611f70565b6119b95760405162461bcd60e51b81526004016105549061413f565b6119cb836001600160a01b0316611f70565b6119e75760405162461bcd60e51b8152600401610554906141e7565b6119f9826001600160a01b0316611f70565b611a155760405162461bcd60e51b815260040161055490614288565b609e80546001600160a01b038085166001600160a01b031992831617909255609b8054878416908316179055609d8054928616929091169190911790558015611a64576000805461ff00191690555b5050505050565b611a736136cf565b6001600160a01b03808316600090815260a260209081526040808320609d5482516303c1d5df60e41b8152925194958695929486949290911692633c1d5df0926004808201939291829003018186803b158015611acf57600080fd5b505afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613e34565b6001600160a01b038716600090815260a06020526040902054909150611b2f57506000611b8f565b6001600160a01b038616600090815260a06020526040902054611b5a90611b54611f6c565b90612aa7565b8163ffffffff161115611b8f576001600160a01b038616600090815260a06020526040902054611b8c90611b54611f6c565b90505b6000611bac611b9e88846112f7565b6001600160a01b0316612b04565b9050611bb781612b1e565b604051631208064760e01b81529095506001600160a01b03881690631208064790611be690859060040161441e565b60206040518083038186803b158015611bfe57600080fd5b505afa158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190613b1b565b6001600160a01b038816600090815260a1602052604090205490945080611c5b611f6c565b14158015611c6857508015155b15611cfc576000611ca5611c816114b984611b54611f6c565b611c9f611c906114b98a612b37565b611c9987612462565b906124aa565b906125be565b8554909150611cb4908261267b565b8852611cf1611ce6611cd8611cca8c60006112f7565b6001600160a01b0316612462565b610d8d84600160601b6125be565b60018701549061267b565b602089015250611d17565b60408051808201909152845481526001850154602082015296505b505050509193909250565b6000611d2c611ec2565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da191906138b3565b60675460405163bbe4f6db60e01b81529192506001600160a01b03169063bbe4f6db90611dd2908490600401613e92565b60206040518083038186803b158015611dea57600080fd5b505afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2291906138b3565b6001600160a01b0316826001600160a01b031614611e525760405162461bcd60e51b815260040161055490614207565b60685460405163fa461e3360e01b81526001600160a01b039091169063fa461e3390611e88908990899089908990600401614057565b600060405180830381600087803b158015611ea257600080fd5b505af1158015611eb6573d6000803e3d6000fd5b50505050505050505050565b3390565b609b54604051633fe1339b60e11b815260009182916001600160a01b0390911690637fc2673690611eff908a908a908890600401613f39565b602060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f519190613b1b565b9050611f5f85858584612971565b9150505b95945050505050565b4290565b3b151590565b600080611f8283610f42565b905061138483826123eb565b6000806040518060a00160405280866001600160a01b03168152602001851515158152602001851515158152602001611fc685611ff4565b8152602001611fd58787612b50565b6001600160a01b031690529050611f6385611fef83612ba3565b6123eb565b600080821361200e5761200982600003612d4b565b610852565b61085282612d4b565b6000611384838362ffffff16620f424061250f565b61203461371b565b606754602083015160405163033e16f360e21b81526000926001600160a01b031691630cf85bcc916120699190600401613e92565b60806040518083038186803b15801561208157600080fd5b505afa158015612095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b99190613bfa565b90506000806120df856040015186606001518760a0015186602001518760400151612da2565b609b5460408051610100810182526020808b01516001600160a01b0390811683528b8401511515828401526001838501526060830186905260c0808d015182166080850152918a015162ffffff90811660a08501528a850151169183019190915260e0808c0151908301529151631477e1bf60e31b815294965092945060009391169163a3bf0df89161217591906004016142f5565b606060405180830381600087803b15801561218f57600080fd5b505af11580156121a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c79190613c77565b905060006122c36040518060e0016040528087600001516001600160a01b03168152602001606860009054906101000a90046001600160a01b03166001600160a01b031681526020018960400151151581526020018960600151151581526020018681526020018960c001516001600160a01b031681526020016040518060a001604052808b600001516001600160a01b031681526020018b602001516001600160a01b0316815260200189600001516001600160a01b03168152602001896040015162ffffff16815260200186602001518152506040516020016122ac9190614379565b604051602081830303815290604052815250612dee565b9050600080886040015115612302576122e96114b9846000015189604001516000612fc6565b60000391506122fb8360200151612462565b905061232c565b825161230d90612462565b91506123266114b9846020015189604001516000612fc6565b60000390505b6020808a01516001600160a01b0316600090815260a0909152604090205461237557612356611f6c565b6020808b01516001600160a01b0316600090815260a090915260409020555b6040518060e0016040528061238984611ff4565b81526020016123ad6123a86123a18860200151612462565b85906124aa565b611ff4565b81526020018381526020018281526020018560200151815260200185604001518152602001856000015160020b815250975050505050505050919050565b6001600160a01b038216600090815260a3602052604081205462ffffff1680612418576000915050610852565b6001600160a01b0384166000908152609f6020526040902054600290810b90828201908383039081810b9087900b128061245757508160020b8660020b135b979650505050505050565b6000600160ff1b82106124a65760405162461bcd60e51b815260040180806020018281038252602881526020018061456d6028913960400191505060405180910390fd5b5090565b60008183038183128015906124bf5750838113155b806124d457506000831280156124d457508381135b6113845760405162461bcd60e51b81526004018080602001828103825260248152602001806145956024913960400191505060405180910390fd5b6000808060001985870986860292508281109083900303905080612545576000841161253a57600080fd5b508290049050611384565b80841161255157600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000826125cd57506000610852565b826000191480156125e15750600160ff1b82145b1561261d5760405162461bcd60e51b81526004018080602001828103825260278152602001806145466027913960400191505060405180910390fd5b8282028284828161262a57fe5b05146113845760405162461bcd60e51b81526004018080602001828103825260278152602001806145466027913960400191505060405180910390fd5b600061085282670de0b6b3a76400006126e0565b60008282018183128015906126905750838112155b806126a557506000831280156126a557508381125b6113845760405162461bcd60e51b81526004018080602001828103825260218152602001806144b66021913960400191505060405180910390fd5b600081612734576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b816000191480156127485750600160ff1b83145b156127845760405162461bcd60e51b81526004018080602001828103825260218152602001806145056021913960400191505060405180910390fd5b600082848161278f57fe5b05949350505050565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156127d357600080fd5b505afa1580156127e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280b9190613d85565b5093979650505050505050565b6000600a8263ffffffff161015612839576128328361300d565b9050610852565b604080516002808252606082018352600092602083019080368337019050509050828160008151811061286857fe5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061289157fe5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0386169063883bdbfd906128d5908590600401613ff6565b60006040518083038186803b1580156128ed57600080fd5b505afa158015612901573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129299190810190613a54565b509050611f638463ffffffff168260008151811061294357fe5b60200260200101518360018151811061295857fe5b60200260200101510360060b8161296b57fe5b0561308d565b600080612983868560000151876133b4565b905061299662015180610d8d858461267b565b9150505b949350505050565b60006129ad30611f70565b15905090565b600054610100900460ff16806129cc57506129cc6129a2565b806129da575060005460ff16155b612a155760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff16158015612a40576000805460ff1961ff0019909116610100171660011790555b612a486133d2565b612a5a826001600160a01b0316611f70565b612a765760405162461bcd60e51b8152600401610554906140bb565b606780546001600160a01b0319166001600160a01b0384161790558015612aa3576000805461ff00191690555b5050565b600082821115612afe576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006108526001600160a01b03831680600160601b61250f565b600061085282670de0b6b3a7640000600160601b61250f565b600061085282600160601b670de0b6b3a764000061250f565b6001600160a01b0382166000908152609f602090815260408083205460a390925282205460029190910b9062ffffff168284612b9157600182840303612b98565b8183016001015b90506117768161308d565b606754815160405163033e16f360e21b815260009283926001600160a01b0390911691630cf85bcc91612bd891600401613e92565b60806040518083038186803b158015612bf057600080fd5b505afa158015612c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c289190613bfa565b90506000816020015190506000826040015190506000612c578660200151876040015188606001518686612da2565b609b5460408051610100810182528a516001600160a01b0390811682526020808d01511515818401526000838501819052606084018790526080808f015184169085015262ffffff808c1660a08601528a1660c08501528451808601865281815291820181905260e08401919091529251631477e1bf60e31b815294965091945091169163a3bf0df891612ced916004016142f5565b606060405180830381600087803b158015612d0757600080fd5b505af1158015612d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3f9190613c77565b51979650505050505050565b6000808212156124a6576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b600080612db287878787876134c2565b915086612dc757612dc285612462565b612dd0565b612dd082612462565b905085612de05780600003612de2565b805b90509550959350505050565b612df66136cf565b6000826080015111612e1a5760405162461bcd60e51b815260040161055490614249565b60008260600151612e3a57612e328360800151612462565b600003612e47565b612e478360800151612462565b905060008084600001516001600160a01b031663128acb0886602001518760400151868960a001516001600160a01b0316600014612e89578960a00151612eb3565b8960400151612eac5773fffd8963efd1fc6a506488495d951d5263988d25612eb3565b6401000276a45b8a60c001516040518663ffffffff1660e01b8152600401612ed8959493929190613f5e565b6040805180830381600087803b158015612ef157600080fd5b505af1158015612f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f299190613b33565b91509150600080612f3984611ff4565b612f4284611ff4565b915091506000876040015115158860600151151514612f615781612f63565b825b90508760600151158015612f82575060a08801516001600160a01b0316155b15612faa5787608001518114612faa5760405162461bcd60e51b815260040161055490614268565b5060408051808201909152918252602082015295945050505050565b600081612ff157612fec84612fe3620f424062ffffff8716612aa7565b620f424061250f565b61299a565b61299a84620f42406130088162ffffff8816612aa7565b61350b565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561304857600080fd5b505afa15801561305c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130809190613d85565b5094979650505050505050565b60008060008360020b126130a4578260020b6130ac565b8260020b6000035b9050620d89e88111156130ea576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b6000600182166130fe57600160801b613110565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561313a576ffff97272373d413259a46990580e213a0260801c5b6004821615613159576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613178576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613197576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156131b6576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156131d5576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156131f4576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613214576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613234576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613254576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613274576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613294576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156132b4576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156132d4576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156132f4576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613315576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613335576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613354576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613371576b048a170391f7dc42444e8fa20260801c5b60008460020b131561338c57806000198161338857fe5b0490505b600160201b81061561339f5760016133a2565b60005b60ff16602082901c0192505050919050565b600061299a600160601b610d8d6133cb86866124aa565b87906125be565b600054610100900460ff16806133eb57506133eb6129a2565b806133f9575060005460ff16155b6134345760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff1615801561345f576000805460ff1961ff0019909116610100171660011790555b613467613545565b6000613471611ec2565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020614526833981519152908290a35080156134bf576000805461ff00191690555b50565b600085156134f357846134e0576134db84846001612fc6565b6134ec565b6134ec84836001612fc6565b9050611f63565b846134fe5783611776565b61177684838560016135ee565b600061351884848461250f565b90506000828061352457fe5b848609111561138457600019811061353b57600080fd5b6001019392505050565b600054610100900460ff168061355e575061355e6129a2565b8061356c575060005460ff16155b6135a75760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff161580156135d2576000805460ff1961ff0019909116610100171660011790555b6135da61362f565b80156134bf576000805461ff001916905550565b6000806000836135ff578585613602565b84865b90925090506124578761361d620f424062ffffff8616612aa7565b613008620f424062ffffff8616612aa7565b600054610100900460ff168061364857506136486129a2565b80613656575060005460ff16155b6136915760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff161580156135da576000805460ff1961ff00199091166101001716600117905580156134bf576000805461ff001916905550565b604051806040016040528060008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600060020b81525090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060020b81525090565b80356108778161446f565b600082601f830112613776578081fd5b8151602061378b61378683614452565b61442f565b82815281810190858301838502870184018810156137a7578586fd5b855b858110156137ce5781516137bc8161446f565b845292840192908401906001016137a9565b5090979650505050505050565b803561087781614484565b60008083601f8401126137f7578182fd5b5081356001600160401b0381111561380d578182fd5b60208301915083602082850101111561382557600080fd5b9250929050565b8051600281900b811461087757600080fd5b60006040828403121561384f578081fd5b604080519081016001600160401b038111828210171561386b57fe5b604052823581526020928301359281019290925250919050565b805161ffff8116811461087757600080fd5b6000602082840312156138a8578081fd5b81356113848161446f565b6000602082840312156138c4578081fd5b81516113848161446f565b600080604083850312156138e1578081fd5b82356138ec8161446f565b915060208301356138fc8161446f565b809150509250929050565b6000806000806080858703121561391c578182fd5b84356139278161446f565b935060208501356139378161446f565b925060408501356139478161446f565b915060608501356139578161446f565b939692955090935050565b60008060408385031215613974578182fd5b823561397f8161446f565b915060208301356138fc81614492565b600080604083850312156139a1578182fd5b82356139ac8161446f565b915060208301356138fc816144a3565b600060208083850312156139ce578182fd5b82516001600160401b038111156139e3578283fd5b8301601f810185136139f3578283fd5b8051613a0161378682614452565b8181528381019083850185840285018601891015613a1d578687fd5b8694505b83851015613a48578051613a348161446f565b835260019490940193918501918501613a21565b50979650505050505050565b60008060408385031215613a66578182fd5b82516001600160401b0380821115613a7c578384fd5b818501915085601f830112613a8f578384fd5b81516020613a9f61378683614452565b82815281810190858301838502870184018b1015613abb578889fd5b8896505b84871015613aeb5780518060060b8114613ad757898afd5b835260019690960195918301918301613abf565b5091880151919650909350505080821115613b04578283fd5b50613b1185828601613766565b9150509250929050565b600060208284031215613b2c578081fd5b5051919050565b60008060408385031215613b45578182fd5b505080516020909101519092909150565b60008060008060608587031215613b6b578182fd5b843593506020850135925060408501356001600160401b03811115613b8e578283fd5b613b9a878288016137e6565b95989497509550505050565b600060608284031215613bb7578081fd5b604051606081016001600160401b0381118282101715613bd357fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600060808284031215613c0b578081fd5b604051608081016001600160401b0381118282101715613c2757fe5b6040528251613c358161446f565b81526020830151613c4581614492565b60208201526040830151613c5881614492565b60408201526060830151613c6b81614492565b60608201529392505050565b600060608284031215613c88578081fd5b604051606081016001600160401b0381118282101715613ca457fe5b604052613cb08361382c565b815260208301516020820152604083015160408201528091505092915050565b60006101208284031215613ce2578081fd5b60405161010081016001600160401b0381118282101715613cff57fe5b604052613d0b8361375b565b8152613d196020840161375b565b6020820152613d2a604084016137db565b6040820152613d3b606084016137db565b6060820152613d4c608084016137db565b608082015260a083013560a0820152613d6760c0840161375b565b60c0820152613d798460e0850161383e565b60e08201529392505050565b600080600080600080600060e0888a031215613d9f578485fd5b8751613daa8161446f565b9650613db86020890161382c565b9550613dc660408901613885565b9450613dd460608901613885565b9350613de260808901613885565b925060a088015160ff81168114613df7578283fd5b60c0890151909250613e0881614484565b8091505092959891949750929550565b600060208284031215613e29578081fd5b815161138481614492565b600060208284031215613e45578081fd5b8151611384816144a3565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b80518252602090810151910152565b62ffffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038481168252831660208201526080810161299a6040830184613e7a565b600060018060a01b038088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b82811015613fb25785810182015185820160c001528101613f96565b82811115613fc3578360c084870101525b5050601f01601f19169190910160c0019695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561403457835163ffffffff1683529284019291840191600101614012565b50909695505050505050565b60029190910b815260200190565b90815260200190565b600085825284602083015260606040830152611776606083018486613e50565b948552602085019390935260408401919091526060830152608082015260a00190565b60208082526007908201526645585f42544e4560c81b604082015260600190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526008908201526745585f414f504c4f60c01b604082015260600190565b6020808252600590820152640455f4142360dc1b604082015260600190565b602080825260069082015265455f4f424e4360d01b604082015260600190565b60208082526008908201526745585f4f5049415360c01b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b6020808252600a908201526922ac2fa6aa21a627a7a960b11b604082015260600190565b60208082526006908201526545585f414e4360d01b604082015260600190565b602080825260069082015265455f43484e4360d01b604082015260600190565b60208082526006908201526522ac2fa321ab60d11b604082015260600190565b60208082526008908201526745585f4f5049425360c01b604082015260600190565b60208082526005908201526455425f5a4960d81b604082015260600190565b60208082526006908201526555425f554f4160d01b604082015260600190565b602080825260079082015266455f4946414e4360c81b604082015260600190565b60208082526005908201526422afa727a160d91b604082015260600190565b604081016108528284613e7a565b608081016142e48286613e7a565b604082019390935260600152919050565b60006101208201905060018060a01b03808451168352602084015115156020840152604084015115156040840152606084015160608401528060808501511660808401525060a083015161434c60a0840182613e89565b5060c083015161435f60c0840182613e89565b5060e083015161437260e0840182613e7a565b5092915050565b81516001600160a01b0390811682526020808401518216908301526040808401519091169082015260608083015162ffffff16908201526080918201519181019190915260a00190565b600060a08201905082518252602083015160208301526040830151604083015260608301516060830152608083015160020b608083015292915050565b62ffffff91909116815260200190565b918252602082015260400190565b63ffffffff91909116815260200190565b6040518181016001600160401b038111828210171561444a57fe5b604052919050565b60006001600160401b0382111561446557fe5b5060209081020190565b6001600160a01b03811681146134bf57600080fd5b80151581146134bf57600080fd5b62ffffff811681146134bf57600080fd5b63ffffffff811681146134bf57600080fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212209136ee2af7268b353383abbb544bf5d36d579840d84fa6bd01e2fd2b8b54b97b64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2InsuranceFund.json b/external/abi/perp/PerpV2InsuranceFund.json new file mode 100644 index 000000000..0a95cebc6 --- /dev/null +++ b/external/abi/perp/PerpV2InsuranceFund.json @@ -0,0 +1,220 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2InsuranceFund", + "sourceName": "contracts/InsuranceFund.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Borrowed", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "borrow", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "borrower", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrowerArg", + "type": "address" + } + ], + "name": "setBorrower", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "token", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5061125f806100206000396000f3fe608060405234801561001057600080fd5b50600436106100af5760003560e01c806313af4035146100b45780633f4ba83a146100dc5780635c975abb146100e45780636c8381f814610100578063715018a6146101245780637df1f1b91461012c5780638456cb59146101345780638da5cb5b1461013c578063bc5920ba14610144578063c4d66de81461014c578063c5ebeaec14610172578063c762d5f71461018f578063fc0c546a146101b5575b600080fd5b6100da600480360360208110156100ca57600080fd5b50356001600160a01b03166101bd565b005b6100da610318565b6100ec61037f565b604080519115158252519081900360200190f35b610108610388565b604080516001600160a01b039092168252519081900360200190f35b6100da610397565b610108610438565b6100da610447565b6101086104ac565b6100da6104bb565b6100da6004803603602081101561016257600080fd5b50356001600160a01b03166105a7565b6100da6004803603602081101561018857600080fd5b50356106c2565b6100da600480360360208110156101a557600080fd5b50356001600160a01b03166108e0565b6101086109ab565b6101c56109ba565b6001600160a01b03166101d66104ac565b6001600160a01b03161461021a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661025e576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b03828116911614156102aa576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b03828116911614156102f6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6103206109ba565b6001600160a01b03166103316104ac565b6001600160a01b031614610375576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61037d6109c9565b565b60995460ff1690565b6066546001600160a01b031690565b61039f6109ba565b6001600160a01b03166103b06104ac565b6001600160a01b0316146103f4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316906000805160206111dd833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b60fe546001600160a01b031681565b61044f6109ba565b6001600160a01b03166104606104ac565b6001600160a01b0316146104a4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61037d610a69565b6065546001600160a01b031690565b6066546001600160a01b0316610500576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6105086109ba565b6066546001600160a01b03908116911614610553576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116906000805160206111dd83398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff16806105c057506105c0610aec565b806105ce575060005460ff16155b6106095760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610634576000805460ff1961ff0019909116610100171660011790555b610646826001600160a01b0316610afd565b610681576040805162461bcd60e51b815260206004820152600760248201526649465f53544e4360c81b604482015290519081900360640190fd5b610689610b03565b610691610bad565b60fd80546001600160a01b0319166001600160a01b03841617905580156106be576000805461ff00191690555b5050565b6002600154141561071a576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015561072761037f565b1561076c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe546001600160a01b03166107806109ba565b6001600160a01b0316146107c3576040805162461bcd60e51b815260206004820152600560248201526424a32fa7a160d91b604482015290519081900360640190fd5b60fd54604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561080d57600080fd5b505afa158015610821573d6000803e3d6000fd5b505050506040513d602081101561083757600080fd5b50511015610875576040805162461bcd60e51b815260206004820152600660248201526524a32fa722a160d11b604482015290519081900360640190fd5b60fd5460fe54610892916001600160a01b03908116911683610c4a565b60fe54604080516001600160a01b0390921682526020820183905280517fac59582e5396aca512fa873a2047e7f4c80f8f55d4a06cb34a78a0187f62719f9281900390910190a15060018055565b6108e86109ba565b6001600160a01b03166108f96104ac565b6001600160a01b03161461093d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61094f816001600160a01b0316610afd565b610989576040805162461bcd60e51b815260206004820152600660248201526549465f424e4360d01b604482015290519081900360640190fd5b60fe80546001600160a01b0319166001600160a01b0392909216919091179055565b60fd546001600160a01b031681565b60006109c4610d9d565b905090565b6109d161037f565b610a19576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610a4c6109ba565b604080516001600160a01b039092168252519081900360200190a1565b610a7161037f565b15610ab6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a4c6109ba565b6000610af730610afd565b15905090565b3b151590565b600054610100900460ff1680610b1c5750610b1c610aec565b80610b2a575060005460ff16155b610b655760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610b90576000805460ff1961ff0019909116610100171660011790555b610b98610da1565b8015610baa576000805461ff00191690555b50565b600054610100900460ff1680610bc65750610bc6610aec565b80610bd4575060005460ff16155b610c0f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610c3a576000805460ff1961ff0019909116610100171660011790555b610c42610e46565b610b98610f35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610cc65780518252601f199092019160209182019101610ca7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d28576040519150601f19603f3d011682016040523d82523d6000602084013e610d2d565b606091505b5091509150818015610d5b575080511580610d5b5750808060200190516020811015610d5857600080fd5b50515b610d965760405162461bcd60e51b815260040180806020018281038252602d8152602001806111fd602d913960400191505060405180910390fd5b5050505050565b3390565b600054610100900460ff1680610dba5750610dba610aec565b80610dc8575060005460ff16155b610e035760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610e2e576000805460ff1961ff0019909116610100171660011790555b600180558015610baa576000805461ff001916905550565b600054610100900460ff1680610e5f5750610e5f610aec565b80610e6d575060005460ff16155b610ea85760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610ed3576000805460ff1961ff0019909116610100171660011790555b610edb610fd2565b6000610ee56109ba565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206111dd833981519152908290a3508015610baa576000805461ff001916905550565b600054610100900460ff1680610f4e5750610f4e610aec565b80610f5c575060005460ff16155b610f975760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610fc2576000805460ff1961ff0019909116610100171660011790555b610fca611063565b610b98611103565b600054610100900460ff1680610feb5750610feb610aec565b80610ff9575060005460ff16155b6110345760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff1615801561105f576000805460ff1961ff0019909116610100171660011790555b610b985b600054610100900460ff168061107c575061107c610aec565b8061108a575060005460ff16155b6110c55760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610b98576000805460ff1961ff0019909116610100171660011790558015610baa576000805461ff001916905550565b600054610100900460ff168061111c575061111c610aec565b8061112a575060005460ff16155b6111655760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015611190576000805460ff1961ff0019909116610100171660011790555b6099805460ff191690558015610baa576000805461ff00191690555056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a264697066735822122042aefe70254a50665ecf86f66dd88b8b7aeb2c6b48d0ea87b5df01fb4217c5da64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100af5760003560e01c806313af4035146100b45780633f4ba83a146100dc5780635c975abb146100e45780636c8381f814610100578063715018a6146101245780637df1f1b91461012c5780638456cb59146101345780638da5cb5b1461013c578063bc5920ba14610144578063c4d66de81461014c578063c5ebeaec14610172578063c762d5f71461018f578063fc0c546a146101b5575b600080fd5b6100da600480360360208110156100ca57600080fd5b50356001600160a01b03166101bd565b005b6100da610318565b6100ec61037f565b604080519115158252519081900360200190f35b610108610388565b604080516001600160a01b039092168252519081900360200190f35b6100da610397565b610108610438565b6100da610447565b6101086104ac565b6100da6104bb565b6100da6004803603602081101561016257600080fd5b50356001600160a01b03166105a7565b6100da6004803603602081101561018857600080fd5b50356106c2565b6100da600480360360208110156101a557600080fd5b50356001600160a01b03166108e0565b6101086109ab565b6101c56109ba565b6001600160a01b03166101d66104ac565b6001600160a01b03161461021a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661025e576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b03828116911614156102aa576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b03828116911614156102f6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6103206109ba565b6001600160a01b03166103316104ac565b6001600160a01b031614610375576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61037d6109c9565b565b60995460ff1690565b6066546001600160a01b031690565b61039f6109ba565b6001600160a01b03166103b06104ac565b6001600160a01b0316146103f4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316906000805160206111dd833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b60fe546001600160a01b031681565b61044f6109ba565b6001600160a01b03166104606104ac565b6001600160a01b0316146104a4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61037d610a69565b6065546001600160a01b031690565b6066546001600160a01b0316610500576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6105086109ba565b6066546001600160a01b03908116911614610553576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116906000805160206111dd83398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff16806105c057506105c0610aec565b806105ce575060005460ff16155b6106095760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610634576000805460ff1961ff0019909116610100171660011790555b610646826001600160a01b0316610afd565b610681576040805162461bcd60e51b815260206004820152600760248201526649465f53544e4360c81b604482015290519081900360640190fd5b610689610b03565b610691610bad565b60fd80546001600160a01b0319166001600160a01b03841617905580156106be576000805461ff00191690555b5050565b6002600154141561071a576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015561072761037f565b1561076c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe546001600160a01b03166107806109ba565b6001600160a01b0316146107c3576040805162461bcd60e51b815260206004820152600560248201526424a32fa7a160d91b604482015290519081900360640190fd5b60fd54604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561080d57600080fd5b505afa158015610821573d6000803e3d6000fd5b505050506040513d602081101561083757600080fd5b50511015610875576040805162461bcd60e51b815260206004820152600660248201526524a32fa722a160d11b604482015290519081900360640190fd5b60fd5460fe54610892916001600160a01b03908116911683610c4a565b60fe54604080516001600160a01b0390921682526020820183905280517fac59582e5396aca512fa873a2047e7f4c80f8f55d4a06cb34a78a0187f62719f9281900390910190a15060018055565b6108e86109ba565b6001600160a01b03166108f96104ac565b6001600160a01b03161461093d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61094f816001600160a01b0316610afd565b610989576040805162461bcd60e51b815260206004820152600660248201526549465f424e4360d01b604482015290519081900360640190fd5b60fe80546001600160a01b0319166001600160a01b0392909216919091179055565b60fd546001600160a01b031681565b60006109c4610d9d565b905090565b6109d161037f565b610a19576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610a4c6109ba565b604080516001600160a01b039092168252519081900360200190a1565b610a7161037f565b15610ab6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a4c6109ba565b6000610af730610afd565b15905090565b3b151590565b600054610100900460ff1680610b1c5750610b1c610aec565b80610b2a575060005460ff16155b610b655760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610b90576000805460ff1961ff0019909116610100171660011790555b610b98610da1565b8015610baa576000805461ff00191690555b50565b600054610100900460ff1680610bc65750610bc6610aec565b80610bd4575060005460ff16155b610c0f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610c3a576000805460ff1961ff0019909116610100171660011790555b610c42610e46565b610b98610f35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610cc65780518252601f199092019160209182019101610ca7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d28576040519150601f19603f3d011682016040523d82523d6000602084013e610d2d565b606091505b5091509150818015610d5b575080511580610d5b5750808060200190516020811015610d5857600080fd5b50515b610d965760405162461bcd60e51b815260040180806020018281038252602d8152602001806111fd602d913960400191505060405180910390fd5b5050505050565b3390565b600054610100900460ff1680610dba5750610dba610aec565b80610dc8575060005460ff16155b610e035760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610e2e576000805460ff1961ff0019909116610100171660011790555b600180558015610baa576000805461ff001916905550565b600054610100900460ff1680610e5f5750610e5f610aec565b80610e6d575060005460ff16155b610ea85760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610ed3576000805460ff1961ff0019909116610100171660011790555b610edb610fd2565b6000610ee56109ba565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206111dd833981519152908290a3508015610baa576000805461ff001916905550565b600054610100900460ff1680610f4e5750610f4e610aec565b80610f5c575060005460ff16155b610f975760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610fc2576000805460ff1961ff0019909116610100171660011790555b610fca611063565b610b98611103565b600054610100900460ff1680610feb5750610feb610aec565b80610ff9575060005460ff16155b6110345760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff1615801561105f576000805460ff1961ff0019909116610100171660011790555b610b985b600054610100900460ff168061107c575061107c610aec565b8061108a575060005460ff16155b6110c55760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610b98576000805460ff1961ff0019909116610100171660011790558015610baa576000805461ff001916905550565b600054610100900460ff168061111c575061111c610aec565b8061112a575060005460ff16155b6111655760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015611190576000805460ff1961ff0019909116610100171660011790555b6099805460ff191690558015610baa576000805461ff00191690555056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a264697066735822122042aefe70254a50665ecf86f66dd88b8b7aeb2c6b48d0ea87b5df01fb4217c5da64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2MarketRegistry.json b/external/abi/perp/PerpV2MarketRegistry.json new file mode 100644 index 000000000..d3e5cf7b4 --- /dev/null +++ b/external/abi/perp/PerpV2MarketRegistry.json @@ -0,0 +1,420 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2MarketRegistry", + "sourceName": "contracts/MarketRegistry.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "clearingHouse", + "type": "address" + } + ], + "name": "ClearingHouseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint24", + "name": "feeRatio", + "type": "uint24" + } + ], + "name": "FeeRatioChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint24", + "name": "feeRatio", + "type": "uint24" + } + ], + "name": "InsuranceFundFeeRatioChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "maxOrdersPerMarket", + "type": "uint8" + } + ], + "name": "MaxOrdersPerMarketChanged", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint24", + "name": "feeRatio", + "type": "uint24" + }, + { + "indexed": true, + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "name": "PoolAdded", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "uint24", + "name": "feeRatio", + "type": "uint24" + } + ], + "name": "addPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clearingHouse", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getFeeRatio", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getInsuranceFundFeeRatio", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getMarketInfo", + "outputs": [ + { + "components": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "uint24", + "name": "exchangeFeeRatio", + "type": "uint24" + }, + { + "internalType": "uint24", + "name": "uniswapFeeRatio", + "type": "uint24" + }, + { + "internalType": "uint24", + "name": "insuranceFundFeeRatio", + "type": "uint24" + } + ], + "internalType": "struct MarketRegistry.MarketInfo", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getPool", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "uniswapV3FactoryArg", + "type": "address" + }, + { + "internalType": "address", + "name": "quoteTokenArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "maxOrdersPerMarket", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quoteToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "clearingHouseArg", + "type": "address" + } + ], + "name": "setClearingHouse", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "uint24", + "name": "feeRatio", + "type": "uint24" + } + ], + "name": "setFeeRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "uint24", + "name": "insuranceFundFeeRatioArg", + "type": "uint24" + } + ], + "name": "setInsuranceFundFeeRatio", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "maxOrdersPerMarketArg", + "type": "uint8" + } + ], + "name": "setMaxOrdersPerMarket", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "uniswapV3Factory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50611ab5806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f15760003560e01c806308ff49ad146100f65780630af968001461011f5780630cf85bcc1461013457806313af403514610154578063217a4b70146101695780633feb421214610171578063449323d814610184578063485cc955146101975780635b549182146101aa5780636c8381f8146101b2578063715018a6146101ba578063831f72b4146101c25780638da5cb5b146101d5578063baa0ea78146101dd578063bb235d11146101f2578063bbe4f6db14610205578063bc5920ba14610218578063c7bf443414610220578063edd0b5cb14610233575b600080fd5b61010961010436600461159e565b610246565b60405161011691906119ef565b60405180910390f35b61012761026a565b6040516101169190611745565b61014761014236600461159e565b610279565b60405161011691906119ae565b61016761016236600461159e565b6102e9565b005b610127610444565b61016761017f366004611615565b610453565b61016761019236600461159e565b610582565b6101676101a53660046115dd565b610657565b61012761078f565b61012761079e565b6101676107ad565b6101676101d036600461170d565b61084e565b6101276108fe565b6101e561090d565b60405161011691906119ff565b610167610200366004611615565b61091d565b61012761021336600461159e565b610a37565b610167610a55565b61012761022e366004611615565b610b41565b61010961024136600461159e565b61114b565b6001600160a01b0381166000908152606b602052604090205462ffffff165b919050565b6069546001600160a01b031681565b610281611535565b50604080516080810182526001600160a01b039283166000818152606a6020908152848220549095168352818152606c85528381205462ffffff90811686850152828252606d865284822054811684860152918152606b909452919092205416606082015290565b6102f161116b565b6001600160a01b03166103026108fe565b6001600160a01b031614610346576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661038a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156103d6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610422576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6068546001600160a01b031681565b6001600160a01b038083166000908152606a60205260409020548391166104955760405162461bcd60e51b815260040161048c9061194d565b60405180910390fd5b81620f42408162ffffff1611156104be5760405162461bcd60e51b815260040161048c90611866565b6104c661116b565b6001600160a01b03166104d76108fe565b6001600160a01b03161461051b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152606b602052604090819020805462ffffff191662ffffff8616179055517f0b4bf524b123dd9f9252f2f17e6f842313eb705045a2259faccd2530bae3ff5c906105749085906119ef565b60405180910390a150505050565b61058a61116b565b6001600160a01b031661059b6108fe565b6001600160a01b0316146105df576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6105f1816001600160a01b031661116f565b61060d5760405162461bcd60e51b815260040161048c90611845565b606980546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b600054610100900460ff16806106705750610670611175565b8061067e575060005460ff16155b6106b95760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff161580156106e4576000805460ff1961ff0019909116610100171660011790555b6106ec611186565b6106fe836001600160a01b031661116f565b61071a5760405162461bcd60e51b815260040161048c90611824565b61072c826001600160a01b031661116f565b6107485760405162461bcd60e51b815260040161048c90611803565b606780546001600160a01b038086166001600160a01b0319928316179092556068805492851692909116919091179055801561078a576000805461ff00191690555b505050565b6067546001600160a01b031681565b6034546001600160a01b031690565b6107b561116b565b6001600160a01b03166107c66108fe565b6001600160a01b03161461080a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611a60833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b61085661116b565b6001600160a01b03166108676108fe565b6001600160a01b0316146108ab576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6069805460ff60a01b1916600160a01b60ff8416021790556040517ff3d121ca0d4fa5acf57cf8a09acedf5326b6ca02f25764d2a05a4dba8e4a777e906108f39083906119ff565b60405180910390a150565b6033546001600160a01b031690565b606954600160a01b900460ff1681565b6001600160a01b038083166000908152606a60205260409020548391166109565760405162461bcd60e51b815260040161048c9061194d565b81620f42408162ffffff16111561097f5760405162461bcd60e51b815260040161048c90611866565b61098761116b565b6001600160a01b03166109986108fe565b6001600160a01b0316146109dc576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152606c602052604090819020805462ffffff191662ffffff8616179055517f8129297a1a8d252870739804c1d9cdbc86121230ce172c23ec11a940ccab01ef906105749086908690611781565b6001600160a01b039081166000908152606a60205260409020541690565b6034546001600160a01b0316610a9a576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610aa261116b565b6034546001600160a01b03908116911614610aed576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020611a6083398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6000610b4b61116b565b6001600160a01b0316610b5c6108fe565b6001600160a01b031614610ba0576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd957600080fd5b505afa158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190611729565b60ff16601214610c335760405162461bcd60e51b815260040161048c9061196d565b6069546040516370a0823160e01b8152600019916001600160a01b03808716926370a0823192610c67921690600401611745565b60206040518083038186803b158015610c7f57600080fd5b505afa158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906116f5565b14610cd45760405162461bcd60e51b815260040161048c906117e1565b606854604080516318160ddd60e01b81529051600019926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015610d1a57600080fd5b505afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5291906116f5565b14610d6f5760405162461bcd60e51b815260040161048c90611908565b6068546001600160a01b0390811690841610610d9d5760405162461bcd60e51b815260040161048c9061198f565b606754606854600091610dbe916001600160a01b0391821691168686611276565b90506001600160a01b038116610de65760405162461bcd60e51b815260040161048c906117c1565b6001600160a01b038481166000908152606a60205260409020541615610e1e5760405162461bcd60e51b815260040161048c906118a5565b610e2781611316565b6001600160a01b0316610e4c5760405162461bcd60e51b815260040161048c90611885565b6069546040516304fec10960e11b81526001600160a01b03868116926309fd821292610e7e9290911690600401611745565b60206040518083038186803b158015610e9657600080fd5b505afa158015610eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ece9190611649565b610eea5760405162461bcd60e51b815260040161048c906118e6565b6040516304fec10960e11b81526001600160a01b038516906309fd821290610f16908490600401611745565b60206040518083038186803b158015610f2e57600080fd5b505afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f669190611649565b610f825760405162461bcd60e51b815260040161048c906118c4565b6068546069546040516304fec10960e11b81526001600160a01b03928316926309fd821292610fb692911690600401611745565b60206040518083038186803b158015610fce57600080fd5b505afa158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110069190611649565b6110225760405162461bcd60e51b815260040161048c9061192a565b6068546040516304fec10960e11b81526001600160a01b03909116906309fd821290611052908490600401611745565b60206040518083038186803b15801561106a57600080fd5b505afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190611649565b6110be5760405162461bcd60e51b815260040161048c9061179f565b6001600160a01b038085166000818152606a6020908152604080832080549587166001600160a01b031990961686179055606d8252808320805462ffffff8a1662ffffff199182168117909255606c90935281842080549093168117909255519092917f8b17db32f8ec22477a8f9475d5b92052ef2ce8c6c73ad79be1eb297a8fdd2ff191a49392505050565b6001600160a01b03166000908152606c602052604090205462ffffff1690565b3390565b3b151590565b60006111803061116f565b15905090565b600054610100900460ff168061119f575061119f611175565b806111ad575060005460ff16155b6111e85760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff16158015611213576000805460ff1961ff0019909116610100171660011790555b61121b611396565b600061122561116b565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611a60833981519152908290a3508015611273576000805461ff00191690555b50565b60008061128485858561143f565b80516020820151604051630b4c774160e11b81529293506001600160a01b03891692631698ee82926112bc9290918890600401611759565b60206040518083038186803b1580156112d457600080fd5b505afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c91906115c1565b9695505050505050565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190611663565b5094979650505050505050565b600054610100900460ff16806113af57506113af611175565b806113bd575060005460ff16155b6113f85760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff16158015611423576000805460ff1961ff0019909116610100171660011790555b61142b611495565b8015611273576000805461ff001916905550565b61144761155c565b826001600160a01b0316846001600160a01b03161115611465579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600054610100900460ff16806114ae57506114ae611175565b806114bc575060005460ff16155b6114f75760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff1615801561142b576000805460ff1961ff0019909116610100171660011790558015611273576000805461ff001916905550565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461026557600080fd5b805161ffff8116811461026557600080fd5b6000602082840312156115af578081fd5b81356115ba81611a0d565b9392505050565b6000602082840312156115d2578081fd5b81516115ba81611a0d565b600080604083850312156115ef578081fd5b82356115fa81611a0d565b9150602083013561160a81611a0d565b809150509250929050565b60008060408385031215611627578182fd5b823561163281611a0d565b9150602083013562ffffff8116811461160a578182fd5b60006020828403121561165a578081fd5b6115ba8261157c565b600080600080600080600060e0888a03121561167d578283fd5b875161168881611a0d565b8097505060208801518060020b811461169f578384fd5b95506116ad6040890161158c565b94506116bb6060890161158c565b93506116c96080890161158c565b925060a08801516116d981611a22565b91506116e760c0890161157c565b905092959891949750929550565b600060208284031215611706578081fd5b5051919050565b60006020828403121561171e578081fd5b81356115ba81611a22565b60006020828403121561173a578081fd5b81516115ba81611a22565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b0392909216825262ffffff16602082015260400190565b602080825260089082015267135497d4139455d360c21b604082015260600190565b60208082526006908201526504d525f4e45560d41b604082015260600190565b6020808252600890820152674d525f4348424e4560c01b604082015260600190565b6020808252600790820152664d525f51544e4360c81b604082015260600190565b6020808252600790820152664d525f55464e4360c81b604082015260600190565b6020808252600790820152664d525f43484e4360c81b604082015260600190565b6020808252600590820152644d525f524f60d81b604082015260600190565b6020808252600690820152654d525f504e4960d01b604082015260600190565b60208082526005908201526404d525f45560dc1b604082015260600190565b602080825260089082015267135497d4139095d360c21b604082015260600190565b602080825260089082015267135497d0d39095d360c21b604082015260600190565b6020808252600890820152674d525f5154534e4560c01b604082015260600190565b602080825260099082015268135497d0d2139455d360ba1b604082015260600190565b6020808252600690820152654d525f504e4560d01b604082015260600190565b60208082526008908201526709aa4be84889c62760c31b604082015260600190565b60208082526005908201526426a92fa4a160d91b604082015260600190565b81516001600160a01b0316815260208083015162ffffff90811691830191909152604080840151821690830152606092830151169181019190915260800190565b62ffffff91909116815260200190565b60ff91909116815260200190565b6001600160a01b038116811461127357600080fd5b60ff8116811461127357600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212206d60035a869a9ef04a17aa3e8896313cfc220b39c50b3389cde031a0eee1050a64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f15760003560e01c806308ff49ad146100f65780630af968001461011f5780630cf85bcc1461013457806313af403514610154578063217a4b70146101695780633feb421214610171578063449323d814610184578063485cc955146101975780635b549182146101aa5780636c8381f8146101b2578063715018a6146101ba578063831f72b4146101c25780638da5cb5b146101d5578063baa0ea78146101dd578063bb235d11146101f2578063bbe4f6db14610205578063bc5920ba14610218578063c7bf443414610220578063edd0b5cb14610233575b600080fd5b61010961010436600461159e565b610246565b60405161011691906119ef565b60405180910390f35b61012761026a565b6040516101169190611745565b61014761014236600461159e565b610279565b60405161011691906119ae565b61016761016236600461159e565b6102e9565b005b610127610444565b61016761017f366004611615565b610453565b61016761019236600461159e565b610582565b6101676101a53660046115dd565b610657565b61012761078f565b61012761079e565b6101676107ad565b6101676101d036600461170d565b61084e565b6101276108fe565b6101e561090d565b60405161011691906119ff565b610167610200366004611615565b61091d565b61012761021336600461159e565b610a37565b610167610a55565b61012761022e366004611615565b610b41565b61010961024136600461159e565b61114b565b6001600160a01b0381166000908152606b602052604090205462ffffff165b919050565b6069546001600160a01b031681565b610281611535565b50604080516080810182526001600160a01b039283166000818152606a6020908152848220549095168352818152606c85528381205462ffffff90811686850152828252606d865284822054811684860152918152606b909452919092205416606082015290565b6102f161116b565b6001600160a01b03166103026108fe565b6001600160a01b031614610346576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661038a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156103d6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610422576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6068546001600160a01b031681565b6001600160a01b038083166000908152606a60205260409020548391166104955760405162461bcd60e51b815260040161048c9061194d565b60405180910390fd5b81620f42408162ffffff1611156104be5760405162461bcd60e51b815260040161048c90611866565b6104c661116b565b6001600160a01b03166104d76108fe565b6001600160a01b03161461051b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152606b602052604090819020805462ffffff191662ffffff8616179055517f0b4bf524b123dd9f9252f2f17e6f842313eb705045a2259faccd2530bae3ff5c906105749085906119ef565b60405180910390a150505050565b61058a61116b565b6001600160a01b031661059b6108fe565b6001600160a01b0316146105df576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6105f1816001600160a01b031661116f565b61060d5760405162461bcd60e51b815260040161048c90611845565b606980546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b600054610100900460ff16806106705750610670611175565b8061067e575060005460ff16155b6106b95760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff161580156106e4576000805460ff1961ff0019909116610100171660011790555b6106ec611186565b6106fe836001600160a01b031661116f565b61071a5760405162461bcd60e51b815260040161048c90611824565b61072c826001600160a01b031661116f565b6107485760405162461bcd60e51b815260040161048c90611803565b606780546001600160a01b038086166001600160a01b0319928316179092556068805492851692909116919091179055801561078a576000805461ff00191690555b505050565b6067546001600160a01b031681565b6034546001600160a01b031690565b6107b561116b565b6001600160a01b03166107c66108fe565b6001600160a01b03161461080a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611a60833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b61085661116b565b6001600160a01b03166108676108fe565b6001600160a01b0316146108ab576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6069805460ff60a01b1916600160a01b60ff8416021790556040517ff3d121ca0d4fa5acf57cf8a09acedf5326b6ca02f25764d2a05a4dba8e4a777e906108f39083906119ff565b60405180910390a150565b6033546001600160a01b031690565b606954600160a01b900460ff1681565b6001600160a01b038083166000908152606a60205260409020548391166109565760405162461bcd60e51b815260040161048c9061194d565b81620f42408162ffffff16111561097f5760405162461bcd60e51b815260040161048c90611866565b61098761116b565b6001600160a01b03166109986108fe565b6001600160a01b0316146109dc576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152606c602052604090819020805462ffffff191662ffffff8616179055517f8129297a1a8d252870739804c1d9cdbc86121230ce172c23ec11a940ccab01ef906105749086908690611781565b6001600160a01b039081166000908152606a60205260409020541690565b6034546001600160a01b0316610a9a576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610aa261116b565b6034546001600160a01b03908116911614610aed576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020611a6083398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6000610b4b61116b565b6001600160a01b0316610b5c6108fe565b6001600160a01b031614610ba0576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd957600080fd5b505afa158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190611729565b60ff16601214610c335760405162461bcd60e51b815260040161048c9061196d565b6069546040516370a0823160e01b8152600019916001600160a01b03808716926370a0823192610c67921690600401611745565b60206040518083038186803b158015610c7f57600080fd5b505afa158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906116f5565b14610cd45760405162461bcd60e51b815260040161048c906117e1565b606854604080516318160ddd60e01b81529051600019926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015610d1a57600080fd5b505afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5291906116f5565b14610d6f5760405162461bcd60e51b815260040161048c90611908565b6068546001600160a01b0390811690841610610d9d5760405162461bcd60e51b815260040161048c9061198f565b606754606854600091610dbe916001600160a01b0391821691168686611276565b90506001600160a01b038116610de65760405162461bcd60e51b815260040161048c906117c1565b6001600160a01b038481166000908152606a60205260409020541615610e1e5760405162461bcd60e51b815260040161048c906118a5565b610e2781611316565b6001600160a01b0316610e4c5760405162461bcd60e51b815260040161048c90611885565b6069546040516304fec10960e11b81526001600160a01b03868116926309fd821292610e7e9290911690600401611745565b60206040518083038186803b158015610e9657600080fd5b505afa158015610eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ece9190611649565b610eea5760405162461bcd60e51b815260040161048c906118e6565b6040516304fec10960e11b81526001600160a01b038516906309fd821290610f16908490600401611745565b60206040518083038186803b158015610f2e57600080fd5b505afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f669190611649565b610f825760405162461bcd60e51b815260040161048c906118c4565b6068546069546040516304fec10960e11b81526001600160a01b03928316926309fd821292610fb692911690600401611745565b60206040518083038186803b158015610fce57600080fd5b505afa158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110069190611649565b6110225760405162461bcd60e51b815260040161048c9061192a565b6068546040516304fec10960e11b81526001600160a01b03909116906309fd821290611052908490600401611745565b60206040518083038186803b15801561106a57600080fd5b505afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190611649565b6110be5760405162461bcd60e51b815260040161048c9061179f565b6001600160a01b038085166000818152606a6020908152604080832080549587166001600160a01b031990961686179055606d8252808320805462ffffff8a1662ffffff199182168117909255606c90935281842080549093168117909255519092917f8b17db32f8ec22477a8f9475d5b92052ef2ce8c6c73ad79be1eb297a8fdd2ff191a49392505050565b6001600160a01b03166000908152606c602052604090205462ffffff1690565b3390565b3b151590565b60006111803061116f565b15905090565b600054610100900460ff168061119f575061119f611175565b806111ad575060005460ff16155b6111e85760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff16158015611213576000805460ff1961ff0019909116610100171660011790555b61121b611396565b600061122561116b565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611a60833981519152908290a3508015611273576000805461ff00191690555b50565b60008061128485858561143f565b80516020820151604051630b4c774160e11b81529293506001600160a01b03891692631698ee82926112bc9290918890600401611759565b60206040518083038186803b1580156112d457600080fd5b505afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c91906115c1565b9695505050505050565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190611663565b5094979650505050505050565b600054610100900460ff16806113af57506113af611175565b806113bd575060005460ff16155b6113f85760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff16158015611423576000805460ff1961ff0019909116610100171660011790555b61142b611495565b8015611273576000805461ff001916905550565b61144761155c565b826001600160a01b0316846001600160a01b03161115611465579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600054610100900460ff16806114ae57506114ae611175565b806114bc575060005460ff16155b6114f75760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff1615801561142b576000805460ff1961ff0019909116610100171660011790558015611273576000805461ff001916905550565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461026557600080fd5b805161ffff8116811461026557600080fd5b6000602082840312156115af578081fd5b81356115ba81611a0d565b9392505050565b6000602082840312156115d2578081fd5b81516115ba81611a0d565b600080604083850312156115ef578081fd5b82356115fa81611a0d565b9150602083013561160a81611a0d565b809150509250929050565b60008060408385031215611627578182fd5b823561163281611a0d565b9150602083013562ffffff8116811461160a578182fd5b60006020828403121561165a578081fd5b6115ba8261157c565b600080600080600080600060e0888a03121561167d578283fd5b875161168881611a0d565b8097505060208801518060020b811461169f578384fd5b95506116ad6040890161158c565b94506116bb6060890161158c565b93506116c96080890161158c565b925060a08801516116d981611a22565b91506116e760c0890161157c565b905092959891949750929550565b600060208284031215611706578081fd5b5051919050565b60006020828403121561171e578081fd5b81356115ba81611a22565b60006020828403121561173a578081fd5b81516115ba81611a22565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b0392909216825262ffffff16602082015260400190565b602080825260089082015267135497d4139455d360c21b604082015260600190565b60208082526006908201526504d525f4e45560d41b604082015260600190565b6020808252600890820152674d525f4348424e4560c01b604082015260600190565b6020808252600790820152664d525f51544e4360c81b604082015260600190565b6020808252600790820152664d525f55464e4360c81b604082015260600190565b6020808252600790820152664d525f43484e4360c81b604082015260600190565b6020808252600590820152644d525f524f60d81b604082015260600190565b6020808252600690820152654d525f504e4960d01b604082015260600190565b60208082526005908201526404d525f45560dc1b604082015260600190565b602080825260089082015267135497d4139095d360c21b604082015260600190565b602080825260089082015267135497d0d39095d360c21b604082015260600190565b6020808252600890820152674d525f5154534e4560c01b604082015260600190565b602080825260099082015268135497d0d2139455d360ba1b604082015260600190565b6020808252600690820152654d525f504e4560d01b604082015260600190565b60208082526008908201526709aa4be84889c62760c31b604082015260600190565b60208082526005908201526426a92fa4a160d91b604082015260600190565b81516001600160a01b0316815260208083015162ffffff90811691830191909152604080840151821690830152606092830151169181019190915260800190565b62ffffff91909116815260200190565b60ff91909116815260200190565b6001600160a01b038116811461127357600080fd5b60ff8116811461127357600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212206d60035a869a9ef04a17aa3e8896313cfc220b39c50b3389cde031a0eee1050a64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2OrderBook.json b/external/abi/perp/PerpV2OrderBook.json new file mode 100644 index 000000000..fccd7ea76 --- /dev/null +++ b/external/abi/perp/PerpV2OrderBook.json @@ -0,0 +1,928 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2OrderBook", + "sourceName": "contracts/OrderBook.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "clearingHouse", + "type": "address" + } + ], + "name": "ClearingHouseChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "quoteToken", + "type": "address" + }, + { + "indexed": false, + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "indexed": false, + "internalType": "int24", + "name": "upperTick", + "type": "int24" + }, + { + "indexed": false, + "internalType": "int256", + "name": "base", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int256", + "name": "quote", + "type": "int256" + }, + { + "indexed": false, + "internalType": "int128", + "name": "liquidity", + "type": "int128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "quoteFee", + "type": "uint256" + } + ], + "name": "LiquidityChanged", + "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" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quote", + "type": "uint256" + }, + { + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "internalType": "int24", + "name": "upperTick", + "type": "int24" + }, + { + "components": [ + { + "internalType": "int256", + "name": "twPremiumX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "twPremiumDivBySqrtPriceX96", + "type": "int256" + } + ], + "internalType": "struct Funding.Growth", + "name": "fundingGrowthGlobal", + "type": "tuple" + } + ], + "internalType": "struct OrderBook.AddLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "addLiquidity", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quote", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + } + ], + "internalType": "struct OrderBook.AddLiquidityResponse", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clearingHouse", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "exchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getFeeGrowthGlobal", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "components": [ + { + "internalType": "int256", + "name": "twPremiumX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "twPremiumDivBySqrtPriceX96", + "type": "int256" + } + ], + "internalType": "struct Funding.Growth", + "name": "fundingGrowthGlobal", + "type": "tuple" + } + ], + "name": "getLiquidityCoefficientInFundingPayment", + "outputs": [ + { + "internalType": "int256", + "name": "liquidityCoefficientInFundingPayment", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "internalType": "int24", + "name": "upperTick", + "type": "int24" + } + ], + "name": "getOpenOrder", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "internalType": "int24", + "name": "upperTick", + "type": "int24" + }, + { + "internalType": "uint256", + "name": "lastFeeGrowthInsideX128", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "lastTwPremiumGrowthInsideX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "lastTwPremiumGrowthBelowX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "lastTwPremiumDivBySqrtPriceGrowthInsideX96", + "type": "int256" + } + ], + "internalType": "struct OrderBook.OpenOrder", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "orderId", + "type": "bytes32" + } + ], + "name": "getOpenOrderById", + "outputs": [ + { + "components": [ + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + }, + { + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "internalType": "int24", + "name": "upperTick", + "type": "int24" + }, + { + "internalType": "uint256", + "name": "lastFeeGrowthInsideX128", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "lastTwPremiumGrowthInsideX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "lastTwPremiumGrowthBelowX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "lastTwPremiumDivBySqrtPriceGrowthInsideX96", + "type": "int256" + } + ], + "internalType": "struct OrderBook.OpenOrder", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + } + ], + "name": "getOpenOrderIds", + "outputs": [ + { + "internalType": "bytes32[]", + "name": "", + "type": "bytes32[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "internalType": "int24", + "name": "upperTick", + "type": "int24" + } + ], + "name": "getOwedFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address[]", + "name": "baseTokens", + "type": "address[]" + } + ], + "name": "getTotalQuoteAmountInPools", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "fetchBase", + "type": "bool" + } + ], + "name": "getTotalTokenAmountInPool", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "name": "hasOrder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "marketRegistryArg", + "type": "address" + }, + { + "internalType": "address", + "name": "quoteTokenArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "marketRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "quoteToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "int24", + "name": "lowerTick", + "type": "int24" + }, + { + "internalType": "int24", + "name": "upperTick", + "type": "int24" + }, + { + "internalType": "uint128", + "name": "liquidity", + "type": "uint128" + } + ], + "internalType": "struct OrderBook.RemoveLiquidityParams", + "name": "params", + "type": "tuple" + } + ], + "name": "removeLiquidity", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quote", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "internalType": "struct OrderBook.RemoveLiquidityResponse", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "maker", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "bytes32[]", + "name": "orderIds", + "type": "bytes32[]" + } + ], + "name": "removeLiquidityByIds", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "base", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "quote", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "internalType": "struct OrderBook.RemoveLiquidityResponse", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "isBaseToQuote", + "type": "bool" + }, + { + "internalType": "bool", + "name": "shouldUpdateState", + "type": "bool" + }, + { + "internalType": "int256", + "name": "amount", + "type": "int256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + }, + { + "internalType": "uint24", + "name": "exchangeFeeRatio", + "type": "uint24" + }, + { + "internalType": "uint24", + "name": "uniswapFeeRatio", + "type": "uint24" + }, + { + "components": [ + { + "internalType": "int256", + "name": "twPremiumX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "twPremiumDivBySqrtPriceX96", + "type": "int256" + } + ], + "internalType": "struct Funding.Growth", + "name": "globalFundingGrowth", + "type": "tuple" + } + ], + "internalType": "struct OrderBook.ReplaySwapParams", + "name": "params", + "type": "tuple" + } + ], + "name": "replaySwap", + "outputs": [ + { + "components": [ + { + "internalType": "int24", + "name": "tick", + "type": "int24" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "insuranceFundFee", + "type": "uint256" + } + ], + "internalType": "struct OrderBook.ReplaySwapResponse", + "name": "", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "clearingHouseArg", + "type": "address" + } + ], + "name": "setClearingHouse", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "exchangeArg", + "type": "address" + } + ], + "name": "setExchange", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount0Owed", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "amount1Owed", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3MintCallback", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "components": [ + { + "internalType": "int256", + "name": "twPremiumX96", + "type": "int256" + }, + { + "internalType": "int256", + "name": "twPremiumDivBySqrtPriceX96", + "type": "int256" + } + ], + "internalType": "struct Funding.Growth", + "name": "fundingGrowthGlobal", + "type": "tuple" + } + ], + "name": "updateFundingGrowthAndLiquidityCoefficientInFundingPayment", + "outputs": [ + { + "internalType": "int256", + "name": "liquidityCoefficientInFundingPayment", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50615d2380620000216000396000f3fe608060405234801561001057600080fd5b50600436106101495760003560e01c80630af968001461014e57806313af40351461016c578063217a4b7014610181578063398dbcfd14610189578063436933ea146101a9578063449323d8146101c957806347b52fb7146101dc578063485cc955146101fc5780634dffaee51461020f57806359bfbc5a1461022f5780635b778b9d1461024257806367b1f5df146102555780636c8381f814610268578063715018a6146102705780637fc2673614610278578063865bcccc1461028b5780638da5cb5b1461029e578063a3bf0df8146102a6578063acf71827146102c6578063bc5920ba146102e6578063bf0b1abb146102ee578063d2f7265a14610301578063d348799714610309578063e8ab2fb31461031c578063eaad23541461033c578063ecb96fe61461034f578063ffa6132714610357575b600080fd5b61015661036a565b60405161016391906156ee565b60405180910390f35b61017f61017a366004615037565b610379565b005b6101566104d4565b61019c6101973660046150a7565b6104e3565b6040516101639190615ac9565b6101bc6101b736600461506f565b6106dc565b60405161016391906157c5565b61017f6101d7366004615037565b610756565b6101ef6101ea3660046151ae565b61082b565b6040516101639190615889565b61017f61020a36600461506f565b610a2a565b61022261021d3660046151f5565b610b18565b6040516101639190615809565b6101ef61023d366004615037565b610b9b565b61019c610250366004615347565b610bba565b61017f610263366004615037565b610c13565b610156610cb8565b61017f610cc7565b6101ef6102863660046151ae565b610d68565b6101ef6102993660046151f5565b610f79565b610156610fdb565b6102b96102b43660046153e8565b610fea565b6040516101639190615aea565b6102d96102d4366004615247565b6115bb565b6040516101639190615a6d565b61017f611640565b6101ef6102fc366004615109565b61172c565b610156611739565b61017f61031736600461565a565b611748565b61032f61032a366004615297565b6118e8565b6040516101639190615a16565b6102d961034a366004615153565b611d87565b610156611e24565b6101ef610365366004615153565b611e33565b6068546001600160a01b031681565b610381611ed6565b6001600160a01b0316610392610fdb565b6001600160a01b0316146103d6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661041a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610466576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156104b2576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b609c546001600160a01b031681565b6104eb614df0565b6068546001600160a01b03166104ff611ed6565b6001600160a01b03161461052e5760405162461bcd60e51b8152600401610525906158d4565b60405180910390fd5b60008080805b858110156106b757600087878381811061054a57fe5b9050602002013590506000609e60008381526020019081526020016000206040518060e00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a900460020b60020b60020b81526020016000820160139054906101000a900460020b60020b60020b8152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060006106646040518060a001604052808e6001600160a01b031681526020018d6001600160a01b03168152602001846020015160020b8152602001846040015160020b815260200184600001516001600160801b0316815250611eda565b805190915061067490889061220c565b965061068d81602001518761220c90919063ffffffff16565b95506106a681604001518661220c90919063ffffffff16565b945050600190920191506105349050565b506040805160608101825293845260208401929092529082015290505b949350505050565b6001600160a01b038083166000908152609d6020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561074857602002820191906000526020600020905b815481526020019060010190808311610734575b505050505090505b92915050565b61075e611ed6565b6001600160a01b031661076f610fdb565b6001600160a01b0316146107b3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6107c5816001600160a01b0316612264565b6107e15760405162461bcd60e51b815260040161052590615995565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6001600160a01b038084166000908152609d602090815260408083209386168352928152828220805484518184028101840190955280855292938493909283018282801561089857602002820191906000526020600020905b815481526020019060010190808311610884575b5050506001600160a01b038088166000908152609f6020526040808220606754915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db906108e49089906004016156ee565b60206040518083038186803b1580156108fc57600080fd5b505afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190615053565b905060005b8351811015610a1e576000609e600086848151811061095457fe5b60209081029190910181015182528181019290925260409081016000908120825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b968301879052600160981b909104810b810b810b948201859052600183015460608301528201546080820152600382015460a082015260049091015460c08201529350916109fc916109ea8761226a565b8b5160208d01518a94939291906122ea565b9050610a12610a0b83836123da565b88906124c4565b96505050600101610939565b505050505b9392505050565b600054610100900460ff1680610a435750610a43612529565b80610a51575060005460ff16155b610a8c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015610ab7576000805460ff1961ff0019909116610100171660011790555b610ac08361253a565b6001600160a01b038216610ae65760405162461bcd60e51b815260040161052590615955565b609c80546001600160a01b0319166001600160a01b0384161790558015610b13576000805461ff00191690555b505050565b6000805b82811015610b90576001600160a01b0385166000908152609d6020526040812081868685818110610b4957fe5b9050602002016020810190610b5e9190615037565b6001600160a01b031681526020810191909152604001600020541115610b88576001915050610a23565b600101610b1c565b506000949350505050565b6001600160a01b038116600090815260a060205260409020545b919050565b610bc2614df0565b6068546001600160a01b0316610bd6611ed6565b6001600160a01b031614610bfc5760405162461bcd60e51b8152600401610525906158d4565b610750610c0e36849003840184615358565b611eda565b610c1b611ed6565b6001600160a01b0316610c2c610fdb565b6001600160a01b031614610c70576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610c965760405162461bcd60e51b815260040161052590615915565b609b80546001600160a01b0319166001600160a01b0392909216919091179055565b6034546001600160a01b031690565b610ccf611ed6565b6001600160a01b0316610ce0610fdb565b6001600160a01b031614610d24576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020615c3b833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6001600160a01b038084166000908152609d6020908152604080832093861683529281528282208054845181840281018401909552808552929384939092830182828015610dd557602002820191906000526020600020905b815481526020019060010190808311610dc1575b5050506001600160a01b038088166000908152609f6020526040808220606754915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db90610e219089906004016156ee565b60206040518083038186803b158015610e3957600080fd5b505afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190615053565b905060005b8351811015610a1e576000609e6000868481518110610e9157fe5b602090810291909101810151825281019190915260400160009081208054909250610ed590600160801b8104600290810b91600160981b9004900b6109ea8761226a565b6040805160e08101825284546001600160801b0381168252600160801b8104600290810b810b810b6020840152600160981b909104810b810b810b9282019290925260018501546060820152908401546080820152600384015460a0820152600484015460c0820152909150610f4f90610a0b90836123da565b81516002840155602082015160038401556040909101516004909201919091559450600101610e76565b60008060005b83811015610fd2576000858583818110610f9557fe5b9050602002016020810190610faa9190615037565b90506000610fba8883600061262e565b9050610fc6848261220c565b93505050600101610f7f565b50949350505050565b6033546001600160a01b031690565b610ff2614e11565b609b546001600160a01b0316611006611ed6565b6001600160a01b03161461102c5760405162461bcd60e51b815260040161052590615975565b606754825160405163bbe4f6db60e01b81526000926001600160a01b03169163bbe4f6db9161105e91906004016156ee565b60206040518083038186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190615053565b6060840151606754855160405163033e16f360e21b81529394506000928312936001600160a01b0390921691630cf85bcc916110ec916004016156ee565b60806040518083038186803b15801561110457600080fd5b505afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c91906152ca565b606001519050600080600061117f86896060015160a060008c600001516001600160a01b03166001600160a01b03168152602001908152602001600020546128e6565b905087608001516001600160a01b03166000146111a05787608001516111ca565b87602001516111c35773fffd8963efd1fc6a506488495d951d5263988d256111ca565b6401000276a45b6001600160a01b031660808901525b604081015115801590611206575087608001516001600160a01b031681602001516001600160a01b031614155b1561156b57611213614e35565b60208201516001600160a01b03168152815161123e908890611234826129b8565b8c60200151612a2b565b15156040830152600290810b810b60208301819052620d89e719910b121561126f57620d89e719602082015261128e565b6020810151620d89e860029190910b131561128e57620d89e860208201525b61129b8160200151612b4d565b6001600160a01b03166060820152602080830151908a015161133891906112de578a608001516001600160a01b031683606001516001600160a01b0316116112fc565b8a608001516001600160a01b031683606001516001600160a01b0316105b61130a578260600151611310565b8a608001515b846080015185604001518d6020015161132d578d60a00151611333565b8d60c001515b612e74565b60c085015260a084015260808301526001600160a01b03166020830152851561137f5761136e8160c00151826080015101613066565b604083018051919091039052611398565b61138c8160a00151613066565b60408301805190910190525b60808201516001600160801b03161561143a578860200151156113d6576113d08160a001518a60a0015162ffffff16620f42406130ae565b60c08201525b60c0810151938401936000906113f59062ffffff8816620f42406130ae565b60c08301519481019490915060009061140e90836130e8565b905061142c81600160801b86608001516001600160801b0316613145565b606085018051909101905250505b80606001516001600160a01b031682602001516001600160a01b0316141561152d57806040015115611503578860400151156114c55788516001600160a01b03166000908152609f602090815260409182902083820151835160608082018652870151815260e08e0180515182860152519093015193830193909352916114c3918391906131f4565b505b60006114d5888360200151613233565b90508960200151156114e5576000035b6114f38360800151826132c2565b6001600160801b03166080840152505b886020015161151657806020015161151f565b60018160200151035b600290810b900b8252611565565b80600001516001600160a01b031682602001516001600160a01b0316146115655761155b8260200151613378565b600290810b900b82525b506111d9565b87604001511561159557606081015188516001600160a01b0316600090815260a060205260409020555b60408051606081018252915160020b825260208201939093529182015295945050505050565b6115c3614e71565b506000908152609e6020908152604091829020825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b94830194909452600160981b9004830b830b830b9381019390935260018101546060840152908101546080830152600381015460a08301526004015460c082015290565b6034546001600160a01b0316611685576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b61168d611ed6565b6034546001600160a01b039081169116146116d8576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020615c3b83398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b60006106d484848461262e565b609b546001600160a01b031681565b6000611752611ed6565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561178f57600080fd5b505afa1580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c79190615053565b60675460405163bbe4f6db60e01b81529192506001600160a01b03169063bbe4f6db906117f89084906004016156ee565b60206040518083038186803b15801561181057600080fd5b505afa158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190615053565b6001600160a01b0316826001600160a01b0316146118785760405162461bcd60e51b8152600401610525906159b7565b60685460405163d348799760e01b81526001600160a01b039091169063d3487997906118ae908990899089908990600401615b0e565b600060405180830381600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b50505050505050505050565b6118f0614ebd565b6068546001600160a01b0316611904611ed6565b6001600160a01b03161461192a5760405162461bcd60e51b8152600401610525906158d4565b6067546000906001600160a01b031663bbe4f6db61194e6040860160208701615037565b6040518263ffffffff1660e01b815260040161196a91906156ee565b60206040518083038186803b15801561198257600080fd5b505afa158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190615053565b9050600060a0816119d16040870160208801615037565b6001600160a01b03166001600160a01b031681526020019081526020016000205490506000609f6000866020016020810190611a0d9190615037565b6001600160a01b03166001600160a01b031681526020019081526020016000209050611a37614eee565b6000611a5285611a4d60a08a0160808b0161525f565b613663565b90506000611a6a86611a4d60c08b0160a08c0161525f565b9050611b306040518060c00160405280886001600160a01b031681526020018a6080016020810190611a9c919061525f565b60020b8152602001611ab460c08c0160a08d0161525f565b60020b81526020018a6040013581526020018a60600135815260200160405180604001604052808c6000016020810190611aee9190615037565b6001600160a01b031681526020018a6001600160a01b0316815250604051602001611b199190615a4a565b6040516020818303038152906040528152506136f1565b92506000611b3d8761226a565b905082158015611b5c5750611b5c87611a4d60a08c0160808d0161525f565b15611ba157611ba1611b7460a08b0160808c0161525f565b6040805160608101825289815260c08d0135602082015260e08d013591810191909152879190849061385b565b81158015611bbe5750611bbe87611a4d60c08c0160a08d0161525f565b15611bd657611bd6611b7460c08b0160a08c0161525f565b505060408051610100810190915260009150611c969080611bfa60208b018b615037565b6001600160a01b03168152602001896020016020810190611c1b9190615037565b6001600160a01b03908116825288166020820152604001611c4260a08b0160808c0161525f565b60020b8152602001611c5a60c08b0160a08c0161525f565b60020b815260200186815260200184604001516001600160801b031681526020018960c001803603810190611c8f91906152af565b9052613899565b609c549091506001600160a01b0316611cb56040890160208a01615037565b6001600160a01b0316611ccb60208a018a615037565b6001600160a01b0316600080516020615c82833981519152611cf360a08c0160808d0161525f565b611d0360c08d0160a08e0161525f565b8751611d0e90613066565b611d1b8960200151613066565b611d318a604001516001600160801b0316613b4d565b89604051611d4496959493929190615830565b60405180910390a46040805160808101825283518152602080850151908201528082019290925291909101516001600160801b0316606082015295945050505050565b611d8f614e71565b609e6000611d9f87878787613ba5565b81526020808201929092526040908101600020815160e08101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a082015260049091015460c082015295945050505050565b6067546001600160a01b031681565b600080611ecb85609e6000611e4a8a8a8a8a613ba5565b81526020808201929092526040908101600020815160e08101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a082015260049091015460c0820152613c01565b509695505050505050565b3390565b611ee2614df0565b6000611f008360000151846020015185604001518660600151613ba5565b6000818152609e602052604090208054919250906001600160801b0316611f395760405162461bcd60e51b815260040161052590615935565b805460808501516001600160801b0391821691161115611f6b5760405162461bcd60e51b8152600401610525906158b4565b606754602085015160405163bbe4f6db60e01b81526000926001600160a01b03169163bbe4f6db91611fa091906004016156ee565b60206040518083038186803b158015611fb857600080fd5b505afa158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff09190615053565b905060006120656040518060a00160405280846001600160a01b03168152602001609b60009054906101000a90046001600160a01b03166001600160a01b03168152602001886040015160020b8152602001886060015160020b815260200188608001516001600160801b0316815250613cfd565b905060006120dc6040518060c0016040528089600001516001600160a01b0316815260200189602001516001600160a01b03168152602001856001600160a01b03168152602001896040015160020b8152602001896060015160020b815260200189608001516001600160801b0316815250613e48565b90506120ec838860400151613663565b61211c576040808801516020808a01516001600160a01b03166000908152609f9091529190912061211c91613f61565b61212a838860600151613663565b6121595760608701516020808901516001600160a01b03166000908152609f9091526040902061215991613f61565b609c546020880151885160408a015160608b015186516001600160a01b03958616959485169490931692600080516020615c8283398151915292919061219e90613066565b6000036121ae8960200151613066565b6000036121c78f608001516001600160801b0316613b4d565b600003896040516121dd96959493929190615830565b60405180910390a460408051606081018252835181526020938401519381019390935282015295945050505050565b600082820183811015610a23576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b3b151590565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156122a557600080fd5b505afa1580156122b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122dd9190615591565b5093979650505050505050565b6122f2614df0565b600286810b80820b600090815260208a905260408082206001908101548a860b860b84529190922090910154909290919087900b121561233457818503612336565b815b60208401526000600288810b9088900b1261235357818603612355565b815b60028a810b80820b600090815260208e905260408082208401548d850b850b835290822084015494955093929091908b900b121561239557828803612397565b825b905060008b60020b8b60020b126123b0578289036123b2565b825b6020890151909a03949094038752909603969096036040850152509198975050505050505050565b6000806123ea8460400151612b4d565b905060006124076123fe8660200151612b4d565b86518490613f85565b905060006124386124298760a001518760200151613fee90919063ffffffff16565b61243284613066565b90614053565b905060006124a5612491612478866001600160a01b0316612472600160601b6124328d608001518d60000151613fee90919063ffffffff16565b906140fc565b60c08a015160408a015161248b91613fee565b90613fee565b8851612432906001600160801b0316613066565b90506124b9600160601b61247284846124c4565b979650505050505050565b60008282018183128015906124d95750838112155b806124ee57506000831280156124ee57508381125b610a235760405162461bcd60e51b8152600401808060200182810382526021815260200180615bcb6021913960400191505060405180910390fd5b600061253430612264565b15905090565b600054610100900460ff16806125535750612553612529565b80612561575060005460ff16155b61259c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff161580156125c7576000805460ff1961ff0019909116610100171660011790555b6125cf6141b4565b6125e1826001600160a01b0316612264565b6125fd5760405162461bcd60e51b815260040161052590615892565b606780546001600160a01b0319166001600160a01b038416179055801561262a576000805461ff00191690555b5050565b6001600160a01b038084166000908152609d602090815260408083209386168352928152828220805484518184028101840190955280855292938493909283018282801561269b57602002820191906000526020600020905b815481526020019060010190808311612687575b505060675460405163bbe4f6db60e01b815294955060009461272f94506001600160a01b03909116925063bbe4f6db91506126da9089906004016156ee565b60206040518083038186803b1580156126f257600080fd5b505afa158015612706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272a9190615053565b6142a4565b905060005b82518110156128dc576000609e600085848151811061274f57fe5b60209081029190910181015182528181019290925260409081016000908120825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b968301879052600160981b909104810b810b810b9482019490945260018201546060820152928101546080840152600381015460a08401526004015460c08301529092509081906127e490612b4d565b905060006127f58460400151612b4d565b90508880156128155750806001600160a01b0316866001600160a01b0316105b1561284e57612847826001600160a01b0316876001600160a01b03161161283c578261283e565b865b85518390613f85565b92506128a1565b8815801561286d5750816001600160a01b0316866001600160a01b0316115b156128a15761289e82826001600160a01b0316886001600160a01b0316106128955782612897565b875b8651614324565b92505b506128ae9050868261220c565b9550866128d25760006128c18984613c01565b5090506128ce878261220c565b9650505b5050600101612734565b5050509392505050565b6128ee614f18565b600080856001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561292a57600080fd5b505afa15801561293e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129629190615591565b5050505050915091506040518060a001604052808260020b8152602001836001600160a01b031681526020018681526020018581526020016129a388614367565b6001600160801b031690529695505050505050565b6000816001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f357600080fd5b505afa158015612a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610750919061527b565b60008060008460020b8660020b81612a3f57fe5b05905060008660020b128015612a6657508460020b8660020b81612a5f57fe5b0760020b15155b15612a7057600019015b8315612ad957600080612a82836143da565b9092509050600160ff82161b800160001901600081612aa18c866143ec565b168015159650905085612abb57888360ff16860302612ace565b88612ac58261446b565b840360ff168603025b965050505050612b43565b600080612ae8836001016143da565b9092509050600019600160ff83161b0119600081612b068c866143ec565b168015159650905085612b2657888360ff0360ff16866001010102612b3c565b8883612b3183614505565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612b64578260020b612b6c565b8260020b6000035b9050620d89e8811115612baa576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612bbe57600160801b612bd0565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615612bfa576ffff97272373d413259a46990580e213a0260801c5b6004821615612c19576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612c38576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612c57576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612c76576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612c95576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612cb4576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612cd4576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612cf4576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612d14576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612d34576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612d54576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612d74576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612d94576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612db4576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612dd5576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612df5576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612e14576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612e31576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612e4c578060001981612e4857fe5b0490505b600160201b810615612e5f576001612e62565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a161015818712801590612ef9576000612ead8989620f42400362ffffff16620f4240613145565b905082612ec657612ec18c8c8c60016145ee565b612ed3565b612ed38b8d8c6001614667565b9550858110612ee4578a9650612ef3565b612ef08c8b8386614707565b96505b50612f43565b81612f1057612f0b8b8b8b6000614667565b612f1d565b612f1d8a8c8b60006145ee565b9350838860000310612f3157899550612f43565b612f408b8a8a60000385614753565b95505b6001600160a01b038a8116908716148215612fa657808015612f625750815b612f7857612f73878d8c6001614667565b612f7a565b855b9550808015612f87575081155b612f9d57612f98878d8c60006145ee565b612f9f565b845b9450612ff0565b808015612fb05750815b612fc657612fc18c888c60016145ee565b612fc8565b855b9550808015612fd5575081155b612feb57612fe68c888c6000614667565b612fed565b845b94505b8115801561300057508860000385115b1561300c578860000394505b81801561302b57508a6001600160a01b0316876001600160a01b031614155b1561303a578589039350613057565b613054868962ffffff168a620f42400362ffffff166130ae565b93505b50505095509550955095915050565b6000600160ff1b82106130aa5760405162461bcd60e51b8152600401808060200182810382526028815260200180615ca26028913960400191505060405180910390fd5b5090565b60006130bb848484613145565b9050600082806130c757fe5b8486091115610a235760001981106130de57600080fd5b6001019392505050565b60008282111561313f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080806000198587098686029250828110908390030390508061317b576000841161317057600080fd5b508290049050610a23565b80841161318757600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600291820b820b600090815260209384526040908190208054835103815560018101805495840151959095039094559290910180549190920151039055565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba9390613262908590600401615822565b6101006040518083038186803b15801561327b57600080fd5b505afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b391906154b9565b50949998505050505050505050565b60008082600f0b121561332757826001600160801b03168260000384039150816001600160801b031610613322576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b610750565b826001600160801b03168284019150816001600160801b03161015610750576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906133b4575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6133e9576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061347b57607f810383901c9150613485565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c600160371b161760c99190911c600160361b161760ca9190911c600160351b161760cb9190911c600160341b161760cc9190911c600160331b161760cd9190911c600160321b1617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461365457886001600160a01b031661363882612b4d565b6001600160a01b0316111561364d578161364f565b805b613656565b815b9998505050505050505050565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba9390613692908590600401615822565b6101006040518083038186803b1580156136ab57600080fd5b505afa1580156136bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e391906154b9565b9a9950505050505050505050565b6136f9614eee565b600082606001511180613710575060008260800151115b61372c5760405162461bcd60e51b8152600401610525906158f5565b600061376761373e84600001516142a4565b61374b8560200151612b4d565b6137588660400151612b4d565b8660600151876080015161479f565b90506000816001600160801b0316116137925760405162461bcd60e51b8152600401610525906159f7565b8251602084015160408086015160a08701519151633c8a7d8d60e01b815260009485946001600160a01b0390911693633c8a7d8d936137d8933093928a91600401615702565b6040805180830381600087803b1580156137f157600080fd5b505af1158015613805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138299190615637565b915091506040518060600160405280838152602001828152602001846001600160801b03168152509350505050919050565b8160020b8360020b13613893578051600284810b810b6000908152602087815260409182902093845584015160018401558301519101555b50505050565b6000806138b88360000151846020015185606001518660800151613ba5565b6000818152609e6020526040812080549293509181906001600160801b0316613a7d5785516001600160a01b039081166000908152609d60209081526040808320828b015185168452825280832060675482516317541d4f60e31b815292519195169263baa0ea789260048082019391829003018186803b15801561393c57600080fd5b505afa158015613950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397491906156d4565b905060ff811615806139895750815460ff8216115b6139a55760405162461bcd60e51b8152600401610525906159d7565b81546001810183556000838152602080822090920188905560608a0151875460808c015162ffffff60801b19909116600160801b600293840b62ffffff90811682029290921762ffffff60981b1916600160981b93850b92909216830291909117808b558d8601516001600160a01b03168552609f9095526040808520908e01519095613a5994928104830b93900490910b90613a419061226a565b60e08e015180516020909101518794939291906122ea565b805160028901556020810151600389015560400151600488015550613afc92505050565b6020808701516040805160e08101825286546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9181019190915260018601546060820152918501546080830152600385015460a0830152600485015460c0830152613af691613c01565b90925090505b60c08601518354613b2291613b1d916001600160801b03908116911661220c565b614861565b83546001600160801b0319166001600160801b03919091161783556001909201919091559392505050565b600060016001607f1b03198212158015613b6a57506001607f1b82125b6130aa5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ba46027913960400191505060405180910390fd5b604080516001600160601b0319606096871b81166020808401919091529590961b9095166034860152600292830b60e890811b60488701529190920b901b604b8401528051602e818503018152604e9093019052815191012090565b6001600160a01b038083166000908152609f602090815260408083209185015185820151606754925163bbe4f6db60e01b815294958695613cce94613cab92169063bbe4f6db90613c56908c906004016156ee565b60206040518083038186803b158015613c6e57600080fd5b505afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca69190615053565b61226a565b6001600160a01b038916600090815260a0602052604090205485939291906148a5565b9150613cf28460600151830385600001516001600160801b0316600160801b613145565b9250505b9250929050565b613d05614f46565b60008083600001516001600160a01b031663a34123a78560400151866060015187608001516040518463ffffffff1660e01b8152600401613d4893929190615863565b6040805180830381600087803b158015613d6157600080fd5b505af1158015613d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d999190615637565b9150915083600001516001600160a01b0316634f1eb3d88560200151866040015187606001516001600160801b03806040518663ffffffff1660e01b8152600401613de8959493929190615788565b6040805180830381600087803b158015613e0157600080fd5b505af1158015613e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e399190615563565b50509082526020820152919050565b600080613e678360000151846020015185606001518660800151613ba5565b6000818152609e6020908152604080832087830151825160e08101845282546001600160801b0381168252600160801b8104600290810b810b810b96830196909652600160981b9004850b850b850b9381019390935260018201546060840152928101546080830152600381015460a0830152600481015460c08301529394508291613ef291613c01565b60a08801518554929450909250613f1991613b1d916001600160801b0391821691166130e8565b83546001600160801b0319166001600160801b039182161780855516613f5157613f4c866000015187602001518661490d565b610fd2565b6001830181905550949350505050565b600290810b810b600090815260209290925260408220828155600181018390550155565b6000826001600160a01b0316846001600160a01b03161115613fa5579192915b836001600160a01b0316613fde606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316613145565b81613fe557fe5b04949350505050565b60008183038183128015906140035750838113155b80614018575060008312801561401857508381135b610a235760405162461bcd60e51b8152600401808060200182810382526024815260200180615cca6024913960400191505060405180910390fd5b60008261406257506000610750565b826000191480156140765750600160ff1b82145b156140b25760405162461bcd60e51b8152600401808060200182810382526027815260200180615c5b6027913960400191505060405180910390fd5b828202828482816140bf57fe5b0514610a235760405162461bcd60e51b8152600401808060200182810382526027815260200180615c5b6027913960400191505060405180910390fd5b600081614150576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b816000191480156141645750600160ff1b83145b156141a05760405162461bcd60e51b8152600401808060200182810382526021815260200180615c1a6021913960400191505060405180910390fd5b60008284816141ab57fe5b05949350505050565b600054610100900460ff16806141cd57506141cd612529565b806141db575060005460ff16155b6142165760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614241576000805460ff1961ff0019909116610100171660011790555b6142496149fc565b6000614253611ed6565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020615c3b833981519152908290a35080156142a1576000805461ff00191690555b50565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156142df57600080fd5b505afa1580156142f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143179190615591565b5094979650505050505050565b6000826001600160a01b0316846001600160a01b03161115614344579192915b6106d4826001600160801b03168585036001600160a01b0316600160601b613145565b6000816001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b1580156143a257600080fd5b505afa1580156143b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610750919061549d565b60020b600881901d9161010090910790565b60405163299ce14b60e11b81526000906001600160a01b03841690635339c2969061441b908590600401615814565b60206040518083038186803b15801561443357600080fd5b505afa158015614447573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a23919061561f565b600080821161447957600080fd5b600160801b821061448c57608091821c91015b600160401b821061449f57604091821c91015b600160201b82106144b257602091821c91015b6201000082106144c457601091821c91015b61010082106144d557600891821c91015b601082106144e557600491821c91015b600482106144f557600291821c91015b60028210610bb557600101919050565b600080821161451357600080fd5b5060ff6001600160801b0382161561452e57607f1901614536565b608082901c91505b6001600160401b0382161561454e57603f1901614556565b604082901c91505b63ffffffff82161561456b57601f1901614573565b602082901c91505b61ffff82161561458657600f190161458e565b601082901c91505b60ff8216156145a057600719016145a8565b600882901c91505b600f8216156145ba57600319016145c2565b600482901c91505b60038216156145d457600119016145dc565b600282901c91505b6001821615610bb55760001901919050565b6000836001600160a01b0316856001600160a01b0316111561460e579293925b8161463b57614636836001600160801b03168686036001600160a01b0316600160601b613145565b61465e565b61465e836001600160801b03168686036001600160a01b0316600160601b6130ae565b95945050505050565b6000836001600160a01b0316856001600160a01b03161115614687579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166146b157600080fd5b836146e157866001600160a01b03166146d48383896001600160a01b0316613145565b816146db57fe5b046124b9565b6124b96146f88383896001600160a01b03166130ae565b886001600160a01b0316614aa5565b600080856001600160a01b03161161471e57600080fd5b6000846001600160801b03161161473457600080fd5b81614746576146368585856001614ab0565b61465e8585856001614b91565b600080856001600160a01b03161161476a57600080fd5b6000846001600160801b03161161478057600080fd5b81614792576146368585856000614b91565b61465e8585856000614ab0565b6000836001600160a01b0316856001600160a01b031611156147bf579293925b846001600160a01b0316866001600160a01b0316116147ea576147e3858585614c74565b905061465e565b836001600160a01b0316866001600160a01b0316101561484c576000614811878686614c74565b90506000614820878986614cd7565b9050806001600160801b0316826001600160801b0316106148415780614843565b815b9250505061465e565b614857858584614cd7565b9695505050505050565b6000600160801b82106130aa5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ba46027913960400191505060405180910390fd5b600284810b80820b6000908152602088905260408082205487850b850b83529082205491939092849187900b12156148df578285036148e1565b825b905060008760020b8760020b126148fa578286036148fc565b825b919095030398975050505050505050565b6001600160a01b038084166000908152609d602090815260408083209386168352929052908120905b81548110156149c1578282828154811061494c57fe5b906000526020600020015414156149b95781548290600019810190811061496f57fe5b906000526020600020015482828154811061498657fe5b90600052602060002001819055508180548061499e57fe5b600190038181906000526020600020016000905590556149c1565b600101614936565b50506000908152609e6020526040812080546001600160b01b0319168155600181018290556002810182905560038101829055600401555050565b600054610100900460ff1680614a155750614a15612529565b80614a23575060005460ff16155b614a5e5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614a89576000805460ff1961ff0019909116610100171660011790555b614a91614d14565b80156142a1576000805461ff001916905550565b808204910615150190565b60008115614b235760006001600160a01b03841115614ae657614ae184600160601b876001600160801b0316613145565b614afe565b6001600160801b038516606085901b81614afc57fe5b045b9050614b1b614b166001600160a01b03881683614db4565b614dc4565b9150506106d4565b60006001600160a01b03841115614b5157614b4c84600160601b876001600160801b03166130ae565b614b68565b614b68606085901b6001600160801b038716614aa5565b905080866001600160a01b031611614b7f57600080fd5b6001600160a01b0386160390506106d4565b600082614b9f5750836106d4565b600160601b600160e01b03606085901b168215614c2d576001600160a01b03861684810290858281614bcd57fe5b041415614bfe57818101828110614bfc57614bf283896001600160a01b0316836130ae565b93505050506106d4565b505b614c2482614c1f878a6001600160a01b03168681614c1857fe5b0490614db4565b614aa5565b925050506106d4565b6001600160a01b03861684810290858281614c4457fe5b04148015614c5157508082115b614c5a57600080fd5b808203614bf2614b16846001600160a01b038b16846130ae565b6000826001600160a01b0316846001600160a01b03161115614c94579192915b6000614cb7856001600160a01b0316856001600160a01b0316600160601b613145565b905061465e614cd284838888036001600160a01b0316613145565b614dda565b6000826001600160a01b0316846001600160a01b03161115614cf7579192915b6106d4614cd283600160601b8787036001600160a01b0316613145565b600054610100900460ff1680614d2d5750614d2d612529565b80614d3b575060005460ff16155b614d765760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614a91576000805460ff1961ff00199091166101001716600117905580156142a1576000805461ff001916905550565b8082018281101561075057600080fd5b806001600160a01b0381168114610bb557600080fd5b806001600160801b0381168114610bb557600080fd5b60405180606001604052806000815260200160008152602001600081525090565b6040518060600160405280600060020b815260200160008152602001600081525090565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060e0016040528060006001600160801b03168152602001600060020b8152602001600060020b8152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060008152602001600081526020016000815260200160006001600160801b031681525090565b6040518060600160405280600081526020016000815260200160006001600160801b031681525090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604051806040016040528060008152602001600081525090565b8035610bb581615b4b565b60008083601f840112614f7c578182fd5b5081356001600160401b03811115614f92578182fd5b6020830191508360208083028501011115613cf657600080fd5b8035610bb581615b60565b8051610bb581615b60565b600060408284031215614fd3578081fd5b604080519081016001600160401b0381118282101715614fef57fe5b604052823581526020928301359281019290925250919050565b805161ffff81168114610bb557600080fd5b8035610bb581615b92565b805160ff81168114610bb557600080fd5b600060208284031215615048578081fd5b8135610a2381615b4b565b600060208284031215615064578081fd5b8151610a2381615b4b565b60008060408385031215615081578081fd5b823561508c81615b4b565b9150602083013561509c81615b4b565b809150509250929050565b600080600080606085870312156150bc578182fd5b84356150c781615b4b565b935060208501356150d781615b4b565b925060408501356001600160401b038111156150f1578283fd5b6150fd87828801614f6b565b95989497509550505050565b60008060006060848603121561511d578081fd5b833561512881615b4b565b9250602084013561513881615b4b565b9150604084013561514881615b60565b809150509250925092565b60008060008060808587031215615168578182fd5b843561517381615b4b565b9350602085013561518381615b4b565b9250604085013561519381615b6e565b915060608501356151a381615b6e565b939692955090935050565b6000806000608084860312156151c2578081fd5b83356151cd81615b4b565b925060208401356151dd81615b4b565b91506151ec8560408601614fc2565b90509250925092565b600080600060408486031215615209578081fd5b833561521481615b4b565b925060208401356001600160401b0381111561522e578182fd5b61523a86828701614f6b565b9497909650939450505050565b600060208284031215615258578081fd5b5035919050565b600060208284031215615270578081fd5b8135610a2381615b6e565b60006020828403121561528c578081fd5b8151610a2381615b6e565b600061010082840312156152a9578081fd5b50919050565b6000604082840312156152c0578081fd5b610a238383614fc2565b6000608082840312156152db578081fd5b604051608081016001600160401b03811182821017156152f757fe5b604052825161530581615b4b565b8152602083015161531581615b92565b6020820152604083015161532881615b92565b6040820152606083015161533b81615b92565b60608201529392505050565b600060a082840312156152a9578081fd5b600060a08284031215615369578081fd5b60405160a081016001600160401b038111828210171561538557fe5b604052823561539381615b4b565b815260208301356153a381615b4b565b602082015260408301356153b681615b6e565b604082015260608301356153c981615b6e565b606082015260808301356153dc81615b7d565b60808201529392505050565b600061012082840312156153fa578081fd5b60405161010081016001600160401b038111828210171561541757fe5b60405261542383614f60565b815261543160208401614fac565b602082015261544260408401614fac565b60408201526060830135606082015261545d60808401614f60565b608082015261546e60a0840161501b565b60a082015261547f60c0840161501b565b60c08201526154918460e08501614fc2565b60e08201529392505050565b6000602082840312156154ae578081fd5b8151610a2381615b7d565b600080600080600080600080610100898b0312156154d5578586fd5b88516154e081615b7d565b80985050602089015180600f0b81146154f7578687fd5b80975050604089015195506060890151945060808901518060060b811461551c578485fd5b60a08a015190945061552d81615b4b565b60c08a015190935063ffffffff81168114615546578283fd5b915061555460e08a01614fb7565b90509295985092959890939650565b60008060408385031215615575578182fd5b825161558081615b7d565b602084015190925061509c81615b7d565b600080600080600080600060e0888a0312156155ab578081fd5b87516155b681615b4b565b60208901519097506155c781615b6e565b95506155d560408901615009565b94506155e360608901615009565b93506155f160808901615009565b92506155ff60a08901615026565b915060c088015161560f81615b60565b8091505092959891949750929550565b600060208284031215615630578081fd5b5051919050565b60008060408385031215615649578182fd5b505080516020909101519092909150565b6000806000806060858703121561566f578182fd5b843593506020850135925060408501356001600160401b0380821115615693578384fd5b818701915087601f8301126156a6578384fd5b8135818111156156b4578485fd5b8860208285010111156156c5578485fd5b95989497505060200194505050565b6000602082840312156156e5578081fd5b610a2382615026565b6001600160a01b0391909116815260200190565b600060018060a01b038716825260208660020b818401528560020b604084015260018060801b038516606084015260a0608084015283518060a0850152825b8181101561575d5785810183015185820160c001528201615741565b8181111561576e578360c083870101525b50601f01601f19169290920160c001979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020808252825182820181905260009190848201906040850190845b818110156157fd578351835292840192918401916001016157e1565b50909695505050505050565b901515815260200190565b60019190910b815260200190565b60029190910b815260200190565b600296870b81529490950b602085015260408401929092526060830152600f0b608082015260a081019190915260c00190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b90815260200190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b60208082526006908201526513d097d3915360d21b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526006908201526555425f5a497360d01b604082015260600190565b60208082526006908201526504f425f4348360d41b604082015260600190565b6020808252600690820152654f425f4e454f60d01b604082015260600190565b60208082526006908201526504f425f5154360d41b604082015260600190565b60208082526006908201526509e84be9e8ab60d31b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b60208082526006908201526522ac2fa321ab60d11b604082015260600190565b6020808252600690820152654f425f4f4e4560d01b604082015260600190565b602080825260059082015264155097d69360da1b604082015260600190565b8151815260208083015190820152604080830151908201526060918201516001600160801b03169181019190915260800190565b81516001600160a01b039081168252602092830151169181019190915260400190565b600060e08201905060018060801b038351168252602083015160020b6020830152604083015160020b6040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b81518152602080830151908201526040918201519181019190915260600190565b815160020b8152602080830151908201526040918201519181019190915260600190565b60008582528460208301526060604083015282606083015282846080840137818301608090810191909152601f909201601f191601019392505050565b6001600160a01b03811681146142a157600080fd5b80151581146142a157600080fd5b8060020b81146142a157600080fd5b6001600160801b03811681146142a157600080fd5b62ffffff811681146142a157600080fdfe53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77cb47d8bf351d355bdd5497973533eada41777b4509f2585a62ae246336ebaa9453616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a2646970667358221220cee7395b427f4286977b44509f9ce8c70c75ff66eab6e41bb1fc7d54595e29b364736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101495760003560e01c80630af968001461014e57806313af40351461016c578063217a4b7014610181578063398dbcfd14610189578063436933ea146101a9578063449323d8146101c957806347b52fb7146101dc578063485cc955146101fc5780634dffaee51461020f57806359bfbc5a1461022f5780635b778b9d1461024257806367b1f5df146102555780636c8381f814610268578063715018a6146102705780637fc2673614610278578063865bcccc1461028b5780638da5cb5b1461029e578063a3bf0df8146102a6578063acf71827146102c6578063bc5920ba146102e6578063bf0b1abb146102ee578063d2f7265a14610301578063d348799714610309578063e8ab2fb31461031c578063eaad23541461033c578063ecb96fe61461034f578063ffa6132714610357575b600080fd5b61015661036a565b60405161016391906156ee565b60405180910390f35b61017f61017a366004615037565b610379565b005b6101566104d4565b61019c6101973660046150a7565b6104e3565b6040516101639190615ac9565b6101bc6101b736600461506f565b6106dc565b60405161016391906157c5565b61017f6101d7366004615037565b610756565b6101ef6101ea3660046151ae565b61082b565b6040516101639190615889565b61017f61020a36600461506f565b610a2a565b61022261021d3660046151f5565b610b18565b6040516101639190615809565b6101ef61023d366004615037565b610b9b565b61019c610250366004615347565b610bba565b61017f610263366004615037565b610c13565b610156610cb8565b61017f610cc7565b6101ef6102863660046151ae565b610d68565b6101ef6102993660046151f5565b610f79565b610156610fdb565b6102b96102b43660046153e8565b610fea565b6040516101639190615aea565b6102d96102d4366004615247565b6115bb565b6040516101639190615a6d565b61017f611640565b6101ef6102fc366004615109565b61172c565b610156611739565b61017f61031736600461565a565b611748565b61032f61032a366004615297565b6118e8565b6040516101639190615a16565b6102d961034a366004615153565b611d87565b610156611e24565b6101ef610365366004615153565b611e33565b6068546001600160a01b031681565b610381611ed6565b6001600160a01b0316610392610fdb565b6001600160a01b0316146103d6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661041a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610466576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156104b2576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b609c546001600160a01b031681565b6104eb614df0565b6068546001600160a01b03166104ff611ed6565b6001600160a01b03161461052e5760405162461bcd60e51b8152600401610525906158d4565b60405180910390fd5b60008080805b858110156106b757600087878381811061054a57fe5b9050602002013590506000609e60008381526020019081526020016000206040518060e00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a900460020b60020b60020b81526020016000820160139054906101000a900460020b60020b60020b8152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060006106646040518060a001604052808e6001600160a01b031681526020018d6001600160a01b03168152602001846020015160020b8152602001846040015160020b815260200184600001516001600160801b0316815250611eda565b805190915061067490889061220c565b965061068d81602001518761220c90919063ffffffff16565b95506106a681604001518661220c90919063ffffffff16565b945050600190920191506105349050565b506040805160608101825293845260208401929092529082015290505b949350505050565b6001600160a01b038083166000908152609d6020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561074857602002820191906000526020600020905b815481526020019060010190808311610734575b505050505090505b92915050565b61075e611ed6565b6001600160a01b031661076f610fdb565b6001600160a01b0316146107b3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6107c5816001600160a01b0316612264565b6107e15760405162461bcd60e51b815260040161052590615995565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6001600160a01b038084166000908152609d602090815260408083209386168352928152828220805484518184028101840190955280855292938493909283018282801561089857602002820191906000526020600020905b815481526020019060010190808311610884575b5050506001600160a01b038088166000908152609f6020526040808220606754915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db906108e49089906004016156ee565b60206040518083038186803b1580156108fc57600080fd5b505afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190615053565b905060005b8351811015610a1e576000609e600086848151811061095457fe5b60209081029190910181015182528181019290925260409081016000908120825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b968301879052600160981b909104810b810b810b948201859052600183015460608301528201546080820152600382015460a082015260049091015460c08201529350916109fc916109ea8761226a565b8b5160208d01518a94939291906122ea565b9050610a12610a0b83836123da565b88906124c4565b96505050600101610939565b505050505b9392505050565b600054610100900460ff1680610a435750610a43612529565b80610a51575060005460ff16155b610a8c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015610ab7576000805460ff1961ff0019909116610100171660011790555b610ac08361253a565b6001600160a01b038216610ae65760405162461bcd60e51b815260040161052590615955565b609c80546001600160a01b0319166001600160a01b0384161790558015610b13576000805461ff00191690555b505050565b6000805b82811015610b90576001600160a01b0385166000908152609d6020526040812081868685818110610b4957fe5b9050602002016020810190610b5e9190615037565b6001600160a01b031681526020810191909152604001600020541115610b88576001915050610a23565b600101610b1c565b506000949350505050565b6001600160a01b038116600090815260a060205260409020545b919050565b610bc2614df0565b6068546001600160a01b0316610bd6611ed6565b6001600160a01b031614610bfc5760405162461bcd60e51b8152600401610525906158d4565b610750610c0e36849003840184615358565b611eda565b610c1b611ed6565b6001600160a01b0316610c2c610fdb565b6001600160a01b031614610c70576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610c965760405162461bcd60e51b815260040161052590615915565b609b80546001600160a01b0319166001600160a01b0392909216919091179055565b6034546001600160a01b031690565b610ccf611ed6565b6001600160a01b0316610ce0610fdb565b6001600160a01b031614610d24576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020615c3b833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6001600160a01b038084166000908152609d6020908152604080832093861683529281528282208054845181840281018401909552808552929384939092830182828015610dd557602002820191906000526020600020905b815481526020019060010190808311610dc1575b5050506001600160a01b038088166000908152609f6020526040808220606754915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db90610e219089906004016156ee565b60206040518083038186803b158015610e3957600080fd5b505afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190615053565b905060005b8351811015610a1e576000609e6000868481518110610e9157fe5b602090810291909101810151825281019190915260400160009081208054909250610ed590600160801b8104600290810b91600160981b9004900b6109ea8761226a565b6040805160e08101825284546001600160801b0381168252600160801b8104600290810b810b810b6020840152600160981b909104810b810b810b9282019290925260018501546060820152908401546080820152600384015460a0820152600484015460c0820152909150610f4f90610a0b90836123da565b81516002840155602082015160038401556040909101516004909201919091559450600101610e76565b60008060005b83811015610fd2576000858583818110610f9557fe5b9050602002016020810190610faa9190615037565b90506000610fba8883600061262e565b9050610fc6848261220c565b93505050600101610f7f565b50949350505050565b6033546001600160a01b031690565b610ff2614e11565b609b546001600160a01b0316611006611ed6565b6001600160a01b03161461102c5760405162461bcd60e51b815260040161052590615975565b606754825160405163bbe4f6db60e01b81526000926001600160a01b03169163bbe4f6db9161105e91906004016156ee565b60206040518083038186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190615053565b6060840151606754855160405163033e16f360e21b81529394506000928312936001600160a01b0390921691630cf85bcc916110ec916004016156ee565b60806040518083038186803b15801561110457600080fd5b505afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c91906152ca565b606001519050600080600061117f86896060015160a060008c600001516001600160a01b03166001600160a01b03168152602001908152602001600020546128e6565b905087608001516001600160a01b03166000146111a05787608001516111ca565b87602001516111c35773fffd8963efd1fc6a506488495d951d5263988d256111ca565b6401000276a45b6001600160a01b031660808901525b604081015115801590611206575087608001516001600160a01b031681602001516001600160a01b031614155b1561156b57611213614e35565b60208201516001600160a01b03168152815161123e908890611234826129b8565b8c60200151612a2b565b15156040830152600290810b810b60208301819052620d89e719910b121561126f57620d89e719602082015261128e565b6020810151620d89e860029190910b131561128e57620d89e860208201525b61129b8160200151612b4d565b6001600160a01b03166060820152602080830151908a015161133891906112de578a608001516001600160a01b031683606001516001600160a01b0316116112fc565b8a608001516001600160a01b031683606001516001600160a01b0316105b61130a578260600151611310565b8a608001515b846080015185604001518d6020015161132d578d60a00151611333565b8d60c001515b612e74565b60c085015260a084015260808301526001600160a01b03166020830152851561137f5761136e8160c00151826080015101613066565b604083018051919091039052611398565b61138c8160a00151613066565b60408301805190910190525b60808201516001600160801b03161561143a578860200151156113d6576113d08160a001518a60a0015162ffffff16620f42406130ae565b60c08201525b60c0810151938401936000906113f59062ffffff8816620f42406130ae565b60c08301519481019490915060009061140e90836130e8565b905061142c81600160801b86608001516001600160801b0316613145565b606085018051909101905250505b80606001516001600160a01b031682602001516001600160a01b0316141561152d57806040015115611503578860400151156114c55788516001600160a01b03166000908152609f602090815260409182902083820151835160608082018652870151815260e08e0180515182860152519093015193830193909352916114c3918391906131f4565b505b60006114d5888360200151613233565b90508960200151156114e5576000035b6114f38360800151826132c2565b6001600160801b03166080840152505b886020015161151657806020015161151f565b60018160200151035b600290810b900b8252611565565b80600001516001600160a01b031682602001516001600160a01b0316146115655761155b8260200151613378565b600290810b900b82525b506111d9565b87604001511561159557606081015188516001600160a01b0316600090815260a060205260409020555b60408051606081018252915160020b825260208201939093529182015295945050505050565b6115c3614e71565b506000908152609e6020908152604091829020825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b94830194909452600160981b9004830b830b830b9381019390935260018101546060840152908101546080830152600381015460a08301526004015460c082015290565b6034546001600160a01b0316611685576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b61168d611ed6565b6034546001600160a01b039081169116146116d8576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020615c3b83398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b60006106d484848461262e565b609b546001600160a01b031681565b6000611752611ed6565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561178f57600080fd5b505afa1580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c79190615053565b60675460405163bbe4f6db60e01b81529192506001600160a01b03169063bbe4f6db906117f89084906004016156ee565b60206040518083038186803b15801561181057600080fd5b505afa158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190615053565b6001600160a01b0316826001600160a01b0316146118785760405162461bcd60e51b8152600401610525906159b7565b60685460405163d348799760e01b81526001600160a01b039091169063d3487997906118ae908990899089908990600401615b0e565b600060405180830381600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b50505050505050505050565b6118f0614ebd565b6068546001600160a01b0316611904611ed6565b6001600160a01b03161461192a5760405162461bcd60e51b8152600401610525906158d4565b6067546000906001600160a01b031663bbe4f6db61194e6040860160208701615037565b6040518263ffffffff1660e01b815260040161196a91906156ee565b60206040518083038186803b15801561198257600080fd5b505afa158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190615053565b9050600060a0816119d16040870160208801615037565b6001600160a01b03166001600160a01b031681526020019081526020016000205490506000609f6000866020016020810190611a0d9190615037565b6001600160a01b03166001600160a01b031681526020019081526020016000209050611a37614eee565b6000611a5285611a4d60a08a0160808b0161525f565b613663565b90506000611a6a86611a4d60c08b0160a08c0161525f565b9050611b306040518060c00160405280886001600160a01b031681526020018a6080016020810190611a9c919061525f565b60020b8152602001611ab460c08c0160a08d0161525f565b60020b81526020018a6040013581526020018a60600135815260200160405180604001604052808c6000016020810190611aee9190615037565b6001600160a01b031681526020018a6001600160a01b0316815250604051602001611b199190615a4a565b6040516020818303038152906040528152506136f1565b92506000611b3d8761226a565b905082158015611b5c5750611b5c87611a4d60a08c0160808d0161525f565b15611ba157611ba1611b7460a08b0160808c0161525f565b6040805160608101825289815260c08d0135602082015260e08d013591810191909152879190849061385b565b81158015611bbe5750611bbe87611a4d60c08c0160a08d0161525f565b15611bd657611bd6611b7460c08b0160a08c0161525f565b505060408051610100810190915260009150611c969080611bfa60208b018b615037565b6001600160a01b03168152602001896020016020810190611c1b9190615037565b6001600160a01b03908116825288166020820152604001611c4260a08b0160808c0161525f565b60020b8152602001611c5a60c08b0160a08c0161525f565b60020b815260200186815260200184604001516001600160801b031681526020018960c001803603810190611c8f91906152af565b9052613899565b609c549091506001600160a01b0316611cb56040890160208a01615037565b6001600160a01b0316611ccb60208a018a615037565b6001600160a01b0316600080516020615c82833981519152611cf360a08c0160808d0161525f565b611d0360c08d0160a08e0161525f565b8751611d0e90613066565b611d1b8960200151613066565b611d318a604001516001600160801b0316613b4d565b89604051611d4496959493929190615830565b60405180910390a46040805160808101825283518152602080850151908201528082019290925291909101516001600160801b0316606082015295945050505050565b611d8f614e71565b609e6000611d9f87878787613ba5565b81526020808201929092526040908101600020815160e08101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a082015260049091015460c082015295945050505050565b6067546001600160a01b031681565b600080611ecb85609e6000611e4a8a8a8a8a613ba5565b81526020808201929092526040908101600020815160e08101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a082015260049091015460c0820152613c01565b509695505050505050565b3390565b611ee2614df0565b6000611f008360000151846020015185604001518660600151613ba5565b6000818152609e602052604090208054919250906001600160801b0316611f395760405162461bcd60e51b815260040161052590615935565b805460808501516001600160801b0391821691161115611f6b5760405162461bcd60e51b8152600401610525906158b4565b606754602085015160405163bbe4f6db60e01b81526000926001600160a01b03169163bbe4f6db91611fa091906004016156ee565b60206040518083038186803b158015611fb857600080fd5b505afa158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff09190615053565b905060006120656040518060a00160405280846001600160a01b03168152602001609b60009054906101000a90046001600160a01b03166001600160a01b03168152602001886040015160020b8152602001886060015160020b815260200188608001516001600160801b0316815250613cfd565b905060006120dc6040518060c0016040528089600001516001600160a01b0316815260200189602001516001600160a01b03168152602001856001600160a01b03168152602001896040015160020b8152602001896060015160020b815260200189608001516001600160801b0316815250613e48565b90506120ec838860400151613663565b61211c576040808801516020808a01516001600160a01b03166000908152609f9091529190912061211c91613f61565b61212a838860600151613663565b6121595760608701516020808901516001600160a01b03166000908152609f9091526040902061215991613f61565b609c546020880151885160408a015160608b015186516001600160a01b03958616959485169490931692600080516020615c8283398151915292919061219e90613066565b6000036121ae8960200151613066565b6000036121c78f608001516001600160801b0316613b4d565b600003896040516121dd96959493929190615830565b60405180910390a460408051606081018252835181526020938401519381019390935282015295945050505050565b600082820183811015610a23576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b3b151590565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156122a557600080fd5b505afa1580156122b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122dd9190615591565b5093979650505050505050565b6122f2614df0565b600286810b80820b600090815260208a905260408082206001908101548a860b860b84529190922090910154909290919087900b121561233457818503612336565b815b60208401526000600288810b9088900b1261235357818603612355565b815b60028a810b80820b600090815260208e905260408082208401548d850b850b835290822084015494955093929091908b900b121561239557828803612397565b825b905060008b60020b8b60020b126123b0578289036123b2565b825b6020890151909a03949094038752909603969096036040850152509198975050505050505050565b6000806123ea8460400151612b4d565b905060006124076123fe8660200151612b4d565b86518490613f85565b905060006124386124298760a001518760200151613fee90919063ffffffff16565b61243284613066565b90614053565b905060006124a5612491612478866001600160a01b0316612472600160601b6124328d608001518d60000151613fee90919063ffffffff16565b906140fc565b60c08a015160408a015161248b91613fee565b90613fee565b8851612432906001600160801b0316613066565b90506124b9600160601b61247284846124c4565b979650505050505050565b60008282018183128015906124d95750838112155b806124ee57506000831280156124ee57508381125b610a235760405162461bcd60e51b8152600401808060200182810382526021815260200180615bcb6021913960400191505060405180910390fd5b600061253430612264565b15905090565b600054610100900460ff16806125535750612553612529565b80612561575060005460ff16155b61259c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff161580156125c7576000805460ff1961ff0019909116610100171660011790555b6125cf6141b4565b6125e1826001600160a01b0316612264565b6125fd5760405162461bcd60e51b815260040161052590615892565b606780546001600160a01b0319166001600160a01b038416179055801561262a576000805461ff00191690555b5050565b6001600160a01b038084166000908152609d602090815260408083209386168352928152828220805484518184028101840190955280855292938493909283018282801561269b57602002820191906000526020600020905b815481526020019060010190808311612687575b505060675460405163bbe4f6db60e01b815294955060009461272f94506001600160a01b03909116925063bbe4f6db91506126da9089906004016156ee565b60206040518083038186803b1580156126f257600080fd5b505afa158015612706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272a9190615053565b6142a4565b905060005b82518110156128dc576000609e600085848151811061274f57fe5b60209081029190910181015182528181019290925260409081016000908120825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b968301879052600160981b909104810b810b810b9482019490945260018201546060820152928101546080840152600381015460a08401526004015460c08301529092509081906127e490612b4d565b905060006127f58460400151612b4d565b90508880156128155750806001600160a01b0316866001600160a01b0316105b1561284e57612847826001600160a01b0316876001600160a01b03161161283c578261283e565b865b85518390613f85565b92506128a1565b8815801561286d5750816001600160a01b0316866001600160a01b0316115b156128a15761289e82826001600160a01b0316886001600160a01b0316106128955782612897565b875b8651614324565b92505b506128ae9050868261220c565b9550866128d25760006128c18984613c01565b5090506128ce878261220c565b9650505b5050600101612734565b5050509392505050565b6128ee614f18565b600080856001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561292a57600080fd5b505afa15801561293e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129629190615591565b5050505050915091506040518060a001604052808260020b8152602001836001600160a01b031681526020018681526020018581526020016129a388614367565b6001600160801b031690529695505050505050565b6000816001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f357600080fd5b505afa158015612a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610750919061527b565b60008060008460020b8660020b81612a3f57fe5b05905060008660020b128015612a6657508460020b8660020b81612a5f57fe5b0760020b15155b15612a7057600019015b8315612ad957600080612a82836143da565b9092509050600160ff82161b800160001901600081612aa18c866143ec565b168015159650905085612abb57888360ff16860302612ace565b88612ac58261446b565b840360ff168603025b965050505050612b43565b600080612ae8836001016143da565b9092509050600019600160ff83161b0119600081612b068c866143ec565b168015159650905085612b2657888360ff0360ff16866001010102612b3c565b8883612b3183614505565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612b64578260020b612b6c565b8260020b6000035b9050620d89e8811115612baa576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612bbe57600160801b612bd0565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615612bfa576ffff97272373d413259a46990580e213a0260801c5b6004821615612c19576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612c38576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612c57576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612c76576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612c95576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612cb4576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612cd4576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612cf4576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612d14576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612d34576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612d54576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612d74576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612d94576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612db4576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612dd5576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612df5576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612e14576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612e31576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612e4c578060001981612e4857fe5b0490505b600160201b810615612e5f576001612e62565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a161015818712801590612ef9576000612ead8989620f42400362ffffff16620f4240613145565b905082612ec657612ec18c8c8c60016145ee565b612ed3565b612ed38b8d8c6001614667565b9550858110612ee4578a9650612ef3565b612ef08c8b8386614707565b96505b50612f43565b81612f1057612f0b8b8b8b6000614667565b612f1d565b612f1d8a8c8b60006145ee565b9350838860000310612f3157899550612f43565b612f408b8a8a60000385614753565b95505b6001600160a01b038a8116908716148215612fa657808015612f625750815b612f7857612f73878d8c6001614667565b612f7a565b855b9550808015612f87575081155b612f9d57612f98878d8c60006145ee565b612f9f565b845b9450612ff0565b808015612fb05750815b612fc657612fc18c888c60016145ee565b612fc8565b855b9550808015612fd5575081155b612feb57612fe68c888c6000614667565b612fed565b845b94505b8115801561300057508860000385115b1561300c578860000394505b81801561302b57508a6001600160a01b0316876001600160a01b031614155b1561303a578589039350613057565b613054868962ffffff168a620f42400362ffffff166130ae565b93505b50505095509550955095915050565b6000600160ff1b82106130aa5760405162461bcd60e51b8152600401808060200182810382526028815260200180615ca26028913960400191505060405180910390fd5b5090565b60006130bb848484613145565b9050600082806130c757fe5b8486091115610a235760001981106130de57600080fd5b6001019392505050565b60008282111561313f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080806000198587098686029250828110908390030390508061317b576000841161317057600080fd5b508290049050610a23565b80841161318757600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600291820b820b600090815260209384526040908190208054835103815560018101805495840151959095039094559290910180549190920151039055565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba9390613262908590600401615822565b6101006040518083038186803b15801561327b57600080fd5b505afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b391906154b9565b50949998505050505050505050565b60008082600f0b121561332757826001600160801b03168260000384039150816001600160801b031610613322576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b610750565b826001600160801b03168284019150816001600160801b03161015610750576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906133b4575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6133e9576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061347b57607f810383901c9150613485565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c600160371b161760c99190911c600160361b161760ca9190911c600160351b161760cb9190911c600160341b161760cc9190911c600160331b161760cd9190911c600160321b1617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461365457886001600160a01b031661363882612b4d565b6001600160a01b0316111561364d578161364f565b805b613656565b815b9998505050505050505050565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba9390613692908590600401615822565b6101006040518083038186803b1580156136ab57600080fd5b505afa1580156136bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e391906154b9565b9a9950505050505050505050565b6136f9614eee565b600082606001511180613710575060008260800151115b61372c5760405162461bcd60e51b8152600401610525906158f5565b600061376761373e84600001516142a4565b61374b8560200151612b4d565b6137588660400151612b4d565b8660600151876080015161479f565b90506000816001600160801b0316116137925760405162461bcd60e51b8152600401610525906159f7565b8251602084015160408086015160a08701519151633c8a7d8d60e01b815260009485946001600160a01b0390911693633c8a7d8d936137d8933093928a91600401615702565b6040805180830381600087803b1580156137f157600080fd5b505af1158015613805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138299190615637565b915091506040518060600160405280838152602001828152602001846001600160801b03168152509350505050919050565b8160020b8360020b13613893578051600284810b810b6000908152602087815260409182902093845584015160018401558301519101555b50505050565b6000806138b88360000151846020015185606001518660800151613ba5565b6000818152609e6020526040812080549293509181906001600160801b0316613a7d5785516001600160a01b039081166000908152609d60209081526040808320828b015185168452825280832060675482516317541d4f60e31b815292519195169263baa0ea789260048082019391829003018186803b15801561393c57600080fd5b505afa158015613950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397491906156d4565b905060ff811615806139895750815460ff8216115b6139a55760405162461bcd60e51b8152600401610525906159d7565b81546001810183556000838152602080822090920188905560608a0151875460808c015162ffffff60801b19909116600160801b600293840b62ffffff90811682029290921762ffffff60981b1916600160981b93850b92909216830291909117808b558d8601516001600160a01b03168552609f9095526040808520908e01519095613a5994928104830b93900490910b90613a419061226a565b60e08e015180516020909101518794939291906122ea565b805160028901556020810151600389015560400151600488015550613afc92505050565b6020808701516040805160e08101825286546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9181019190915260018601546060820152918501546080830152600385015460a0830152600485015460c0830152613af691613c01565b90925090505b60c08601518354613b2291613b1d916001600160801b03908116911661220c565b614861565b83546001600160801b0319166001600160801b03919091161783556001909201919091559392505050565b600060016001607f1b03198212158015613b6a57506001607f1b82125b6130aa5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ba46027913960400191505060405180910390fd5b604080516001600160601b0319606096871b81166020808401919091529590961b9095166034860152600292830b60e890811b60488701529190920b901b604b8401528051602e818503018152604e9093019052815191012090565b6001600160a01b038083166000908152609f602090815260408083209185015185820151606754925163bbe4f6db60e01b815294958695613cce94613cab92169063bbe4f6db90613c56908c906004016156ee565b60206040518083038186803b158015613c6e57600080fd5b505afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca69190615053565b61226a565b6001600160a01b038916600090815260a0602052604090205485939291906148a5565b9150613cf28460600151830385600001516001600160801b0316600160801b613145565b9250505b9250929050565b613d05614f46565b60008083600001516001600160a01b031663a34123a78560400151866060015187608001516040518463ffffffff1660e01b8152600401613d4893929190615863565b6040805180830381600087803b158015613d6157600080fd5b505af1158015613d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d999190615637565b9150915083600001516001600160a01b0316634f1eb3d88560200151866040015187606001516001600160801b03806040518663ffffffff1660e01b8152600401613de8959493929190615788565b6040805180830381600087803b158015613e0157600080fd5b505af1158015613e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e399190615563565b50509082526020820152919050565b600080613e678360000151846020015185606001518660800151613ba5565b6000818152609e6020908152604080832087830151825160e08101845282546001600160801b0381168252600160801b8104600290810b810b810b96830196909652600160981b9004850b850b850b9381019390935260018201546060840152928101546080830152600381015460a0830152600481015460c08301529394508291613ef291613c01565b60a08801518554929450909250613f1991613b1d916001600160801b0391821691166130e8565b83546001600160801b0319166001600160801b039182161780855516613f5157613f4c866000015187602001518661490d565b610fd2565b6001830181905550949350505050565b600290810b810b600090815260209290925260408220828155600181018390550155565b6000826001600160a01b0316846001600160a01b03161115613fa5579192915b836001600160a01b0316613fde606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316613145565b81613fe557fe5b04949350505050565b60008183038183128015906140035750838113155b80614018575060008312801561401857508381135b610a235760405162461bcd60e51b8152600401808060200182810382526024815260200180615cca6024913960400191505060405180910390fd5b60008261406257506000610750565b826000191480156140765750600160ff1b82145b156140b25760405162461bcd60e51b8152600401808060200182810382526027815260200180615c5b6027913960400191505060405180910390fd5b828202828482816140bf57fe5b0514610a235760405162461bcd60e51b8152600401808060200182810382526027815260200180615c5b6027913960400191505060405180910390fd5b600081614150576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b816000191480156141645750600160ff1b83145b156141a05760405162461bcd60e51b8152600401808060200182810382526021815260200180615c1a6021913960400191505060405180910390fd5b60008284816141ab57fe5b05949350505050565b600054610100900460ff16806141cd57506141cd612529565b806141db575060005460ff16155b6142165760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614241576000805460ff1961ff0019909116610100171660011790555b6142496149fc565b6000614253611ed6565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020615c3b833981519152908290a35080156142a1576000805461ff00191690555b50565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156142df57600080fd5b505afa1580156142f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143179190615591565b5094979650505050505050565b6000826001600160a01b0316846001600160a01b03161115614344579192915b6106d4826001600160801b03168585036001600160a01b0316600160601b613145565b6000816001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b1580156143a257600080fd5b505afa1580156143b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610750919061549d565b60020b600881901d9161010090910790565b60405163299ce14b60e11b81526000906001600160a01b03841690635339c2969061441b908590600401615814565b60206040518083038186803b15801561443357600080fd5b505afa158015614447573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a23919061561f565b600080821161447957600080fd5b600160801b821061448c57608091821c91015b600160401b821061449f57604091821c91015b600160201b82106144b257602091821c91015b6201000082106144c457601091821c91015b61010082106144d557600891821c91015b601082106144e557600491821c91015b600482106144f557600291821c91015b60028210610bb557600101919050565b600080821161451357600080fd5b5060ff6001600160801b0382161561452e57607f1901614536565b608082901c91505b6001600160401b0382161561454e57603f1901614556565b604082901c91505b63ffffffff82161561456b57601f1901614573565b602082901c91505b61ffff82161561458657600f190161458e565b601082901c91505b60ff8216156145a057600719016145a8565b600882901c91505b600f8216156145ba57600319016145c2565b600482901c91505b60038216156145d457600119016145dc565b600282901c91505b6001821615610bb55760001901919050565b6000836001600160a01b0316856001600160a01b0316111561460e579293925b8161463b57614636836001600160801b03168686036001600160a01b0316600160601b613145565b61465e565b61465e836001600160801b03168686036001600160a01b0316600160601b6130ae565b95945050505050565b6000836001600160a01b0316856001600160a01b03161115614687579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166146b157600080fd5b836146e157866001600160a01b03166146d48383896001600160a01b0316613145565b816146db57fe5b046124b9565b6124b96146f88383896001600160a01b03166130ae565b886001600160a01b0316614aa5565b600080856001600160a01b03161161471e57600080fd5b6000846001600160801b03161161473457600080fd5b81614746576146368585856001614ab0565b61465e8585856001614b91565b600080856001600160a01b03161161476a57600080fd5b6000846001600160801b03161161478057600080fd5b81614792576146368585856000614b91565b61465e8585856000614ab0565b6000836001600160a01b0316856001600160a01b031611156147bf579293925b846001600160a01b0316866001600160a01b0316116147ea576147e3858585614c74565b905061465e565b836001600160a01b0316866001600160a01b0316101561484c576000614811878686614c74565b90506000614820878986614cd7565b9050806001600160801b0316826001600160801b0316106148415780614843565b815b9250505061465e565b614857858584614cd7565b9695505050505050565b6000600160801b82106130aa5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ba46027913960400191505060405180910390fd5b600284810b80820b6000908152602088905260408082205487850b850b83529082205491939092849187900b12156148df578285036148e1565b825b905060008760020b8760020b126148fa578286036148fc565b825b919095030398975050505050505050565b6001600160a01b038084166000908152609d602090815260408083209386168352929052908120905b81548110156149c1578282828154811061494c57fe5b906000526020600020015414156149b95781548290600019810190811061496f57fe5b906000526020600020015482828154811061498657fe5b90600052602060002001819055508180548061499e57fe5b600190038181906000526020600020016000905590556149c1565b600101614936565b50506000908152609e6020526040812080546001600160b01b0319168155600181018290556002810182905560038101829055600401555050565b600054610100900460ff1680614a155750614a15612529565b80614a23575060005460ff16155b614a5e5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614a89576000805460ff1961ff0019909116610100171660011790555b614a91614d14565b80156142a1576000805461ff001916905550565b808204910615150190565b60008115614b235760006001600160a01b03841115614ae657614ae184600160601b876001600160801b0316613145565b614afe565b6001600160801b038516606085901b81614afc57fe5b045b9050614b1b614b166001600160a01b03881683614db4565b614dc4565b9150506106d4565b60006001600160a01b03841115614b5157614b4c84600160601b876001600160801b03166130ae565b614b68565b614b68606085901b6001600160801b038716614aa5565b905080866001600160a01b031611614b7f57600080fd5b6001600160a01b0386160390506106d4565b600082614b9f5750836106d4565b600160601b600160e01b03606085901b168215614c2d576001600160a01b03861684810290858281614bcd57fe5b041415614bfe57818101828110614bfc57614bf283896001600160a01b0316836130ae565b93505050506106d4565b505b614c2482614c1f878a6001600160a01b03168681614c1857fe5b0490614db4565b614aa5565b925050506106d4565b6001600160a01b03861684810290858281614c4457fe5b04148015614c5157508082115b614c5a57600080fd5b808203614bf2614b16846001600160a01b038b16846130ae565b6000826001600160a01b0316846001600160a01b03161115614c94579192915b6000614cb7856001600160a01b0316856001600160a01b0316600160601b613145565b905061465e614cd284838888036001600160a01b0316613145565b614dda565b6000826001600160a01b0316846001600160a01b03161115614cf7579192915b6106d4614cd283600160601b8787036001600160a01b0316613145565b600054610100900460ff1680614d2d5750614d2d612529565b80614d3b575060005460ff16155b614d765760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614a91576000805460ff1961ff00199091166101001716600117905580156142a1576000805461ff001916905550565b8082018281101561075057600080fd5b806001600160a01b0381168114610bb557600080fd5b806001600160801b0381168114610bb557600080fd5b60405180606001604052806000815260200160008152602001600081525090565b6040518060600160405280600060020b815260200160008152602001600081525090565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060e0016040528060006001600160801b03168152602001600060020b8152602001600060020b8152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060008152602001600081526020016000815260200160006001600160801b031681525090565b6040518060600160405280600081526020016000815260200160006001600160801b031681525090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604051806040016040528060008152602001600081525090565b8035610bb581615b4b565b60008083601f840112614f7c578182fd5b5081356001600160401b03811115614f92578182fd5b6020830191508360208083028501011115613cf657600080fd5b8035610bb581615b60565b8051610bb581615b60565b600060408284031215614fd3578081fd5b604080519081016001600160401b0381118282101715614fef57fe5b604052823581526020928301359281019290925250919050565b805161ffff81168114610bb557600080fd5b8035610bb581615b92565b805160ff81168114610bb557600080fd5b600060208284031215615048578081fd5b8135610a2381615b4b565b600060208284031215615064578081fd5b8151610a2381615b4b565b60008060408385031215615081578081fd5b823561508c81615b4b565b9150602083013561509c81615b4b565b809150509250929050565b600080600080606085870312156150bc578182fd5b84356150c781615b4b565b935060208501356150d781615b4b565b925060408501356001600160401b038111156150f1578283fd5b6150fd87828801614f6b565b95989497509550505050565b60008060006060848603121561511d578081fd5b833561512881615b4b565b9250602084013561513881615b4b565b9150604084013561514881615b60565b809150509250925092565b60008060008060808587031215615168578182fd5b843561517381615b4b565b9350602085013561518381615b4b565b9250604085013561519381615b6e565b915060608501356151a381615b6e565b939692955090935050565b6000806000608084860312156151c2578081fd5b83356151cd81615b4b565b925060208401356151dd81615b4b565b91506151ec8560408601614fc2565b90509250925092565b600080600060408486031215615209578081fd5b833561521481615b4b565b925060208401356001600160401b0381111561522e578182fd5b61523a86828701614f6b565b9497909650939450505050565b600060208284031215615258578081fd5b5035919050565b600060208284031215615270578081fd5b8135610a2381615b6e565b60006020828403121561528c578081fd5b8151610a2381615b6e565b600061010082840312156152a9578081fd5b50919050565b6000604082840312156152c0578081fd5b610a238383614fc2565b6000608082840312156152db578081fd5b604051608081016001600160401b03811182821017156152f757fe5b604052825161530581615b4b565b8152602083015161531581615b92565b6020820152604083015161532881615b92565b6040820152606083015161533b81615b92565b60608201529392505050565b600060a082840312156152a9578081fd5b600060a08284031215615369578081fd5b60405160a081016001600160401b038111828210171561538557fe5b604052823561539381615b4b565b815260208301356153a381615b4b565b602082015260408301356153b681615b6e565b604082015260608301356153c981615b6e565b606082015260808301356153dc81615b7d565b60808201529392505050565b600061012082840312156153fa578081fd5b60405161010081016001600160401b038111828210171561541757fe5b60405261542383614f60565b815261543160208401614fac565b602082015261544260408401614fac565b60408201526060830135606082015261545d60808401614f60565b608082015261546e60a0840161501b565b60a082015261547f60c0840161501b565b60c08201526154918460e08501614fc2565b60e08201529392505050565b6000602082840312156154ae578081fd5b8151610a2381615b7d565b600080600080600080600080610100898b0312156154d5578586fd5b88516154e081615b7d565b80985050602089015180600f0b81146154f7578687fd5b80975050604089015195506060890151945060808901518060060b811461551c578485fd5b60a08a015190945061552d81615b4b565b60c08a015190935063ffffffff81168114615546578283fd5b915061555460e08a01614fb7565b90509295985092959890939650565b60008060408385031215615575578182fd5b825161558081615b7d565b602084015190925061509c81615b7d565b600080600080600080600060e0888a0312156155ab578081fd5b87516155b681615b4b565b60208901519097506155c781615b6e565b95506155d560408901615009565b94506155e360608901615009565b93506155f160808901615009565b92506155ff60a08901615026565b915060c088015161560f81615b60565b8091505092959891949750929550565b600060208284031215615630578081fd5b5051919050565b60008060408385031215615649578182fd5b505080516020909101519092909150565b6000806000806060858703121561566f578182fd5b843593506020850135925060408501356001600160401b0380821115615693578384fd5b818701915087601f8301126156a6578384fd5b8135818111156156b4578485fd5b8860208285010111156156c5578485fd5b95989497505060200194505050565b6000602082840312156156e5578081fd5b610a2382615026565b6001600160a01b0391909116815260200190565b600060018060a01b038716825260208660020b818401528560020b604084015260018060801b038516606084015260a0608084015283518060a0850152825b8181101561575d5785810183015185820160c001528201615741565b8181111561576e578360c083870101525b50601f01601f19169290920160c001979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020808252825182820181905260009190848201906040850190845b818110156157fd578351835292840192918401916001016157e1565b50909695505050505050565b901515815260200190565b60019190910b815260200190565b60029190910b815260200190565b600296870b81529490950b602085015260408401929092526060830152600f0b608082015260a081019190915260c00190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b90815260200190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b60208082526006908201526513d097d3915360d21b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526006908201526555425f5a497360d01b604082015260600190565b60208082526006908201526504f425f4348360d41b604082015260600190565b6020808252600690820152654f425f4e454f60d01b604082015260600190565b60208082526006908201526504f425f5154360d41b604082015260600190565b60208082526006908201526509e84be9e8ab60d31b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b60208082526006908201526522ac2fa321ab60d11b604082015260600190565b6020808252600690820152654f425f4f4e4560d01b604082015260600190565b602080825260059082015264155097d69360da1b604082015260600190565b8151815260208083015190820152604080830151908201526060918201516001600160801b03169181019190915260800190565b81516001600160a01b039081168252602092830151169181019190915260400190565b600060e08201905060018060801b038351168252602083015160020b6020830152604083015160020b6040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b81518152602080830151908201526040918201519181019190915260600190565b815160020b8152602080830151908201526040918201519181019190915260600190565b60008582528460208301526060604083015282606083015282846080840137818301608090810191909152601f909201601f191601019392505050565b6001600160a01b03811681146142a157600080fd5b80151581146142a157600080fd5b8060020b81146142a157600080fd5b6001600160801b03811681146142a157600080fd5b62ffffff811681146142a157600080fdfe53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77cb47d8bf351d355bdd5497973533eada41777b4509f2585a62ae246336ebaa9453616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a2646970667358221220cee7395b427f4286977b44509f9ce8c70c75ff66eab6e41bb1fc7d54595e29b364736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2QuoteToken.json b/external/abi/perp/PerpV2QuoteToken.json new file mode 100644 index 000000000..75313b1c3 --- /dev/null +++ b/external/abi/perp/PerpV2QuoteToken.json @@ -0,0 +1,455 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2QuoteToken", + "sourceName": "contracts/QuoteToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "WhitelistAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "WhitelistRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "nameArg", + "type": "string" + }, + { + "internalType": "string", + "name": "symbolArg", + "type": "string" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isInWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "mintMaximumTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50611908806100206000396000f3fe608060405234801561001057600080fd5b50600436106101075760003560e01c806306fdde031461010c578063095ea7b31461018957806309fd8212146101c957806313af4035146101ef57806318160ddd1461021757806323b872dd14610231578063313ce5671461026757806339509351146102855780634cd88b76146102b15780636c8381f8146103da57806370a08231146103fe578063715018a61461042457806378c8cda71461042c5780638da5cb5b1461045257806395d89b411461045a578063a457c2d714610462578063a9059cbb1461048e578063bc5920ba146104ba578063dd62ed3e146104c2578063f52e308e146104f0578063f80f5dd514610516575b600080fd5b61011461053c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014e578181015183820152602001610136565b50505050905090810190601f16801561017b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b56004803603604081101561019f57600080fd5b506001600160a01b0381351690602001356105d2565b604080519115158252519081900360200190f35b6101b5600480360360208110156101df57600080fd5b50356001600160a01b03166105ef565b6102156004803603602081101561020557600080fd5b50356001600160a01b031661060d565b005b61021f610768565b60408051918252519081900360200190f35b6101b56004803603606081101561024757600080fd5b506001600160a01b0381358116916020810135909116906040013561076e565b61026f6107f5565b6040805160ff9092168252519081900360200190f35b6101b56004803603604081101561029b57600080fd5b506001600160a01b0381351690602001356107fe565b610215600480360360408110156102c757600080fd5b810190602081018135600160201b8111156102e157600080fd5b8201836020820111156102f357600080fd5b803590602001918460018302840111600160201b8311171561031457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561036657600080fd5b82018360208201111561037857600080fd5b803590602001918460018302840111600160201b8311171561039957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061084c945050505050565b6103e26108fa565b604080516001600160a01b039092168252519081900360200190f35b61021f6004803603602081101561041457600080fd5b50356001600160a01b0316610909565b610215610924565b6102156004803603602081101561044257600080fd5b50356001600160a01b03166109c5565b6103e2610a7a565b610114610a89565b6101b56004803603604081101561047857600080fd5b506001600160a01b038135169060200135610aea565b6101b5600480360360408110156104a457600080fd5b506001600160a01b038135169060200135610b52565b610215610b66565b61021f600480360360408110156104d857600080fd5b506001600160a01b0381358116916020013516610c52565b6102156004803603602081101561050657600080fd5b50356001600160a01b0316610c7d565b6102156004803603602081101561052c57600080fd5b50356001600160a01b0316610ce9565b606a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e66105df610da1565b8484610da5565b50600192915050565b6001600160a01b031660009081526099602052604090205460ff1690565b610615610da1565b6001600160a01b0316610626610a7a565b6001600160a01b03161461066a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166106ae576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156106fa576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610746576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b600061077b848484610e91565b6107eb84610787610da1565b6107e6856040518060600160405280602881526020016117fd602891396001600160a01b038a166000908152606860205260408120906107c5610da1565b6001600160a01b031681526020810191909152604001600020549190610fdc565b610da5565b5060019392505050565b606c5460ff1690565b60006105e661080b610da1565b846107e6856068600061081c610da1565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611073565b600054610100900460ff168061086557506108656110d2565b80610873575060005460ff16155b6108ae5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff161580156108d9576000805460ff1961ff0019909116610100171660011790555b6108e383836110e3565b80156108f5576000805461ff00191690555b505050565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b61092c610da1565b6001600160a01b031661093d610a7a565b6001600160a01b031614610981576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611825833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6109cd610da1565b6001600160a01b03166109de610a7a565b6001600160a01b031614610a22576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105c85780601f1061059d576101008083540402835291602001916105c8565b60006105e6610af7610da1565b846107e6856040518060600160405280602581526020016118ae6025913960686000610b21610da1565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610fdc565b60006105e6610b5f610da1565b8484610e91565b6034546001600160a01b0316610bab576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610bb3610da1565b6034546001600160a01b03908116911614610bfe576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061182583398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610c85610da1565b6001600160a01b0316610c96610a7a565b6001600160a01b031614610cda576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610ce6816000196111cd565b50565b610cf1610da1565b6001600160a01b0316610d02610a7a565b6001600160a01b031614610d46576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b3390565b6001600160a01b038316610dea5760405162461bcd60e51b815260040180806020018281038252602481526020018061188a6024913960400191505060405180910390fd5b6001600160a01b038216610e2f5760405162461bcd60e51b81526004018080602001828103825260228152602001806117876022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610ed65760405162461bcd60e51b81526004018080602001828103825260258152602001806118656025913960400191505060405180910390fd5b6001600160a01b038216610f1b5760405162461bcd60e51b81526004018080602001828103825260238152602001806117646023913960400191505060405180910390fd5b610f268383836112ad565b610f63816040518060600160405280602681526020016117a9602691396001600160a01b0386166000908152606760205260409020549190610fdc565b6001600160a01b038085166000908152606760205260408082209390935590841681522054610f929082611073565b6001600160a01b03808416600081815260676020908152604091829020949094558051858152905191939287169260008051602061184583398151915292918290030190a3505050565b6000818484111561106b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611030578181015183820152602001611018565b50505050905090810190601f16801561105d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156110cb576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b60006110dd3061130d565b15905090565b600054610100900460ff16806110fc57506110fc6110d2565b8061110a575060005460ff16155b6111455760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611170576000805460ff1961ff0019909116610100171660011790555b611178611313565b6111828383611402565b6000805260996020527f235d629dc802037ded8c61cb27fb29e40fa01b299719d8f991ffe20bdcc59f4f805460ff1916600117905580156108f5576000805461ff0019169055505050565b6001600160a01b038216611228576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611234600083836112ad565b6069546112419082611073565b6069556001600160a01b0382166000908152606760205260409020546112679082611073565b6001600160a01b03831660008181526067602090815260408083209490945583518581529351929391926000805160206118458339815191529281900390910190a35050565b6112b88383836108f5565b6001600160a01b03831660009081526099602052604090205460ff166108f5576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b3b151590565b600054610100900460ff168061132c575061132c6110d2565b8061133a575060005460ff16155b6113755760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff161580156113a0576000805460ff1961ff0019909116610100171660011790555b6113a86114a1565b60006113b2610da1565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611825833981519152908290a3508015610ce6576000805461ff001916905550565b600054610100900460ff168061141b575061141b6110d2565b80611429575060005460ff16155b6114645760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff1615801561148f576000805460ff1961ff0019909116610100171660011790555b61149761154a565b6108e383836115ea565b600054610100900460ff16806114ba57506114ba6110d2565b806114c8575060005460ff16155b6115035760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff1615801561152e576000805460ff1961ff0019909116610100171660011790555b61153661154a565b8015610ce6576000805461ff001916905550565b600054610100900460ff168061156357506115636110d2565b80611571575060005460ff16155b6115ac5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611536576000805460ff1961ff0019909116610100171660011790558015610ce6576000805461ff001916905550565b600054610100900460ff168061160357506116036110d2565b80611611575060005460ff16155b61164c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611677576000805460ff1961ff0019909116610100171660011790555b825161168a90606a9060208601906116c2565b50815161169e90606b9060208501906116c2565b50606c805460ff1916601217905580156108f5576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826116f8576000855561173e565b82601f1061171157805160ff191683800117855561173e565b8280016001018555821561173e579182015b8281111561173e578251825591602001919060010190611723565b5061174a92915061174e565b5090565b5b8082111561174a576000815560010161174f56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220deb17f680c0cef1c839aafa8d7cb2c0dbe4b5f97fcd7cee4e91a5241a49d3e0864736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101075760003560e01c806306fdde031461010c578063095ea7b31461018957806309fd8212146101c957806313af4035146101ef57806318160ddd1461021757806323b872dd14610231578063313ce5671461026757806339509351146102855780634cd88b76146102b15780636c8381f8146103da57806370a08231146103fe578063715018a61461042457806378c8cda71461042c5780638da5cb5b1461045257806395d89b411461045a578063a457c2d714610462578063a9059cbb1461048e578063bc5920ba146104ba578063dd62ed3e146104c2578063f52e308e146104f0578063f80f5dd514610516575b600080fd5b61011461053c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014e578181015183820152602001610136565b50505050905090810190601f16801561017b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b56004803603604081101561019f57600080fd5b506001600160a01b0381351690602001356105d2565b604080519115158252519081900360200190f35b6101b5600480360360208110156101df57600080fd5b50356001600160a01b03166105ef565b6102156004803603602081101561020557600080fd5b50356001600160a01b031661060d565b005b61021f610768565b60408051918252519081900360200190f35b6101b56004803603606081101561024757600080fd5b506001600160a01b0381358116916020810135909116906040013561076e565b61026f6107f5565b6040805160ff9092168252519081900360200190f35b6101b56004803603604081101561029b57600080fd5b506001600160a01b0381351690602001356107fe565b610215600480360360408110156102c757600080fd5b810190602081018135600160201b8111156102e157600080fd5b8201836020820111156102f357600080fd5b803590602001918460018302840111600160201b8311171561031457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561036657600080fd5b82018360208201111561037857600080fd5b803590602001918460018302840111600160201b8311171561039957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061084c945050505050565b6103e26108fa565b604080516001600160a01b039092168252519081900360200190f35b61021f6004803603602081101561041457600080fd5b50356001600160a01b0316610909565b610215610924565b6102156004803603602081101561044257600080fd5b50356001600160a01b03166109c5565b6103e2610a7a565b610114610a89565b6101b56004803603604081101561047857600080fd5b506001600160a01b038135169060200135610aea565b6101b5600480360360408110156104a457600080fd5b506001600160a01b038135169060200135610b52565b610215610b66565b61021f600480360360408110156104d857600080fd5b506001600160a01b0381358116916020013516610c52565b6102156004803603602081101561050657600080fd5b50356001600160a01b0316610c7d565b6102156004803603602081101561052c57600080fd5b50356001600160a01b0316610ce9565b606a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e66105df610da1565b8484610da5565b50600192915050565b6001600160a01b031660009081526099602052604090205460ff1690565b610615610da1565b6001600160a01b0316610626610a7a565b6001600160a01b03161461066a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166106ae576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156106fa576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610746576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b600061077b848484610e91565b6107eb84610787610da1565b6107e6856040518060600160405280602881526020016117fd602891396001600160a01b038a166000908152606860205260408120906107c5610da1565b6001600160a01b031681526020810191909152604001600020549190610fdc565b610da5565b5060019392505050565b606c5460ff1690565b60006105e661080b610da1565b846107e6856068600061081c610da1565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611073565b600054610100900460ff168061086557506108656110d2565b80610873575060005460ff16155b6108ae5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff161580156108d9576000805460ff1961ff0019909116610100171660011790555b6108e383836110e3565b80156108f5576000805461ff00191690555b505050565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b61092c610da1565b6001600160a01b031661093d610a7a565b6001600160a01b031614610981576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611825833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6109cd610da1565b6001600160a01b03166109de610a7a565b6001600160a01b031614610a22576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105c85780601f1061059d576101008083540402835291602001916105c8565b60006105e6610af7610da1565b846107e6856040518060600160405280602581526020016118ae6025913960686000610b21610da1565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610fdc565b60006105e6610b5f610da1565b8484610e91565b6034546001600160a01b0316610bab576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610bb3610da1565b6034546001600160a01b03908116911614610bfe576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061182583398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610c85610da1565b6001600160a01b0316610c96610a7a565b6001600160a01b031614610cda576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610ce6816000196111cd565b50565b610cf1610da1565b6001600160a01b0316610d02610a7a565b6001600160a01b031614610d46576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b3390565b6001600160a01b038316610dea5760405162461bcd60e51b815260040180806020018281038252602481526020018061188a6024913960400191505060405180910390fd5b6001600160a01b038216610e2f5760405162461bcd60e51b81526004018080602001828103825260228152602001806117876022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610ed65760405162461bcd60e51b81526004018080602001828103825260258152602001806118656025913960400191505060405180910390fd5b6001600160a01b038216610f1b5760405162461bcd60e51b81526004018080602001828103825260238152602001806117646023913960400191505060405180910390fd5b610f268383836112ad565b610f63816040518060600160405280602681526020016117a9602691396001600160a01b0386166000908152606760205260409020549190610fdc565b6001600160a01b038085166000908152606760205260408082209390935590841681522054610f929082611073565b6001600160a01b03808416600081815260676020908152604091829020949094558051858152905191939287169260008051602061184583398151915292918290030190a3505050565b6000818484111561106b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611030578181015183820152602001611018565b50505050905090810190601f16801561105d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156110cb576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b60006110dd3061130d565b15905090565b600054610100900460ff16806110fc57506110fc6110d2565b8061110a575060005460ff16155b6111455760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611170576000805460ff1961ff0019909116610100171660011790555b611178611313565b6111828383611402565b6000805260996020527f235d629dc802037ded8c61cb27fb29e40fa01b299719d8f991ffe20bdcc59f4f805460ff1916600117905580156108f5576000805461ff0019169055505050565b6001600160a01b038216611228576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611234600083836112ad565b6069546112419082611073565b6069556001600160a01b0382166000908152606760205260409020546112679082611073565b6001600160a01b03831660008181526067602090815260408083209490945583518581529351929391926000805160206118458339815191529281900390910190a35050565b6112b88383836108f5565b6001600160a01b03831660009081526099602052604090205460ff166108f5576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b3b151590565b600054610100900460ff168061132c575061132c6110d2565b8061133a575060005460ff16155b6113755760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff161580156113a0576000805460ff1961ff0019909116610100171660011790555b6113a86114a1565b60006113b2610da1565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611825833981519152908290a3508015610ce6576000805461ff001916905550565b600054610100900460ff168061141b575061141b6110d2565b80611429575060005460ff16155b6114645760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff1615801561148f576000805460ff1961ff0019909116610100171660011790555b61149761154a565b6108e383836115ea565b600054610100900460ff16806114ba57506114ba6110d2565b806114c8575060005460ff16155b6115035760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff1615801561152e576000805460ff1961ff0019909116610100171660011790555b61153661154a565b8015610ce6576000805461ff001916905550565b600054610100900460ff168061156357506115636110d2565b80611571575060005460ff16155b6115ac5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611536576000805460ff1961ff0019909116610100171660011790558015610ce6576000805461ff001916905550565b600054610100900460ff168061160357506116036110d2565b80611611575060005460ff16155b61164c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611677576000805460ff1961ff0019909116610100171660011790555b825161168a90606a9060208601906116c2565b50815161169e90606b9060208501906116c2565b50606c805460ff1916601217905580156108f5576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826116f8576000855561173e565b82601f1061171157805160ff191683800117855561173e565b8280016001018555821561173e579182015b8281111561173e578251825591602001919060010190611723565b5061174a92915061174e565b5090565b5b8082111561174a576000815560010161174f56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220deb17f680c0cef1c839aafa8d7cb2c0dbe4b5f97fcd7cee4e91a5241a49d3e0864736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2Quoter.json b/external/abi/perp/PerpV2Quoter.json new file mode 100644 index 000000000..861b74d59 --- /dev/null +++ b/external/abi/perp/PerpV2Quoter.json @@ -0,0 +1,133 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2Quoter", + "sourceName": "contracts/lens/Quoter.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "marketRegistryArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "marketRegistry", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "baseToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "isBaseToQuote", + "type": "bool" + }, + { + "internalType": "bool", + "name": "isExactInput", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceLimitX96", + "type": "uint160" + } + ], + "internalType": "struct Quoter.SwapParams", + "name": "params", + "type": "tuple" + } + ], + "name": "swap", + "outputs": [ + { + "components": [ + { + "internalType": "uint256", + "name": "deltaAvailableBase", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "deltaAvailableQuote", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "exchangedPositionSize", + "type": "int256" + }, + { + "internalType": "int256", + "name": "exchangedPositionNotional", + "type": "int256" + }, + { + "internalType": "uint160", + "name": "sqrtPriceX96", + "type": "uint160" + } + ], + "internalType": "struct Quoter.SwapResponse", + "name": "response", + "type": "tuple" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "int256", + "name": "amount0Delta", + "type": "int256" + }, + { + "internalType": "int256", + "name": "amount1Delta", + "type": "int256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "uniswapV3SwapCallback", + "outputs": [], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b50611285806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c8063542b7c9814610051578063c4d66de81461007a578063ecb96fe61461008f578063fa461e33146100a4575b600080fd5b61006461005f366004610e1b565b6100b7565b60405161007191906110dc565b60405180910390f35b61008d610088366004610c53565b61048a565b005b61009761057d565b6040516100719190610fa2565b61008d6100b2366004610cae565b610592565b6100bf610bf6565b60008260600151116100ec5760405162461bcd60e51b81526004016100e390611004565b60405180910390fd5b60008054835160405163033e16f360e21b8152620100009092046001600160a01b031691630cf85bcc9161012291600401610fa2565b60806040518083038186803b15801561013a57600080fd5b505afa15801561014e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101729190610da4565b80519091506001600160a01b03811661019d5760405162461bcd60e51b81526004016100e39061109e565b60008260400151905060008360200151905060006101ca8760200151886040015189606001518587610733565b9050600087604001516101e8576101e082610788565b6000036101f1565b6101f182610788565b9050846001600160a01b031663128acb08308a60200151848c608001516001600160a01b0316600014610228578c60800151610252565b8c6020015161024b5773fffd8963efd1fc6a506488495d951d5263988d25610252565b6401000276a45b8d516040516102649190602001610fa2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610293959493929190610fb6565b6040805180830381600087803b1580156102ac57600080fd5b505af19250505080156102dc575060408051601f3d908101601f191682019092526102d991810190610c8b565b60015b61047c573d80801561030a576040519150601f19603f3d011682016040523d82523d6000602084013e61030f565b606091505b50600080600061031e846107d4565b92509250925060008060008e602001511561037157610346858b62ffffff16620f4240610858565b925061035c610357878d6000610893565b610788565b600003915061036a85610788565b90506103bb565b610399620f424061039361038a8862ffffff8f166108e2565b8e8e6000610944565b90610990565b92506103a486610788565b91506103b5610357868d6000610893565b60000390505b6040518060a001604052806103cf846109f4565b81526020016103ef6103ea6103e387610788565b8590610a17565b6109f4565b8152602001838152602001828152602001856001600160a01b03168152509d508e6040015115801561042c575060808f01516001600160a01b0316155b156104705760008f60200151610443578e51610449565b8e602001515b90508f60600151811461046e5760405162461bcd60e51b81526004016100e39061107f565b505b5050505050505061047f565b50505b505050505050919050565b600054610100900460ff16806104a357506104a3610a7c565b806104b1575060005460ff16155b6104ec5760405162461bcd60e51b815260040180806020018281038252602e8152602001806111b5602e913960400191505060405180910390fd5b600054610100900460ff16158015610517576000805460ff1961ff0019909116610100171660011790555b610529826001600160a01b0316610a8d565b6105455760405162461bcd60e51b81526004016100e390611060565b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610579576000805461ff00191690555b5050565b6000546201000090046001600160a01b031681565b60008313806105a15750600082135b6105bd5760405162461bcd60e51b81526004016100e390611041565b6000818060200190518101906105d39190610c6f565b6000805460405163bbe4f6db60e01b81529293509091620100009091046001600160a01b03169063bbe4f6db9061060e908590600401610fa2565b60206040518083038186803b15801561062657600080fd5b505afa15801561063a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065e9190610c6f565b9050336001600160a01b038216146106885760405162461bcd60e51b81526004016100e390611022565b600080610694876109f4565b61069d876109f4565b915091506000836001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156106dc57600080fd5b505afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107149190610ea2565b5050505050509050604051838152826020820152816040820152606081fd5b6000851561076457846107515761074c84846001610893565b61075d565b61075d84836001610893565b905061077f565b8461076f578361077c565b61077c8483856001610944565b90505b95945050505050565b6000600160ff1b82106107cc5760405162461bcd60e51b81526004018080602001828103825260288152602001806112046028913960400191505060405180910390fd5b50805b919050565b60008060008351606014610837576044845110156108045760405162461bcd60e51b81526004016100e3906110be565b6004840193508380602001905181019061081e9190610d3b565b60405162461bcd60e51b81526004016100e39190610ff1565b8380602001905181019061084b9190610f3e565b9250925092509193909250565b6000610865848484610a93565b90506000828061087157fe5b848609111561088c57600019811061088857600080fd5b6001015b9392505050565b6000816108be576108b9846108b0620f424062ffffff8716610b42565b620f4240610a93565b6108da565b6108da84620f42406108d58162ffffff8816610b42565b610858565b949350505050565b6000826108f15750600061093e565b828202828482816108fe57fe5b041461093b5760405162461bcd60e51b81526004018080602001828103825260218152602001806111e36021913960400191505060405180910390fd5b90505b92915050565b600080600083610955578585610958565b84865b909250905061098587610973620f424062ffffff8616610b42565b6108d5620f424062ffffff8616610b42565b979650505050505050565b60008082116109e3576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b8183816109ec57fe5b049392505050565b6000808213610a0e57610a0982600003610b9f565b61093e565b61093e82610b9f565b6000818303818312801590610a2c5750838113155b80610a415750600083128015610a4157508381135b61093b5760405162461bcd60e51b815260040180806020018281038252602481526020018061122c6024913960400191505060405180910390fd5b6000610a8730610a8d565b15905090565b3b151590565b6000808060001985870986860292508281109083900303905080610ac95760008411610abe57600080fd5b50829004905061088c565b808411610ad557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600082821115610b99576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808212156107cc576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b805161ffff811681146107cf57600080fd5b805162ffffff811681146107cf57600080fd5b600060208284031215610c64578081fd5b813561093b8161118e565b600060208284031215610c80578081fd5b815161093b8161118e565b60008060408385031215610c9d578081fd5b505080516020909101519092909150565b600080600060608486031215610cc2578081fd5b833592506020840135915060408401356001600160401b03811115610ce5578182fd5b8401601f81018613610cf5578182fd5b8035610d08610d038261113d565b61111a565b818152876020838501011115610d1c578384fd5b8160208401602083013783602083830101528093505050509250925092565b600060208284031215610d4c578081fd5b81516001600160401b03811115610d61578182fd5b8201601f81018413610d71578182fd5b8051610d7f610d038261113d565b818152856020838501011115610d93578384fd5b61077f82602083016020860161115e565b600060808284031215610db5578081fd5b604051608081016001600160401b0381118282101715610dd157fe5b6040528251610ddf8161118e565b8152610ded60208401610c40565b6020820152610dfe60408401610c40565b6040820152610e0f60608401610c40565b60608201529392505050565b600060a08284031215610e2c578081fd5b60405160a081016001600160401b0381118282101715610e4857fe5b6040528235610e568161118e565b81526020830135610e66816111a6565b60208201526040830135610e79816111a6565b6040820152606083810135908201526080830135610e968161118e565b60808201529392505050565b600080600080600080600060e0888a031215610ebc578485fd5b8751610ec78161118e565b8097505060208801518060020b8114610ede578586fd5b9550610eec60408901610c2e565b9450610efa60608901610c2e565b9350610f0860808901610c2e565b925060a088015160ff81168114610f1d578283fd5b60c0890151909250610f2e816111a6565b8091505092959891949750929550565b600080600060608486031215610f52578081fd5b83519250602084015191506040840151610f6b8161118e565b809150509250925092565b60008151808452610f8e81602086016020860161115e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a06080820181905260009061098590830184610f76565b60006020825261088c6020830184610f76565b602080825260049082015263515f5a4960e01b604082015260600190565b60208082526005908201526428afa329ab60d91b604082015260600190565b602080825260059082015264515f46305360d81b604082015260600190565b602080825260059082015264515f414e4360d81b604082015260600190565b602080825260059082015264515f554f4160d81b604082015260600190565b602080825260069082015265515f42544e4560d01b604082015260600190565b602080825260049082015263515f554560e01b604082015260600190565b815181526020808301519082015260408083015190820152606080830151908201526080918201516001600160a01b03169181019190915260a00190565b6040518181016001600160401b038111828210171561113557fe5b604052919050565b60006001600160401b0382111561115057fe5b50601f01601f191660200190565b60005b83811015611179578181015183820152602001611161565b83811115611188576000848401525b50505050565b6001600160a01b03811681146111a357600080fd5b50565b80151581146111a357600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a264697066735822122031ee0ab6ae96fc44e7c40ffc3ae4d227bcd045cea1f4349e5e5fab44c0ce100964736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063542b7c9814610051578063c4d66de81461007a578063ecb96fe61461008f578063fa461e33146100a4575b600080fd5b61006461005f366004610e1b565b6100b7565b60405161007191906110dc565b60405180910390f35b61008d610088366004610c53565b61048a565b005b61009761057d565b6040516100719190610fa2565b61008d6100b2366004610cae565b610592565b6100bf610bf6565b60008260600151116100ec5760405162461bcd60e51b81526004016100e390611004565b60405180910390fd5b60008054835160405163033e16f360e21b8152620100009092046001600160a01b031691630cf85bcc9161012291600401610fa2565b60806040518083038186803b15801561013a57600080fd5b505afa15801561014e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101729190610da4565b80519091506001600160a01b03811661019d5760405162461bcd60e51b81526004016100e39061109e565b60008260400151905060008360200151905060006101ca8760200151886040015189606001518587610733565b9050600087604001516101e8576101e082610788565b6000036101f1565b6101f182610788565b9050846001600160a01b031663128acb08308a60200151848c608001516001600160a01b0316600014610228578c60800151610252565b8c6020015161024b5773fffd8963efd1fc6a506488495d951d5263988d25610252565b6401000276a45b8d516040516102649190602001610fa2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610293959493929190610fb6565b6040805180830381600087803b1580156102ac57600080fd5b505af19250505080156102dc575060408051601f3d908101601f191682019092526102d991810190610c8b565b60015b61047c573d80801561030a576040519150601f19603f3d011682016040523d82523d6000602084013e61030f565b606091505b50600080600061031e846107d4565b92509250925060008060008e602001511561037157610346858b62ffffff16620f4240610858565b925061035c610357878d6000610893565b610788565b600003915061036a85610788565b90506103bb565b610399620f424061039361038a8862ffffff8f166108e2565b8e8e6000610944565b90610990565b92506103a486610788565b91506103b5610357868d6000610893565b60000390505b6040518060a001604052806103cf846109f4565b81526020016103ef6103ea6103e387610788565b8590610a17565b6109f4565b8152602001838152602001828152602001856001600160a01b03168152509d508e6040015115801561042c575060808f01516001600160a01b0316155b156104705760008f60200151610443578e51610449565b8e602001515b90508f60600151811461046e5760405162461bcd60e51b81526004016100e39061107f565b505b5050505050505061047f565b50505b505050505050919050565b600054610100900460ff16806104a357506104a3610a7c565b806104b1575060005460ff16155b6104ec5760405162461bcd60e51b815260040180806020018281038252602e8152602001806111b5602e913960400191505060405180910390fd5b600054610100900460ff16158015610517576000805460ff1961ff0019909116610100171660011790555b610529826001600160a01b0316610a8d565b6105455760405162461bcd60e51b81526004016100e390611060565b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610579576000805461ff00191690555b5050565b6000546201000090046001600160a01b031681565b60008313806105a15750600082135b6105bd5760405162461bcd60e51b81526004016100e390611041565b6000818060200190518101906105d39190610c6f565b6000805460405163bbe4f6db60e01b81529293509091620100009091046001600160a01b03169063bbe4f6db9061060e908590600401610fa2565b60206040518083038186803b15801561062657600080fd5b505afa15801561063a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065e9190610c6f565b9050336001600160a01b038216146106885760405162461bcd60e51b81526004016100e390611022565b600080610694876109f4565b61069d876109f4565b915091506000836001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156106dc57600080fd5b505afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107149190610ea2565b5050505050509050604051838152826020820152816040820152606081fd5b6000851561076457846107515761074c84846001610893565b61075d565b61075d84836001610893565b905061077f565b8461076f578361077c565b61077c8483856001610944565b90505b95945050505050565b6000600160ff1b82106107cc5760405162461bcd60e51b81526004018080602001828103825260288152602001806112046028913960400191505060405180910390fd5b50805b919050565b60008060008351606014610837576044845110156108045760405162461bcd60e51b81526004016100e3906110be565b6004840193508380602001905181019061081e9190610d3b565b60405162461bcd60e51b81526004016100e39190610ff1565b8380602001905181019061084b9190610f3e565b9250925092509193909250565b6000610865848484610a93565b90506000828061087157fe5b848609111561088c57600019811061088857600080fd5b6001015b9392505050565b6000816108be576108b9846108b0620f424062ffffff8716610b42565b620f4240610a93565b6108da565b6108da84620f42406108d58162ffffff8816610b42565b610858565b949350505050565b6000826108f15750600061093e565b828202828482816108fe57fe5b041461093b5760405162461bcd60e51b81526004018080602001828103825260218152602001806111e36021913960400191505060405180910390fd5b90505b92915050565b600080600083610955578585610958565b84865b909250905061098587610973620f424062ffffff8616610b42565b6108d5620f424062ffffff8616610b42565b979650505050505050565b60008082116109e3576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b8183816109ec57fe5b049392505050565b6000808213610a0e57610a0982600003610b9f565b61093e565b61093e82610b9f565b6000818303818312801590610a2c5750838113155b80610a415750600083128015610a4157508381135b61093b5760405162461bcd60e51b815260040180806020018281038252602481526020018061122c6024913960400191505060405180910390fd5b6000610a8730610a8d565b15905090565b3b151590565b6000808060001985870986860292508281109083900303905080610ac95760008411610abe57600080fd5b50829004905061088c565b808411610ad557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600082821115610b99576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808212156107cc576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b805161ffff811681146107cf57600080fd5b805162ffffff811681146107cf57600080fd5b600060208284031215610c64578081fd5b813561093b8161118e565b600060208284031215610c80578081fd5b815161093b8161118e565b60008060408385031215610c9d578081fd5b505080516020909101519092909150565b600080600060608486031215610cc2578081fd5b833592506020840135915060408401356001600160401b03811115610ce5578182fd5b8401601f81018613610cf5578182fd5b8035610d08610d038261113d565b61111a565b818152876020838501011115610d1c578384fd5b8160208401602083013783602083830101528093505050509250925092565b600060208284031215610d4c578081fd5b81516001600160401b03811115610d61578182fd5b8201601f81018413610d71578182fd5b8051610d7f610d038261113d565b818152856020838501011115610d93578384fd5b61077f82602083016020860161115e565b600060808284031215610db5578081fd5b604051608081016001600160401b0381118282101715610dd157fe5b6040528251610ddf8161118e565b8152610ded60208401610c40565b6020820152610dfe60408401610c40565b6040820152610e0f60608401610c40565b60608201529392505050565b600060a08284031215610e2c578081fd5b60405160a081016001600160401b0381118282101715610e4857fe5b6040528235610e568161118e565b81526020830135610e66816111a6565b60208201526040830135610e79816111a6565b6040820152606083810135908201526080830135610e968161118e565b60808201529392505050565b600080600080600080600060e0888a031215610ebc578485fd5b8751610ec78161118e565b8097505060208801518060020b8114610ede578586fd5b9550610eec60408901610c2e565b9450610efa60608901610c2e565b9350610f0860808901610c2e565b925060a088015160ff81168114610f1d578283fd5b60c0890151909250610f2e816111a6565b8091505092959891949750929550565b600080600060608486031215610f52578081fd5b83519250602084015191506040840151610f6b8161118e565b809150509250925092565b60008151808452610f8e81602086016020860161115e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a06080820181905260009061098590830184610f76565b60006020825261088c6020830184610f76565b602080825260049082015263515f5a4960e01b604082015260600190565b60208082526005908201526428afa329ab60d91b604082015260600190565b602080825260059082015264515f46305360d81b604082015260600190565b602080825260059082015264515f414e4360d81b604082015260600190565b602080825260059082015264515f554f4160d81b604082015260600190565b602080825260069082015265515f42544e4560d01b604082015260600190565b602080825260049082015263515f554560e01b604082015260600190565b815181526020808301519082015260408083015190820152606080830151908201526080918201516001600160a01b03169181019190915260a00190565b6040518181016001600160401b038111828210171561113557fe5b604052919050565b60006001600160401b0382111561115057fe5b50601f01601f191660200190565b60005b83811015611179578181015183820152602001611161565b83811115611188576000848401525b50505050565b6001600160a01b03811681146111a357600080fd5b50565b80151581146111a357600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a264697066735822122031ee0ab6ae96fc44e7c40ffc3ae4d227bcd045cea1f4349e5e5fab44c0ce100964736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2TestAggregatorV3.json b/external/abi/perp/PerpV2TestAggregatorV3.json new file mode 100644 index 000000000..d4aa751da --- /dev/null +++ b/external/abi/perp/PerpV2TestAggregatorV3.json @@ -0,0 +1,122 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2TestAggregatorV3", + "sourceName": "contracts/test/TestAggregatorV3.sol", + "abi": [ + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "description", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint80", + "name": "_roundId", + "type": "uint80" + } + ], + "name": "getRoundData", + "outputs": [ + { + "internalType": "uint80", + "name": "roundId", + "type": "uint80" + }, + { + "internalType": "int256", + "name": "answer", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "startedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "updatedAt", + "type": "uint256" + }, + { + "internalType": "uint80", + "name": "answeredInRound", + "type": "uint80" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "latestRoundData", + "outputs": [ + { + "internalType": "uint80", + "name": "roundId", + "type": "uint80" + }, + { + "internalType": "int256", + "name": "answer", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "startedAt", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "updatedAt", + "type": "uint256" + }, + { + "internalType": "uint80", + "name": "answeredInRound", + "type": "uint80" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "version", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506101e9806100206000396000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063313ce5671461005c57806354fd4d501461007a5780637284e4161461008f5780639a6fc8f5146100a4578063feaf968c146100c8575b600080fd5b6100646100d0565b60405161007191906101a5565b60405180910390f35b6100826100d0565b604051610071919061016c565b6100976100d7565b6040516100719190610119565b6100b76100b23660046100eb565b6100de565b604051610071959493929190610175565b6100b76100de565b6000806000fd5b6060600080fd5b6000806000806000806000fd5b6000602082840312156100fc578081fd5b81356001600160501b0381168114610112578182fd5b9392505050565b6000602080835283518082850152825b8181101561014557858101830151858201604001528201610129565b818111156101565783604083870101525b50601f01601f1916929092016040019392505050565b90815260200190565b6001600160501b039586168152602081019490945260408401929092526060830152909116608082015260a00190565b60ff9190911681526020019056fea26469706673582212203753f98b73a9090957ed70bfb25c49d2457f004d91f7f96f778e6e2f31abb8ab64736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063313ce5671461005c57806354fd4d501461007a5780637284e4161461008f5780639a6fc8f5146100a4578063feaf968c146100c8575b600080fd5b6100646100d0565b60405161007191906101a5565b60405180910390f35b6100826100d0565b604051610071919061016c565b6100976100d7565b6040516100719190610119565b6100b76100b23660046100eb565b6100de565b604051610071959493929190610175565b6100b76100de565b6000806000fd5b6060600080fd5b6000806000806000806000fd5b6000602082840312156100fc578081fd5b81356001600160501b0381168114610112578182fd5b9392505050565b6000602080835283518082850152825b8181101561014557858101830151858201604001528201610129565b818111156101565783604083870101525b50601f01601f1916929092016040019392505050565b90815260200190565b6001600160501b039586168152602081019490945260408401929092526060830152909116608082015260a00190565b60ff9190911681526020019056fea26469706673582212203753f98b73a9090957ed70bfb25c49d2457f004d91f7f96f778e6e2f31abb8ab64736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2Vault.json b/external/abi/perp/PerpV2Vault.json new file mode 100644 index 000000000..94a6deb2b --- /dev/null +++ b/external/abi/perp/PerpV2Vault.json @@ -0,0 +1,493 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2Vault", + "sourceName": "contracts/Vault.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Deposited", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "trustedForwarder", + "type": "address" + } + ], + "name": "TrustedForwarderUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Withdrawn", + "type": "event" + }, + { + "inputs": [], + "name": "accountBalance", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "clearingHouseConfig", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "exchange", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getFreeCollateral", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + }, + { + "internalType": "uint24", + "name": "ratio", + "type": "uint24" + } + ], + "name": "getFreeCollateralByRatio", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trader", + "type": "address" + } + ], + "name": "getLiquidateMarginRequirement", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "insuranceFundArg", + "type": "address" + }, + { + "internalType": "address", + "name": "clearingHouseConfigArg", + "type": "address" + }, + { + "internalType": "address", + "name": "accountBalanceArg", + "type": "address" + }, + { + "internalType": "address", + "name": "exchangeArg", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "insuranceFund", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "forwarder", + "type": "address" + } + ], + "name": "isTrustedForwarder", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "trustedForwarderArg", + "type": "address" + } + ], + "name": "setTrustedForwarder", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "settlementToken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalDebt", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "trustedForwarder", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "versionRecipient", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506129ba806100206000396000f3fe608060405234801561001057600080fd5b506004361061013e5760003560e01c806313af403514610143578063313ce5671461016b5780633f4ba83a146101895780633ffd13031461019157806347e7ef24146101d4578063486ff0cd146102005780634c2845a01461027d578063572b6c05146102a35780635c975abb146102dd5780636c8381f8146102e557806370a0823114610309578063715018a61461032f5780637b9e618d146103375780637da0a8771461033f5780638456cb59146103475780638da5cb5b1461034f578063b0a1c1c414610357578063b79023031461035f578063bc5920ba14610367578063c2075b211461036f578063c399944414610377578063d2f7265a1461039d578063da742228146103a5578063f3fef3a3146103cb578063f8c8765e146103f7578063fc7b9c1814610435575b600080fd5b6101696004803603602081101561015957600080fd5b50356001600160a01b031661043d565b005b610173610598565b6040805160ff9092168252519081900360200190f35b6101696105a2565b6101c2600480360360408110156101a757600080fd5b5080356001600160a01b0316906020013562ffffff16610609565b60408051918252519081900360200190f35b610169600480360360408110156101ea57600080fd5b506001600160a01b0381351690602001356106e9565b610208610992565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c26004803603602081101561029357600080fd5b50356001600160a01b0316610a21565b6102c9600480360360208110156102b957600080fd5b50356001600160a01b0316610b29565b604080519115158252519081900360200190f35b6102c9610b3d565b6102ed610b47565b604080516001600160a01b039092168252519081900360200190f35b6101c26004803603602081101561031f57600080fd5b50356001600160a01b0316610b56565b610169610bfd565b6102ed610c9e565b6102ed610cb3565b610169610cc2565b6102ed610d27565b6102ed610d36565b6102ed610d46565b610169610d56565b6102ed610e42565b6101c26004803603602081101561038d57600080fd5b50356001600160a01b0316610e52565b6102ed610e77565b610169600480360360208110156103bb57600080fd5b50356001600160a01b0316610e87565b610169600480360360408110156103e157600080fd5b506001600160a01b038135169060200135610f3b565b6101696004803603608081101561040d57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160600135166112b2565b6101c26115e3565b6104456115ea565b6001600160a01b0316610456610d27565b6001600160a01b03161461049a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166104de576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b038281169116141561052a576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b0382811691161415610576576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6101305460ff1681565b6105aa6115ea565b6001600160a01b03166105bb610d27565b6001600160a01b0316146105ff576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6106076115f9565b565b60008061061584611699565b61013254604080516315f53c9b60e11b81526001600160a01b03888116600483015291519394506000936106a9939290921691632bea793691602480820192602092909190829003018186803b15801561066e57600080fd5b505afa158015610682573d6000803e3d6000fd5b505050506040513d602081101561069857600080fd5b50516101305484919060ff16611744565b905060006106b78686611767565b90506106dd6106c5826117ef565b6101305460ff166106d68686611837565b919061184d565b93505050505b92915050565b6106f1610b3d565b15610736576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002600154141561077c576040805162461bcd60e51b815260206004820152601f60248201526000805160206127e1833981519152604482015290519081900360640190fd5b60026001556001600160a01b0382166000908152610139602052604090205460ff166107d7576040805162461bcd60e51b81526020600482015260056024820152642b2fa1a72360d91b604482015290519081900360640190fd5b60006107e16115ea565b90506107f681846107f1856117ef565b611866565b6000836001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561084557600080fd5b505afa158015610859573d6000803e3d6000fd5b505050506040513d602081101561086f57600080fd5b5051905061087f848330866118a6565b82610903856001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156108d057600080fd5b505afa1580156108e4573d6000803e3d6000fd5b505050506040513d60208110156108fa57600080fd5b50518390611a02565b1461093d576040805162461bcd60e51b8152602060048201526005602482015264565f42414960d81b604482015290519081900360640190fd5b816001600160a01b0316846001600160a01b03167f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7856040518082815260200191505060405180910390a35050600180555050565b610136805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a195780601f106109ee57610100808354040283529160200191610a19565b820191906000526020600020905b8154815290600101906020018083116109fc57829003601f168201915b505050505081565b60006106e3610b2461013160009054906101000a90046001600160a01b03166001600160a01b0316639f044f316040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7857600080fd5b505afa158015610a8c573d6000803e3d6000fd5b505050506040513d6020811015610aa257600080fd5b50516101325460408051633666e41760e11b81526001600160a01b03888116600483015291519190921691636ccdc82e916024808301926020929190829003018186803b158015610af257600080fd5b505afa158015610b06573d6000803e3d6000fd5b505050506040513d6020811015610b1c57600080fd5b505190611a5f565b6117ef565b60fd546001600160a01b0390811691161490565b60995460ff165b90565b6066546001600160a01b031690565b60008060005b61013754811015610bf65760006101378281548110610b7757fe5b600091825260209091200154610130546001600160a01b0391821692506101009004168114610bd75760405162461bcd60e51b81526004018080602001828103825260238152602001806128816023913960400191505060405180910390fd5b610beb610be48683611a74565b8490611aa0565b925050600101610b5c565b5092915050565b610c056115ea565b6001600160a01b0316610c16610d27565b6001600160a01b031614610c5a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316906000805160206128c5833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b6101305461010090046001600160a01b031681565b60fd546001600160a01b031681565b610cca6115ea565b6001600160a01b0316610cdb610d27565b6001600160a01b031614610d1f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610607611b05565b6065546001600160a01b031690565b610132546001600160a01b031681565b610133546001600160a01b031681565b6066546001600160a01b0316610d9b576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610da36115ea565b6066546001600160a01b03908116911614610dee576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116906000805160206128c583398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b610131546001600160a01b031681565b60006106e3610e72610e6b84610e66611b88565b610609565b6000611bff565b611c0f565b610134546001600160a01b031681565b610e8f6115ea565b6001600160a01b0316610ea0610d27565b6001600160a01b031614610ee4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610ef6816001600160a01b0316611c66565b610f2f576040805162461bcd60e51b8152602060048201526005602482015264565f414e4360d81b604482015290519081900360640190fd5b610f3881611c6c565b50565b610f43610b3d565b15610f88576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415610fce576040805162461bcd60e51b815260206004820152601f60248201526000805160206127e1833981519152604482015290519081900360640190fd5b60026001556000610fdd6115ea565b61013454604080516375cdc89760e11b81526001600160a01b038085166004830152915193945091169163eb9b912e9160248082019260009290919082900301818387803b15801561102e57600080fd5b505af1158015611042573d6000803e3d6000fd5b50506101325460408051636a256b2960e01b81526001600160a01b038681166004830152915160009550919092169250636a256b299160248082019260209290919082900301818787803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b505050506040513d60208110156110c357600080fd5b505190506110d0836117ef565b6110e6826110e0610b2486610e52565b90611aa0565b1215611122576040805162461bcd60e51b8152602060048201526006602482015265565f4e45464360d01b604482015290519081900360640190fd5b610130546001600160a01b0385811661010090920416141561123a576000846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b505190508381101561123857610133546040805163317afabb60e21b815283870360048201819052915191926001600160a01b03169163c5ebeaec9160248082019260009290919082900301818387803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b5050610135805490930190925550505b505b61125282856107f161124b876117ef565b8590611d06565b61125d848385611d6b565b816001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb856040518082815260200191505060405180910390a35050600180555050565b600054610100900460ff16806112cb57506112cb611eb7565b806112d9575060005460ff16155b6113145760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561133f576000805460ff1961ff0019909116610100171660011790555b6000856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561137c57600080fd5b505af1158015611390573d6000803e3d6000fd5b505050506040513d60208110156113a657600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0384169163313ce567916004808301926020929190829003018186803b1580156113ee57600080fd5b505afa158015611402573d6000803e3d6000fd5b505050506040513d602081101561141857600080fd5b50519050601260ff8216111561145e576040805162461bcd60e51b81526020600482015260066024820152651597d254d51160d21b604482015290519081900360640190fd5b611470866001600160a01b0316611c66565b6114ab576040805162461bcd60e51b8152602060048201526007602482015266565f4348434e4360c81b604482015290519081900360640190fd5b6114bd856001600160a01b0316611c66565b6114f7576040805162461bcd60e51b8152602060048201526006602482015265565f41424e4360d01b604482015290519081900360640190fd5b6114ff611ec8565b611507611f71565b610130805460ff191660ff831617610100600160a81b0319166101006001600160a01b03858116919091029190911790915561013380546001600160a01b03191691891691909117905561155a8261200e565b61013180546001600160a01b038089166001600160a01b0319928316179092556101328054888416908316179055610134805492871692909116919091179055604080518082019091526005808252640322e302e360dc1b60209092019182526115c79161013691612748565b50505080156115dc576000805461ff00191690555b5050505050565b6101355481565b60006115f46120cd565b905090565b611601610b3d565b611649576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61167c6115ea565b604080516001600160a01b039092168252519081900360200190a1565b6000806116a583610b56565b610132546040805163ee817e8b60e01b81526001600160a01b0387811660048301529151939450600093919092169163ee817e8b916024808301926020929190829003018186803b1580156116f957600080fd5b505afa15801561170d573d6000803e3d6000fd5b505050506040513d602081101561172357600080fd5b50516101305490915061173c908390839060ff16611744565b949350505050565b600061175d611757846110e087866120ff565b83612115565b90505b9392505050565b610132546040805163293a507760e01b81526001600160a01b03858116600483015291516000938493169163293a5077916024808301926020929190829003018186803b1580156117b757600080fd5b505afa1580156117cb573d6000803e3d6000fd5b505050506040513d60208110156117e157600080fd5b5051905061173c8184611a5f565b6000600160ff1b82106118335760405162461bcd60e51b815260040180806020018281038252602881526020018061290c6028913960400191505060405180910390fd5b5090565b60008183126118465781611760565b5090919050565b600061175d6117578461186087866120ff565b90611d06565b611874816110e08585611a74565b6001600160a01b0393841660009081526101386020908152604080832095909616825293909352929091209190915550565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b6020831061192a5780518252601f19909201916020918201910161190b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461198c576040519150601f19603f3d011682016040523d82523d6000602084013e611991565b606091505b50915091508180156119bf5750805115806119bf57508080602001905160208110156119bc57600080fd5b50515b6119fa5760405162461bcd60e51b81526004018080602001828103825260318152602001806128016031913960400191505060405180910390fd5b505050505050565b600082821115611a59576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000611760838362ffffff16620f424061212b565b6001600160a01b0391821660009081526101386020908152604080832093909416825291909152205490565b6000828201818312801590611ab55750838112155b80611aca5750600083128015611aca57508381125b6117605760405162461bcd60e51b81526004018080602001828103825260218152602001806128326021913960400191505060405180910390fd5b611b0d610b3d565b15611b52576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861167c6115ea565b6101315460408051632f60a15160e01b815290516000926001600160a01b031691632f60a151916004808301926020929190829003018186803b158015611bce57600080fd5b505afa158015611be2573d6000803e3d6000fd5b505050506040513d6020811015611bf857600080fd5b5051905090565b6000818312156118465781611760565b600080821215611833576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b3b151590565b6001600160a01b038116611cb2576040805162461bcd60e51b81526020600482015260086024820152674252435f4954464160c01b604482015290519081900360640190fd5b60fd80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd119181900360200190a150565b6000818303818312801590611d1b5750838113155b80611d305750600083128015611d3057508381135b6117605760405162461bcd60e51b81526004018080602001828103825260248152602001806129616024913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310611de75780518252601f199092019160209182019101611dc8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611e49576040519150601f19603f3d011682016040523d82523d6000602084013e611e4e565b606091505b5091509150818015611e7c575080511580611e7c5750808060200190516020811015611e7957600080fd5b50515b6115dc5760405162461bcd60e51b815260040180806020018281038252602d815260200180612934602d913960400191505060405180910390fd5b6000611ec230611c66565b15905090565b600054610100900460ff1680611ee15750611ee1611eb7565b80611eef575060005460ff16155b611f2a5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611f55576000805460ff1961ff0019909116610100171660011790555b611f5d6121da565b8015610f38576000805461ff001916905550565b600054610100900460ff1680611f8a5750611f8a611eb7565b80611f98575060005460ff16155b611fd35760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611ffe576000805460ff1961ff0019909116610100171660011790555b61200661227f565b611f5d61236e565b6001600160a01b0381166000908152610139602052604090205460ff1615612065576040805162461bcd60e51b8152602060048201526005602482015264565f43544560d81b604482015290519081900360640190fd5b6001600160a01b0316600081815261013960205260408120805460ff19166001908117909155610137805491820181559091527f43dc304bb3613567eca51c4fb9e7f3128bc51bba882a32550e891d6cbd8a0fa10180546001600160a01b0319169091179055565b6000601836108015906120e457506120e433610b29565b156120f8575060131936013560601c610b44565b5033610b44565b60006117608360ff601285900316600a0a61240b565b60006117608360ff601285900316600a0a6124b4565b6000808060001985870986860292508281109083900303905080612161576000841161215657600080fd5b508290049050611760565b80841161216d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600054610100900460ff16806121f357506121f3611eb7565b80612201575060005460ff16155b61223c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015612267576000805460ff1961ff0019909116610100171660011790555b600180558015610f38576000805461ff001916905550565b600054610100900460ff16806122985750612298611eb7565b806122a6575060005460ff16155b6122e15760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561230c576000805460ff1961ff0019909116610100171660011790555b61231461256c565b600061231e6115ea565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206128c5833981519152908290a3508015610f38576000805461ff001916905550565b600054610100900460ff16806123875750612387611eb7565b80612395575060005460ff16155b6123d05760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff161580156123fb576000805460ff1961ff0019909116610100171660011790555b6124036125fd565b611f5d61269d565b60008261241a575060006106e3565b8260001914801561242e5750600160ff1b82145b1561246a5760405162461bcd60e51b81526004018080602001828103825260278152602001806128e56027913960400191505060405180910390fd5b8282028284828161247757fe5b05146117605760405162461bcd60e51b81526004018080602001828103825260278152602001806128e56027913960400191505060405180910390fd5b600081612508576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b8160001914801561251c5750600160ff1b83145b156125585760405162461bcd60e51b81526004018080602001828103825260218152602001806128a46021913960400191505060405180910390fd5b600082848161256357fe5b05949350505050565b600054610100900460ff16806125855750612585611eb7565b80612593575060005460ff16155b6125ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff161580156125f9576000805460ff1961ff0019909116610100171660011790555b611f5d5b600054610100900460ff16806126165750612616611eb7565b80612624575060005460ff16155b61265f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611f5d576000805460ff1961ff0019909116610100171660011790558015610f38576000805461ff001916905550565b600054610100900460ff16806126b657506126b6611eb7565b806126c4575060005460ff16155b6126ff5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561272a576000805460ff1961ff0019909116610100171660011790555b6099805460ff191690558015610f38576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261277e57600085556127c4565b82601f1061279757805160ff19168380011785556127c4565b828001600101855582156127c4579182015b828111156127c45782518255916020019190600101906127a9565b506118339291505b8082111561183357600081556001016127cc56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564544244202d20746f6b656e2074776170202a2074726164657227732062616c616e63655369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65645369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a2646970667358221220ce1551b3baf9ef0ea7225fe1cfcffc5ef95d676bf6146512a1ec031cfaccd21264736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061013e5760003560e01c806313af403514610143578063313ce5671461016b5780633f4ba83a146101895780633ffd13031461019157806347e7ef24146101d4578063486ff0cd146102005780634c2845a01461027d578063572b6c05146102a35780635c975abb146102dd5780636c8381f8146102e557806370a0823114610309578063715018a61461032f5780637b9e618d146103375780637da0a8771461033f5780638456cb59146103475780638da5cb5b1461034f578063b0a1c1c414610357578063b79023031461035f578063bc5920ba14610367578063c2075b211461036f578063c399944414610377578063d2f7265a1461039d578063da742228146103a5578063f3fef3a3146103cb578063f8c8765e146103f7578063fc7b9c1814610435575b600080fd5b6101696004803603602081101561015957600080fd5b50356001600160a01b031661043d565b005b610173610598565b6040805160ff9092168252519081900360200190f35b6101696105a2565b6101c2600480360360408110156101a757600080fd5b5080356001600160a01b0316906020013562ffffff16610609565b60408051918252519081900360200190f35b610169600480360360408110156101ea57600080fd5b506001600160a01b0381351690602001356106e9565b610208610992565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c26004803603602081101561029357600080fd5b50356001600160a01b0316610a21565b6102c9600480360360208110156102b957600080fd5b50356001600160a01b0316610b29565b604080519115158252519081900360200190f35b6102c9610b3d565b6102ed610b47565b604080516001600160a01b039092168252519081900360200190f35b6101c26004803603602081101561031f57600080fd5b50356001600160a01b0316610b56565b610169610bfd565b6102ed610c9e565b6102ed610cb3565b610169610cc2565b6102ed610d27565b6102ed610d36565b6102ed610d46565b610169610d56565b6102ed610e42565b6101c26004803603602081101561038d57600080fd5b50356001600160a01b0316610e52565b6102ed610e77565b610169600480360360208110156103bb57600080fd5b50356001600160a01b0316610e87565b610169600480360360408110156103e157600080fd5b506001600160a01b038135169060200135610f3b565b6101696004803603608081101561040d57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160600135166112b2565b6101c26115e3565b6104456115ea565b6001600160a01b0316610456610d27565b6001600160a01b03161461049a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166104de576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b038281169116141561052a576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b0382811691161415610576576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6101305460ff1681565b6105aa6115ea565b6001600160a01b03166105bb610d27565b6001600160a01b0316146105ff576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6106076115f9565b565b60008061061584611699565b61013254604080516315f53c9b60e11b81526001600160a01b03888116600483015291519394506000936106a9939290921691632bea793691602480820192602092909190829003018186803b15801561066e57600080fd5b505afa158015610682573d6000803e3d6000fd5b505050506040513d602081101561069857600080fd5b50516101305484919060ff16611744565b905060006106b78686611767565b90506106dd6106c5826117ef565b6101305460ff166106d68686611837565b919061184d565b93505050505b92915050565b6106f1610b3d565b15610736576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002600154141561077c576040805162461bcd60e51b815260206004820152601f60248201526000805160206127e1833981519152604482015290519081900360640190fd5b60026001556001600160a01b0382166000908152610139602052604090205460ff166107d7576040805162461bcd60e51b81526020600482015260056024820152642b2fa1a72360d91b604482015290519081900360640190fd5b60006107e16115ea565b90506107f681846107f1856117ef565b611866565b6000836001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561084557600080fd5b505afa158015610859573d6000803e3d6000fd5b505050506040513d602081101561086f57600080fd5b5051905061087f848330866118a6565b82610903856001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156108d057600080fd5b505afa1580156108e4573d6000803e3d6000fd5b505050506040513d60208110156108fa57600080fd5b50518390611a02565b1461093d576040805162461bcd60e51b8152602060048201526005602482015264565f42414960d81b604482015290519081900360640190fd5b816001600160a01b0316846001600160a01b03167f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7856040518082815260200191505060405180910390a35050600180555050565b610136805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a195780601f106109ee57610100808354040283529160200191610a19565b820191906000526020600020905b8154815290600101906020018083116109fc57829003601f168201915b505050505081565b60006106e3610b2461013160009054906101000a90046001600160a01b03166001600160a01b0316639f044f316040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7857600080fd5b505afa158015610a8c573d6000803e3d6000fd5b505050506040513d6020811015610aa257600080fd5b50516101325460408051633666e41760e11b81526001600160a01b03888116600483015291519190921691636ccdc82e916024808301926020929190829003018186803b158015610af257600080fd5b505afa158015610b06573d6000803e3d6000fd5b505050506040513d6020811015610b1c57600080fd5b505190611a5f565b6117ef565b60fd546001600160a01b0390811691161490565b60995460ff165b90565b6066546001600160a01b031690565b60008060005b61013754811015610bf65760006101378281548110610b7757fe5b600091825260209091200154610130546001600160a01b0391821692506101009004168114610bd75760405162461bcd60e51b81526004018080602001828103825260238152602001806128816023913960400191505060405180910390fd5b610beb610be48683611a74565b8490611aa0565b925050600101610b5c565b5092915050565b610c056115ea565b6001600160a01b0316610c16610d27565b6001600160a01b031614610c5a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316906000805160206128c5833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b6101305461010090046001600160a01b031681565b60fd546001600160a01b031681565b610cca6115ea565b6001600160a01b0316610cdb610d27565b6001600160a01b031614610d1f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610607611b05565b6065546001600160a01b031690565b610132546001600160a01b031681565b610133546001600160a01b031681565b6066546001600160a01b0316610d9b576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610da36115ea565b6066546001600160a01b03908116911614610dee576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116906000805160206128c583398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b610131546001600160a01b031681565b60006106e3610e72610e6b84610e66611b88565b610609565b6000611bff565b611c0f565b610134546001600160a01b031681565b610e8f6115ea565b6001600160a01b0316610ea0610d27565b6001600160a01b031614610ee4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610ef6816001600160a01b0316611c66565b610f2f576040805162461bcd60e51b8152602060048201526005602482015264565f414e4360d81b604482015290519081900360640190fd5b610f3881611c6c565b50565b610f43610b3d565b15610f88576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415610fce576040805162461bcd60e51b815260206004820152601f60248201526000805160206127e1833981519152604482015290519081900360640190fd5b60026001556000610fdd6115ea565b61013454604080516375cdc89760e11b81526001600160a01b038085166004830152915193945091169163eb9b912e9160248082019260009290919082900301818387803b15801561102e57600080fd5b505af1158015611042573d6000803e3d6000fd5b50506101325460408051636a256b2960e01b81526001600160a01b038681166004830152915160009550919092169250636a256b299160248082019260209290919082900301818787803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b505050506040513d60208110156110c357600080fd5b505190506110d0836117ef565b6110e6826110e0610b2486610e52565b90611aa0565b1215611122576040805162461bcd60e51b8152602060048201526006602482015265565f4e45464360d01b604482015290519081900360640190fd5b610130546001600160a01b0385811661010090920416141561123a576000846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b505190508381101561123857610133546040805163317afabb60e21b815283870360048201819052915191926001600160a01b03169163c5ebeaec9160248082019260009290919082900301818387803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b5050610135805490930190925550505b505b61125282856107f161124b876117ef565b8590611d06565b61125d848385611d6b565b816001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb856040518082815260200191505060405180910390a35050600180555050565b600054610100900460ff16806112cb57506112cb611eb7565b806112d9575060005460ff16155b6113145760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561133f576000805460ff1961ff0019909116610100171660011790555b6000856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561137c57600080fd5b505af1158015611390573d6000803e3d6000fd5b505050506040513d60208110156113a657600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0384169163313ce567916004808301926020929190829003018186803b1580156113ee57600080fd5b505afa158015611402573d6000803e3d6000fd5b505050506040513d602081101561141857600080fd5b50519050601260ff8216111561145e576040805162461bcd60e51b81526020600482015260066024820152651597d254d51160d21b604482015290519081900360640190fd5b611470866001600160a01b0316611c66565b6114ab576040805162461bcd60e51b8152602060048201526007602482015266565f4348434e4360c81b604482015290519081900360640190fd5b6114bd856001600160a01b0316611c66565b6114f7576040805162461bcd60e51b8152602060048201526006602482015265565f41424e4360d01b604482015290519081900360640190fd5b6114ff611ec8565b611507611f71565b610130805460ff191660ff831617610100600160a81b0319166101006001600160a01b03858116919091029190911790915561013380546001600160a01b03191691891691909117905561155a8261200e565b61013180546001600160a01b038089166001600160a01b0319928316179092556101328054888416908316179055610134805492871692909116919091179055604080518082019091526005808252640322e302e360dc1b60209092019182526115c79161013691612748565b50505080156115dc576000805461ff00191690555b5050505050565b6101355481565b60006115f46120cd565b905090565b611601610b3d565b611649576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61167c6115ea565b604080516001600160a01b039092168252519081900360200190a1565b6000806116a583610b56565b610132546040805163ee817e8b60e01b81526001600160a01b0387811660048301529151939450600093919092169163ee817e8b916024808301926020929190829003018186803b1580156116f957600080fd5b505afa15801561170d573d6000803e3d6000fd5b505050506040513d602081101561172357600080fd5b50516101305490915061173c908390839060ff16611744565b949350505050565b600061175d611757846110e087866120ff565b83612115565b90505b9392505050565b610132546040805163293a507760e01b81526001600160a01b03858116600483015291516000938493169163293a5077916024808301926020929190829003018186803b1580156117b757600080fd5b505afa1580156117cb573d6000803e3d6000fd5b505050506040513d60208110156117e157600080fd5b5051905061173c8184611a5f565b6000600160ff1b82106118335760405162461bcd60e51b815260040180806020018281038252602881526020018061290c6028913960400191505060405180910390fd5b5090565b60008183126118465781611760565b5090919050565b600061175d6117578461186087866120ff565b90611d06565b611874816110e08585611a74565b6001600160a01b0393841660009081526101386020908152604080832095909616825293909352929091209190915550565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b6020831061192a5780518252601f19909201916020918201910161190b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461198c576040519150601f19603f3d011682016040523d82523d6000602084013e611991565b606091505b50915091508180156119bf5750805115806119bf57508080602001905160208110156119bc57600080fd5b50515b6119fa5760405162461bcd60e51b81526004018080602001828103825260318152602001806128016031913960400191505060405180910390fd5b505050505050565b600082821115611a59576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000611760838362ffffff16620f424061212b565b6001600160a01b0391821660009081526101386020908152604080832093909416825291909152205490565b6000828201818312801590611ab55750838112155b80611aca5750600083128015611aca57508381125b6117605760405162461bcd60e51b81526004018080602001828103825260218152602001806128326021913960400191505060405180910390fd5b611b0d610b3d565b15611b52576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861167c6115ea565b6101315460408051632f60a15160e01b815290516000926001600160a01b031691632f60a151916004808301926020929190829003018186803b158015611bce57600080fd5b505afa158015611be2573d6000803e3d6000fd5b505050506040513d6020811015611bf857600080fd5b5051905090565b6000818312156118465781611760565b600080821215611833576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b3b151590565b6001600160a01b038116611cb2576040805162461bcd60e51b81526020600482015260086024820152674252435f4954464160c01b604482015290519081900360640190fd5b60fd80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd119181900360200190a150565b6000818303818312801590611d1b5750838113155b80611d305750600083128015611d3057508381135b6117605760405162461bcd60e51b81526004018080602001828103825260248152602001806129616024913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310611de75780518252601f199092019160209182019101611dc8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611e49576040519150601f19603f3d011682016040523d82523d6000602084013e611e4e565b606091505b5091509150818015611e7c575080511580611e7c5750808060200190516020811015611e7957600080fd5b50515b6115dc5760405162461bcd60e51b815260040180806020018281038252602d815260200180612934602d913960400191505060405180910390fd5b6000611ec230611c66565b15905090565b600054610100900460ff1680611ee15750611ee1611eb7565b80611eef575060005460ff16155b611f2a5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611f55576000805460ff1961ff0019909116610100171660011790555b611f5d6121da565b8015610f38576000805461ff001916905550565b600054610100900460ff1680611f8a5750611f8a611eb7565b80611f98575060005460ff16155b611fd35760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611ffe576000805460ff1961ff0019909116610100171660011790555b61200661227f565b611f5d61236e565b6001600160a01b0381166000908152610139602052604090205460ff1615612065576040805162461bcd60e51b8152602060048201526005602482015264565f43544560d81b604482015290519081900360640190fd5b6001600160a01b0316600081815261013960205260408120805460ff19166001908117909155610137805491820181559091527f43dc304bb3613567eca51c4fb9e7f3128bc51bba882a32550e891d6cbd8a0fa10180546001600160a01b0319169091179055565b6000601836108015906120e457506120e433610b29565b156120f8575060131936013560601c610b44565b5033610b44565b60006117608360ff601285900316600a0a61240b565b60006117608360ff601285900316600a0a6124b4565b6000808060001985870986860292508281109083900303905080612161576000841161215657600080fd5b508290049050611760565b80841161216d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600054610100900460ff16806121f357506121f3611eb7565b80612201575060005460ff16155b61223c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015612267576000805460ff1961ff0019909116610100171660011790555b600180558015610f38576000805461ff001916905550565b600054610100900460ff16806122985750612298611eb7565b806122a6575060005460ff16155b6122e15760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561230c576000805460ff1961ff0019909116610100171660011790555b61231461256c565b600061231e6115ea565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206128c5833981519152908290a3508015610f38576000805461ff001916905550565b600054610100900460ff16806123875750612387611eb7565b80612395575060005460ff16155b6123d05760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff161580156123fb576000805460ff1961ff0019909116610100171660011790555b6124036125fd565b611f5d61269d565b60008261241a575060006106e3565b8260001914801561242e5750600160ff1b82145b1561246a5760405162461bcd60e51b81526004018080602001828103825260278152602001806128e56027913960400191505060405180910390fd5b8282028284828161247757fe5b05146117605760405162461bcd60e51b81526004018080602001828103825260278152602001806128e56027913960400191505060405180910390fd5b600081612508576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b8160001914801561251c5750600160ff1b83145b156125585760405162461bcd60e51b81526004018080602001828103825260218152602001806128a46021913960400191505060405180910390fd5b600082848161256357fe5b05949350505050565b600054610100900460ff16806125855750612585611eb7565b80612593575060005460ff16155b6125ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff161580156125f9576000805460ff1961ff0019909116610100171660011790555b611f5d5b600054610100900460ff16806126165750612616611eb7565b80612624575060005460ff16155b61265f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611f5d576000805460ff1961ff0019909116610100171660011790558015610f38576000805461ff001916905550565b600054610100900460ff16806126b657506126b6611eb7565b806126c4575060005460ff16155b6126ff5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561272a576000805460ff1961ff0019909116610100171660011790555b6099805460ff191690558015610f38576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261277e57600085556127c4565b82601f1061279757805160ff19168380011785556127c4565b828001600101855582156127c4579182015b828111156127c45782518255916020019190600101906127a9565b506118339291505b8082111561183357600081556001016127cc56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564544244202d20746f6b656e2074776170202a2074726164657227732062616c616e63655369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65645369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a2646970667358221220ce1551b3baf9ef0ea7225fe1cfcffc5ef95d676bf6146512a1ec031cfaccd21264736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/external/abi/perp/PerpV2VirtualToken.json b/external/abi/perp/PerpV2VirtualToken.json new file mode 100644 index 000000000..6fb6849c2 --- /dev/null +++ b/external/abi/perp/PerpV2VirtualToken.json @@ -0,0 +1,437 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "PerpV2VirtualToken", + "sourceName": "contracts/VirtualToken.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Approval", + "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" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "WhitelistAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "WhitelistRemoved", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "addWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "candidate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "subtractedValue", + "type": "uint256" + } + ], + "name": "decreaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "addedValue", + "type": "uint256" + } + ], + "name": "increaseAllowance", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isInWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "mintMaximumTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "removeWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "setOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "updateOwner", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b506111ac806100206000396000f3fe608060405234801561001057600080fd5b50600436106100fc5760003560e01c806306fdde0314610101578063095ea7b31461017e57806309fd8212146101be57806313af4035146101e457806318160ddd1461020c57806323b872dd14610226578063313ce5671461025c578063395093511461027a5780636c8381f8146102a657806370a08231146102ca578063715018a6146102f057806378c8cda7146102f85780638da5cb5b1461031e57806395d89b4114610326578063a457c2d71461032e578063a9059cbb1461035a578063bc5920ba14610386578063dd62ed3e1461038e578063f52e308e146103bc578063f80f5dd5146103e2575b600080fd5b610109610408565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014357818101518382015260200161012b565b50505050905090810190601f1680156101705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101aa6004803603604081101561019457600080fd5b506001600160a01b03813516906020013561049e565b604080519115158252519081900360200190f35b6101aa600480360360208110156101d457600080fd5b50356001600160a01b03166104bb565b61020a600480360360208110156101fa57600080fd5b50356001600160a01b03166104d9565b005b610214610634565b60408051918252519081900360200190f35b6101aa6004803603606081101561023c57600080fd5b506001600160a01b0381358116916020810135909116906040013561063a565b6102646106c1565b6040805160ff9092168252519081900360200190f35b6101aa6004803603604081101561029057600080fd5b506001600160a01b0381351690602001356106ca565b6102ae610718565b604080516001600160a01b039092168252519081900360200190f35b610214600480360360208110156102e057600080fd5b50356001600160a01b0316610727565b61020a610742565b61020a6004803603602081101561030e57600080fd5b50356001600160a01b03166107e3565b6102ae610898565b6101096108a7565b6101aa6004803603604081101561034457600080fd5b506001600160a01b038135169060200135610908565b6101aa6004803603604081101561037057600080fd5b506001600160a01b038135169060200135610970565b61020a610984565b610214600480360360408110156103a457600080fd5b506001600160a01b0381358116916020013516610a70565b61020a600480360360208110156103d257600080fd5b50356001600160a01b0316610a9b565b61020a600480360360208110156103f857600080fd5b50356001600160a01b0316610b07565b606a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104945780601f1061046957610100808354040283529160200191610494565b820191906000526020600020905b81548152906001019060200180831161047757829003601f168201915b5050505050905090565b60006104b26104ab610bbf565b8484610bc3565b50600192915050565b6001600160a01b031660009081526099602052604090205460ff1690565b6104e1610bbf565b6001600160a01b03166104f2610898565b6001600160a01b031614610536576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661057a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156105c6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610612576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b6000610647848484610caf565b6106b784610653610bbf565b6106b2856040518060600160405280602881526020016110a1602891396001600160a01b038a16600090815260686020526040812090610691610bbf565b6001600160a01b031681526020810191909152604001600020549190610dfa565b610bc3565b5060019392505050565b606c5460ff1690565b60006104b26106d7610bbf565b846106b285606860006106e8610bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610e91565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b61074a610bbf565b6001600160a01b031661075b610898565b6001600160a01b03161461079f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b0316906000805160206110c9833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6107eb610bbf565b6001600160a01b03166107fc610898565b6001600160a01b031614610840576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104945780601f1061046957610100808354040283529160200191610494565b60006104b2610915610bbf565b846106b285604051806060016040528060258152602001611152602591396068600061093f610bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610dfa565b60006104b261097d610bbf565b8484610caf565b6034546001600160a01b03166109c9576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6109d1610bbf565b6034546001600160a01b03908116911614610a1c576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b0392831692909116906000805160206110c983398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610aa3610bbf565b6001600160a01b0316610ab4610898565b6001600160a01b031614610af8576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610b0481600019610ef0565b50565b610b0f610bbf565b6001600160a01b0316610b20610898565b6001600160a01b031614610b64576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b3390565b6001600160a01b038316610c085760405162461bcd60e51b815260040180806020018281038252602481526020018061112e6024913960400191505060405180910390fd5b6001600160a01b038216610c4d5760405162461bcd60e51b81526004018080602001828103825260228152602001806110596022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610cf45760405162461bcd60e51b81526004018080602001828103825260258152602001806111096025913960400191505060405180910390fd5b6001600160a01b038216610d395760405162461bcd60e51b81526004018080602001828103825260238152602001806110366023913960400191505060405180910390fd5b610d44838383610fd0565b610d818160405180606001604052806026815260200161107b602691396001600160a01b0386166000908152606760205260409020549190610dfa565b6001600160a01b038085166000908152606760205260408082209390935590841681522054610db09082610e91565b6001600160a01b0380841660008181526067602090815260409182902094909455805185815290519193928716926000805160206110e983398151915292918290030190a3505050565b60008184841115610e895760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e4e578181015183820152602001610e36565b50505050905090810190601f168015610e7b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ee9576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610f4b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610f5760008383610fd0565b606954610f649082610e91565b6069556001600160a01b038216600090815260676020526040902054610f8a9082610e91565b6001600160a01b03831660008181526067602090815260408083209490945583518581529351929391926000805160206110e98339815191529281900390910190a35050565b610fdb838383611030565b6001600160a01b03831660009081526099602052604090205460ff16611030576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df3f55b773b943d00d1f14758331408fd26a5755fc712ad272b393789084cb0864736f6c63430007060033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100fc5760003560e01c806306fdde0314610101578063095ea7b31461017e57806309fd8212146101be57806313af4035146101e457806318160ddd1461020c57806323b872dd14610226578063313ce5671461025c578063395093511461027a5780636c8381f8146102a657806370a08231146102ca578063715018a6146102f057806378c8cda7146102f85780638da5cb5b1461031e57806395d89b4114610326578063a457c2d71461032e578063a9059cbb1461035a578063bc5920ba14610386578063dd62ed3e1461038e578063f52e308e146103bc578063f80f5dd5146103e2575b600080fd5b610109610408565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014357818101518382015260200161012b565b50505050905090810190601f1680156101705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101aa6004803603604081101561019457600080fd5b506001600160a01b03813516906020013561049e565b604080519115158252519081900360200190f35b6101aa600480360360208110156101d457600080fd5b50356001600160a01b03166104bb565b61020a600480360360208110156101fa57600080fd5b50356001600160a01b03166104d9565b005b610214610634565b60408051918252519081900360200190f35b6101aa6004803603606081101561023c57600080fd5b506001600160a01b0381358116916020810135909116906040013561063a565b6102646106c1565b6040805160ff9092168252519081900360200190f35b6101aa6004803603604081101561029057600080fd5b506001600160a01b0381351690602001356106ca565b6102ae610718565b604080516001600160a01b039092168252519081900360200190f35b610214600480360360208110156102e057600080fd5b50356001600160a01b0316610727565b61020a610742565b61020a6004803603602081101561030e57600080fd5b50356001600160a01b03166107e3565b6102ae610898565b6101096108a7565b6101aa6004803603604081101561034457600080fd5b506001600160a01b038135169060200135610908565b6101aa6004803603604081101561037057600080fd5b506001600160a01b038135169060200135610970565b61020a610984565b610214600480360360408110156103a457600080fd5b506001600160a01b0381358116916020013516610a70565b61020a600480360360208110156103d257600080fd5b50356001600160a01b0316610a9b565b61020a600480360360208110156103f857600080fd5b50356001600160a01b0316610b07565b606a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104945780601f1061046957610100808354040283529160200191610494565b820191906000526020600020905b81548152906001019060200180831161047757829003601f168201915b5050505050905090565b60006104b26104ab610bbf565b8484610bc3565b50600192915050565b6001600160a01b031660009081526099602052604090205460ff1690565b6104e1610bbf565b6001600160a01b03166104f2610898565b6001600160a01b031614610536576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661057a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156105c6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610612576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b6000610647848484610caf565b6106b784610653610bbf565b6106b2856040518060600160405280602881526020016110a1602891396001600160a01b038a16600090815260686020526040812090610691610bbf565b6001600160a01b031681526020810191909152604001600020549190610dfa565b610bc3565b5060019392505050565b606c5460ff1690565b60006104b26106d7610bbf565b846106b285606860006106e8610bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610e91565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b61074a610bbf565b6001600160a01b031661075b610898565b6001600160a01b03161461079f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b0316906000805160206110c9833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6107eb610bbf565b6001600160a01b03166107fc610898565b6001600160a01b031614610840576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104945780601f1061046957610100808354040283529160200191610494565b60006104b2610915610bbf565b846106b285604051806060016040528060258152602001611152602591396068600061093f610bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610dfa565b60006104b261097d610bbf565b8484610caf565b6034546001600160a01b03166109c9576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6109d1610bbf565b6034546001600160a01b03908116911614610a1c576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b0392831692909116906000805160206110c983398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610aa3610bbf565b6001600160a01b0316610ab4610898565b6001600160a01b031614610af8576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610b0481600019610ef0565b50565b610b0f610bbf565b6001600160a01b0316610b20610898565b6001600160a01b031614610b64576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b3390565b6001600160a01b038316610c085760405162461bcd60e51b815260040180806020018281038252602481526020018061112e6024913960400191505060405180910390fd5b6001600160a01b038216610c4d5760405162461bcd60e51b81526004018080602001828103825260228152602001806110596022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610cf45760405162461bcd60e51b81526004018080602001828103825260258152602001806111096025913960400191505060405180910390fd5b6001600160a01b038216610d395760405162461bcd60e51b81526004018080602001828103825260238152602001806110366023913960400191505060405180910390fd5b610d44838383610fd0565b610d818160405180606001604052806026815260200161107b602691396001600160a01b0386166000908152606760205260409020549190610dfa565b6001600160a01b038085166000908152606760205260408082209390935590841681522054610db09082610e91565b6001600160a01b0380841660008181526067602090815260409182902094909455805185815290519193928716926000805160206110e983398151915292918290030190a3505050565b60008184841115610e895760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e4e578181015183820152602001610e36565b50505050905090810190601f168015610e7b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ee9576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610f4b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610f5760008383610fd0565b606954610f649082610e91565b6069556001600160a01b038216600090815260676020526040902054610f8a9082610e91565b6001600160a01b03831660008181526067602090815260408083209490945583518581529351929391926000805160206110e98339815191529281900390910190a35050565b610fdb838383611030565b6001600160a01b03831660009081526099602052604090205460ff16611030576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df3f55b773b943d00d1f14758331408fd26a5755fc712ad272b393789084cb0864736f6c63430007060033", + "linkReferences": {}, + "deployedLinkReferences": {} +} diff --git a/package.json b/package.json index bbf6c73c3..87eb5af61 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "homepage": "https://github.com/SetProtocol", "devDependencies": { "@0x/utils": "^6.4.3", + "@eth-optimism/smock": "^1.1.10", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", "@openzeppelin/contracts": "^3.1.0", diff --git a/utils/contracts/perpV2.ts b/utils/contracts/perpV2.ts new file mode 100644 index 000000000..cb01f989f --- /dev/null +++ b/utils/contracts/perpV2.ts @@ -0,0 +1,14 @@ +export { PerpV2AccountBalance } from "../../typechain/PerpV2AccountBalance"; +export { PerpV2BaseToken } from "../../typechain/PerpV2BaseToken"; +export { PerpV2ChainlinkPriceFeed } from "../../typechain/PerpV2ChainlinkPriceFeed"; +export { PerpV2ClearingHouseConfig } from "../../typechain/PerpV2ClearingHouseConfig"; +export { PerpV2Exchange } from "../../typechain/PerpV2Exchange"; +export { PerpV2InsuranceFund } from "../../typechain/PerpV2InsuranceFund"; +export { PerpV2TestAggregatorV3 } from "../../typechain/PerpV2TestAggregatorV3"; +export { PerpV2VirtualToken } from "../../typechain/PerpV2VirtualToken"; +export { PerpV2ClearingHouse } from "../../typechain/PerpV2ClearingHouse"; +export { PerpV2MarketRegistry } from "../../typechain/PerpV2MarketRegistry"; +export { PerpV2OrderBook } from "../../typechain/PerpV2OrderBook"; +export { PerpV2Quoter } from "../../typechain/PerpV2Quoter"; +export { PerpV2QuoteToken } from "../../typechain/PerpV2QuoteToken"; +export { PerpV2Vault } from "../../typechain/PerpV2Vault"; diff --git a/utils/deploys/deployExternal.ts b/utils/deploys/deployExternal.ts index 4b775a292..c9a919507 100644 --- a/utils/deploys/deployExternal.ts +++ b/utils/deploys/deployExternal.ts @@ -201,6 +201,36 @@ import { AaveGovernanceV2__factory } from "../../typechain/factories/AaveGoverna import { Executor__factory } from "../../typechain/factories/Executor__factory"; import { GovernanceStrategy__factory } from "../../typechain/factories/GovernanceStrategy__factory"; +import { + PerpV2MarketRegistry, + PerpV2OrderBook, + PerpV2Quoter, + PerpV2QuoteToken, + PerpV2Vault, + PerpV2TestAggregatorV3, + PerpV2ChainlinkPriceFeed, + PerpV2BaseToken, + PerpV2ClearingHouse, + PerpV2ClearingHouseConfig, + PerpV2InsuranceFund, + PerpV2AccountBalance, + PerpV2Exchange +} from "./../contracts/perpV2"; + +import { PerpV2ClearingHouse__factory } from "../../typechain/factories/PerpV2ClearingHouse__factory"; +import { PerpV2MarketRegistry__factory } from "../../typechain/factories/PerpV2MarketRegistry__factory"; +import { PerpV2OrderBook__factory } from "../../typechain/factories/PerpV2OrderBook__factory"; +import { PerpV2Quoter__factory } from "../../typechain/factories/PerpV2Quoter__factory"; +import { PerpV2QuoteToken__factory } from "../../typechain/factories/PerpV2QuoteToken__factory"; +import { PerpV2Vault__factory } from "../../typechain/factories/PerpV2Vault__factory"; +import { PerpV2TestAggregatorV3__factory } from "../../typechain/factories/PerpV2TestAggregatorV3__factory"; +import { PerpV2ChainlinkPriceFeed__factory } from "../../typechain/factories/PerpV2ChainlinkPriceFeed__factory"; +import { PerpV2BaseToken__factory } from "../../typechain/factories/PerpV2BaseToken__factory"; +import { PerpV2ClearingHouseConfig__factory } from "../../typechain/factories/PerpV2ClearingHouseConfig__factory"; +import { PerpV2InsuranceFund__factory } from "../../typechain/factories/PerpV2InsuranceFund__factory"; +import { PerpV2AccountBalance__factory } from "../../typechain/factories/PerpV2AccountBalance__factory"; +import { PerpV2Exchange__factory } from "../../typechain/factories/PerpV2Exchange__factory"; + export default class DeployExternalContracts { private _deployerSigner: Signer; @@ -771,4 +801,58 @@ export default class DeployExternalContracts { public async deployNFTDescriptor(): Promise { return await new NFTDescriptor__factory(this._deployerSigner).deploy(); } + + // PerpV2 + + public async deployPerpV2OrderBook(): Promise { + return await new PerpV2OrderBook__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2MarketRegistry(): Promise { + return await new PerpV2MarketRegistry__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2Quoter(): Promise { + return await new PerpV2Quoter__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2QuoteToken(): Promise { + return await new PerpV2QuoteToken__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2Vault(): Promise { + return await new PerpV2Vault__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2TestAggregatorV3(): Promise { + return await new PerpV2TestAggregatorV3__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2ChainlinkPriceFeed(): Promise { + return await new PerpV2ChainlinkPriceFeed__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2BaseToken(): Promise { + return await new PerpV2BaseToken__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2ClearingHouseConfig(): Promise { + return await new PerpV2ClearingHouseConfig__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2InsuranceFund(): Promise { + return await new PerpV2InsuranceFund__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2AccountBalance(): Promise { + return await new PerpV2AccountBalance__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2Exchange(): Promise { + return await new PerpV2Exchange__factory(this._deployerSigner).deploy(); + } + + public async deployPerpV2ClearingHouse(): Promise { + return await new PerpV2ClearingHouse__factory(this._deployerSigner).deploy(); + } } diff --git a/utils/fixtures/index.ts b/utils/fixtures/index.ts index 7bd918025..b716841c1 100644 --- a/utils/fixtures/index.ts +++ b/utils/fixtures/index.ts @@ -8,3 +8,4 @@ export { SystemFixture } from "./systemFixture"; export { UniswapFixture } from "./uniswapFixture"; export { UniswapV3Fixture } from "./uniswapV3Fixture"; export { YearnFixture } from "./yearnFixture"; +export { PerpV2Fixture } from "./perpV2Fixture"; diff --git a/utils/fixtures/perpV2Fixture.ts b/utils/fixtures/perpV2Fixture.ts new file mode 100644 index 000000000..699836642 --- /dev/null +++ b/utils/fixtures/perpV2Fixture.ts @@ -0,0 +1,244 @@ +import { providers, Signer } from "ethers"; +import { ether } from "../common"; +import { MockContract, smockit } from "@eth-optimism/smock"; + +import { + PerpV2AccountBalance, + PerpV2BaseToken, + PerpV2ChainlinkPriceFeed, + PerpV2ClearingHouseConfig, + PerpV2Exchange, + PerpV2InsuranceFund, + PerpV2TestAggregatorV3, + PerpV2Vault, + PerpV2OrderBook, + PerpV2MarketRegistry, + PerpV2ClearingHouse, + PerpV2QuoteToken, + PerpV2VirtualToken +} from "../contracts/perpV2"; + +import { + UniswapV3Factory, + UniswapV3Pool +} from "../contracts/uniswapV3"; + +import { + StandardTokenMock, +} from "../contracts"; + +import DeployHelper from "../deploys"; +import { Address } from "../types"; + +export interface TokensFixture { + token0: PerpV2BaseToken; + token1: PerpV2QuoteToken; + mockedAggregator0: MockContract; + mockedAggregator1: MockContract; +} + +export interface PoolFixture { + factory: UniswapV3Factory; + pool: UniswapV3Pool; + baseToken: PerpV2BaseToken; + quoteToken: PerpV2QuoteToken; +} + +export interface BaseTokenFixture { + baseToken: PerpV2BaseToken; + mockedAggregator: MockContract; +} + +export class PerpV2Fixture { + private _deployer: DeployHelper; + private _ownerAddress: Address; + private _ownerSigner: Signer; + private _feeTier: number = 10000; + + public usdc: StandardTokenMock; + public clearingHouse: PerpV2ClearingHouse; + public orderBook: PerpV2OrderBook; + public accountBalance: PerpV2AccountBalance; + public marketRegistry: PerpV2MarketRegistry; + public clearingHouseConfig: PerpV2ClearingHouseConfig; + + public exchange: PerpV2Exchange; + public vault: PerpV2Vault; + public insuranceFund: PerpV2InsuranceFund; + public uniV3Factory: UniswapV3Factory; + public pool: UniswapV3Pool; + public quoteToken: PerpV2QuoteToken; + public baseToken: PerpV2BaseToken; + public mockedBaseAggregator: MockContract; + + constructor(provider: providers.Web3Provider | providers.JsonRpcProvider, ownerAddress: Address) { + this._ownerAddress = ownerAddress; + this._ownerSigner = provider.getSigner(ownerAddress); + this._deployer = new DeployHelper(this._ownerSigner); + } + + public async initialize(): Promise { + this.usdc = await this._deployer.mocks.deployTokenMock(this._ownerAddress, ether(10000), 6); + + const { token0, mockedAggregator0, token1 } = await this._tokensFixture(); + + // we assume (base, quote) == (token0, token1) + this.baseToken = token0; + this.quoteToken = token1; + this.mockedBaseAggregator = mockedAggregator0; + + // deploy UniV3 factory + this.uniV3Factory = await this._deployer.external.deployUniswapV3Factory(); + + this.clearingHouseConfig = await this._deployer.external.deployPerpV2ClearingHouseConfig(); + await this.clearingHouseConfig.initialize(); + + // prepare uniswap factory + await this.uniV3Factory.createPool( + this.baseToken.address, + this.quoteToken.address, + this._feeTier + ); + + this.marketRegistry = await this._deployer.external.deployPerpV2MarketRegistry(); + await this.marketRegistry.initialize(this.uniV3Factory.address, this.quoteToken.address); + + this.orderBook = await this._deployer.external.deployPerpV2OrderBook(); + await this.orderBook.initialize(this.marketRegistry.address, this.quoteToken.address); + + this.accountBalance = await this._deployer.external.deployPerpV2AccountBalance(); + this.exchange = await this._deployer.external.deployPerpV2Exchange(); + + // deploy exchange + await this.exchange.initialize( + this.marketRegistry.address, + this.orderBook.address, + this.clearingHouseConfig.address, + this.insuranceFund.address, + ); + + this.exchange.setAccountBalance(this.accountBalance.address); + await this.orderBook.setExchange(this.exchange.address); + + await this.accountBalance.initialize( + this.clearingHouseConfig.address, + this.marketRegistry.address, + this.exchange.address + ); + + this.insuranceFund = await this._deployer.external.deployPerpV2InsuranceFund(); + await this.insuranceFund.initialize(this.usdc.address); + + this.vault = await this._deployer.external.deployPerpV2Vault(); + + await this.vault.initialize( + this.insuranceFund.address, + this.clearingHouseConfig.address, + this.accountBalance.address, + this.exchange.address, + ); + + await this.insuranceFund.setBorrower(this.vault.address); + await this.accountBalance.setVault(this.vault.address); + + // deploy a pool + const poolAddr = await this.uniV3Factory.getPool( + this.baseToken.address, + this.quoteToken.address, + this._feeTier + ); + + await this.baseToken.addWhitelist(poolAddr); + await this.quoteToken.addWhitelist(poolAddr); + + // deploy clearingHouse + this.clearingHouse = await this._deployer.external.deployPerpV2ClearingHouse(); + + await this.clearingHouse.initialize( + this.clearingHouseConfig.address, + this.vault.address, + this.quoteToken.address, + this.uniV3Factory.address, + this.exchange.address, + this.accountBalance.address, + ); + + await this.quoteToken.mintMaximumTo(this.clearingHouse.address); + await this.baseToken.mintMaximumTo(this.clearingHouse.address); + + await this.quoteToken.addWhitelist(this.clearingHouse.address); + await this.baseToken.addWhitelist(this.clearingHouse.address); + + await this.marketRegistry.setClearingHouse(this.clearingHouse.address); + await this.orderBook.setClearingHouse(this.clearingHouse.address); + await this.exchange.setClearingHouse(this.clearingHouse.address); + await this.accountBalance.setClearingHouse(this.clearingHouse.address); + } + + _isAscendingTokenOrder(addr0: string, addr1: string): boolean { + return addr0.toLowerCase() < addr1.toLowerCase(); + } + + async _createQuoteTokenFixture(name: string, symbol: string): Promise { + const quoteToken = await this._deployer.external.deployPerpV2QuoteToken(); + await quoteToken.initialize(name, symbol); + return quoteToken; + } + + async _createBaseTokenFixture(name: string, symbol: string): Promise { + const aggregator = await this._deployer.external.deployPerpV2TestAggregatorV3(); + const mockedAggregator = await smockit(aggregator); + + mockedAggregator.smocked.decimals.will.return.with(async () => 6); + + const chainlinkPriceFeed = await this._deployer.external.deployPerpV2ChainlinkPriceFeed(); + await chainlinkPriceFeed.initialize(mockedAggregator.address); + + const baseToken = await this._deployer.external.deployPerpV2BaseToken(); + await baseToken.initialize(name, symbol, chainlinkPriceFeed.address); + + return { baseToken, mockedAggregator }; + } + + + async _tokensFixture(): Promise { + const { + baseToken: randomToken0, + mockedAggregator: randomMockedAggregator0, + } = await this._createBaseTokenFixture( + "RandomTestToken0", + "randomToken0", + ); + + const { + baseToken: randomToken1, + mockedAggregator: randomMockedAggregator1, + } = await this._createBaseTokenFixture( + "RandomTestToken1", + "randomToken1", + ); + + let token0: PerpV2BaseToken; + let token1: PerpV2QuoteToken; + let mockedAggregator0: MockContract; + let mockedAggregator1: MockContract; + + if (this._isAscendingTokenOrder(randomToken0.address, randomToken1.address)) { + token0 = randomToken0; + mockedAggregator0 = randomMockedAggregator0; + token1 = randomToken1 as PerpV2VirtualToken as PerpV2QuoteToken; + mockedAggregator1 = randomMockedAggregator1; + } else { + token0 = randomToken1; + mockedAggregator0 = randomMockedAggregator1; + token1 = randomToken0 as PerpV2VirtualToken as PerpV2QuoteToken; + mockedAggregator1 = randomMockedAggregator0; + } + return { + token0, + mockedAggregator0, + token1, + mockedAggregator1, + }; + } +} diff --git a/yarn.lock b/yarn.lock index 72a3d312f..727424d76 100644 --- a/yarn.lock +++ b/yarn.lock @@ -104,6 +104,23 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@eth-optimism/core-utils@^0.5.1": + version "0.5.5" + resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.5.5.tgz#0e2bb95b23965fb51adfb8ba6841c3afd26a6411" + integrity sha512-N/uyZjHltnvnQyBOE498EGlqeYvWRUQTW6BpXhexKljEXZpnria4J4MFO9s1lJOpogLXTaS+lhM1Ic8zUNj8Pg== + dependencies: + "@ethersproject/abstract-provider" "^5.4.1" + ethers "^5.4.5" + lodash "^4.17.21" + +"@eth-optimism/smock@^1.1.10": + version "1.1.10" + resolved "https://registry.yarnpkg.com/@eth-optimism/smock/-/smock-1.1.10.tgz#98a6eefc994ccf707f52ab06849468f3cc57bdb7" + integrity sha512-XPx1x9odF/noTBHzIhRgL9ihhr769WgUhf9dOm6X7bjSWRAVsII3IqbdB4ssPycaoSuNSmv8HG1xTLgfgcyOYw== + dependencies: + "@eth-optimism/core-utils" "^0.5.1" + bn.js "^5.2.0" + "@ethereum-waffle/chai@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.0.tgz#2477877410a96bf370edd64df905b04fb9aba9d5" @@ -300,7 +317,7 @@ "@ethersproject/transactions" "^5.0.5" "@ethersproject/web" "^5.0.6" -"@ethersproject/abstract-provider@5.4.1": +"@ethersproject/abstract-provider@5.4.1", "@ethersproject/abstract-provider@^5.4.1": version "5.4.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e" integrity sha512-3EedfKI3LVpjSKgAxoUaI+gB27frKsxzm+r21w9G60Ugk+3wVLQwhi1LsEJAKNV7WoZc8CIpNrATlL1QFABjtQ== @@ -418,6 +435,15 @@ "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" +"@ethersproject/bignumber@5.4.2": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.2.tgz#44232e015ae4ce82ac034de549eb3583c71283d8" + integrity sha512-oIBDhsKy5bs7j36JlaTzFgNPaZjiNDOXsdSgSpXRucUl+UA6L/1YLlFeI3cPAoodcenzF4nxNPV13pcy7XbWjA== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + bn.js "^4.11.9" + "@ethersproject/bytes@5.0.8", "@ethersproject/bytes@^5.0.4": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.8.tgz#cf1246a6a386086e590063a4602b1ffb6cc43db1" @@ -2504,6 +2530,11 @@ bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== +bn.js@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" + integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== + body-parser@1.19.0, body-parser@^1.16.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -4572,6 +4603,42 @@ ethers@^5.0.2, ethers@^5.4.6: "@ethersproject/web" "5.4.0" "@ethersproject/wordlists" "5.4.0" +ethers@^5.4.5: + version "5.4.7" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.7.tgz#0fd491a5da7c9793de2d6058d76b41b1e7efba8f" + integrity sha512-iZc5p2nqfWK1sj8RabwsPM28cr37Bpq7ehTQ5rWExBr2Y09Sn1lDKZOED26n+TsZMye7Y6mIgQ/1cwpSD8XZew== + dependencies: + "@ethersproject/abi" "5.4.1" + "@ethersproject/abstract-provider" "5.4.1" + "@ethersproject/abstract-signer" "5.4.1" + "@ethersproject/address" "5.4.0" + "@ethersproject/base64" "5.4.0" + "@ethersproject/basex" "5.4.0" + "@ethersproject/bignumber" "5.4.2" + "@ethersproject/bytes" "5.4.0" + "@ethersproject/constants" "5.4.0" + "@ethersproject/contracts" "5.4.1" + "@ethersproject/hash" "5.4.0" + "@ethersproject/hdnode" "5.4.0" + "@ethersproject/json-wallets" "5.4.0" + "@ethersproject/keccak256" "5.4.0" + "@ethersproject/logger" "5.4.1" + "@ethersproject/networks" "5.4.2" + "@ethersproject/pbkdf2" "5.4.0" + "@ethersproject/properties" "5.4.1" + "@ethersproject/providers" "5.4.5" + "@ethersproject/random" "5.4.0" + "@ethersproject/rlp" "5.4.0" + "@ethersproject/sha2" "5.4.0" + "@ethersproject/signing-key" "5.4.0" + "@ethersproject/solidity" "5.4.0" + "@ethersproject/strings" "5.4.0" + "@ethersproject/transactions" "5.4.0" + "@ethersproject/units" "5.4.0" + "@ethersproject/wallet" "5.4.0" + "@ethersproject/web" "5.4.0" + "@ethersproject/wordlists" "5.4.0" + ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" From 77d8df1dc43ebf8438ced9c47e98399b3cd99aa5 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Wed, 29 Sep 2021 11:16:52 -0700 Subject: [PATCH 2/6] Remove smock, add ChainlinkAggregatorMock contract --- .../external/ChainlinkAggregatorMock.sol | 115 ++++++++++++++++++ package.json | 1 - test/fixtures/perpV2.spec.ts | 38 ++++++ utils/contracts/index.ts | 1 + utils/deploys/deployMocks.ts | 8 +- utils/fixtures/perpV2Fixture.ts | 51 ++++---- utils/test/index.ts | 4 +- yarn.lock | 74 +---------- 8 files changed, 188 insertions(+), 104 deletions(-) create mode 100644 contracts/mocks/external/ChainlinkAggregatorMock.sol create mode 100644 test/fixtures/perpV2.spec.ts diff --git a/contracts/mocks/external/ChainlinkAggregatorMock.sol b/contracts/mocks/external/ChainlinkAggregatorMock.sol new file mode 100644 index 000000000..a8e462c70 --- /dev/null +++ b/contracts/mocks/external/ChainlinkAggregatorMock.sol @@ -0,0 +1,115 @@ +/* + Copyright 2020 Set Labs Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + SPDX-License-Identifier: Apache License, Version 2.0 +*/ + +pragma solidity 0.6.10; + +/** + * Mock ChainlinkAggregator that can be passed to any contract that consumes these. + * This contract was implemented for the PerpV2 fixture as a substitute for the smock-ed + * aggregators they use in their own test suite. + */ +contract ChainlinkAggregatorMock { + int256 public latestAnswer; + uint80 public latestRoundId; + uint256 public latestStartedAt; + uint256 public latestUpdatedAt; + uint80 public latestAnsweredInRound; + uint8 public decimals; + + // Perp sets this to `6` in their fixtures... + constructor(uint8 _decimals) public { + decimals = _decimals; + } + + /** + * Typical usage for setting the BaseToken oracle to 100 is: + * + * ``` + * await mockAggregator.setLatestAnswer(ethers.utils.parseUnits("100", 6)); + * ``` + */ + function setLatestAnswer(int256 _latestAnswer) public { + latestAnswer = _latestAnswer; + } + + /** + * Typical usage for setting the BaseToken oracle to 100 is: + * + * ``` + * await mockAggregator.setRoundData(0, ethers.utils.parseUnits("100", 6),0,0,0); + * ``` + */ + function setRoundData( + uint80 _roundId, + int256 _answer, + uint256 _startedAt, + uint256 _updatedAt, + uint80 _answeredInRound + ) + public + { + latestRoundId = _roundId; + latestAnswer = _answer; + latestStartedAt = _startedAt; + latestUpdatedAt = _updatedAt; + latestAnsweredInRound = _answeredInRound; + } + + // Consumed by PerpV2.ChainlinkPriceFeed + function getRoundData(uint80 /* _roundId */) + public + view + returns ( + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, + uint80 answeredInRound + ) + { + return ( + latestRoundId, + latestAnswer, + latestStartedAt, + latestUpdatedAt, + latestAnsweredInRound + ); + } + + // Consumed by PerpV2.ChainlinkPriceFeed + function latestRoundData() + public + view + returns ( + uint80 roundId, + int256 answer, + uint256 startedAt, + uint256 updatedAt, + uint80 answeredInRound + ) + { + return ( + latestRoundId, + latestAnswer, + latestStartedAt, + latestUpdatedAt, + latestAnsweredInRound + ); + } +} + diff --git a/package.json b/package.json index 87eb5af61..bbf6c73c3 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,6 @@ "homepage": "https://github.com/SetProtocol", "devDependencies": { "@0x/utils": "^6.4.3", - "@eth-optimism/smock": "^1.1.10", "@nomiclabs/hardhat-ethers": "^2.0.2", "@nomiclabs/hardhat-waffle": "^2.0.1", "@openzeppelin/contracts": "^3.1.0", diff --git a/test/fixtures/perpV2.spec.ts b/test/fixtures/perpV2.spec.ts new file mode 100644 index 000000000..cd43b74e9 --- /dev/null +++ b/test/fixtures/perpV2.spec.ts @@ -0,0 +1,38 @@ +import "module-alias/register"; + +import { Account } from "@utils/test/types"; +import { + addSnapshotBeforeRestoreAfterEach, + getAccounts, + getPerpV2Fixture, +} from "@utils/test/index"; + +import { PerpV2Fixture } from "@utils/fixtures"; + +// const expect = getWaffleExpect(); + +describe("PerpV2Fixture", () => { + let owner: Account; + let perpV2Setup: PerpV2Fixture; + + before(async () => { + [ + owner, + ] = await getAccounts(); + + perpV2Setup = getPerpV2Fixture(owner.address); + }); + + addSnapshotBeforeRestoreAfterEach(); + + describe("#initialize", async () => { + + async function subject(): Promise { + await perpV2Setup.initialize(); + } + + it("should deploy the PerpV2 system", async () => { + await subject(); + }); + }); +}); diff --git a/utils/contracts/index.ts b/utils/contracts/index.ts index b75de1ad0..734447eae 100644 --- a/utils/contracts/index.ts +++ b/utils/contracts/index.ts @@ -17,6 +17,7 @@ export { AssetLimitHook } from "../../typechain/AssetLimitHook"; export { AxieInfinityMigrationWrapAdapter } from "../../typechain/AxieInfinityMigrationWrapAdapter"; export { BalancerV1IndexExchangeAdapter } from "../../typechain/BalancerV1IndexExchangeAdapter"; export { BasicIssuanceModule } from "../../typechain/BasicIssuanceModule"; +export { ChainlinkAggregatorMock } from "../../typechain/ChainlinkAggregatorMock"; export { ClaimAdapterMock } from "../../typechain/ClaimAdapterMock"; export { ClaimModule } from "../../typechain/ClaimModule"; export { Compound } from "../../typechain/Compound"; diff --git a/utils/deploys/deployMocks.ts b/utils/deploys/deployMocks.ts index 5a2cb3441..4a5b4ae14 100644 --- a/utils/deploys/deployMocks.ts +++ b/utils/deploys/deployMocks.ts @@ -6,6 +6,7 @@ import { AaveLendingPoolMock, AddressArrayUtilsMock, AmmAdapterMock, + ChainlinkAggregatorMock, ClaimAdapterMock, ContractCallerMock, CompoundMock, @@ -54,6 +55,7 @@ import { AaveLendingPoolCoreMock__factory } from "../../typechain/factories/Aave import { AaveLendingPoolMock__factory } from "../../typechain/factories/AaveLendingPoolMock__factory"; import { AddressArrayUtilsMock__factory } from "../../typechain/factories/AddressArrayUtilsMock__factory"; import { AmmAdapterMock__factory } from "../../typechain/factories/AmmAdapterMock__factory"; +import { ChainlinkAggregatorMock__factory } from "../../typechain/factories/ChainlinkAggregatorMock__factory"; import { ClaimAdapterMock__factory } from "../../typechain/factories/ClaimAdapterMock__factory"; import { CompoundMock__factory } from "../../typechain/factories/CompoundMock__factory"; import { ComptrollerMock__factory } from "../../typechain/factories/ComptrollerMock__factory"; @@ -365,7 +367,11 @@ export default class DeployMocks { return await new WrapV2AdapterMock__factory(this._deployerSigner).deploy(); } - /** *********************************** + public async deployChainlinkAggregatorMock(decimals: number): Promise { + return await new ChainlinkAggregatorMock__factory(this._deployerSigner).deploy(decimals); + } + + /************************************* * Instance getters ************************************/ diff --git a/utils/fixtures/perpV2Fixture.ts b/utils/fixtures/perpV2Fixture.ts index 699836642..506edd590 100644 --- a/utils/fixtures/perpV2Fixture.ts +++ b/utils/fixtures/perpV2Fixture.ts @@ -1,6 +1,5 @@ import { providers, Signer } from "ethers"; import { ether } from "../common"; -import { MockContract, smockit } from "@eth-optimism/smock"; import { PerpV2AccountBalance, @@ -9,7 +8,6 @@ import { PerpV2ClearingHouseConfig, PerpV2Exchange, PerpV2InsuranceFund, - PerpV2TestAggregatorV3, PerpV2Vault, PerpV2OrderBook, PerpV2MarketRegistry, @@ -25,6 +23,7 @@ import { import { StandardTokenMock, + ChainlinkAggregatorMock } from "../contracts"; import DeployHelper from "../deploys"; @@ -33,8 +32,8 @@ import { Address } from "../types"; export interface TokensFixture { token0: PerpV2BaseToken; token1: PerpV2QuoteToken; - mockedAggregator0: MockContract; - mockedAggregator1: MockContract; + mockAggregator0: ChainlinkAggregatorMock; + mockAggregator1: ChainlinkAggregatorMock; } export interface PoolFixture { @@ -46,7 +45,7 @@ export interface PoolFixture { export interface BaseTokenFixture { baseToken: PerpV2BaseToken; - mockedAggregator: MockContract; + mockAggregator: ChainlinkAggregatorMock; } export class PerpV2Fixture { @@ -69,7 +68,7 @@ export class PerpV2Fixture { public pool: UniswapV3Pool; public quoteToken: PerpV2QuoteToken; public baseToken: PerpV2BaseToken; - public mockedBaseAggregator: MockContract; + public mockBaseAggregator: ChainlinkAggregatorMock; constructor(provider: providers.Web3Provider | providers.JsonRpcProvider, ownerAddress: Address) { this._ownerAddress = ownerAddress; @@ -80,12 +79,12 @@ export class PerpV2Fixture { public async initialize(): Promise { this.usdc = await this._deployer.mocks.deployTokenMock(this._ownerAddress, ether(10000), 6); - const { token0, mockedAggregator0, token1 } = await this._tokensFixture(); + const { token0, mockAggregator0, token1 } = await this._tokensFixture(); // we assume (base, quote) == (token0, token1) this.baseToken = token0; this.quoteToken = token1; - this.mockedBaseAggregator = mockedAggregator0; + this.mockBaseAggregator = mockAggregator0; // deploy UniV3 factory this.uniV3Factory = await this._deployer.external.deployUniswapV3Factory(); @@ -106,6 +105,9 @@ export class PerpV2Fixture { this.orderBook = await this._deployer.external.deployPerpV2OrderBook(); await this.orderBook.initialize(this.marketRegistry.address, this.quoteToken.address); + this.insuranceFund = await this._deployer.external.deployPerpV2InsuranceFund(); + await this.insuranceFund.initialize(this.usdc.address); + this.accountBalance = await this._deployer.external.deployPerpV2AccountBalance(); this.exchange = await this._deployer.external.deployPerpV2Exchange(); @@ -126,9 +128,6 @@ export class PerpV2Fixture { this.exchange.address ); - this.insuranceFund = await this._deployer.external.deployPerpV2InsuranceFund(); - await this.insuranceFund.initialize(this.usdc.address); - this.vault = await this._deployer.external.deployPerpV2Vault(); await this.vault.initialize( @@ -186,25 +185,21 @@ export class PerpV2Fixture { } async _createBaseTokenFixture(name: string, symbol: string): Promise { - const aggregator = await this._deployer.external.deployPerpV2TestAggregatorV3(); - const mockedAggregator = await smockit(aggregator); - - mockedAggregator.smocked.decimals.will.return.with(async () => 6); + const mockAggregator = await this._deployer.mocks.deployChainlinkAggregatorMock(6); const chainlinkPriceFeed = await this._deployer.external.deployPerpV2ChainlinkPriceFeed(); - await chainlinkPriceFeed.initialize(mockedAggregator.address); + await chainlinkPriceFeed.initialize(mockAggregator.address); const baseToken = await this._deployer.external.deployPerpV2BaseToken(); await baseToken.initialize(name, symbol, chainlinkPriceFeed.address); - return { baseToken, mockedAggregator }; + return { baseToken, mockAggregator }; } - async _tokensFixture(): Promise { const { baseToken: randomToken0, - mockedAggregator: randomMockedAggregator0, + mockAggregator: randomMockAggregator0, } = await this._createBaseTokenFixture( "RandomTestToken0", "randomToken0", @@ -212,7 +207,7 @@ export class PerpV2Fixture { const { baseToken: randomToken1, - mockedAggregator: randomMockedAggregator1, + mockAggregator: randomMockAggregator1, } = await this._createBaseTokenFixture( "RandomTestToken1", "randomToken1", @@ -220,25 +215,25 @@ export class PerpV2Fixture { let token0: PerpV2BaseToken; let token1: PerpV2QuoteToken; - let mockedAggregator0: MockContract; - let mockedAggregator1: MockContract; + let mockAggregator0: ChainlinkAggregatorMock; + let mockAggregator1: ChainlinkAggregatorMock; if (this._isAscendingTokenOrder(randomToken0.address, randomToken1.address)) { token0 = randomToken0; - mockedAggregator0 = randomMockedAggregator0; + mockAggregator0 = randomMockAggregator0; token1 = randomToken1 as PerpV2VirtualToken as PerpV2QuoteToken; - mockedAggregator1 = randomMockedAggregator1; + mockAggregator1 = randomMockAggregator1; } else { token0 = randomToken1; - mockedAggregator0 = randomMockedAggregator1; + mockAggregator0 = randomMockAggregator1; token1 = randomToken0 as PerpV2VirtualToken as PerpV2QuoteToken; - mockedAggregator1 = randomMockedAggregator0; + mockAggregator1 = randomMockAggregator0; } return { token0, - mockedAggregator0, + mockAggregator0, token1, - mockedAggregator1, + mockAggregator1, }; } } diff --git a/utils/test/index.ts b/utils/test/index.ts index c5c760f3c..7a8deb62a 100644 --- a/utils/test/index.ts +++ b/utils/test/index.ts @@ -12,7 +12,8 @@ import { SystemFixture, UniswapFixture, YearnFixture, - UniswapV3Fixture + UniswapV3Fixture, + PerpV2Fixture } from "../fixtures"; import { Blockchain, ProtocolUtils } from "../common"; @@ -30,6 +31,7 @@ export const getKyberV3DMMFixture = (ownerAddress: Address) => new KyberV3DMMFix export const getUniswapFixture = (ownerAddress: Address) => new UniswapFixture(provider, ownerAddress); export const getYearnFixture = (ownerAddress: Address) => new YearnFixture(provider, ownerAddress); export const getUniswapV3Fixture = (ownerAddress: Address) => new UniswapV3Fixture(provider, ownerAddress); +export const getPerpV2Fixture = (ownerAddress: Address) => new PerpV2Fixture(provider, ownerAddress); export { ForkedTokens } from "./types"; diff --git a/yarn.lock b/yarn.lock index 727424d76..2054b757c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -104,23 +104,6 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@eth-optimism/core-utils@^0.5.1": - version "0.5.5" - resolved "https://registry.yarnpkg.com/@eth-optimism/core-utils/-/core-utils-0.5.5.tgz#0e2bb95b23965fb51adfb8ba6841c3afd26a6411" - integrity sha512-N/uyZjHltnvnQyBOE498EGlqeYvWRUQTW6BpXhexKljEXZpnria4J4MFO9s1lJOpogLXTaS+lhM1Ic8zUNj8Pg== - dependencies: - "@ethersproject/abstract-provider" "^5.4.1" - ethers "^5.4.5" - lodash "^4.17.21" - -"@eth-optimism/smock@^1.1.10": - version "1.1.10" - resolved "https://registry.yarnpkg.com/@eth-optimism/smock/-/smock-1.1.10.tgz#98a6eefc994ccf707f52ab06849468f3cc57bdb7" - integrity sha512-XPx1x9odF/noTBHzIhRgL9ihhr769WgUhf9dOm6X7bjSWRAVsII3IqbdB4ssPycaoSuNSmv8HG1xTLgfgcyOYw== - dependencies: - "@eth-optimism/core-utils" "^0.5.1" - bn.js "^5.2.0" - "@ethereum-waffle/chai@^3.4.0": version "3.4.0" resolved "https://registry.yarnpkg.com/@ethereum-waffle/chai/-/chai-3.4.0.tgz#2477877410a96bf370edd64df905b04fb9aba9d5" @@ -317,7 +300,7 @@ "@ethersproject/transactions" "^5.0.5" "@ethersproject/web" "^5.0.6" -"@ethersproject/abstract-provider@5.4.1", "@ethersproject/abstract-provider@^5.4.1": +"@ethersproject/abstract-provider@5.4.1": version "5.4.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e" integrity sha512-3EedfKI3LVpjSKgAxoUaI+gB27frKsxzm+r21w9G60Ugk+3wVLQwhi1LsEJAKNV7WoZc8CIpNrATlL1QFABjtQ== @@ -435,15 +418,6 @@ "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" -"@ethersproject/bignumber@5.4.2": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.2.tgz#44232e015ae4ce82ac034de549eb3583c71283d8" - integrity sha512-oIBDhsKy5bs7j36JlaTzFgNPaZjiNDOXsdSgSpXRucUl+UA6L/1YLlFeI3cPAoodcenzF4nxNPV13pcy7XbWjA== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - bn.js "^4.11.9" - "@ethersproject/bytes@5.0.8", "@ethersproject/bytes@^5.0.4": version "5.0.8" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.8.tgz#cf1246a6a386086e590063a4602b1ffb6cc43db1" @@ -2530,11 +2504,6 @@ bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.1.3.tgz#beca005408f642ebebea80b042b4d18d2ac0ee6b" integrity sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ== -bn.js@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" - integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== - body-parser@1.19.0, body-parser@^1.16.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" @@ -4603,42 +4572,6 @@ ethers@^5.0.2, ethers@^5.4.6: "@ethersproject/web" "5.4.0" "@ethersproject/wordlists" "5.4.0" -ethers@^5.4.5: - version "5.4.7" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.7.tgz#0fd491a5da7c9793de2d6058d76b41b1e7efba8f" - integrity sha512-iZc5p2nqfWK1sj8RabwsPM28cr37Bpq7ehTQ5rWExBr2Y09Sn1lDKZOED26n+TsZMye7Y6mIgQ/1cwpSD8XZew== - dependencies: - "@ethersproject/abi" "5.4.1" - "@ethersproject/abstract-provider" "5.4.1" - "@ethersproject/abstract-signer" "5.4.1" - "@ethersproject/address" "5.4.0" - "@ethersproject/base64" "5.4.0" - "@ethersproject/basex" "5.4.0" - "@ethersproject/bignumber" "5.4.2" - "@ethersproject/bytes" "5.4.0" - "@ethersproject/constants" "5.4.0" - "@ethersproject/contracts" "5.4.1" - "@ethersproject/hash" "5.4.0" - "@ethersproject/hdnode" "5.4.0" - "@ethersproject/json-wallets" "5.4.0" - "@ethersproject/keccak256" "5.4.0" - "@ethersproject/logger" "5.4.1" - "@ethersproject/networks" "5.4.2" - "@ethersproject/pbkdf2" "5.4.0" - "@ethersproject/properties" "5.4.1" - "@ethersproject/providers" "5.4.5" - "@ethersproject/random" "5.4.0" - "@ethersproject/rlp" "5.4.0" - "@ethersproject/sha2" "5.4.0" - "@ethersproject/signing-key" "5.4.0" - "@ethersproject/solidity" "5.4.0" - "@ethersproject/strings" "5.4.0" - "@ethersproject/transactions" "5.4.0" - "@ethersproject/units" "5.4.0" - "@ethersproject/wallet" "5.4.0" - "@ethersproject/web" "5.4.0" - "@ethersproject/wordlists" "5.4.0" - ethjs-unit@0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" @@ -6930,11 +6863,6 @@ lodash@4.17.20, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17. resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" From 49e15d74f0207f43d92a113b664c984cf5b22ae0 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Wed, 29 Sep 2021 20:57:55 -0700 Subject: [PATCH 3/6] Add liquidity and price helpers (WIP) --- package.json | 2 + test/fixtures/perpV2.spec.ts | 44 +++++++--- utils/deploys/deployExternal.ts | 8 +- utils/fixtures/perpV2Fixture.ts | 136 +++++++++++++++++++++++++++-- yarn.lock | 146 +++++++++++++++++++++++++++++++- 5 files changed, 314 insertions(+), 22 deletions(-) diff --git a/package.json b/package.json index bbf6c73c3..e318561fa 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "@typescript-eslint/eslint-plugin-tslint": "^4.33.0", "@typescript-eslint/parser": "^4.33.0", "@uniswap/lib": "^4.0.1-alpha", + "@uniswap/v3-sdk": "^3.5.1", "chai": "^4.2.0", "coveralls": "^3.0.1", "dotenv": "^8.2.0", @@ -75,6 +76,7 @@ "hardhat": "^2.6.4", "husky": "^4.2.5", "istanbul-combine-updated": "^0.3.0", + "jsbi": "^3.2.5", "lint-staged": "^10.2.11", "lodash": "^4.17.4", "solc": "^0.6.10", diff --git a/test/fixtures/perpV2.spec.ts b/test/fixtures/perpV2.spec.ts index cd43b74e9..e6f6c2ff1 100644 --- a/test/fixtures/perpV2.spec.ts +++ b/test/fixtures/perpV2.spec.ts @@ -5,34 +5,56 @@ import { addSnapshotBeforeRestoreAfterEach, getAccounts, getPerpV2Fixture, + getWaffleExpect, } from "@utils/test/index"; import { PerpV2Fixture } from "@utils/fixtures"; -// const expect = getWaffleExpect(); +const expect = getWaffleExpect(); describe("PerpV2Fixture", () => { let owner: Account; - let perpV2Setup: PerpV2Fixture; + let maker: Account; + // let trader: Account; + let perpV2: PerpV2Fixture; before(async () => { - [ - owner, - ] = await getAccounts(); - - perpV2Setup = getPerpV2Fixture(owner.address); + [ owner, maker, /*trader*/ ] = await getAccounts(); + perpV2 = getPerpV2Fixture(owner.address); + await perpV2.initialize(); }); addSnapshotBeforeRestoreAfterEach(); - describe("#initialize", async () => { + describe("#initializePoolWithLiquidityWide", () => { + const subjectBaseTokenAmount = "10000"; + const subjectQuoteTokenAmount = "100000"; - async function subject(): Promise { - await perpV2Setup.initialize(); + async function subject(): Promise { + return await perpV2.initializePoolWithLiquidityWide( + maker, + subjectBaseTokenAmount, + subjectQuoteTokenAmount + ); } - it("should deploy the PerpV2 system", async () => { + it.skip("should have the expected baseToken price at beginning", async () => { await subject(); + + const baseTokenPrice = await perpV2.getAMMBaseTokenPrice(); + expect(baseTokenPrice).to.equal("10"); + console.log("baseTokenPrice --> " + baseTokenPrice); + }); + + it.skip("should open a position and the price should change", () => { + }); + }); + + describe("#initializePoolWithLiquidityWithinTicks", () => { + + }); + + }); diff --git a/utils/deploys/deployExternal.ts b/utils/deploys/deployExternal.ts index c9a919507..d9bcfe305 100644 --- a/utils/deploys/deployExternal.ts +++ b/utils/deploys/deployExternal.ts @@ -152,9 +152,11 @@ import { UniswapV3Factory, NonfungiblePositionManager, Quoter, - NFTDescriptor + NFTDescriptor, + UniswapV3Pool } from "../contracts/uniswapV3"; import { UniswapV3Factory__factory } from "../../typechain/factories/UniswapV3Factory__factory"; +import { UniswapV3Pool__factory } from "../../typechain/factories/UniswapV3Pool__factory"; import { SwapRouter__factory } from "../../typechain/factories/SwapRouter__factory"; import { NonfungiblePositionManager__factory } from "../../typechain/factories/NonfungiblePositionManager__factory"; import { Quoter__factory } from "../../typechain/factories/Quoter__factory"; @@ -802,6 +804,10 @@ export default class DeployExternalContracts { return await new NFTDescriptor__factory(this._deployerSigner).deploy(); } + public async getUniswapV3PoolInstance(pool: Address): Promise { + return await new UniswapV3Pool__factory(this._deployerSigner).attach(pool); + } + // PerpV2 public async deployPerpV2OrderBook(): Promise { diff --git a/utils/fixtures/perpV2Fixture.ts b/utils/fixtures/perpV2Fixture.ts index 506edd590..6d13dffd6 100644 --- a/utils/fixtures/perpV2Fixture.ts +++ b/utils/fixtures/perpV2Fixture.ts @@ -1,5 +1,17 @@ -import { providers, Signer } from "ethers"; +import { + utils, + providers, + constants, + Signer, + BigNumber, + BigNumberish +} from "ethers"; + +import { encodeSqrtRatioX96 } from "@uniswap/v3-sdk"; +import JSBI from "jsbi"; + import { ether } from "../common"; +import { Account } from "../test/types"; import { PerpV2AccountBalance, @@ -48,11 +60,15 @@ export interface BaseTokenFixture { mockAggregator: ChainlinkAggregatorMock; } +const TEN_THOUSAND = "10000"; +const ONE_MILLION = "1000000"; + export class PerpV2Fixture { private _deployer: DeployHelper; private _ownerAddress: Address; private _ownerSigner: Signer; - private _feeTier: number = 10000; + private _feeTier: number = 10000; // From perp fixtures + private _oracleDecimals: number = 6; // From perp fixtures public usdc: StandardTokenMock; public clearingHouse: PerpV2ClearingHouse; @@ -77,7 +93,7 @@ export class PerpV2Fixture { } public async initialize(): Promise { - this.usdc = await this._deployer.mocks.deployTokenMock(this._ownerAddress, ether(10000), 6); + this.usdc = await this._deployer.mocks.deployTokenMock(this._ownerAddress, ether("100000000000000"), 6); const { token0, mockAggregator0, token1 } = await this._tokensFixture(); @@ -140,13 +156,15 @@ export class PerpV2Fixture { await this.insuranceFund.setBorrower(this.vault.address); await this.accountBalance.setVault(this.vault.address); - // deploy a pool + // get pool instance const poolAddr = await this.uniV3Factory.getPool( this.baseToken.address, this.quoteToken.address, this._feeTier ); + this.pool = await this._deployer.external.getUniswapV3PoolInstance(poolAddr); + await this.baseToken.addWhitelist(poolAddr); await this.quoteToken.addWhitelist(poolAddr); @@ -174,10 +192,112 @@ export class PerpV2Fixture { await this.accountBalance.setClearingHouse(this.clearingHouse.address); } - _isAscendingTokenOrder(addr0: string, addr1: string): boolean { - return addr0.toLowerCase() < addr1.toLowerCase(); + async deposit(sender: Account, amount: BigNumber, token: StandardTokenMock): Promise { + const decimals = await token.decimals(); + const parsedAmount = utils.parseUnits("1000", decimals); + await token.connect(sender.wallet).approve(this.vault.address, parsedAmount); + await this.vault.connect(sender.wallet).deposit(token.address, parsedAmount); + } + + public async initializePoolWithLiquidityWide( + maker: Account, + baseTokenAmount: BigNumberish, + quoteTokenAmount: BigNumberish + ): Promise { + await this.mockBaseAggregator.setRoundData(0, utils.parseUnits("10", 6), 0, 0, 0 ); + + await this.pool.initialize( + this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount) + ); + + const tickSpacing = await this.pool.tickSpacing(); + const lowerTick = this._getMinTick(tickSpacing); + const upperTick = this._getMaxTick(tickSpacing); + + await this.marketRegistry.addPool(this.baseToken.address, 10000); + await this.marketRegistry.setFeeRatio(this.baseToken.address, 10000); + + // prepare collateral for maker + const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._oracleDecimals); + const mintBufferAmount = utils.parseUnits(TEN_THOUSAND, this._oracleDecimals); + await this.usdc.mint(maker.address, makerCollateralAmount.add(mintBufferAmount)); + await this.deposit(maker, makerCollateralAmount, this.usdc); + + // maker add liquidity at ratio + await this.clearingHouse.connect(maker.wallet).addLiquidity({ + baseToken: this.baseToken.address, + base: utils.parseEther(baseTokenAmount.toString()), + quote: utils.parseEther(quoteTokenAmount.toString()), + lowerTick, + upperTick, + minBase: 0, + minQuote: 0, + deadline: constants.MaxUint256, + }); + } + + public async initializePoolWithLiquidityWithinTicks( + maker: Account, + baseTokenAmount: BigNumberish, + quoteTokenAmount: BigNumberish, + lowerTick: number = 0, + upperTick: number = 10000 + ): Promise { + await this.pool.initialize( + this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount) + ); + + await this.marketRegistry.addPool(this.baseToken.address, baseTokenAmount); + await this.marketRegistry.setFeeRatio(this.baseToken.address, baseTokenAmount); + + // prepare collateral for maker + const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._oracleDecimals); + await this.usdc.mint(maker.address, makerCollateralAmount); + await this.vault.connect(maker.address).deposit(this.usdc.address, makerCollateralAmount); + + // maker add liquidity at ratio + await this.clearingHouse.connect(maker.address).addLiquidity({ + baseToken: this.baseToken.address, + base: utils.parseEther(baseTokenAmount.toString()), + quote: utils.parseEther(quoteTokenAmount.toString()), + lowerTick, + upperTick, + minBase: 0, + minQuote: 0, + deadline: constants.MaxUint256, + }); + } + + public async setBaseTokenOraclePrice(price: string): Promise { + await this.mockBaseAggregator.setRoundData(0, utils.parseUnits(price, this._oracleDecimals), 0, 0, 0); } + public async getAMMBaseTokenPrice(): Promise { + const sqrtPriceX96 = (await this.pool.slot0()).sqrtPriceX96; + const priceX86 = JSBI.BigInt(sqrtPriceX96.toString()); + const squaredPrice = JSBI.multiply(priceX86, priceX86); + const decimalsRatio = 1e18; + const denominator = JSBI.exponentiate(JSBI.BigInt(2), JSBI.BigInt(192)); + const scaledPrice = JSBI.multiply(squaredPrice, JSBI.BigInt(decimalsRatio)); + return JSBI.divide(scaledPrice, denominator).toString(); + } + + // UniV3 AddLiquidity helpers + private _getMinTick(tickSpacing: number) { + return Math.ceil(-887272 / tickSpacing) * tickSpacing; + } + + private _getMaxTick(tickSpacing: number) { + return Math.floor(887272 / tickSpacing) * tickSpacing; + } + + private _encodePriceSqrt(token1Amount: BigNumberish, token0Amount: BigNumberish): BigNumber { + return BigNumber.from( + encodeSqrtRatioX96(token1Amount.toString(), token0Amount.toString()).toString() + ); + } + + // Base & Quote token helpers async _createQuoteTokenFixture(name: string, symbol: string): Promise { const quoteToken = await this._deployer.external.deployPerpV2QuoteToken(); await quoteToken.initialize(name, symbol); @@ -236,4 +356,8 @@ export class PerpV2Fixture { mockAggregator1, }; } + + private _isAscendingTokenOrder(addr0: string, addr1: string): boolean { + return addr0.toLowerCase() < addr1.toLowerCase(); + } } diff --git a/yarn.lock b/yarn.lock index 2054b757c..7116dbf2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -272,7 +272,7 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.4.1", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.5", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0": +"@ethersproject/abi@5.4.1", "@ethersproject/abi@^5.0.1", "@ethersproject/abi@^5.0.12", "@ethersproject/abi@^5.0.5", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.4.0": version "5.4.1" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.1.tgz#6ac28fafc9ef6f5a7a37e30356a2eb31fa05d39b" integrity sha512-9mhbjUk76BiSluiiW4BaYyI58KSbDMMQpCLdsAR+RsT2GyATiNYxVv+pGWRrekmsIdY3I+hOqsYQSTkc8L/mcg== @@ -359,7 +359,7 @@ "@ethersproject/logger" "^5.0.5" "@ethersproject/rlp" "^5.0.3" -"@ethersproject/address@5.4.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.4.0": +"@ethersproject/address@5.4.0", "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.4.0": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== @@ -794,7 +794,7 @@ "@ethersproject/sha2" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/solidity@5.4.0": +"@ethersproject/solidity@5.4.0", "@ethersproject/solidity@^5.0.9": version "5.4.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== @@ -1005,6 +1005,11 @@ "@types/sinon-chai" "^3.2.3" "@types/web3" "1.0.19" +"@openzeppelin/contracts@3.4.1-solc-0.7-2": + version "3.4.1-solc-0.7-2" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1-solc-0.7-2.tgz#371c67ebffe50f551c3146a9eec5fe6ffe862e92" + integrity sha512-tAG9LWg8+M2CMu7hIsqHPaTyG4uDzjr6mhvH96LvOpLZZj6tgzTluBt+LsCf1/QaYrlis6pITvpIaIhE+iZB+Q== + "@openzeppelin/contracts@^3.1.0": version "3.3.0" resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.3.0.tgz#ffdb693c5c349fc33bba420248dd3ac0a2d7c408" @@ -1465,6 +1470,62 @@ resolved "https://registry.yarnpkg.com/@uniswap/lib/-/lib-4.0.1-alpha.tgz#2881008e55f075344675b3bca93f020b028fbd02" integrity sha512-f6UIliwBbRsgVLxIaBANF6w09tYqc6Y/qXdsrbEmXHyFA7ILiKrIwRFXe1yOg8M3cksgVsO9N7yuL2DdCGQKBA== +"@uniswap/sdk-core@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@uniswap/sdk-core/-/sdk-core-3.0.1.tgz#d08dd68257983af64b9a5f4d6b9cf26124b4138f" + integrity sha512-WbeDkhZ9myVR0VnHOdTrb8nHKKkqTFa5uE9RvUbG3eyDt2NWWDwhhqGHwAWJEHG405l30Fa1u3PogHDFsIOQlA== + dependencies: + "@ethersproject/address" "^5.0.2" + big.js "^5.2.2" + decimal.js-light "^2.5.0" + jsbi "^3.1.4" + tiny-invariant "^1.1.0" + toformat "^2.0.0" + +"@uniswap/v2-core@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@uniswap/v2-core/-/v2-core-1.0.1.tgz#af8f508bf183204779938969e2e54043e147d425" + integrity sha512-MtybtkUPSyysqLY2U210NBDeCHX+ltHt3oADGdjqoThZaFRDKwM6k1Nb3F0A3hk5hwuQvytFWhrWHOEq6nVJ8Q== + +"@uniswap/v3-core@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@uniswap/v3-core/-/v3-core-1.0.0.tgz#6c24adacc4c25dceee0ba3ca142b35adbd7e359d" + integrity sha512-kSC4djMGKMHj7sLMYVnn61k9nu+lHjMIxgg9CDQT+s2QYLoA56GbSK9Oxr+qJXzzygbkrmuY6cwgP6cW2JXPFA== + +"@uniswap/v3-periphery@^1.0.1", "@uniswap/v3-periphery@^1.1.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@uniswap/v3-periphery/-/v3-periphery-1.2.1.tgz#7775630bea774a2cf989ab87ce3c328ac52e0d50" + integrity sha512-45W8hT8X1j9ZcXa+y3NSVao90hMZtgtoJyDlMOg91wmUGi2idXAiGivOQYdB7+7Lq8Gc6Upv/ggFZknixZrv7g== + dependencies: + "@openzeppelin/contracts" "3.4.1-solc-0.7-2" + "@uniswap/lib" "^4.0.1-alpha" + "@uniswap/v2-core" "1.0.1" + "@uniswap/v3-core" "1.0.0" + base64-sol "1.0.1" + hardhat-watcher "^2.1.1" + +"@uniswap/v3-sdk@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@uniswap/v3-sdk/-/v3-sdk-3.5.1.tgz#441e8e44d1ea576964d726903ec10a150cf916ea" + integrity sha512-DcLtlnWfkKpc5cqzKMLeFub+E8lvqTemObOYLqOZo6DdMAeLqawj8g2oo9o2JuhSVW/VXQDuSDe2V68BYF+U+w== + dependencies: + "@ethersproject/abi" "^5.0.12" + "@ethersproject/solidity" "^5.0.9" + "@uniswap/sdk-core" "^3.0.1" + "@uniswap/v3-periphery" "^1.1.1" + "@uniswap/v3-staker" "1.0.0" + tiny-invariant "^1.1.0" + tiny-warning "^1.0.3" + +"@uniswap/v3-staker@1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@uniswap/v3-staker/-/v3-staker-1.0.0.tgz#9a6915ec980852479dfc903f50baf822ff8fa66e" + integrity sha512-JV0Qc46Px5alvg6YWd+UIaGH9lDuYG/Js7ngxPit1SPaIP30AlVer1UYB7BRYeUVVxE+byUyIeN5jeQ7LLDjIw== + dependencies: + "@openzeppelin/contracts" "3.4.1-solc-0.7-2" + "@uniswap/v3-core" "1.0.0" + "@uniswap/v3-periphery" "^1.0.1" + "@yarnpkg/lockfile@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" @@ -1714,6 +1775,14 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" +anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + arg@^4.1.0: version "4.1.3" resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" @@ -2428,6 +2497,11 @@ base64-js@^1.3.1: resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base64-sol@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/base64-sol/-/base64-sol-1.0.1.tgz#91317aa341f0bc763811783c5729f1c2574600f6" + integrity sha512-ld3cCNMeXt4uJXmLZBHFGMvVpK9KsLVEhPpFRXnvSVAqABKbuNZg/+dsq3NuM+wxFLb/UrVkz7m1ciWmkMfTbg== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -2453,6 +2527,11 @@ bech32@1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +big.js@^5.2.2: + version "5.2.2" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" + integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== + bignumber.js@^9.0.0, bignumber.js@~9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" @@ -2884,6 +2963,21 @@ chokidar@^3.4.0: optionalDependencies: fsevents "~2.3.1" +chokidar@^3.4.3: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chownr@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" @@ -3364,6 +3458,11 @@ decamelize@^1.1.1, decamelize@^1.2.0: resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= +decimal.js-light@^2.5.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/decimal.js-light/-/decimal.js-light-2.5.1.tgz#134fd32508f19e208f4fb2f8dac0d2626a867934" + integrity sha512-qIMFpTMZmny+MMIitAB6D7iVPEorVw6YQRWkvarTkT4tBeSLLiHzcwj6q0MmYSFCiVpiqPJTJEYIrpcPzVEIvg== + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -5128,6 +5227,11 @@ fsevents@~2.3.1: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.1.tgz#b209ab14c61012636c8863507edf7fb68cc54e9f" integrity sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw== +fsevents@~2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + function-bind@^1.1.1, function-bind@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -5268,7 +5372,7 @@ glob-parent@^5.1.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-parent@^5.1.2: +glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -5461,6 +5565,13 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" +hardhat-watcher@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/hardhat-watcher/-/hardhat-watcher-2.1.1.tgz#8b05fec429ed45da11808bbf6054a90f3e34c51a" + integrity sha512-zilmvxAYD34IofBrwOliQn4z92UiDmt2c949DW4Gokf0vS0qk4YTfVCi/LmUBICThGygNANE3WfnRTpjCJGtDA== + dependencies: + chokidar "^3.4.3" + hardhat@^2.6.4: version "2.6.5" resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.6.5.tgz#61d3e22da34e1b175bbe599f77396b32f9788b58" @@ -6330,6 +6441,11 @@ js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jsbi@^3.1.4, jsbi@^3.2.5: + version "3.2.5" + resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-3.2.5.tgz#b37bb90e0e5c2814c1c2a1bcd8c729888a2e37d6" + integrity sha512-aBE4n43IPvjaddScbvWRA2YlTzKEynHzu7MqOyTipdHucf/VxS63ViCjxYRg86M8Rxwbt/GfzHl1kKERkt45fQ== + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -8345,6 +8461,13 @@ readdirp@~3.5.0: dependencies: picomatch "^2.2.1" +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -9542,6 +9665,16 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +tiny-invariant@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + +tiny-warning@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" + integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9598,6 +9731,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toformat@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/toformat/-/toformat-2.0.0.tgz#7a043fd2dfbe9021a4e36e508835ba32056739d8" + integrity sha512-03SWBVop6nU8bpyZCx7SodpYznbZF5R4ljwNLBcTQzKOD9xuihRo/psX58llS1BMFhhAI08H3luot5GoXJz2pQ== + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" From 319017a7144f94e3552523ddee986405fa578fbb Mon Sep 17 00:00:00 2001 From: cgewecke Date: Thu, 30 Sep 2021 09:46:10 -0700 Subject: [PATCH 4/6] Add unit tests for fixture methods --- test/fixtures/perpV2.spec.ts | 113 +++++++++++++++++++++++++++++--- utils/fixtures/perpV2Fixture.ts | 57 ++++++++-------- 2 files changed, 129 insertions(+), 41 deletions(-) diff --git a/test/fixtures/perpV2.spec.ts b/test/fixtures/perpV2.spec.ts index e6f6c2ff1..8b9d16dff 100644 --- a/test/fixtures/perpV2.spec.ts +++ b/test/fixtures/perpV2.spec.ts @@ -1,6 +1,8 @@ import "module-alias/register"; +import { utils, constants, BigNumber } from "ethers"; import { Account } from "@utils/test/types"; +import { ether } from "@utils/common"; import { addSnapshotBeforeRestoreAfterEach, getAccounts, @@ -15,11 +17,11 @@ const expect = getWaffleExpect(); describe("PerpV2Fixture", () => { let owner: Account; let maker: Account; - // let trader: Account; + let taker: Account; let perpV2: PerpV2Fixture; before(async () => { - [ owner, maker, /*trader*/ ] = await getAccounts(); + [ owner, maker, taker ] = await getAccounts(); perpV2 = getPerpV2Fixture(owner.address); await perpV2.initialize(); }); @@ -27,8 +29,16 @@ describe("PerpV2Fixture", () => { addSnapshotBeforeRestoreAfterEach(); describe("#initializePoolWithLiquidityWide", () => { - const subjectBaseTokenAmount = "10000"; - const subjectQuoteTokenAmount = "100000"; + const takerCollateralWholeUnitAmount = "1000"; + + // 10 USDC : 1 BaseToken + const subjectBaseTokenAmount = ether(10_000); + const subjectQuoteTokenAmount = ether(100_000); + + beforeEach(async () => { + await perpV2.usdc.mint(taker.address, utils.parseUnits(takerCollateralWholeUnitAmount, 6)); + await perpV2.deposit(taker, BigNumber.from(takerCollateralWholeUnitAmount), perpV2.usdc); + }); async function subject(): Promise { return await perpV2.initializePoolWithLiquidityWide( @@ -38,23 +48,106 @@ describe("PerpV2Fixture", () => { ); } - it.skip("should have the expected baseToken price at beginning", async () => { + it("should have the expected baseToken vAMM price at beginning", async () => { await subject(); - const baseTokenPrice = await perpV2.getAMMBaseTokenPrice(); - expect(baseTokenPrice).to.equal("10"); - console.log("baseTokenPrice --> " + baseTokenPrice); + const expectedPrice = ether(10); + const ammBaseTokenPrice = await perpV2.getAMMBaseTokenPrice(); + expect(expectedPrice).to.be.closeTo(ammBaseTokenPrice, 1); // 1 wei difference }); - it.skip("should open a position and the price should change", () => { + it("should be possible to open a long position / price will change", async () => { + await subject(); + const initialAmmBaseTokenPrice = await perpV2.getAMMBaseTokenPrice(); + + await perpV2.clearingHouse.connect(taker.wallet).openPosition({ + baseToken: perpV2.baseToken.address, + isBaseToQuote: false, + isExactInput: true, + oppositeAmountBound: 0, + amount: ether(100), + sqrtPriceLimitX96: 0, + deadline: constants.MaxUint256, + referralCode: constants.HashZero, + }); + + const finalAmmBaseTokenPrice = await perpV2.getAMMBaseTokenPrice(); + expect(initialAmmBaseTokenPrice).to.be.lt(finalAmmBaseTokenPrice); }); - }); describe("#initializePoolWithLiquidityWithinTicks", () => { + const baseTokenAmount = 65.943787; + const quoteTokenAmount = 10_000; + + const subjectBaseTokenAmount = ether(baseTokenAmount); + const subjectQuoteTokenAmount = ether(quoteTokenAmount); + const subjectLowerTick = 0; + const subjectUpperTick = 100_000; + async function subject(): Promise { + return await perpV2.initializePoolWithLiquidityWithinTicks( + maker, + subjectBaseTokenAmount, + subjectQuoteTokenAmount, + subjectLowerTick, + subjectUpperTick + ); + } + + it("should have the expected baseToken vAMM price at beginning", async () => { + await subject(); + + const expectedPrice = ether(quoteTokenAmount / baseTokenAmount); // 151644308811078730000 + const ammBaseTokenPrice = await perpV2.getAMMBaseTokenPrice(); // 151644308811078744992 + expect(expectedPrice).to.be.closeTo(ammBaseTokenPrice, 20000); + }); }); + describe("#setBaseTokenOraclePrice", () => { + const takerCollateralWholeUnitAmount = "1000"; + const takerBuyAmount = 100; + // vAMM = 1 BaseToken = 10 USDC + const baseTokenAmount = ether(10_000); + const quoteTokenAmount = ether(100_000); + + const subjectOraclePrice = "15.15"; + + beforeEach(async () => { + await perpV2.usdc.mint(taker.address, utils.parseUnits(takerCollateralWholeUnitAmount, 6)); + await perpV2.deposit(taker, BigNumber.from(takerCollateralWholeUnitAmount), perpV2.usdc); + await perpV2.initializePoolWithLiquidityWide( + maker, + baseTokenAmount, + quoteTokenAmount + ); + + // Take long position + await perpV2.clearingHouse.connect(taker.wallet).openPosition({ + baseToken: perpV2.baseToken.address, + isBaseToQuote: false, + isExactInput: true, + oppositeAmountBound: 0, + amount: ether(takerBuyAmount), + sqrtPriceLimitX96: 0, + deadline: constants.MaxUint256, + referralCode: constants.HashZero, + }); + }); + + async function subject(): Promise { + return await perpV2.setBaseTokenOraclePrice(subjectOraclePrice); + } + + it("should update the oracle price and increase taker account value", async () => { + const initialTakerAccountValue = await perpV2.clearingHouse.getAccountValue(taker.address); + + await subject(); + + const finalTakerAccountValue = await perpV2.clearingHouse.getAccountValue(taker.address); + expect(initialTakerAccountValue).to.be.lt(finalTakerAccountValue); + }); + }); }); diff --git a/utils/fixtures/perpV2Fixture.ts b/utils/fixtures/perpV2Fixture.ts index 6d13dffd6..ea59ae2af 100644 --- a/utils/fixtures/perpV2Fixture.ts +++ b/utils/fixtures/perpV2Fixture.ts @@ -60,7 +60,6 @@ export interface BaseTokenFixture { mockAggregator: ChainlinkAggregatorMock; } -const TEN_THOUSAND = "10000"; const ONE_MILLION = "1000000"; export class PerpV2Fixture { @@ -68,7 +67,7 @@ export class PerpV2Fixture { private _ownerAddress: Address; private _ownerSigner: Signer; private _feeTier: number = 10000; // From perp fixtures - private _oracleDecimals: number = 6; // From perp fixtures + private _usdcDecimals: number; // From perp fixtures public usdc: StandardTokenMock; public clearingHouse: PerpV2ClearingHouse; @@ -94,6 +93,7 @@ export class PerpV2Fixture { public async initialize(): Promise { this.usdc = await this._deployer.mocks.deployTokenMock(this._ownerAddress, ether("100000000000000"), 6); + this._usdcDecimals = 6; const { token0, mockAggregator0, token1 } = await this._tokensFixture(); @@ -194,7 +194,7 @@ export class PerpV2Fixture { async deposit(sender: Account, amount: BigNumber, token: StandardTokenMock): Promise { const decimals = await token.decimals(); - const parsedAmount = utils.parseUnits("1000", decimals); + const parsedAmount = utils.parseUnits(amount.toString(), decimals); await token.connect(sender.wallet).approve(this.vault.address, parsedAmount); await this.vault.connect(sender.wallet).deposit(token.address, parsedAmount); } @@ -204,30 +204,26 @@ export class PerpV2Fixture { baseTokenAmount: BigNumberish, quoteTokenAmount: BigNumberish ): Promise { - await this.mockBaseAggregator.setRoundData(0, utils.parseUnits("10", 6), 0, 0, 0 ); - - await this.pool.initialize( - this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount) - ); + await this.pool.initialize(this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount)); + await this.pool.increaseObservationCardinalityNext((2 ^ 16) - 1); const tickSpacing = await this.pool.tickSpacing(); const lowerTick = this._getMinTick(tickSpacing); const upperTick = this._getMaxTick(tickSpacing); - await this.marketRegistry.addPool(this.baseToken.address, 10000); - await this.marketRegistry.setFeeRatio(this.baseToken.address, 10000); + await this.marketRegistry.addPool(this.baseToken.address, this._feeTier); + await this.marketRegistry.setFeeRatio(this.baseToken.address, this._feeTier); // prepare collateral for maker - const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._oracleDecimals); - const mintBufferAmount = utils.parseUnits(TEN_THOUSAND, this._oracleDecimals); - await this.usdc.mint(maker.address, makerCollateralAmount.add(mintBufferAmount)); - await this.deposit(maker, makerCollateralAmount, this.usdc); + const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._usdcDecimals); + await this.usdc.mint(maker.address, makerCollateralAmount); + await this.deposit(maker, BigNumber.from(ONE_MILLION), this.usdc); // maker add liquidity at ratio await this.clearingHouse.connect(maker.wallet).addLiquidity({ baseToken: this.baseToken.address, - base: utils.parseEther(baseTokenAmount.toString()), - quote: utils.parseEther(quoteTokenAmount.toString()), + base: baseTokenAmount, + quote: quoteTokenAmount, lowerTick, upperTick, minBase: 0, @@ -240,26 +236,25 @@ export class PerpV2Fixture { maker: Account, baseTokenAmount: BigNumberish, quoteTokenAmount: BigNumberish, - lowerTick: number = 0, - upperTick: number = 10000 + lowerTick: number, + upperTick: number ): Promise { - await this.pool.initialize( - this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount) - ); + await this.pool.initialize(this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount)); + await this.pool.increaseObservationCardinalityNext((2 ^ 16) - 1); - await this.marketRegistry.addPool(this.baseToken.address, baseTokenAmount); - await this.marketRegistry.setFeeRatio(this.baseToken.address, baseTokenAmount); + await this.marketRegistry.addPool(this.baseToken.address, this._feeTier); + await this.marketRegistry.setFeeRatio(this.baseToken.address, this._feeTier); // prepare collateral for maker - const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._oracleDecimals); + const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._usdcDecimals); await this.usdc.mint(maker.address, makerCollateralAmount); - await this.vault.connect(maker.address).deposit(this.usdc.address, makerCollateralAmount); + await this.deposit(maker, BigNumber.from(ONE_MILLION), this.usdc); // maker add liquidity at ratio - await this.clearingHouse.connect(maker.address).addLiquidity({ + await this.clearingHouse.connect(maker.wallet).addLiquidity({ baseToken: this.baseToken.address, - base: utils.parseEther(baseTokenAmount.toString()), - quote: utils.parseEther(quoteTokenAmount.toString()), + base: baseTokenAmount, + quote: quoteTokenAmount, lowerTick, upperTick, minBase: 0, @@ -269,17 +264,17 @@ export class PerpV2Fixture { } public async setBaseTokenOraclePrice(price: string): Promise { - await this.mockBaseAggregator.setRoundData(0, utils.parseUnits(price, this._oracleDecimals), 0, 0, 0); + await this.mockBaseAggregator.setRoundData(0, utils.parseUnits(price, this._usdcDecimals), 0, 0, 0); } - public async getAMMBaseTokenPrice(): Promise { + public async getAMMBaseTokenPrice(): Promise { const sqrtPriceX96 = (await this.pool.slot0()).sqrtPriceX96; const priceX86 = JSBI.BigInt(sqrtPriceX96.toString()); const squaredPrice = JSBI.multiply(priceX86, priceX86); const decimalsRatio = 1e18; const denominator = JSBI.exponentiate(JSBI.BigInt(2), JSBI.BigInt(192)); const scaledPrice = JSBI.multiply(squaredPrice, JSBI.BigInt(decimalsRatio)); - return JSBI.divide(scaledPrice, denominator).toString(); + return BigNumber.from(JSBI.divide(scaledPrice, denominator).toString()); } // UniV3 AddLiquidity helpers From b928c94423c9e8951bfde0b44c31e86f2ecbd14c Mon Sep 17 00:00:00 2001 From: cgewecke Date: Wed, 6 Oct 2021 07:36:13 -0700 Subject: [PATCH 5/6] Add subtask for abi gas injection in external artifacts --- external/abi/perp/PerpV2AccountBalance.json | 2 +- external/abi/perp/PerpV2BaseToken.json | 2 +- .../abi/perp/PerpV2ChainlinkPriceFeed.json | 2 +- external/abi/perp/PerpV2ClearingHouse.json | 2 +- .../abi/perp/PerpV2ClearingHouseConfig.json | 2 +- external/abi/perp/PerpV2Exchange.json | 2 +- external/abi/perp/PerpV2InsuranceFund.json | 2 +- external/abi/perp/PerpV2MarketRegistry.json | 2 +- external/abi/perp/PerpV2OrderBook.json | 2 +- external/abi/perp/PerpV2QuoteToken.json | 2 +- external/abi/perp/PerpV2Quoter.json | 2 +- external/abi/perp/PerpV2TestAggregatorV3.json | 2 +- external/abi/perp/PerpV2Vault.json | 2 +- external/abi/perp/PerpV2VirtualToken.json | 2 +- hardhat.config.ts | 7 ++++ tasks/subtasks.ts | 36 ++++++++++++++++++- utils/tasks/artifactUtils.ts | 19 ++++++++++ 17 files changed, 75 insertions(+), 15 deletions(-) diff --git a/external/abi/perp/PerpV2AccountBalance.json b/external/abi/perp/PerpV2AccountBalance.json index 65681de66..17a929c5c 100644 --- a/external/abi/perp/PerpV2AccountBalance.json +++ b/external/abi/perp/PerpV2AccountBalance.json @@ -642,4 +642,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018b5760003560e01c80630af968001461019057806313af4035146101ae578063293a5077146101c35780632bea7936146101e35780632e4586c3146101f65780633772470214610209578063449323d81461021c5780636332fef61461022f5780636817031b1461024f5780636a256b29146102625780636c8381f8146102755780636ccdc82e1461027d578063715018a614610290578063776af5ba1461029857806377b57b07146102a05780637a5b45a0146102b35780638227bc3e146102c65780638da25bbe146102d95780638da5cb5b146102ec578063af74e736146102f4578063b3bd6e1214610314578063bc5920ba14610327578063beb56a751461032f578063c0c53b8b14610342578063c2075b2114610355578063cb3c7b8e1461035d578063d2f7265a1461037d578063ecb96fe614610385578063ee817e8b1461038d578063f0c79797146103a0578063fa8e30af146103b3578063fbfa77cf146103c6578063fc737214146103ce575b600080fd5b6101986103e1565b6040516101a59190612457565b60405180910390f35b6101c16101bc366004612265565b6103f0565b005b6101d66101d1366004612265565b61054b565b6040516101a59190612543565b6101d66101f1366004612265565b610661565b6101c161020436600461231f565b6106fc565b6101c16102173660046123af565b61076e565b6101c161022a366004612265565b610810565b61024261023d36600461229d565b6108e5565b6040516101a591906126b8565b6101c161025d366004612265565b610940565b6101d6610270366004612265565b6109ed565b610198610a4a565b6101d661028b366004612265565b610a59565b6101c1610b27565b610198610bc8565b6101d66102ae36600461229d565b610bd7565b6101d66102c136600461229d565b610c26565b6101d66102d4366004612265565b610c54565b6101d66102e736600461229d565b610d94565b610198610e53565b610307610302366004612265565b610e62565b6040516101a591906124eb565b6101d661032236600461229d565b610ed8565b6101c1610f03565b6101c161033d36600461235f565b610fef565b6101c16103503660046122d5565b6110dc565b6101986112c5565b61037061036b366004612265565b6112d4565b6040516101a59190612538565b610198611368565b610198611377565b6101d661039b366004612265565b611386565b6101c16103ae36600461231f565b6113a1565b6101c16103c136600461229d565b611459565b610198611775565b6101c16103dc36600461229d565b611784565b6068546001600160a01b031681565b6103f86119d0565b6001600160a01b0316610409610e53565b6001600160a01b03161461044d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610491576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156104dd576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610529576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038116600090815260a0602052604081205481908190815b8181101561062d576001600160a01b038616600090815260a06020526040812080548390811061059657fe5b60009182526020822001546001600160a01b031691506105b68883610ed8565b905060008082136105d2576105cd826000036119d4565b6105d5565b60005b905060006105f46105ef6105e886611a2f565b8490611b32565b611b8b565b905060006106028b86610c26565b905061060e8883611b9f565b975061061a8982611bf7565b9850506001909401935061056a92505050565b50600080841361064857610643846000036119d4565b61064b565b60005b90506106578184611b9f565b9695505050505050565b60008060005b6001600160a01b038416600090815260a060205260409020548110156106e1576001600160a01b038416600090815260a0602052604081208054839081106106ab57fe5b6000918252602090912001546001600160a01b031690506106d66106cf8683610bd7565b8490611bf7565b925050600101610667565b506106f5816106ef85610c54565b90611bf7565b9392505050565b609c546001600160a01b03166107106119d0565b6001600160a01b03161461073f5760405162461bcd60e51b815260040161073690612659565b60405180910390fd5b6001600160a01b03928316600090815260a1602090815260408083209490951682529290925291902060020155565b609c546001600160a01b03166107826119d0565b6001600160a01b031614806107b157506068546001600160a01b03166107a66119d0565b6001600160a01b0316145b6107cd5760405162461bcd60e51b815260040161073690612635565b6001600160a01b0382166000908152609f60205260409020546107f09082611bf7565b6001600160a01b039092166000908152609f602052604090209190915550565b6108186119d0565b6001600160a01b0316610829610e53565b6001600160a01b03161461086d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61087f816001600160a01b0316611c5c565b61089b5760405162461bcd60e51b8152600401610736906125f2565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6108ed612244565b506001600160a01b03808316600090815260a16020908152604080832093851683529281529082902082516060810184528154815260018201549281019290925260020154918101919091525b92915050565b6109486119d0565b6001600160a01b0316610959610e53565b6001600160a01b03161461099d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6109af816001600160a01b0316611c5c565b6109cb5760405162461bcd60e51b815260040161073690612698565b609e80546001600160a01b0319166001600160a01b0392909216919091179055565b609e546000906001600160a01b0316610a046119d0565b6001600160a01b031614610a2a5760405162461bcd60e51b815260040161073690612679565b506001600160a01b03166000908152609f60205260408120805491905590565b6034546001600160a01b031690565b6001600160a01b038116600090815260a06020908152604080832080548251818502810185019093528083528493830182828015610ac057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610aa2575b505050505090506000808251905060005b81811015610b1d576000848281518110610ae757fe5b602002602001015190506000610b05610b008984610bd7565b611c62565b9050610b118582611b9f565b94505050600101610ad1565b5090949350505050565b610b2f6119d0565b6001600160a01b0316610b40610e53565b6001600160a01b031614610b84576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020612791833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b609d546001600160a01b031681565b600080610be48484610d94565b905080610bf557600091505061093a565b6000610c0084611a2f565b9050610c1d610c18610c1183611c85565b8490611cc9565b611d72565b95945050505050565b6001600160a01b03918216600090815260a16020908152604080832093909416825291909152206001015490565b6001600160a01b038116600090815260a0602052604081205481805b82811015610ccb576001600160a01b038516600090815260a060205260408120805483908110610c9c57fe5b6000918252602090912001546001600160a01b03169050610cc06106cf8783610c26565b925050600101610c70565b50609d546001600160a01b03858116600090815260a060205260408082209051632196f33360e21b81529193929092169163865bcccc91610d1091899160040161248f565b60206040518083038186803b158015610d2857600080fd5b505afa158015610d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6091906123fa565b90506000610d706106cf83611c85565b9050600a610d7d82611c62565b10610d885780610657565b50600095945050505050565b600080610e30610da48585610ed8565b609d5460405163bf0b1abb60e01b81526106ef916001600160a01b03169063bf0b1abb90610ddb908a908a9060019060040161246b565b60206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2b91906123fa565b611c85565b9050600a610e3d82611c62565b10610e485780610e4b565b60005b949350505050565b6033546001600160a01b031690565b6001600160a01b038116600090815260a06020908152604091829020805483518184028101840190945280845260609392830182828015610ecc57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610eae575b50505050509050919050565b6001600160a01b03918216600090815260a16020908152604080832093909416825291909152205490565b6034546001600160a01b0316610f48576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610f506119d0565b6034546001600160a01b03908116911614610f9b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061279183398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b609c546001600160a01b03166110036119d0565b6001600160a01b0316148061103257506068546001600160a01b03166110276119d0565b6001600160a01b0316145b61104e5760405162461bcd60e51b815260040161073690612635565b6001600160a01b03808616600090815260a160209081526040808320938816835292905220805461107f9085611bf7565b815560018101546110909084611bf7565b60018201556001600160a01b0386166000908152609f60205260409020546110b89083611bf7565b6001600160a01b039096166000908152609f60205260409020959095555050505050565b600054610100900460ff16806110f557506110f5611d86565b80611103575060005460ff16155b61113e5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015611169576000805460ff1961ff0019909116610100171660011790555b61117b846001600160a01b0316611c5c565b6111975760405162461bcd60e51b81526004016107369061254c565b6111a9826001600160a01b0316611c5c565b6111c55760405162461bcd60e51b8152600401610736906125b1565b6000826001600160a01b031663776af5ba6040518163ffffffff1660e01b815260040160206040518083038186803b15801561120057600080fd5b505afa158015611214573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112389190612281565b905061124c816001600160a01b0316611c5c565b6112685760405162461bcd60e51b815260040161073690612614565b61127184611d97565b609b80546001600160a01b038088166001600160a01b031992831617909255609c8054868416908316179055609d805493909216921691909117905580156112bf576000805461ff00191690555b50505050565b609b546001600160a01b031681565b609d546001600160a01b03828116600090815260a060205260408082209051634dffaee560e01b815291939290921691634dffaee59161131891869160040161248f565b60206040518083038186803b15801561133057600080fd5b505afa158015611344573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906123da565b609c546001600160a01b031681565b6067546001600160a01b031681565b6001600160a01b03166000908152609f602052604090205490565b609c546001600160a01b03166113b56119d0565b6001600160a01b0316146113db5760405162461bcd60e51b815260040161073690612659565b6001600160a01b03808416600090815260a160209081526040808320938616835292905220600181015461140f9083611e8a565b60018201556001600160a01b0384166000908152609f60205260409020546114379083611bf7565b6001600160a01b039094166000908152609f6020526040902093909355505050565b6068546001600160a01b031661146d6119d0565b6001600160a01b0316146114935760405162461bcd60e51b815260040161073690612590565b600a6114a2610b008484610ed8565b1015806114bc5750600a6114b9610b008484610c26565b10155b156114c657611771565b609d5460405163bf0b1abb60e01b81526000916001600160a01b03169063bf0b1abb906114fc908690869060019060040161246b565b60206040518083038186803b15801561151457600080fd5b505afa158015611528573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154c91906123fa565b609d5460405163bf0b1abb60e01b81529192506000916001600160a01b039091169063bf0b1abb906115869087908790869060040161246b565b60206040518083038186803b15801561159e57600080fd5b505afa1580156115b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d691906123fa565b905060008211806115e75750600081115b156115f3575050611771565b6001600160a01b03808516600081815260a16020908152604080832094881683529381528382208281556001810183905560020182905591815260a090915290812054905b8181101561176c576001600160a01b03868116600090815260a0602052604090208054918716918390811061166957fe5b6000918252602090912001546001600160a01b031614156117645760018203811461171c576001600160a01b038616600090815260a060205260409020805460001984019081106116b657fe5b60009182526020808320909101546001600160a01b03898116845260a090925260409092208054919092169190839081106116ed57fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b6001600160a01b038616600090815260a06020526040902080548061173d57fe5b600082815260209020810160001990810180546001600160a01b031916905501905561176c565b600101611638565b505050505b5050565b609e546001600160a01b031681565b6068546001600160a01b03166117986119d0565b6001600160a01b0316146117be5760405162461bcd60e51b815260040161073690612590565b6001600160a01b038216600090815260a0602090815260408083208054825181850281018501909352808352919290919083018282801561182857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161180a575b5050505050905080516000141561187d57506001600160a01b03828116600090815260a0602090815260408220805460018101825590835291200180546001600160a01b031916918316919091179055611771565b6118878383610ed8565b6119cb576000805b82518110156118d657836001600160a01b03168382815181106118ae57fe5b60200260200101516001600160a01b031614156118ce57600191506118d6565b60010161188f565b50806112bf57609b546040805163f652b52760e01b815290516000926001600160a01b03169163f652b527916004808301926020929190829003018186803b15801561192157600080fd5b505afa158015611935573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119599190612436565b905060ff8116158061196e57508060ff168351105b61198a5760405162461bcd60e51b8152600401610736906125d2565b50506001600160a01b03838116600090815260a0602090815260408220805460018101825590835291200180546001600160a01b0319169184169190911790555b505050565b3390565b600080821215611a2b576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b5090565b6000816001600160a01b03166312080647609b60009054906101000a90046001600160a01b03166001600160a01b0316633c1d5df06040518163ffffffff1660e01b815260040160206040518083038186803b158015611a8e57600080fd5b505afa158015611aa2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac69190612412565b6040518263ffffffff1660e01b8152600401611ae291906126d9565b60206040518083038186803b158015611afa57600080fd5b505afa158015611b0e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093a91906123fa565b600082611b415750600061093a565b82820282848281611b4e57fe5b04146106f55760405162461bcd60e51b81526004018080602001828103825260218152602001806127706021913960400191505060405180910390fd5b600061093a82670de0b6b3a7640000611eef565b6000828201838110156106f5576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6000828201818312801590611c0c5750838112155b80611c215750600083128015611c2157508381125b6106f55760405162461bcd60e51b81526004018080602001828103825260218152602001806127006021913960400191505060405180910390fd5b3b151590565b6000808213611c7c57611c77826000036119d4565b61093a565b61093a826119d4565b6000600160ff1b8210611a2b5760405162461bcd60e51b81526004018080602001828103825260288152602001806127d86028913960400191505060405180910390fd5b600082611cd85750600061093a565b82600019148015611cec5750600160ff1b82145b15611d285760405162461bcd60e51b81526004018080602001828103825260278152602001806127b16027913960400191505060405180910390fd5b82820282848281611d3557fe5b05146106f55760405162461bcd60e51b81526004018080602001828103825260278152602001806127b16027913960400191505060405180910390fd5b600061093a82670de0b6b3a7640000611f53565b6000611d9130611c5c565b15905090565b600054610100900460ff1680611db05750611db0611d86565b80611dbe575060005460ff16155b611df95760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015611e24576000805460ff1961ff0019909116610100171660011790555b611e2c61200b565b611e3e826001600160a01b0316611c5c565b611e5a5760405162461bcd60e51b81526004016107369061256e565b606780546001600160a01b0319166001600160a01b0384161790558015611771576000805461ff00191690555050565b6000818303818312801590611e9f5750838113155b80611eb45750600083128015611eb457508381135b6106f55760405162461bcd60e51b81526004018080602001828103825260248152602001806128006024913960400191505060405180910390fd5b6000808211611f42576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b818381611f4b57fe5b049392505050565b600081611fa7576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015611fbb5750600160ff1b83145b15611ff75760405162461bcd60e51b815260040180806020018281038252602181526020018061274f6021913960400191505060405180910390fd5b600082848161200257fe5b05949350505050565b600054610100900460ff16806120245750612024611d86565b80612032575060005460ff16155b61206d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612098576000805460ff1961ff0019909116610100171660011790555b6120a06120fb565b60006120aa6119d0565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020612791833981519152908290a35080156120f8576000805461ff00191690555b50565b600054610100900460ff16806121145750612114611d86565b80612122575060005460ff16155b61215d5760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612188576000805460ff1961ff0019909116610100171660011790555b6121906121a4565b80156120f8576000805461ff001916905550565b600054610100900460ff16806121bd57506121bd611d86565b806121cb575060005460ff16155b6122065760405162461bcd60e51b815260040180806020018281038252602e815260200180612721602e913960400191505060405180910390fd5b600054610100900460ff16158015612190576000805460ff1961ff00199091166101001716600117905580156120f8576000805461ff001916905550565b60405180606001604052806000815260200160008152602001600081525090565b600060208284031215612276578081fd5b81356106f5816126ea565b600060208284031215612292578081fd5b81516106f5816126ea565b600080604083850312156122af578081fd5b82356122ba816126ea565b915060208301356122ca816126ea565b809150509250929050565b6000806000606084860312156122e9578081fd5b83356122f4816126ea565b92506020840135612304816126ea565b91506040840135612314816126ea565b809150509250925092565b600080600060608486031215612333578283fd5b833561233e816126ea565b9250602084013561234e816126ea565b929592945050506040919091013590565b600080600080600060a08688031215612376578081fd5b8535612381816126ea565b94506020860135612391816126ea565b94979496505050506040830135926060810135926080909101359150565b600080604083850312156123c1578182fd5b82356123cc816126ea565b946020939093013593505050565b6000602082840312156123eb578081fd5b815180151581146106f5578182fd5b60006020828403121561240b578081fd5b5051919050565b600060208284031215612423578081fd5b815163ffffffff811681146106f5578182fd5b600060208284031215612447578081fd5b815160ff811681146106f5578182fd5b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b60006040820160018060a01b03808616845260206040818601528286548085526060870191508786528286209450855b818110156124dd5785548516835260019586019592840192016124bf565b509098975050505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561252c5783516001600160a01b031683529284019291840191600101612507565b50909695505050505050565b901515815260200190565b90815260200190565b60208082526008908201526741425f4348434e4360c01b604082015260600190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526007908201526641425f45584e4360c81b604082015260600190565b60208082526006908201526541425f4d4e4560d01b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b60208082526007908201526641425f4f424e4360c81b604082015260600190565b6020808252600a908201526908284be9ebe8ab0f886960b31b604082015260600190565b60208082526006908201526508284be9e8ab60d31b604082015260600190565b60208082526005908201526420a12fa7ab60d91b604082015260600190565b60208082526006908201526541425f564e4360d01b604082015260600190565b81518152602080830151908201526040918201519181019190915260600190565b63ffffffff91909116815260200190565b6001600160a01b03811681146120f857600080fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f77536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212202da684f185ac6b99f554451f1ae68716d97a979e7aabb160748e2f7298307b4564736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2BaseToken.json b/external/abi/perp/PerpV2BaseToken.json index 4708c5703..ea27d6a3b 100644 --- a/external/abi/perp/PerpV2BaseToken.json +++ b/external/abi/perp/PerpV2BaseToken.json @@ -489,4 +489,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061011d5760003560e01c806306fdde0314610122578063077f224a1461019f578063095ea7b3146102d557806309fd821214610315578063120806471461033b57806313af40351461036a57806318160ddd1461039057806323b872dd14610398578063313ce567146103ce57806339509351146103ec5780636c8381f81461041857806370a082311461043c578063715018a614610462578063741bef1a1461046a57806378c8cda7146104725780638da5cb5b1461049857806395d89b41146104a0578063a457c2d7146104a8578063a9059cbb146104d4578063bc5920ba14610500578063dd62ed3e14610508578063f52e308e14610536578063f80f5dd51461055c575b600080fd5b61012a610582565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561016457818101518382015260200161014c565b50505050905090810190601f1680156101915780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102d3600480360360608110156101b557600080fd5b810190602081018135600160201b8111156101cf57600080fd5b8201836020820111156101e157600080fd5b803590602001918460018302840111600160201b8311171561020257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561025457600080fd5b82018360208201111561026657600080fd5b803590602001918460018302840111600160201b8311171561028757600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550505090356001600160a01b031691506106189050565b005b610301600480360360408110156102eb57600080fd5b506001600160a01b038135169060200135610859565b604080519115158252519081900360200190f35b6103016004803603602081101561032b57600080fd5b50356001600160a01b0316610877565b6103586004803603602081101561035157600080fd5b5035610895565b60408051918252519081900360200190f35b6102d36004803603602081101561038057600080fd5b50356001600160a01b0316610924565b610358610a7f565b610301600480360360608110156103ae57600080fd5b506001600160a01b03813581169160208101359091169060400135610a85565b6103d6610b0c565b6040805160ff9092168252519081900360200190f35b6103016004803603604081101561040257600080fd5b506001600160a01b038135169060200135610b15565b610420610b63565b604080516001600160a01b039092168252519081900360200190f35b6103586004803603602081101561045257600080fd5b50356001600160a01b0316610b72565b6102d3610b8d565b610420610c2e565b6102d36004803603602081101561048857600080fd5b50356001600160a01b0316610c42565b610420610cf7565b61012a610d06565b610301600480360360408110156104be57600080fd5b506001600160a01b038135169060200135610d67565b610301600480360360408110156104ea57600080fd5b506001600160a01b038135169060200135610dcf565b6102d3610de3565b6103586004803603604081101561051e57600080fd5b506001600160a01b0381358116916020013516610ecf565b6102d36004803603602081101561054c57600080fd5b50356001600160a01b0316610efa565b6102d36004803603602081101561057257600080fd5b50356001600160a01b0316610f66565b606a8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561060e5780601f106105e35761010080835404028352916020019161060e565b820191906000526020600020905b8154815290600101906020018083116105f157829003601f168201915b5050505050905090565b600054610100900460ff1680610631575061063161101e565b8061063f575060005460ff16155b61067a5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156106a5576000805460ff1961ff0019909116610100171660011790555b6106af848461102f565b6001600160a01b0382166106f2576040805162461bcd60e51b815260206004820152600560248201526442545f494160d81b604482015290519081900360640190fd5b6106fa610b0c565b60ff16826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561073657600080fd5b505afa15801561074a573d6000803e3d6000fd5b505050506040513d602081101561076057600080fd5b505160ff1611156107a2576040805162461bcd60e51b8152602060048201526007602482015266109517d254119160ca1b604482015290519081900360640190fd5b8160cc60016101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561080257600080fd5b505afa158015610816573d6000803e3d6000fd5b505050506040513d602081101561082c57600080fd5b505160cc805460ff191660ff9092169190911790558015610853576000805461ff00191690555b50505050565b600061086d61086661111a565b848461111e565b5060015b92915050565b6001600160a01b031660009081526099602052604090205460ff1690565b600061087160cc60019054906101000a90046001600160a01b03166001600160a01b031663e7572230846040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156108f357600080fd5b505afa158015610907573d6000803e3d6000fd5b505050506040513d602081101561091d57600080fd5b505161120a565b61092c61111a565b6001600160a01b031661093d610cf7565b6001600160a01b031614610981576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166109c5576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610a11576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610a5d576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b6000610a92848484611238565b610b0284610a9e61111a565b610afd85604051806060016040528060288152602001611b9d602891396001600160a01b038a16600090815260686020526040812090610adc61111a565b6001600160a01b031681526020810191909152604001600020549190611383565b61111e565b5060019392505050565b606c5460ff1690565b600061086d610b2261111a565b84610afd8560686000610b3361111a565b6001600160a01b03908116825260208083019390935260409182016000908120918c16815292529020549061141a565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b610b9561111a565b6001600160a01b0316610ba6610cf7565b6001600160a01b031614610bea576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611bc5833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b60cc5461010090046001600160a01b031681565b610c4a61111a565b6001600160a01b0316610c5b610cf7565b6001600160a01b031614610c9f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f600260001961010060018816150201909516949094049384018190048102820181019092528281526060939092909183018282801561060e5780601f106105e35761010080835404028352916020019161060e565b600061086d610d7461111a565b84610afd85604051806060016040528060258152602001611c4e6025913960686000610d9e61111a565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611383565b600061086d610ddc61111a565b8484611238565b6034546001600160a01b0316610e28576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610e3061111a565b6034546001600160a01b03908116911614610e7b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020611bc583398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610f0261111a565b6001600160a01b0316610f13610cf7565b6001600160a01b031614610f57576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610f6381600019611479565b50565b610f6e61111a565b6001600160a01b0316610f7f610cf7565b6001600160a01b031614610fc3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b600061102930611559565b15905090565b600054610100900460ff1680611048575061104861101e565b80611056575060005460ff16155b6110915760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156110bc576000805460ff1961ff0019909116610100171660011790555b6110c461155f565b6110ce838361164e565b6000805260996020527f235d629dc802037ded8c61cb27fb29e40fa01b299719d8f991ffe20bdcc59f4f805460ff191660011790558015611115576000805461ff00191690555b505050565b3390565b6001600160a01b0383166111635760405162461bcd60e51b8152600401808060200182810382526024815260200180611c2a6024913960400191505060405180910390fd5b6001600160a01b0382166111a85760405162461bcd60e51b8152600401808060200182810382526022815260200180611b066022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b60cc546000906108719060ff16600a0a611232611225610b0c565b859060ff16600a0a611703565b9061175c565b6001600160a01b03831661127d5760405162461bcd60e51b8152600401808060200182810382526025815260200180611c056025913960400191505060405180910390fd5b6001600160a01b0382166112c25760405162461bcd60e51b8152600401808060200182810382526023815260200180611ae36023913960400191505060405180910390fd5b6112cd8383836117c0565b61130a81604051806060016040528060268152602001611b28602691396001600160a01b0386166000908152606760205260409020549190611383565b6001600160a01b038085166000908152606760205260408082209390935590841681522054611339908261141a565b6001600160a01b038084166000818152606760209081526040918290209490945580518581529051919392871692600080516020611be583398151915292918290030190a3505050565b600081848411156114125760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156113d75781810151838201526020016113bf565b50505050905090810190601f1680156114045780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015611472576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b6001600160a01b0382166114d4576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b6114e0600083836117c0565b6069546114ed908261141a565b6069556001600160a01b038216600090815260676020526040902054611513908261141a565b6001600160a01b0383166000818152606760209081526040808320949094558351858152935192939192600080516020611be58339815191529281900390910190a35050565b3b151590565b600054610100900460ff1680611578575061157861101e565b80611586575060005460ff16155b6115c15760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156115ec576000805460ff1961ff0019909116610100171660011790555b6115f4611820565b60006115fe61111a565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611bc5833981519152908290a3508015610f63576000805461ff001916905550565b600054610100900460ff1680611667575061166761101e565b80611675575060005460ff16155b6116b05760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156116db576000805460ff1961ff0019909116610100171660011790555b6116e36118c9565b6116ed8383611969565b8015611115576000805461ff0019169055505050565b60008261171257506000610871565b8282028284828161171f57fe5b04146114725760405162461bcd60e51b8152600401808060200182810382526021815260200180611b7c6021913960400191505060405180910390fd5b60008082116117af576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b8183816117b857fe5b049392505050565b6117cb838383611115565b6001600160a01b03831660009081526099602052604090205460ff16611115576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b600054610100900460ff1680611839575061183961101e565b80611847575060005460ff16155b6118825760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156118ad576000805460ff1961ff0019909116610100171660011790555b6118b56118c9565b8015610f63576000805461ff001916905550565b600054610100900460ff16806118e257506118e261101e565b806118f0575060005460ff16155b61192b5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156118b5576000805460ff1961ff0019909116610100171660011790558015610f63576000805461ff001916905550565b600054610100900460ff1680611982575061198261101e565b80611990575060005460ff16155b6119cb5760405162461bcd60e51b815260040180806020018281038252602e815260200180611b4e602e913960400191505060405180910390fd5b600054610100900460ff161580156119f6576000805460ff1961ff0019909116610100171660011790555b8251611a0990606a906020860190611a41565b508151611a1d90606b906020850190611a41565b50606c805460ff191660121790558015611115576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282611a775760008555611abd565b82601f10611a9057805160ff1916838001178555611abd565b82800160010185558215611abd579182015b82811115611abd578251825591602001919060010190611aa2565b50611ac9929150611acd565b5090565b5b80821115611ac95760008155600101611ace56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200d71e9f209b04673a3bde66be118f3099c95f8262c4dc0765ed1aba85f16139064736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2ChainlinkPriceFeed.json b/external/abi/perp/PerpV2ChainlinkPriceFeed.json index a60d6c36d..6007b656b 100644 --- a/external/abi/perp/PerpV2ChainlinkPriceFeed.json +++ b/external/abi/perp/PerpV2ChainlinkPriceFeed.json @@ -53,4 +53,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c8063313ce56714610046578063c4d66de814610064578063e75722301461008c575b600080fd5b61004e6100bb565b6040805160ff9092168252519081900360200190f35b61008a6004803603602081101561007a57600080fd5b50356001600160a01b031661013b565b005b6100a9600480360360208110156100a257600080fd5b503561024d565b60408051918252519081900360200190f35b60008060029054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561010a57600080fd5b505afa15801561011e573d6000803e3d6000fd5b505050506040513d602081101561013457600080fd5b5051905090565b600054610100900460ff1680610154575061015461038f565b80610162575060005460ff16155b61019d5760405162461bcd60e51b815260040180806020018281038252602e8152602001806107b3602e913960400191505060405180910390fd5b600054610100900460ff161580156101c8576000805460ff1961ff0019909116610100171660011790555b6101da826001600160a01b03166103a0565b610215576040805162461bcd60e51b81526020600482015260076024820152664350465f414e4360c81b604482015290519081900360640190fd5b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610249576000805461ff00191690555b5050565b60008060008061025b6103a6565b92509250925084600014156102745750915061038a9050565b600061028886610282610472565b90610476565b90508082108061029f57506001600160501b038416155b156102b0578294505050505061038a565b8160006102bf82610282610472565b905060006102cd86836104d8565b90505b6001600160501b0387166102f6576102e88183610538565b97505050505050505061038a565b6001870396506000806103088961059c565b925092505085811161033b5761033261032b6103248789610476565b84906104d8565b849061070f565b92505050610376565b60006103478683610476565b905061035d61035684836104d8565b859061070f565b9350610369858261070f565b94508195505050506102d0565b610380818a610538565b9750505050505050505b919050565b600061039a306103a0565b15905090565b3b151590565b600080600080600080600060029054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a06040518083038186803b1580156103fd57600080fd5b505afa158015610411573d6000803e3d6000fd5b505050506040513d60a081101561042757600080fd5b50805160208201516060909201519196509350859250905060008212156104665761045183610767565b61045d6001840361059c565b90965090935090505b91945090915050909192565b4290565b6000828211156104cd576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b508082035b92915050565b6000826104e7575060006104d2565b828202828482816104f457fe5b04146105315760405162461bcd60e51b81526004018080602001828103825260218152602001806107e16021913960400191505060405180910390fd5b9392505050565b600080821161058b576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b81838161059457fe5b049392505050565b600080600080600080600060029054906101000a90046001600160a01b03166001600160a01b0316639a6fc8f5886040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b15801561060757600080fd5b505afa15801561061b573d6000803e3d6000fd5b505050506040513d60a081101561063157600080fd5b508051602082015160609092015190945090925090505b60008212156107025761065a83610767565b600183039250600060029054906101000a90046001600160a01b03166001600160a01b0316639a6fc8f5846040518263ffffffff1660e01b815260040180826001600160501b0316815260200191505060a06040518083038186803b1580156106c257600080fd5b505afa1580156106d6573d6000803e3d6000fd5b505050506040513d60a08110156106ec57600080fd5b5060208101516060909101519092509050610648565b9196909550909350915050565b600082820183811015610531576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b6000816001600160501b0316116107af576040805162461bcd60e51b8152602060048201526007602482015266086a08cbe9c8a960cb1b604482015290519081900360640190fd5b5056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212208742471b83f095ebc0179b7261a07aaba2987cc2ec3155f546eef37c125bc90364736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2ClearingHouse.json b/external/abi/perp/PerpV2ClearingHouse.json index 7c611cc1d..23648846d 100644 --- a/external/abi/perp/PerpV2ClearingHouse.json +++ b/external/abi/perp/PerpV2ClearingHouse.json @@ -786,4 +786,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101695760003560e01c8062aa9a891461016e57806313af40351461019857806313f3d56e146101ad578063217a4b70146101cd5780633f4ba83a146101e2578063486ff0cd146101ea578063572b6c05146101ff5780635ae809511461021f5780635b5491821461023f5780635c975abb146102475780636c8381f81461024f578063715018a614610257578063776af5ba1461025f5780637da0a8771461026757806380a983321461026f5780638456cb591461028257806386b9d81f1461028a5780638da5cb5b1461029d578063b0a1c1c4146102a5578063b6b1b6c3146102ad578063bc5920ba146102c0578063c2075b21146102c8578063cc2a9a5b146102d0578063cc3606dc146102e3578063cde109b6146102f6578063d2f7265a14610316578063d34879971461031e578063da74222814610331578063fa461e3314610344578063fbfa77cf14610357575b600080fd5b61018161017c36600461414f565b61035f565b60405161018f929190614a30565b60405180910390f35b6101ab6101a6366004613e14565b6105f3565b005b6101c06101bb3660046140d3565b61074e565b60405161018f9190614911565b6101d5610b92565b60405161018f9190614479565b6101ab610ba2565b6101f2610c09565b60405161018f9190614585565b61021261020d366004613e14565b610c98565b60405161018f9190614571565b61023261022d366004613e14565b610cb0565b60405161018f919061457c565b6101d5610d5c565b610212610d6c565b6101d5610d76565b6101ab610d85565b6101d5610e26565b6101d5610e36565b6101ab61027d366004613f05565b610e46565b6101ab610f29565b6101ab610298366004613e4c565b610f8e565b6101d561144c565b6101d561145b565b6101816102bb3660046141fe565b61146b565b6101ab611759565b6101d5611845565b6101ab6102de366004613e84565b611855565b6101ab6102f1366004613e4c565b611c8d565b6103096103043660046142a2565b611dc3565b60405161018f9190614993565b6101d5611f8f565b6101ab61032c366004614083565b611f9f565b6101ab61033f366004613e14565b6121fa565b6101ab610352366004614083565b612291565b6101d5612494565b60008061036a610d6c565b156103af576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156103f5576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b60026001556060830135806104086124a4565b1115610444576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b6104596104546020860186613e14565b6124a8565b6000610463612551565b610167549091506000906001600160a01b0316631e81ac338361048960208a018a613e14565b6040518363ffffffff1660e01b81526004016104a692919061448d565b6040805180830381600087803b1580156104bf57600080fd5b505af11580156104d3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104f79190614160565b905060006105626040518060800160405280856001600160a01b0316815260200189600001602081019061052b9190613e14565b6001600160a01b0316815260200189602001602081019061054c9190613e14565b6001600160a01b03168152602001849052612560565b905060008082604001511261057857600061057b565b60015b90506105bc6040518060a001604052808315158152602001831515815260200184602001518152602001846000015181526020018a604001358152506126ac565b604051608089013590600080516020614b1f83398151915290600090a2508051602090910151600180559097909650945050505050565b6105fb612551565b6001600160a01b031661060c61144c565b6001600160a01b031614610650576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610694576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6097546001600160a01b03828116911614156106e0576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6098546001600160a01b038281169116141561072c576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b609880546001600160a01b0319166001600160a01b0392909216919091179055565b610756613ca0565b61075e610d6c565b156107a3576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b600260015414156107e9576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560e0820135806107fc6124a4565b1115610838576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b6108486104546020850185613e14565b6000610852612551565b610169549091506001600160a01b031663fc737214826108756020880188613e14565b6040518363ffffffff1660e01b815260040161089292919061448d565b600060405180830381600087803b1580156108ac57600080fd5b505af11580156108c0573d6000803e3d6000fd5b505061016754600092506001600160a01b03169050631e81ac33836108e86020890189613e14565b6040518363ffffffff1660e01b815260040161090592919061448d565b6040805180830381600087803b15801561091e57600080fd5b505af1158015610932573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109569190614160565b610168546040805160e081019091526001600160a01b0385811682529293506000929091169063e8ab2fb390602080820190610994908b018b613e14565b6001600160a01b0316815260200189602001358152602001896040013581526020018960600160208101906109c9919061404f565b60020b81526020016109e160a08b0160808c0161404f565b60020b8152602001858152506040518263ffffffff1660e01b8152600401610a0991906148a7565b608060405180830381600087803b158015610a2357600080fd5b505af1158015610a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5b91906140eb565b90508560a00135816000015110158015610a7d57508560c00135816020015110155b610aa25760405162461bcd60e51b8152600401610a9990614847565b60405180910390fd5b610169546001600160a01b031663beb56a7584610ac260208a018a613e14565b8451610acd9061277f565b600003610add866020015161277f565b600003610aed876040015161277f565b6040518663ffffffff1660e01b8152600401610b0d959493929190614509565b600060405180830381600087803b158015610b2757600080fd5b505af1158015610b3b573d6000803e3d6000fd5b50505050610b48836127c7565b604051806080016040528082600001518152602001826020015181526020018260400151815260200182606001516001600160801b031681525094505050505b5060018055919050565b610162546001600160a01b031681565b610baa612551565b6001600160a01b0316610bbb61144c565b6001600160a01b031614610bff576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610c07612877565b565b610164805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610c905780601f10610c6557610100808354040283529160200191610c90565b820191906000526020600020905b815481529060010190602001808311610c7357829003601f168201915b505050505081565b61012f546001600160a01b038281169116145b919050565b610169546040516315f53c9b60e11b8152600091610d56916001600160a01b0390911690632bea793690610ce8908690600401614479565b60206040518083038186803b158015610d0057600080fd5b505afa158015610d14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d38919061406b565b61016354600160a01b900460ff16610d4f85612917565b9190612ac4565b92915050565b610163546001600160a01b031681565b60cb5460ff165b90565b6098546001600160a01b031690565b610d8d612551565b6001600160a01b0316610d9e61144c565b6001600160a01b031614610de2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6097546040516000916001600160a01b031690600080516020614b8e833981519152908390a3609780546001600160a01b0319908116909155609880549091169055565b610168546001600160a01b031681565b61012f546001600160a01b031681565b610e4e610d6c565b15610e93576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415610ed9576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b6002600181905550610f1f8484848480806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250612aed92505050565b5050600180555050565b610f31612551565b6001600160a01b0316610f4261144c565b6001600160a01b031614610f86576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610c07612d6a565b610f96610d6c565b15610fdb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611021576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015561102f816124a8565b61016654604051630261422d60e51b81526110d0916001600160a01b031690634c2845a090611062908690600401614479565b60206040518083038186803b15801561107a57600080fd5b505afa15801561108e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b2919061406b565b61016354600160a01b900460ff166110c985610cb0565b9190612ded565b6110ec5760405162461bcd60e51b8152600401610a99906145fa565b6101695460405163659e3dc760e11b81526001600160a01b039091169063cb3c7b8e9061111d908590600401614479565b60206040518083038186803b15801561113557600080fd5b505afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190614033565b1561118a5760405162461bcd60e51b8152600401610a9990614887565b61016754604051631e81ac3360e01b81526000916001600160a01b031690631e81ac33906111be908690869060040161448d565b6040805180830381600087803b1580156111d757600080fd5b505af11580156111eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120f9190614160565b905060006112586040518060800160405280866001600160a01b03168152602001856001600160a01b0316815260200160006001600160a01b0316815260200184815250612560565b905060006112f961016560009054906101000a90046001600160a01b03166001600160a01b031663d0144c6c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156112ae57600080fd5b505afa1580156112c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e6919061441a565b6112f38460600151612e03565b90612e26565b610169549091506001600160a01b03166337724702866113188461277f565b6000036040518363ffffffff1660e01b815260040161133892919061453a565b600060405180830381600087803b15801561135257600080fd5b505af1158015611366573d6000803e3d6000fd5b505050506000611374612551565b610169549091506001600160a01b03166337724702826113938561277f565b6040518363ffffffff1660e01b81526004016113b092919061453a565b600060405180830381600087803b1580156113ca57600080fd5b505af11580156113de573d6000803e3d6000fd5b50505050846001600160a01b0316866001600160a01b03167fd9aced30440caca81570436bc942f816cfd95a3f08f700a2aeb6334c7cb5b4976114248660600151612e03565b865160405161143892919088908890614a3e565b60405180910390a350506001805550505050565b6097546001600160a01b031690565b610169546001600160a01b031681565b600080611476610d6c565b156114bb576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611501576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560a0830151806115146124a4565b1115611550576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b600061155a612551565b905061156985600001516124a8565b610169548551604051633f1cdc8560e21b81526001600160a01b039092169163fc7372149161159d9185919060040161448d565b600060405180830381600087803b1580156115b757600080fd5b505af11580156115cb573d6000803e3d6000fd5b5050610167548751604051631e81ac3360e01b8152600094506001600160a01b039092169250631e81ac339161160591869160040161448d565b6040805180830381600087803b15801561161e57600080fd5b505af1158015611632573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116569190614160565b905060006116db604051806101200160405280856001600160a01b0316815260200189600001516001600160a01b03168152602001896020015115158152602001896040015115158152602001600015158152602001896060015181526020018960c001516001600160a01b0316815260200160001515815260200184815250612e3b565b90506117246040518060a00160405280896020015115158152602001896040015115158152602001836020015181526020018360000151815260200189608001518152506126ac565b60e0870151604051600080516020614b1f83398151915290600090a28051602090910151600180559097909650945050505050565b6098546001600160a01b031661179e576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6117a6612551565b6098546001600160a01b039081169116146117f1576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6098546097546040516001600160a01b039283169290911690600080516020614b8e83398151915290600090a360988054609780546001600160a01b03199081166001600160a01b03841617909155169055565b610165546001600160a01b031681565b600054610100900460ff168061186e575061186e612fae565b8061187c575060005460ff16155b6118b75760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156118e2576000805460ff1961ff0019909116610100171660011790555b6118f4866001600160a01b0316612fbf565b6119105760405162461bcd60e51b8152600401610a99906147c3565b611922856001600160a01b0316612fbf565b61193e5760405162461bcd60e51b8152600401610a99906146df565b846001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561197757600080fd5b505afa15801561198b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119af9190614436565b60ff166012146119d15760405162461bcd60e51b8152600401610a99906145d8565b6119e3846001600160a01b0316612fbf565b6119ff5760405162461bcd60e51b8152600401610a999061467b565b611a11876001600160a01b0316612fbf565b611a2d5760405162461bcd60e51b8152600401610a9990614720565b611a3f826001600160a01b0316612fbf565b611a5b5760405162461bcd60e51b8152600401610a999061465a565b611a6d836001600160a01b0316612fbf565b611a895760405162461bcd60e51b8152600401610a9990614741565b6000836001600160a01b031663776af5ba6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ac457600080fd5b505afa158015611ad8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afc9190613e30565b9050611b10816001600160a01b0316612fbf565b611b2c5760405162461bcd60e51b8152600401610a9990614761565b611b34612fc5565b611b3c61306e565b61016580546001600160a01b03199081166001600160a01b038b811691909117909255610166805482168a84161790819055610162805483168a85161790556101638054831689851617905561016780548316888516179055610168805483168585161790556101698054909216868416179091556040805163313ce56760e01b81529051919092169163313ce567916004828101926020929190829003018186803b158015611beb57600080fd5b505afa158015611bff573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c239190614436565b610163805460ff92909216600160a01b0260ff60a01b19909216919091179055604080518082019091526005808252640322e302e360dc1b6020909201918252611c709161016491613cc8565b50508015611c84576000805461ff00191690555b50505050505050565b611c95610d6c565b15611cda576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611d20576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b6002600155610168546040516321b499f560e11b81526000916001600160a01b03169063436933ea90611d59908690869060040161448d565b60006040518083038186803b158015611d7157600080fd5b505afa158015611d85573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611dad9190810190613f93565b9050611dba838383612aed565b50506001805550565b611dcb613d50565b611dd3610d6c565b15611e18576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415611e5e576040805162461bcd60e51b815260206004820152601f6024820152600080516020614ade833981519152604482015290519081900360640190fd5b600260015560c082013580611e716124a4565b1115611ead576040805162461bcd60e51b81526020600480830191909152602482015263565f544560e01b604482015290519081900360640190fd5b611ebd6104546020850185613e14565b611f516040518060a00160405280611ed3612551565b6001600160a01b03168152602090810190611ef090870187613e14565b6001600160a01b03168152602001856020016020810190611f11919061404f565b60020b8152602001611f29606087016040880161404f565b60020b8152602001611f4160808701606088016143fe565b6001600160801b0316905261310b565b91508260800135826000015110158015611f7357508260a00135826020015110155b610b885760405162461bcd60e51b8152600401610a9990614847565b610167546001600160a01b031681565b610168546001600160a01b0316611fb4612551565b6001600160a01b031614611fda5760405162461bcd60e51b8152600401610a9990614782565b6000611fe8828401846141a7565b905084156120f057600081602001516001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561202f57600080fd5b505afa158015612043573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120679190613e30565b602083015160405163a9059cbb60e01b81529192506001600160a01b0383169163a9059cbb9161209b918a9060040161453a565b602060405180830381600087803b1580156120b557600080fd5b505af11580156120c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ed9190614033565b50505b83156121f357600081602001516001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561213557600080fd5b505afa158015612149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216d9190613e30565b602083015160405163a9059cbb60e01b81529192506001600160a01b0383169163a9059cbb916121a191899060040161453a565b602060405180830381600087803b1580156121bb57600080fd5b505af11580156121cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c849190614033565b5050505050565b612202612551565b6001600160a01b031661221361144c565b6001600160a01b031614612257576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b612269816001600160a01b0316612fbf565b6122855760405162461bcd60e51b8152600401610a9990614741565b61228e816132e8565b50565b610167546001600160a01b03166122a6612551565b6001600160a01b0316146122cc5760405162461bcd60e51b8152600401610a999061461a565b60008413806122db5750600083135b6122f75760405162461bcd60e51b8152600401610a9990614700565b600061230582840184614307565b604081015190915060008080881361238e57826001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561235057600080fd5b505afa158015612364573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123889190613e30565b87612401565b826001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156123c757600080fd5b505afa1580156123db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ff9190613e30565b885b91509150816001600160a01b031663a9059cbb8560400151836040518363ffffffff1660e01b815260040161243792919061453a565b602060405180830381600087803b15801561245157600080fd5b505af1158015612465573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124899190614033565b505050505050505050565b610166546001600160a01b031681565b4290565b6101675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db906124da908590600401614479565b60206040518083038186803b1580156124f257600080fd5b505afa158015612506573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061252a9190613e30565b6001600160a01b0316141561228e5760405162461bcd60e51b8152600401610a99906147a2565b600061255b613383565b905090565b612568613d71565b61016954825160208401516040516346d12ddf60e11b81526000936001600160a01b031692638da25bbe9261259f9260040161448d565b60206040518083038186803b1580156125b757600080fd5b505afa1580156125cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ef919061406b565b90508061260e5760405162461bcd60e51b8152600401610a9990614867565b600080821361261e576000612621565b60015b90506126a460405180610120016040528086600001516001600160a01b0316815260200186602001516001600160a01b031681526020018315158152602001831515815260200160011515815260200161267a85612e03565b81526040808801516001600160a01b03166020830152600190820152606080880151910152612e3b565b949350505050565b60808101516126ba5761228e565b805115612725578060200151156126f8578060800151816040015110156126f35760405162461bcd60e51b8152600401610a9990614805565b612720565b8060800151816060015111156127205760405162461bcd60e51b8152600401610a9990614639565b61228e565b806020015115612757578060800151816060015110156127205760405162461bcd60e51b8152600401610a99906147e4565b80608001518160400151111561228e5760405162461bcd60e51b8152600401610a999061469c565b6000600160ff1b82106127c35760405162461bcd60e51b8152600401808060200182810382526028815260200180614bd56028913960400191505060405180910390fd5b5090565b60006128598261016560009054906101000a90046001600160a01b03166001600160a01b0316632f60a1516040518163ffffffff1660e01b815260040160206040518083038186803b15801561281c57600080fd5b505afa158015612830573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612854919061441a565b6133b5565b121561228e5760405162461bcd60e51b8152600401610a99906146bd565b61287f610d6c565b6128c7576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b60cb805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6128fa612551565b604080516001600160a01b039092168252519081900360200190a1565b610167546040516380f57f1160e01b815260009182916001600160a01b03909116906380f57f119061294d908690600401614479565b60206040518083038186803b15801561296557600080fd5b505afa158015612979573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061299d919061406b565b6101695460405163ee817e8b60e01b81529192506000916001600160a01b039091169063ee817e8b906129d4908790600401614479565b60206040518083038186803b1580156129ec57600080fd5b505afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a24919061406b565b90506126a4612a338284613439565b61016354610166546040516370a0823160e01b8152600160a01b90920460ff16916001600160a01b03909116906370a0823190612a74908a90600401614479565b60206040518083038186803b158015612a8c57600080fd5b505afa158015612aa0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4f919061406b565b6000612ae3612add84612ad7878661349e565b906134b4565b83613519565b90505b9392505050565b612af6826124a8565b6000612b4b8461016560009054906101000a90046001600160a01b03166001600160a01b0316639f044f316040518163ffffffff1660e01b815260040160206040518083038186803b15801561281c57600080fd5b1280612bec575061016654604051630261422d60e51b8152612bec916001600160a01b031690634c2845a090612b85908790600401614479565b60206040518083038186803b158015612b9d57600080fd5b505afa158015612bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd5919061406b565b61016354600160a01b900460ff166110c986610cb0565b612c085760405162461bcd60e51b8152600401610a9990614826565b61016754604051631e81ac3360e01b81526001600160a01b0390911690631e81ac3390612c3b908690869060040161448d565b6040805180830381600087803b158015612c5457600080fd5b505af1158015612c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c8c9190614160565b506101685460405163398dbcfd60e01b81526000916001600160a01b03169063398dbcfd90612cc3908790879087906004016144a7565b606060405180830381600087803b158015612cdd57600080fd5b505af1158015612cf1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1591906142b3565b9050612d646040518060a00160405280866001600160a01b03168152602001856001600160a01b031681526020018360000151815260200183602001518152602001836040015181525061352f565b50505050565b612d72610d6c565b15612db7576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60cb805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586128fa612551565b600082612dfa858461349e565b12949350505050565b6000808213612e1d57612e188260000361362c565b610d56565b610d568261362c565b6000612ae6838362ffffff16620f4240613683565b612e43613d71565b6101675460408051610100818101835285516001600160a01b0390811683526020808801518216908401528684015115158385015260608088015115159084015260808088015115159084015260a0808801519084015260c0808801518216908401529086015160e083015291516348fa72d560e01b815260009392909216916348fa72d591612ed5916004016149b4565b60a060405180830381600087803b158015612eef57600080fd5b505af1158015612f03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f279190614390565b90508260e00151612f3d578251612f3d906127c7565b610169548351602085015160405163fa8e30af60e01b81526001600160a01b039093169263fa8e30af92612f7592909160040161448d565b600060405180830381600087803b158015612f8f57600080fd5b505af1158015612fa3573d6000803e3d6000fd5b509295945050505050565b6000612fb930612fbf565b15905090565b3b151590565b600054610100900460ff1680612fde5750612fde612fae565b80612fec575060005460ff16155b6130275760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613052576000805460ff1961ff0019909116610100171660011790555b61305a613732565b801561228e576000805461ff001916905550565b600054610100900460ff16806130875750613087612fae565b80613095575060005460ff16155b6130d05760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156130fb576000805460ff1961ff0019909116610100171660011790555b6131036137d7565b61305a6138c6565b613113613d50565b6101675482516020840151604051631e81ac3360e01b81526001600160a01b0390931692631e81ac339261314b92909160040161448d565b6040805180830381600087803b15801561316457600080fd5b505af1158015613178573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319c9190614160565b50610168546040805160a08101825284516001600160a01b03908116825260208087015182169083015285830151600290810b8385015260608088015190910b908301526080808701516001600160801b0316908301529151635b778b9d60e01b81526000939290921691635b778b9d916132199160040161493c565b606060405180830381600087803b15801561323357600080fd5b505af1158015613247573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326b91906142b3565b90506132c26040518060a0016040528085600001516001600160a01b0316815260200185602001516001600160a01b031681526020018360000151815260200183602001518152602001836040015181525061352f565b604080516060810182528251815260208084015190820152918101519082015292915050565b6001600160a01b03811661332e576040805162461bcd60e51b81526020600482015260086024820152674252435f4954464160c01b604482015290519081900360640190fd5b61012f80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd119181900360200190a150565b60006018361080159061339a575061339a33610c98565b156133ae575060131936013560601c610d73565b5033610d73565b61016654604051633ffd130360e01b81526000916001600160a01b031690633ffd1303906133e99086908690600401614553565b60206040518083038186803b15801561340157600080fd5b505afa158015613415573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae6919061406b565b600081830381831280159061344e5750838113155b80613463575060008312801561346357508381135b612ae65760405162461bcd60e51b8152600401808060200182810382526024815260200180614bfd6024913960400191505060405180910390fd5b6000612ae68360ff601285900316600a0a613963565b60008282018183128015906134c95750838112155b806134de57506000831280156134de57508381125b612ae65760405162461bcd60e51b8152600401808060200182810382526021815260200180614afe6021913960400191505060405180910390fd5b6000612ae68360ff601285900316600a0a613a0c565b610169548151602083015160408401516001600160a01b039093169263beb56a7592919061355c9061277f565b613569866060015161277f565b613576876080015161277f565b6040518663ffffffff1660e01b8152600401613596959493929190614509565b600060405180830381600087803b1580156135b057600080fd5b505af11580156135c4573d6000803e3d6000fd5b5050610169548351602085015160405163fa8e30af60e01b81526001600160a01b03909316945063fa8e30af93506135fe9260040161448d565b600060405180830381600087803b15801561361857600080fd5b505af11580156121f3573d6000803e3d6000fd5b6000808212156127c3576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b60008080600019858709868602925082811090839003039050806136b957600084116136ae57600080fd5b508290049050612ae6565b8084116136c557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600054610100900460ff168061374b575061374b612fae565b80613759575060005460ff16155b6137945760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff161580156137bf576000805460ff1961ff0019909116610100171660011790555b60018055801561228e576000805461ff001916905550565b600054610100900460ff16806137f057506137f0612fae565b806137fe575060005460ff16155b6138395760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613864576000805460ff1961ff0019909116610100171660011790555b61386c613ac4565b6000613876612551565b609780546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020614b8e833981519152908290a350801561228e576000805461ff001916905550565b600054610100900460ff16806138df57506138df612fae565b806138ed575060005460ff16155b6139285760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613953576000805460ff1961ff0019909116610100171660011790555b61395b613b55565b61305a613bf5565b60008261397257506000610d56565b826000191480156139865750600160ff1b82145b156139c25760405162461bcd60e51b8152600401808060200182810382526027815260200180614bae6027913960400191505060405180910390fd5b828202828482816139cf57fe5b0514612ae65760405162461bcd60e51b8152600401808060200182810382526027815260200180614bae6027913960400191505060405180910390fd5b600081613a60576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b81600019148015613a745750600160ff1b83145b15613ab05760405162461bcd60e51b8152600401808060200182810382526021815260200180614b6d6021913960400191505060405180910390fd5b6000828481613abb57fe5b05949350505050565b600054610100900460ff1680613add5750613add612fae565b80613aeb575060005460ff16155b613b265760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613b51576000805460ff1961ff0019909116610100171660011790555b61305a5b600054610100900460ff1680613b6e5750613b6e612fae565b80613b7c575060005460ff16155b613bb75760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff1615801561305a576000805460ff1961ff001990911661010017166001179055801561228e576000805461ff001916905550565b600054610100900460ff1680613c0e5750613c0e612fae565b80613c1c575060005460ff16155b613c575760405162461bcd60e51b815260040180806020018281038252602e815260200180614b3f602e913960400191505060405180910390fd5b600054610100900460ff16158015613c82576000805460ff1961ff0019909116610100171660011790555b60cb805460ff19169055801561228e576000805461ff001916905550565b6040518060800160405280600081526020016000815260200160008152602001600081525090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282613cfe5760008555613d44565b82601f10613d1757805160ff1916838001178555613d44565b82800160010185558215613d44579182015b82811115613d44578251825591602001919060010190613d29565b506127c3929150613da3565b60405180606001604052806000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600060020b81525090565b5b808211156127c35760008155600101613da4565b8035610cab81614a85565b8035610cab81614a9a565b60008083601f840112613ddf578182fd5b5081356001600160401b03811115613df5578182fd5b602083019150836020828501011115613e0d57600080fd5b9250929050565b600060208284031215613e25578081fd5b8135612ae681614a85565b600060208284031215613e41578081fd5b8151612ae681614a85565b60008060408385031215613e5e578081fd5b8235613e6981614a85565b91506020830135613e7981614a85565b809150509250929050565b60008060008060008060c08789031215613e9c578182fd5b8635613ea781614a85565b95506020870135613eb781614a85565b94506040870135613ec781614a85565b93506060870135613ed781614a85565b92506080870135613ee781614a85565b915060a0870135613ef781614a85565b809150509295509295509295565b60008060008060608587031215613f1a578182fd5b8435613f2581614a85565b93506020850135613f3581614a85565b925060408501356001600160401b0380821115613f50578384fd5b818701915087601f830112613f63578384fd5b813581811115613f71578485fd5b8860208083028501011115613f84578485fd5b95989497505060200194505050565b60006020808385031215613fa5578182fd5b82516001600160401b0380821115613fbb578384fd5b818501915085601f830112613fce578384fd5b815181811115613fda57fe5b8381029150613fea848301614a62565b8181528481019084860184860187018a1015614004578788fd5b8795505b83861015614026578051835260019590950194918601918601614008565b5098975050505050505050565b600060208284031215614044578081fd5b8151612ae681614a9a565b600060208284031215614060578081fd5b8135612ae681614aa8565b60006020828403121561407c578081fd5b5051919050565b60008060008060608587031215614098578182fd5b843593506020850135925060408501356001600160401b038111156140bb578283fd5b6140c787828801613dce565b95989497509550505050565b600061010082840312156140e5578081fd5b50919050565b6000608082840312156140fc578081fd5b604051608081016001600160401b038111828210171561411857fe5b8060405250825181526020830151602082015260408301516040820152606083015161414381614ab7565b60608201529392505050565b600060a082840312156140e5578081fd5b600060408284031215614171578081fd5b604080519081016001600160401b038111828210171561418d57fe5b604052825181526020928301519281019290925250919050565b6000604082840312156141b8578081fd5b604080519081016001600160401b03811182821017156141d457fe5b60405282356141e281614a85565b815260208301356141f281614a85565b60208201529392505050565b6000610100808385031215614211578182fd5b604051908101906001600160401b038211818310171561422d57fe5b8160405261423a84613db8565b815261424860208501613dc3565b602082015261425960408501613dc3565b6040820152606084013560608201526080840135608082015260a084013560a082015261428860c08501613db8565b60c082015260e084013560e0820152809250505092915050565b600060e082840312156140e5578081fd5b6000606082840312156142c4578081fd5b604051606081016001600160401b03811182821017156142e057fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600060a08284031215614318578081fd5b60405160a081016001600160401b038111828210171561433457fe5b604052823561434281614a85565b8152602083013561435281614a85565b6020820152604083013561436581614a85565b6040820152606083013561437881614acc565b60608201526080928301359281019290925250919050565b600060a082840312156143a1578081fd5b60405160a081016001600160401b03811182821017156143bd57fe5b80604052508251815260208301516020820152604083015160408201526060830151606082015260808301516143f281614aa8565b60808201529392505050565b60006020828403121561440f578081fd5b8135612ae681614ab7565b60006020828403121561442b578081fd5b8151612ae681614acc565b600060208284031215614447578081fd5b815160ff81168114612ae6578182fd5b15159052565b80518252602090810151910152565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0384811682528316602080830191909152606060408301819052835190830181905260009184810191608085019190845b818110156144fb578451845293820193928201926001016144df565b509198975050505050505050565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392909216825262ffffff16602082015260400190565b901515815260200190565b90815260200190565b6000602080835283518082850152825b818110156145b157858101830151858201604001528201614595565b818111156145c25783604083870101525b50601f01601f1916929092016040019392505050565b60208082526008908201526708690bea2889c62760c31b604082015260600190565b60208082526006908201526521a42fa2a0ab60d11b604082015260600190565b60208082526005908201526443485f4f4560d81b604082015260600190565b60208082526007908201526643485f544d525360c81b604082015260600190565b60208082526007908201526643485f41424e4360c81b604082015260600190565b60208082526007908201526643485f55414e4360c81b604082015260600190565b60208082526007908201526610d217d513549360ca1b604082015260600190565b60208082526008908201526743485f4e4546434960c01b604082015260600190565b60208082526007908201526643485f51414e4360c81b604082015260600190565b60208082526006908201526543485f46305360d01b604082015260600190565b60208082526007908201526643485f43434e4360c81b604082015260600190565b60208082526006908201526543485f414e4360d01b604082015260600190565b60208082526007908201526643485f4f424e4360c81b604082015260600190565b60208082526006908201526521a42fa727a160d11b604082015260600190565b60208082526007908201526643485f42544e4560c81b604082015260600190565b60208082526007908201526643485f56414e4360c81b604082015260600190565b60208082526007908201526610d217d513149360ca1b604082015260600190565b60208082526007908201526643485f544c525360c81b604082015260600190565b60208082526007908201526643485f4e45584f60c81b604082015260600190565b60208082526006908201526543485f50534360d01b604082015260600190565b60208082526006908201526521a42fa829ad60d11b604082015260600190565b60208082526006908201526543485f4e454f60d01b604082015260600190565b60006101008201905060018060a01b03808451168352806020850151166020840152506040830151604083015260608301516060830152608083015160020b608083015260a083015160020b60a083015260c083015161490a60c084018261445d565b5092915050565b8151815260208083015190820152604080830151908201526060918201519181019190915260800190565b81516001600160a01b03908116825260208084015190911690820152604080830151600290810b9183019190915260608084015190910b908201526080918201516001600160801b03169181019190915260a00190565b81518152602080830151908201526040918201519181019190915260600190565b81516001600160a01b03908116825260208084015190911690820152604080830151151590820152606080830151151590820152608080830151610120830191614a0090840182614457565b5060a083015160a083015260c0830151614a1d60c084018261446c565b5060e083015161490a60e084018261445d565b918252602082015260400190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b6040518181016001600160401b0381118282101715614a7d57fe5b604052919050565b6001600160a01b038116811461228e57600080fd5b801515811461228e57600080fd5b8060020b811461228e57600080fd5b6001600160801b038116811461228e57600080fd5b62ffffff8116811461228e57600080fdfe5265656e7472616e637947756172643a207265656e7472616e742063616c6c005369676e6564536166654d6174683a206164646974696f6e206f766572666c6f7709a07769667a46c2b89124a4d731c76fb5203061073aec16319ba9c6a79a3248496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212201d3bf1ad0405b59cd96c3a215e22bcda076aa2e7df77b7b8006e303220a7dc0964736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2ClearingHouseConfig.json b/external/abi/perp/PerpV2ClearingHouseConfig.json index a47b0b873..a9542468a 100644 --- a/external/abi/perp/PerpV2ClearingHouseConfig.json +++ b/external/abi/perp/PerpV2ClearingHouseConfig.json @@ -269,4 +269,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100d05760003560e01c8063050a0ba3146100d557806313af4035146100f95780631d27050f1461011f5780632f60a151146101425780633c1d5df0146101625780633fa7ffc7146101835780636c8381f81461018b578063715018a6146101af57806373f62501146101b75780637bce35ae146101d75780638129fc1c146101f95780638da5cb5b146102015780639f044f3114610209578063bc5920ba14610211578063d0144c6c14610219578063f652b52714610221575b600080fd5b6100f7600480360360208110156100eb57600080fd5b503562ffffff1661023f565b005b6100f76004803603602081101561010f57600080fd5b50356001600160a01b031661033c565b6100f76004803603602081101561013557600080fd5b503563ffffffff16610497565b61014a610590565b6040805162ffffff9092168252519081900360200190f35b61016a6105a0565b6040805163ffffffff9092168252519081900360200190f35b61014a6105b3565b6101936105c5565b604080516001600160a01b039092168252519081900360200190f35b6100f76105d4565b6100f7600480360360208110156101cd57600080fd5b503560ff16610675565b6100f7600480360360208110156101ed57600080fd5b503562ffffff1661071a565b6100f761085c565b610193610959565b61014a610968565b6100f761097a565b61014a610a66565b610229610a78565b6040805160ff9092168252519081900360200190f35b80620f42408162ffffff161115610286576040805162461bcd60e51b81526020600482015260066024820152654348435f524f60d01b604482015290519081900360640190fd5b61028e610a81565b6001600160a01b031661029f610959565b6001600160a01b0316146102e3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6067805462ffffff8416600160381b810262ffffff60381b199092169190911790915560408051918252517ff95b3e2798060899824a0bebdd89ff5df3d51c51c5d30f5184bd30d7a6b017089181900360200190a15050565b610344610a81565b6001600160a01b0316610355610959565b6001600160a01b031614610399576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166103dd576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610429576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610475576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b61049f610a81565b6001600160a01b03166104b0610959565b6001600160a01b0316146104f4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b63ffffffff8116610536576040805162461bcd60e51b81526020600482015260076024820152664348435f49544960c81b604482015290519081900360640190fd5b6067805463ffffffff8316600160681b810263ffffffff60681b199092169190911790915560408051918252517f0bd5e02c0d6277fdf7c7c72fae10042c4c832b26ea94623a04b79a50a35a217e9181900360200190a150565b606754610100900462ffffff1681565b606754600160681b900463ffffffff1681565b606754600160501b900462ffffff1681565b6034546001600160a01b031690565b6105dc610a81565b6001600160a01b03166105ed610959565b6001600160a01b031614610631576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020610d03833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b61067d610a81565b6001600160a01b031661068e610959565b6001600160a01b0316146106d2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6067805460ff831660ff19909116811790915560408051918252517fa7b4760b38e2a630f3073fcd5119972cbf81bd50e3761f86534a69661caf81109181900360200190a150565b80620f42408162ffffff161115610761576040805162461bcd60e51b81526020600482015260066024820152654348435f524f60d01b604482015290519081900360640190fd5b610769610a81565b6001600160a01b031661077a610959565b6001600160a01b0316146107be576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b60008262ffffff1611610803576040805162461bcd60e51b815260206004820152600860248201526721a421afa4a821a960c11b604482015290519081900360640190fd5b6067805462ffffff8416600160501b810262ffffff60501b199092169190911790915560408051918252517f4757c16c46bedf5171cc1e2c53c99225da1bff2c0a5cb51b0f852909dbae1ebd9181900360200190a15050565b600054610100900460ff16806108755750610875610a85565b80610883575060005460ff16155b6108be5760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff161580156108e9576000805460ff1961ff0019909116610100171660011790555b6108f1610a96565b6067805463ffffff001916630186a0001762ffffff60201b1916613d0960221b1762ffffff60381b1916610c35603b1b1762ffffff60501b1916613d0960541b1763ffffffff60681b191660e1606a1b1790558015610956576000805461ff00191690555b50565b6033546001600160a01b031690565b606754600160201b900462ffffff1681565b6034546001600160a01b03166109bf576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6109c7610a81565b6034546001600160a01b03908116911614610a12576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020610d0383398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b606754600160381b900462ffffff1681565b60675460ff1681565b3390565b6000610a9030610b85565b15905090565b600054610100900460ff1680610aaf5750610aaf610a85565b80610abd575060005460ff16155b610af85760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610b23576000805460ff1961ff0019909116610100171660011790555b610b2b610b8b565b6000610b35610a81565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020610d03833981519152908290a3508015610956576000805461ff001916905550565b3b151590565b600054610100900460ff1680610ba45750610ba4610a85565b80610bb2575060005460ff16155b610bed5760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610c18576000805460ff1961ff0019909116610100171660011790555b610c20610c34565b8015610956576000805461ff001916905550565b600054610100900460ff1680610c4d5750610c4d610a85565b80610c5b575060005460ff16155b610c965760405162461bcd60e51b815260040180806020018281038252602e815260200180610cd5602e913960400191505060405180910390fd5b600054610100900460ff16158015610c20576000805460ff1961ff0019909116610100171660011790558015610956576000805461ff00191690555056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a264697066735822122055882c19308d40b97b732e7958992d11c59bf5d54ba495b04d78dc9be82aa0e864736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2Exchange.json b/external/abi/perp/PerpV2Exchange.json index 98e1feae3..c973b6479 100644 --- a/external/abi/perp/PerpV2Exchange.json +++ b/external/abi/perp/PerpV2Exchange.json @@ -726,4 +726,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101545760003560e01c80630af968001461015957806313af403514610177578063199387cc1461018c5780631e81ac331461019f57806329386b7b146101bf578063449323d8146101df57806348fa72d5146101f257806350709710146102125780635eb8a4e6146102325780636c8381f814610245578063715018a61461024d578063776af5ba1461025557806380f57f111461025d5780638da5cb5b1461027d57806399e4a77114610285578063b0a1c1c414610298578063b7902303146102a0578063b7c7ec6a146102a8578063bbe4f6db146102bb578063bc5920ba146102ce578063c2075b21146102d6578063cb379aa2146102de578063d3487997146102f1578063eb9b912e14610304578063ecb96fe614610317578063f8c8765e1461031f578063f9cbb47114610332578063fa461e3314610354575b600080fd5b610161610367565b60405161016e9190613e92565b60405180910390f35b61018a610185366004613897565b610376565b005b61018a61019a366004613897565b6104d1565b6101b26101ad3660046138cf565b61057f565b60405161016e91906142c8565b6101d26101cd366004613897565b610858565b60405161016e9190614400565b61018a6101ed366004613897565b61087c565b610205610200366004613cd0565b610951565b60405161016e91906143c3565b610225610220366004613897565b610f42565b60405161016e9190614040565b61018a610240366004613962565b610fce565b61016161115a565b61018a611169565b61016161120a565b61027061026b366004613897565b611219565b60405161016e919061404e565b6101616112e8565b61016161029336600461398f565b6112f7565b61016161138b565b61016161139a565b6102706102b63660046138cf565b6113a9565b6101616102c9366004613897565b6114c4565b61018a611545565b610161611631565b6102706102ec3660046138cf565b611640565b61018a6102ff366004613b56565b611780565b61018a610312366004613897565b611828565b6101616118e6565b61018a61032d366004613907565b6118f5565b610345610340366004613897565b611a6b565b60405161016e939291906142d6565b61018a610362366004613b56565b611d22565b6068546001600160a01b031681565b61037e611ec2565b6001600160a01b031661038f6112e8565b6001600160a01b0316146103d3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610417576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610463576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156104af576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6104d9611ec2565b6001600160a01b03166104ea6112e8565b6001600160a01b03161461052e576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661055d5760405162461bcd60e51b815260040161055490614120565b60405180910390fd5b609c80546001600160a01b0319166001600160a01b0392909216919091179055565b6105876136cf565b60008061059384611a6b565b609c546040516331997f7b60e11b815293965091945092506000916001600160a01b0390911690636332fef6906105d09089908990600401613ea6565b60606040518083038186803b1580156105e857600080fd5b505afa1580156105fc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106209190613ba6565b9050600061063987878460000151856040015189611ec6565b905080156106fa57609c5460405163beb56a7560e01b81526001600160a01b039091169063beb56a759061067c908a906000908190819088820390600401613ec0565b600060405180830381600087803b15801561069657600080fd5b505af11580156106aa573d6000803e3d6000fd5b50505050856001600160a01b0316876001600160a01b03167f733330d4aad1a878654bf888817b79bc6478013399be29fa3b8845c81305249e836040516106f1919061404e565b60405180910390a35b6001600160a01b038616600090815260a1602052604090205461071b611f6c565b146107e7576001600160a01b038616600090815260a260205260409020610740611f6c565b86516020808901516001600160a01b038b16600090815260a1909252604090912060018501919091559083555561077687610f42565b6001600160a01b0388166000818152609f602052604090819020805460029490940b62ffffff1662ffffff199094169390931790925590517f54e4482fe1d38392effe5d53f0e9e72f60221a75a10cea7abbb684bfb03519bf906107dd9088908890614410565b60405180910390a2505b609c548551604051632e4586c360e01b81526001600160a01b0390921691632e4586c39161081b918b918b91600401613f15565b600060405180830381600087803b15801561083557600080fd5b505af1158015610849573d6000803e3d6000fd5b50505050505050505b92915050565b6001600160a01b038116600090815260a3602052604090205462ffffff165b919050565b610884611ec2565b6001600160a01b03166108956112e8565b6001600160a01b0316146108d9576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6108eb816001600160a01b0316611f70565b6109075760405162461bcd60e51b815260040161055490614181565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6109596136e9565b6068546001600160a01b031661096d611ec2565b6001600160a01b0316146109935760405162461bcd60e51b8152600401610554906140dd565b609c54825160208401516040516346d12ddf60e11b81526000936001600160a01b031692638da25bbe926109c992600401613ea6565b60206040518083038186803b1580156109e157600080fd5b505afa1580156109f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a199190613b1b565b90506000808212610a2b576000610a2e565b60015b90506000821580610a46575084604001511515821515145b159050846080015115610b9257610a608560200151611f76565b80610a755750610a7585602001518385611f8e565b15610b8d5784516001600160a01b03908116600090815260a460209081526040808320828a015190941683529290522054610aae611f6c565b1415610acc5760405162461bcd60e51b8152600401610554906140fe565b610ad4611f6c565b85516001600160a01b03908116600090815260a460209081526040808320828b01518516845282529182902093909355609d548151633fa7ffc760e01b81529151610b87949190931692633fa7ffc7926004808201939291829003018186803b158015610b4057600080fd5b505afa158015610b54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b789190613e18565b610b8185611ff4565b90612017565b60a08601525b610bc2565b8015610bc257610ba58560200151611f76565b15610bc25760405162461bcd60e51b815260040161055490614227565b6000610bd6866000015187602001516113a9565b90506000610be38761202c565b90508660800151158015610bf45750825b15610c2857610c0b87602001518260c001516123eb565b15610c285760405162461bcd60e51b81526004016105549061415f565b609c5487516020890151604084015160808501516001600160a01b039094169363beb56a7593929190610c6990610c5e90612462565b6060880151906124aa565b60006040518663ffffffff1660e01b8152600401610c8b959493929190613ec0565b600060405180830381600087803b158015610ca557600080fd5b505af1158015610cb9573d6000803e3d6000fd5b505050506000610cd1886000015189602001516113a9565b905060008415610e18576000610cfc8460000151670de0b6b3a7640000610cf78b611ff4565b61250f565b905060008a60400151610d1e57610d168560200151612462565b600003610d2b565b610d2b8560200151612462565b9050670de0b6b3a76400008211610d6d576000610d59610d54610d4d85612462565b89906125be565b612667565b9050610d65828261267b565b935050610da3565b6000610d93610d7b84612462565b610d8d84670de0b6b3a76400006125be565b906126e0565b9050610d9f878261267b565b9350505b8215610e1557609c548b5160208d015160405163f0c7979760e01b81526001600160a01b039093169263f0c7979792610de29290918890600401613f15565b600060405180830381600087803b158015610dfc57600080fd5b505af1158015610e10573d6000803e3d6000fd5b505050505b50505b609c54609e5460a08501516001600160a01b03928316926337724702921690610e4090612462565b6040518363ffffffff1660e01b8152600401610e5d929190613fdd565b600060405180830381600087803b158015610e7757600080fd5b505af1158015610e8b573d6000803e3d6000fd5b5050505088602001516001600160a01b031689600001516001600160a01b03167fd50383521b86aced5c8a23f3e6249ed36a8419e9408218e2d712a69ec3710be08560400151866060015187608001518787604051610eee959493929190614077565b60405180910390a36040518060a00160405280846000015181526020018460200151815260200184604001518152602001846060015181526020018460c0015160020b815250975050505050505050919050565b60675460405163bbe4f6db60e01b8152600091610852916001600160a01b039091169063bbe4f6db90610f79908690600401613e92565b60206040518083038186803b158015610f9157600080fd5b505afa158015610fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc991906138b3565b612798565b610fd6611ec2565b6001600160a01b0316610fe76112e8565b6001600160a01b03161461102b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61103d826001600160a01b0316611f70565b6110595760405162461bcd60e51b8152600401610554906141c7565b60675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db9061108a908690600401613e92565b60206040518083038186803b1580156110a257600080fd5b505afa1580156110b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110da91906138b3565b6001600160a01b031614156111015760405162461bcd60e51b81526004016105549061409a565b620d89e862ffffff821611156111295760405162461bcd60e51b8152600401610554906141a3565b6001600160a01b0391909116600090815260a360205260409020805462ffffff191662ffffff909216919091179055565b6034546001600160a01b031690565b611171611ec2565b6001600160a01b03166111826112e8565b6001600160a01b0316146111c6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020614526833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b609b546001600160a01b031681565b609c546040516357ba739b60e11b815260009182916001600160a01b039091169063af74e7369061124e908690600401613e92565b60006040518083038186803b15801561126657600080fd5b505afa15801561127a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112a291908101906139bc565b905060005b81518110156112e1576112d76112d0858484815181106112c357fe5b6020026020010151611640565b849061267b565b92506001016112a7565b5050919050565b6033546001600160a01b031690565b60675460405163bbe4f6db60e01b8152600091611384916001600160a01b039091169063bbe4f6db9061132e908790600401613e92565b60206040518083038186803b15801561134657600080fd5b505afa15801561135a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137e91906138b3565b83612818565b9392505050565b609c546001600160a01b031681565b609e546001600160a01b031681565b609c546040516303d2da2d60e51b8152600091611384916001600160a01b0390911690637a5b45a0906113e29087908790600401613ea6565b60206040518083038186803b1580156113fa57600080fd5b505afa15801561140e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114329190613b1b565b609b5460405163bf0b1abb60e01b81526114be916001600160a01b03169063bf0b1abb906114699089908990600090600401613ef1565b60206040518083038186803b15801561148157600080fd5b505afa158015611495573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b99190613b1b565b612462565b9061267b565b60675460405163bbe4f6db60e01b81526000916001600160a01b03169063bbe4f6db906114f5908590600401613e92565b60206040518083038186803b15801561150d57600080fd5b505afa158015611521573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085291906138b3565b6034546001600160a01b031661158a576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b611592611ec2565b6034546001600160a01b039081169116146115dd576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061452683398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b609d546001600160a01b031681565b60008061164c83611a6b565b5050609c546040516331997f7b60e11b81529192506000916001600160a01b0390911690636332fef6906116869088908890600401613ea6565b60606040518083038186803b15801561169e57600080fd5b505afa1580156116b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d69190613ba6565b609b546040516347b52fb760e01b81529192506000916001600160a01b03909116906347b52fb79061171090899089908890600401613f39565b60206040518083038186803b15801561172857600080fd5b505afa15801561173c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117609190613b1b565b9050611776826000015183604001518584612971565b9695505050505050565b609b546001600160a01b0316611794611ec2565b6001600160a01b0316146117ba5760405162461bcd60e51b8152600401610554906142a9565b60685460405163d348799760e01b81526001600160a01b039091169063d3487997906117f0908790879087908790600401614057565b600060405180830381600087803b15801561180a57600080fd5b505af115801561181e573d6000803e3d6000fd5b5050505050505050565b609c546040516357ba739b60e11b81526000916001600160a01b03169063af74e73690611859908590600401613e92565b60006040518083038186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118ad91908101906139bc565b905060005b81518110156118e1576118d8838383815181106118cb57fe5b602002602001015161057f565b506001016118b2565b505050565b6067546001600160a01b031681565b600054610100900460ff168061190e575061190e6129a2565b8061191c575060005460ff16155b6119575760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611982576000805460ff1961ff0019909116610100171660011790555b61198b856129b3565b61199d846001600160a01b0316611f70565b6119b95760405162461bcd60e51b81526004016105549061413f565b6119cb836001600160a01b0316611f70565b6119e75760405162461bcd60e51b8152600401610554906141e7565b6119f9826001600160a01b0316611f70565b611a155760405162461bcd60e51b815260040161055490614288565b609e80546001600160a01b038085166001600160a01b031992831617909255609b8054878416908316179055609d8054928616929091169190911790558015611a64576000805461ff00191690555b5050505050565b611a736136cf565b6001600160a01b03808316600090815260a260209081526040808320609d5482516303c1d5df60e41b8152925194958695929486949290911692633c1d5df0926004808201939291829003018186803b158015611acf57600080fd5b505afa158015611ae3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b079190613e34565b6001600160a01b038716600090815260a06020526040902054909150611b2f57506000611b8f565b6001600160a01b038616600090815260a06020526040902054611b5a90611b54611f6c565b90612aa7565b8163ffffffff161115611b8f576001600160a01b038616600090815260a06020526040902054611b8c90611b54611f6c565b90505b6000611bac611b9e88846112f7565b6001600160a01b0316612b04565b9050611bb781612b1e565b604051631208064760e01b81529095506001600160a01b03881690631208064790611be690859060040161441e565b60206040518083038186803b158015611bfe57600080fd5b505afa158015611c12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c369190613b1b565b6001600160a01b038816600090815260a1602052604090205490945080611c5b611f6c565b14158015611c6857508015155b15611cfc576000611ca5611c816114b984611b54611f6c565b611c9f611c906114b98a612b37565b611c9987612462565b906124aa565b906125be565b8554909150611cb4908261267b565b8852611cf1611ce6611cd8611cca8c60006112f7565b6001600160a01b0316612462565b610d8d84600160601b6125be565b60018701549061267b565b602089015250611d17565b60408051808201909152845481526001850154602082015296505b505050509193909250565b6000611d2c611ec2565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611d6957600080fd5b505afa158015611d7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da191906138b3565b60675460405163bbe4f6db60e01b81529192506001600160a01b03169063bbe4f6db90611dd2908490600401613e92565b60206040518083038186803b158015611dea57600080fd5b505afa158015611dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2291906138b3565b6001600160a01b0316826001600160a01b031614611e525760405162461bcd60e51b815260040161055490614207565b60685460405163fa461e3360e01b81526001600160a01b039091169063fa461e3390611e88908990899089908990600401614057565b600060405180830381600087803b158015611ea257600080fd5b505af1158015611eb6573d6000803e3d6000fd5b50505050505050505050565b3390565b609b54604051633fe1339b60e11b815260009182916001600160a01b0390911690637fc2673690611eff908a908a908890600401613f39565b602060405180830381600087803b158015611f1957600080fd5b505af1158015611f2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f519190613b1b565b9050611f5f85858584612971565b9150505b95945050505050565b4290565b3b151590565b600080611f8283610f42565b905061138483826123eb565b6000806040518060a00160405280866001600160a01b03168152602001851515158152602001851515158152602001611fc685611ff4565b8152602001611fd58787612b50565b6001600160a01b031690529050611f6385611fef83612ba3565b6123eb565b600080821361200e5761200982600003612d4b565b610852565b61085282612d4b565b6000611384838362ffffff16620f424061250f565b61203461371b565b606754602083015160405163033e16f360e21b81526000926001600160a01b031691630cf85bcc916120699190600401613e92565b60806040518083038186803b15801561208157600080fd5b505afa158015612095573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b99190613bfa565b90506000806120df856040015186606001518760a0015186602001518760400151612da2565b609b5460408051610100810182526020808b01516001600160a01b0390811683528b8401511515828401526001838501526060830186905260c0808d015182166080850152918a015162ffffff90811660a08501528a850151169183019190915260e0808c0151908301529151631477e1bf60e31b815294965092945060009391169163a3bf0df89161217591906004016142f5565b606060405180830381600087803b15801561218f57600080fd5b505af11580156121a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121c79190613c77565b905060006122c36040518060e0016040528087600001516001600160a01b03168152602001606860009054906101000a90046001600160a01b03166001600160a01b031681526020018960400151151581526020018960600151151581526020018681526020018960c001516001600160a01b031681526020016040518060a001604052808b600001516001600160a01b031681526020018b602001516001600160a01b0316815260200189600001516001600160a01b03168152602001896040015162ffffff16815260200186602001518152506040516020016122ac9190614379565b604051602081830303815290604052815250612dee565b9050600080886040015115612302576122e96114b9846000015189604001516000612fc6565b60000391506122fb8360200151612462565b905061232c565b825161230d90612462565b91506123266114b9846020015189604001516000612fc6565b60000390505b6020808a01516001600160a01b0316600090815260a0909152604090205461237557612356611f6c565b6020808b01516001600160a01b0316600090815260a090915260409020555b6040518060e0016040528061238984611ff4565b81526020016123ad6123a86123a18860200151612462565b85906124aa565b611ff4565b81526020018381526020018281526020018560200151815260200185604001518152602001856000015160020b815250975050505050505050919050565b6001600160a01b038216600090815260a3602052604081205462ffffff1680612418576000915050610852565b6001600160a01b0384166000908152609f6020526040902054600290810b90828201908383039081810b9087900b128061245757508160020b8660020b135b979650505050505050565b6000600160ff1b82106124a65760405162461bcd60e51b815260040180806020018281038252602881526020018061456d6028913960400191505060405180910390fd5b5090565b60008183038183128015906124bf5750838113155b806124d457506000831280156124d457508381135b6113845760405162461bcd60e51b81526004018080602001828103825260248152602001806145956024913960400191505060405180910390fd5b6000808060001985870986860292508281109083900303905080612545576000841161253a57600080fd5b508290049050611384565b80841161255157600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000826125cd57506000610852565b826000191480156125e15750600160ff1b82145b1561261d5760405162461bcd60e51b81526004018080602001828103825260278152602001806145466027913960400191505060405180910390fd5b8282028284828161262a57fe5b05146113845760405162461bcd60e51b81526004018080602001828103825260278152602001806145466027913960400191505060405180910390fd5b600061085282670de0b6b3a76400006126e0565b60008282018183128015906126905750838112155b806126a557506000831280156126a557508381125b6113845760405162461bcd60e51b81526004018080602001828103825260218152602001806144b66021913960400191505060405180910390fd5b600081612734576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b816000191480156127485750600160ff1b83145b156127845760405162461bcd60e51b81526004018080602001828103825260218152602001806145056021913960400191505060405180910390fd5b600082848161278f57fe5b05949350505050565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156127d357600080fd5b505afa1580156127e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280b9190613d85565b5093979650505050505050565b6000600a8263ffffffff161015612839576128328361300d565b9050610852565b604080516002808252606082018352600092602083019080368337019050509050828160008151811061286857fe5b602002602001019063ffffffff16908163ffffffff168152505060008160018151811061289157fe5b63ffffffff9092166020928302919091019091015260405163883bdbfd60e01b81526000906001600160a01b0386169063883bdbfd906128d5908590600401613ff6565b60006040518083038186803b1580156128ed57600080fd5b505afa158015612901573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526129299190810190613a54565b509050611f638463ffffffff168260008151811061294357fe5b60200260200101518360018151811061295857fe5b60200260200101510360060b8161296b57fe5b0561308d565b600080612983868560000151876133b4565b905061299662015180610d8d858461267b565b9150505b949350505050565b60006129ad30611f70565b15905090565b600054610100900460ff16806129cc57506129cc6129a2565b806129da575060005460ff16155b612a155760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff16158015612a40576000805460ff1961ff0019909116610100171660011790555b612a486133d2565b612a5a826001600160a01b0316611f70565b612a765760405162461bcd60e51b8152600401610554906140bb565b606780546001600160a01b0319166001600160a01b0384161790558015612aa3576000805461ff00191690555b5050565b600082821115612afe576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b60006108526001600160a01b03831680600160601b61250f565b600061085282670de0b6b3a7640000600160601b61250f565b600061085282600160601b670de0b6b3a764000061250f565b6001600160a01b0382166000908152609f602090815260408083205460a390925282205460029190910b9062ffffff168284612b9157600182840303612b98565b8183016001015b90506117768161308d565b606754815160405163033e16f360e21b815260009283926001600160a01b0390911691630cf85bcc91612bd891600401613e92565b60806040518083038186803b158015612bf057600080fd5b505afa158015612c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c289190613bfa565b90506000816020015190506000826040015190506000612c578660200151876040015188606001518686612da2565b609b5460408051610100810182528a516001600160a01b0390811682526020808d01511515818401526000838501819052606084018790526080808f015184169085015262ffffff808c1660a08601528a1660c08501528451808601865281815291820181905260e08401919091529251631477e1bf60e31b815294965091945091169163a3bf0df891612ced916004016142f5565b606060405180830381600087803b158015612d0757600080fd5b505af1158015612d1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3f9190613c77565b51979650505050505050565b6000808212156124a6576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b600080612db287878787876134c2565b915086612dc757612dc285612462565b612dd0565b612dd082612462565b905085612de05780600003612de2565b805b90509550959350505050565b612df66136cf565b6000826080015111612e1a5760405162461bcd60e51b815260040161055490614249565b60008260600151612e3a57612e328360800151612462565b600003612e47565b612e478360800151612462565b905060008084600001516001600160a01b031663128acb0886602001518760400151868960a001516001600160a01b0316600014612e89578960a00151612eb3565b8960400151612eac5773fffd8963efd1fc6a506488495d951d5263988d25612eb3565b6401000276a45b8a60c001516040518663ffffffff1660e01b8152600401612ed8959493929190613f5e565b6040805180830381600087803b158015612ef157600080fd5b505af1158015612f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f299190613b33565b91509150600080612f3984611ff4565b612f4284611ff4565b915091506000876040015115158860600151151514612f615781612f63565b825b90508760600151158015612f82575060a08801516001600160a01b0316155b15612faa5787608001518114612faa5760405162461bcd60e51b815260040161055490614268565b5060408051808201909152918252602082015295945050505050565b600081612ff157612fec84612fe3620f424062ffffff8716612aa7565b620f424061250f565b61299a565b61299a84620f42406130088162ffffff8816612aa7565b61350b565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561304857600080fd5b505afa15801561305c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130809190613d85565b5094979650505050505050565b60008060008360020b126130a4578260020b6130ac565b8260020b6000035b9050620d89e88111156130ea576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b6000600182166130fe57600160801b613110565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b03169050600282161561313a576ffff97272373d413259a46990580e213a0260801c5b6004821615613159576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615613178576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615613197576fffcb9843d60f6159c9db58835c9266440260801c5b60208216156131b6576fff973b41fa98c081472e6896dfb254c00260801c5b60408216156131d5576fff2ea16466c96a3843ec78b326b528610260801c5b60808216156131f4576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615613214576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615613234576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615613254576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615613274576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615613294576fd097f3bdfd2022b8845ad8f792aa58250260801c5b6120008216156132b4576fa9f746462d870fdf8a65dc1f90e061e50260801c5b6140008216156132d4576f70d869a156d2a1b890bb3df62baf32f70260801c5b6180008216156132f4576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615613315576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615613335576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615613354576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615613371576b048a170391f7dc42444e8fa20260801c5b60008460020b131561338c57806000198161338857fe5b0490505b600160201b81061561339f5760016133a2565b60005b60ff16602082901c0192505050919050565b600061299a600160601b610d8d6133cb86866124aa565b87906125be565b600054610100900460ff16806133eb57506133eb6129a2565b806133f9575060005460ff16155b6134345760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff1615801561345f576000805460ff1961ff0019909116610100171660011790555b613467613545565b6000613471611ec2565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020614526833981519152908290a35080156134bf576000805461ff00191690555b50565b600085156134f357846134e0576134db84846001612fc6565b6134ec565b6134ec84836001612fc6565b9050611f63565b846134fe5783611776565b61177684838560016135ee565b600061351884848461250f565b90506000828061352457fe5b848609111561138457600019811061353b57600080fd5b6001019392505050565b600054610100900460ff168061355e575061355e6129a2565b8061356c575060005460ff16155b6135a75760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff161580156135d2576000805460ff1961ff0019909116610100171660011790555b6135da61362f565b80156134bf576000805461ff001916905550565b6000806000836135ff578585613602565b84865b90925090506124578761361d620f424062ffffff8616612aa7565b613008620f424062ffffff8616612aa7565b600054610100900460ff168061364857506136486129a2565b80613656575060005460ff16155b6136915760405162461bcd60e51b815260040180806020018281038252602e8152602001806144d7602e913960400191505060405180910390fd5b600054610100900460ff161580156135da576000805460ff1961ff00199091166101001716600117905580156134bf576000805461ff001916905550565b604051806040016040528060008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600060020b81525090565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600060020b81525090565b80356108778161446f565b600082601f830112613776578081fd5b8151602061378b61378683614452565b61442f565b82815281810190858301838502870184018810156137a7578586fd5b855b858110156137ce5781516137bc8161446f565b845292840192908401906001016137a9565b5090979650505050505050565b803561087781614484565b60008083601f8401126137f7578182fd5b5081356001600160401b0381111561380d578182fd5b60208301915083602082850101111561382557600080fd5b9250929050565b8051600281900b811461087757600080fd5b60006040828403121561384f578081fd5b604080519081016001600160401b038111828210171561386b57fe5b604052823581526020928301359281019290925250919050565b805161ffff8116811461087757600080fd5b6000602082840312156138a8578081fd5b81356113848161446f565b6000602082840312156138c4578081fd5b81516113848161446f565b600080604083850312156138e1578081fd5b82356138ec8161446f565b915060208301356138fc8161446f565b809150509250929050565b6000806000806080858703121561391c578182fd5b84356139278161446f565b935060208501356139378161446f565b925060408501356139478161446f565b915060608501356139578161446f565b939692955090935050565b60008060408385031215613974578182fd5b823561397f8161446f565b915060208301356138fc81614492565b600080604083850312156139a1578182fd5b82356139ac8161446f565b915060208301356138fc816144a3565b600060208083850312156139ce578182fd5b82516001600160401b038111156139e3578283fd5b8301601f810185136139f3578283fd5b8051613a0161378682614452565b8181528381019083850185840285018601891015613a1d578687fd5b8694505b83851015613a48578051613a348161446f565b835260019490940193918501918501613a21565b50979650505050505050565b60008060408385031215613a66578182fd5b82516001600160401b0380821115613a7c578384fd5b818501915085601f830112613a8f578384fd5b81516020613a9f61378683614452565b82815281810190858301838502870184018b1015613abb578889fd5b8896505b84871015613aeb5780518060060b8114613ad757898afd5b835260019690960195918301918301613abf565b5091880151919650909350505080821115613b04578283fd5b50613b1185828601613766565b9150509250929050565b600060208284031215613b2c578081fd5b5051919050565b60008060408385031215613b45578182fd5b505080516020909101519092909150565b60008060008060608587031215613b6b578182fd5b843593506020850135925060408501356001600160401b03811115613b8e578283fd5b613b9a878288016137e6565b95989497509550505050565b600060608284031215613bb7578081fd5b604051606081016001600160401b0381118282101715613bd357fe5b80604052508251815260208301516020820152604083015160408201528091505092915050565b600060808284031215613c0b578081fd5b604051608081016001600160401b0381118282101715613c2757fe5b6040528251613c358161446f565b81526020830151613c4581614492565b60208201526040830151613c5881614492565b60408201526060830151613c6b81614492565b60608201529392505050565b600060608284031215613c88578081fd5b604051606081016001600160401b0381118282101715613ca457fe5b604052613cb08361382c565b815260208301516020820152604083015160408201528091505092915050565b60006101208284031215613ce2578081fd5b60405161010081016001600160401b0381118282101715613cff57fe5b604052613d0b8361375b565b8152613d196020840161375b565b6020820152613d2a604084016137db565b6040820152613d3b606084016137db565b6060820152613d4c608084016137db565b608082015260a083013560a0820152613d6760c0840161375b565b60c0820152613d798460e0850161383e565b60e08201529392505050565b600080600080600080600060e0888a031215613d9f578485fd5b8751613daa8161446f565b9650613db86020890161382c565b9550613dc660408901613885565b9450613dd460608901613885565b9350613de260808901613885565b925060a088015160ff81168114613df7578283fd5b60c0890151909250613e0881614484565b8091505092959891949750929550565b600060208284031215613e29578081fd5b815161138481614492565b600060208284031215613e45578081fd5b8151611384816144a3565b60008284528282602086013780602084860101526020601f19601f85011685010190509392505050565b80518252602090810151910152565b62ffffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03958616815293909416602084015260408301919091526060820152608081019190915260a00190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b038481168252831660208201526080810161299a6040830184613e7a565b600060018060a01b038088168352602087151581850152866040850152818616606085015260a06080850152845191508160a0850152825b82811015613fb25785810182015185820160c001528101613f96565b82811115613fc3578360c084870101525b5050601f01601f19169190910160c0019695505050505050565b6001600160a01b03929092168252602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561403457835163ffffffff1683529284019291840191600101614012565b50909695505050505050565b60029190910b815260200190565b90815260200190565b600085825284602083015260606040830152611776606083018486613e50565b948552602085019390935260408401919091526060830152608082015260a00190565b60208082526007908201526645585f42544e4560c81b604082015260600190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526008908201526745585f414f504c4f60c01b604082015260600190565b6020808252600590820152640455f4142360dc1b604082015260600190565b602080825260069082015265455f4f424e4360d01b604082015260600190565b60208082526008908201526745585f4f5049415360c01b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b6020808252600a908201526922ac2fa6aa21a627a7a960b11b604082015260600190565b60208082526006908201526545585f414e4360d01b604082015260600190565b602080825260069082015265455f43484e4360d01b604082015260600190565b60208082526006908201526522ac2fa321ab60d11b604082015260600190565b60208082526008908201526745585f4f5049425360c01b604082015260600190565b60208082526005908201526455425f5a4960d81b604082015260600190565b60208082526006908201526555425f554f4160d01b604082015260600190565b602080825260079082015266455f4946414e4360c81b604082015260600190565b60208082526005908201526422afa727a160d91b604082015260600190565b604081016108528284613e7a565b608081016142e48286613e7a565b604082019390935260600152919050565b60006101208201905060018060a01b03808451168352602084015115156020840152604084015115156040840152606084015160608401528060808501511660808401525060a083015161434c60a0840182613e89565b5060c083015161435f60c0840182613e89565b5060e083015161437260e0840182613e7a565b5092915050565b81516001600160a01b0390811682526020808401518216908301526040808401519091169082015260608083015162ffffff16908201526080918201519181019190915260a00190565b600060a08201905082518252602083015160208301526040830151604083015260608301516060830152608083015160020b608083015292915050565b62ffffff91909116815260200190565b918252602082015260400190565b63ffffffff91909116815260200190565b6040518181016001600160401b038111828210171561444a57fe5b604052919050565b60006001600160401b0382111561446557fe5b5060209081020190565b6001600160a01b03811681146134bf57600080fd5b80151581146134bf57600080fd5b62ffffff811681146134bf57600080fd5b63ffffffff811681146134bf57600080fdfe5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a26469706673582212209136ee2af7268b353383abbb544bf5d36d579840d84fa6bd01e2fd2b8b54b97b64736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2InsuranceFund.json b/external/abi/perp/PerpV2InsuranceFund.json index 0a95cebc6..6d4f7b0cf 100644 --- a/external/abi/perp/PerpV2InsuranceFund.json +++ b/external/abi/perp/PerpV2InsuranceFund.json @@ -217,4 +217,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100af5760003560e01c806313af4035146100b45780633f4ba83a146100dc5780635c975abb146100e45780636c8381f814610100578063715018a6146101245780637df1f1b91461012c5780638456cb59146101345780638da5cb5b1461013c578063bc5920ba14610144578063c4d66de81461014c578063c5ebeaec14610172578063c762d5f71461018f578063fc0c546a146101b5575b600080fd5b6100da600480360360208110156100ca57600080fd5b50356001600160a01b03166101bd565b005b6100da610318565b6100ec61037f565b604080519115158252519081900360200190f35b610108610388565b604080516001600160a01b039092168252519081900360200190f35b6100da610397565b610108610438565b6100da610447565b6101086104ac565b6100da6104bb565b6100da6004803603602081101561016257600080fd5b50356001600160a01b03166105a7565b6100da6004803603602081101561018857600080fd5b50356106c2565b6100da600480360360208110156101a557600080fd5b50356001600160a01b03166108e0565b6101086109ab565b6101c56109ba565b6001600160a01b03166101d66104ac565b6001600160a01b03161461021a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661025e576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b03828116911614156102aa576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b03828116911614156102f6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6103206109ba565b6001600160a01b03166103316104ac565b6001600160a01b031614610375576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61037d6109c9565b565b60995460ff1690565b6066546001600160a01b031690565b61039f6109ba565b6001600160a01b03166103b06104ac565b6001600160a01b0316146103f4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316906000805160206111dd833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b60fe546001600160a01b031681565b61044f6109ba565b6001600160a01b03166104606104ac565b6001600160a01b0316146104a4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61037d610a69565b6065546001600160a01b031690565b6066546001600160a01b0316610500576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6105086109ba565b6066546001600160a01b03908116911614610553576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116906000805160206111dd83398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b600054610100900460ff16806105c057506105c0610aec565b806105ce575060005460ff16155b6106095760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610634576000805460ff1961ff0019909116610100171660011790555b610646826001600160a01b0316610afd565b610681576040805162461bcd60e51b815260206004820152600760248201526649465f53544e4360c81b604482015290519081900360640190fd5b610689610b03565b610691610bad565b60fd80546001600160a01b0319166001600160a01b03841617905580156106be576000805461ff00191690555b5050565b6002600154141561071a576040805162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015290519081900360640190fd5b600260015561072761037f565b1561076c576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60fe546001600160a01b03166107806109ba565b6001600160a01b0316146107c3576040805162461bcd60e51b815260206004820152600560248201526424a32fa7a160d91b604482015290519081900360640190fd5b60fd54604080516370a0823160e01b8152306004820152905183926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561080d57600080fd5b505afa158015610821573d6000803e3d6000fd5b505050506040513d602081101561083757600080fd5b50511015610875576040805162461bcd60e51b815260206004820152600660248201526524a32fa722a160d11b604482015290519081900360640190fd5b60fd5460fe54610892916001600160a01b03908116911683610c4a565b60fe54604080516001600160a01b0390921682526020820183905280517fac59582e5396aca512fa873a2047e7f4c80f8f55d4a06cb34a78a0187f62719f9281900390910190a15060018055565b6108e86109ba565b6001600160a01b03166108f96104ac565b6001600160a01b03161461093d576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b61094f816001600160a01b0316610afd565b610989576040805162461bcd60e51b815260206004820152600660248201526549465f424e4360d01b604482015290519081900360640190fd5b60fe80546001600160a01b0319166001600160a01b0392909216919091179055565b60fd546001600160a01b031681565b60006109c4610d9d565b905090565b6109d161037f565b610a19576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa610a4c6109ba565b604080516001600160a01b039092168252519081900360200190a1565b610a7161037f565b15610ab6576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610a4c6109ba565b6000610af730610afd565b15905090565b3b151590565b600054610100900460ff1680610b1c5750610b1c610aec565b80610b2a575060005460ff16155b610b655760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610b90576000805460ff1961ff0019909116610100171660011790555b610b98610da1565b8015610baa576000805461ff00191690555b50565b600054610100900460ff1680610bc65750610bc6610aec565b80610bd4575060005460ff16155b610c0f5760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610c3a576000805460ff1961ff0019909116610100171660011790555b610c42610e46565b610b98610f35565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310610cc65780518252601f199092019160209182019101610ca7565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114610d28576040519150601f19603f3d011682016040523d82523d6000602084013e610d2d565b606091505b5091509150818015610d5b575080511580610d5b5750808060200190516020811015610d5857600080fd5b50515b610d965760405162461bcd60e51b815260040180806020018281038252602d8152602001806111fd602d913960400191505060405180910390fd5b5050505050565b3390565b600054610100900460ff1680610dba5750610dba610aec565b80610dc8575060005460ff16155b610e035760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610e2e576000805460ff1961ff0019909116610100171660011790555b600180558015610baa576000805461ff001916905550565b600054610100900460ff1680610e5f5750610e5f610aec565b80610e6d575060005460ff16155b610ea85760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610ed3576000805460ff1961ff0019909116610100171660011790555b610edb610fd2565b6000610ee56109ba565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206111dd833981519152908290a3508015610baa576000805461ff001916905550565b600054610100900460ff1680610f4e5750610f4e610aec565b80610f5c575060005460ff16155b610f975760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610fc2576000805460ff1961ff0019909116610100171660011790555b610fca611063565b610b98611103565b600054610100900460ff1680610feb5750610feb610aec565b80610ff9575060005460ff16155b6110345760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff1615801561105f576000805460ff1961ff0019909116610100171660011790555b610b985b600054610100900460ff168061107c575061107c610aec565b8061108a575060005460ff16155b6110c55760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015610b98576000805460ff1961ff0019909116610100171660011790558015610baa576000805461ff001916905550565b600054610100900460ff168061111c575061111c610aec565b8061112a575060005460ff16155b6111655760405162461bcd60e51b815260040180806020018281038252602e8152602001806111af602e913960400191505060405180910390fd5b600054610100900460ff16158015611190576000805460ff1961ff0019909116610100171660011790555b6099805460ff191690558015610baa576000805461ff00191690555056fe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c6564a264697066735822122042aefe70254a50665ecf86f66dd88b8b7aeb2c6b48d0ea87b5df01fb4217c5da64736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2MarketRegistry.json b/external/abi/perp/PerpV2MarketRegistry.json index d3e5cf7b4..dccbf41f0 100644 --- a/external/abi/perp/PerpV2MarketRegistry.json +++ b/external/abi/perp/PerpV2MarketRegistry.json @@ -417,4 +417,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100f15760003560e01c806308ff49ad146100f65780630af968001461011f5780630cf85bcc1461013457806313af403514610154578063217a4b70146101695780633feb421214610171578063449323d814610184578063485cc955146101975780635b549182146101aa5780636c8381f8146101b2578063715018a6146101ba578063831f72b4146101c25780638da5cb5b146101d5578063baa0ea78146101dd578063bb235d11146101f2578063bbe4f6db14610205578063bc5920ba14610218578063c7bf443414610220578063edd0b5cb14610233575b600080fd5b61010961010436600461159e565b610246565b60405161011691906119ef565b60405180910390f35b61012761026a565b6040516101169190611745565b61014761014236600461159e565b610279565b60405161011691906119ae565b61016761016236600461159e565b6102e9565b005b610127610444565b61016761017f366004611615565b610453565b61016761019236600461159e565b610582565b6101676101a53660046115dd565b610657565b61012761078f565b61012761079e565b6101676107ad565b6101676101d036600461170d565b61084e565b6101276108fe565b6101e561090d565b60405161011691906119ff565b610167610200366004611615565b61091d565b61012761021336600461159e565b610a37565b610167610a55565b61012761022e366004611615565b610b41565b61010961024136600461159e565b61114b565b6001600160a01b0381166000908152606b602052604090205462ffffff165b919050565b6069546001600160a01b031681565b610281611535565b50604080516080810182526001600160a01b039283166000818152606a6020908152848220549095168352818152606c85528381205462ffffff90811686850152828252606d865284822054811684860152918152606b909452919092205416606082015290565b6102f161116b565b6001600160a01b03166103026108fe565b6001600160a01b031614610346576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661038a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156103d6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610422576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6068546001600160a01b031681565b6001600160a01b038083166000908152606a60205260409020548391166104955760405162461bcd60e51b815260040161048c9061194d565b60405180910390fd5b81620f42408162ffffff1611156104be5760405162461bcd60e51b815260040161048c90611866565b6104c661116b565b6001600160a01b03166104d76108fe565b6001600160a01b03161461051b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152606b602052604090819020805462ffffff191662ffffff8616179055517f0b4bf524b123dd9f9252f2f17e6f842313eb705045a2259faccd2530bae3ff5c906105749085906119ef565b60405180910390a150505050565b61058a61116b565b6001600160a01b031661059b6108fe565b6001600160a01b0316146105df576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6105f1816001600160a01b031661116f565b61060d5760405162461bcd60e51b815260040161048c90611845565b606980546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b600054610100900460ff16806106705750610670611175565b8061067e575060005460ff16155b6106b95760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff161580156106e4576000805460ff1961ff0019909116610100171660011790555b6106ec611186565b6106fe836001600160a01b031661116f565b61071a5760405162461bcd60e51b815260040161048c90611824565b61072c826001600160a01b031661116f565b6107485760405162461bcd60e51b815260040161048c90611803565b606780546001600160a01b038086166001600160a01b0319928316179092556068805492851692909116919091179055801561078a576000805461ff00191690555b505050565b6067546001600160a01b031681565b6034546001600160a01b031690565b6107b561116b565b6001600160a01b03166107c66108fe565b6001600160a01b03161461080a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611a60833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b61085661116b565b6001600160a01b03166108676108fe565b6001600160a01b0316146108ab576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6069805460ff60a01b1916600160a01b60ff8416021790556040517ff3d121ca0d4fa5acf57cf8a09acedf5326b6ca02f25764d2a05a4dba8e4a777e906108f39083906119ff565b60405180910390a150565b6033546001600160a01b031690565b606954600160a01b900460ff1681565b6001600160a01b038083166000908152606a60205260409020548391166109565760405162461bcd60e51b815260040161048c9061194d565b81620f42408162ffffff16111561097f5760405162461bcd60e51b815260040161048c90611866565b61098761116b565b6001600160a01b03166109986108fe565b6001600160a01b0316146109dc576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152606c602052604090819020805462ffffff191662ffffff8616179055517f8129297a1a8d252870739804c1d9cdbc86121230ce172c23ec11a940ccab01ef906105749086908690611781565b6001600160a01b039081166000908152606a60205260409020541690565b6034546001600160a01b0316610a9a576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610aa261116b565b6034546001600160a01b03908116911614610aed576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020611a6083398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6000610b4b61116b565b6001600160a01b0316610b5c6108fe565b6001600160a01b031614610ba0576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610bd957600080fd5b505afa158015610bed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c119190611729565b60ff16601214610c335760405162461bcd60e51b815260040161048c9061196d565b6069546040516370a0823160e01b8152600019916001600160a01b03808716926370a0823192610c67921690600401611745565b60206040518083038186803b158015610c7f57600080fd5b505afa158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906116f5565b14610cd45760405162461bcd60e51b815260040161048c906117e1565b606854604080516318160ddd60e01b81529051600019926001600160a01b0316916318160ddd916004808301926020929190829003018186803b158015610d1a57600080fd5b505afa158015610d2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5291906116f5565b14610d6f5760405162461bcd60e51b815260040161048c90611908565b6068546001600160a01b0390811690841610610d9d5760405162461bcd60e51b815260040161048c9061198f565b606754606854600091610dbe916001600160a01b0391821691168686611276565b90506001600160a01b038116610de65760405162461bcd60e51b815260040161048c906117c1565b6001600160a01b038481166000908152606a60205260409020541615610e1e5760405162461bcd60e51b815260040161048c906118a5565b610e2781611316565b6001600160a01b0316610e4c5760405162461bcd60e51b815260040161048c90611885565b6069546040516304fec10960e11b81526001600160a01b03868116926309fd821292610e7e9290911690600401611745565b60206040518083038186803b158015610e9657600080fd5b505afa158015610eaa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ece9190611649565b610eea5760405162461bcd60e51b815260040161048c906118e6565b6040516304fec10960e11b81526001600160a01b038516906309fd821290610f16908490600401611745565b60206040518083038186803b158015610f2e57600080fd5b505afa158015610f42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f669190611649565b610f825760405162461bcd60e51b815260040161048c906118c4565b6068546069546040516304fec10960e11b81526001600160a01b03928316926309fd821292610fb692911690600401611745565b60206040518083038186803b158015610fce57600080fd5b505afa158015610fe2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110069190611649565b6110225760405162461bcd60e51b815260040161048c9061192a565b6068546040516304fec10960e11b81526001600160a01b03909116906309fd821290611052908490600401611745565b60206040518083038186803b15801561106a57600080fd5b505afa15801561107e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a29190611649565b6110be5760405162461bcd60e51b815260040161048c9061179f565b6001600160a01b038085166000818152606a6020908152604080832080549587166001600160a01b031990961686179055606d8252808320805462ffffff8a1662ffffff199182168117909255606c90935281842080549093168117909255519092917f8b17db32f8ec22477a8f9475d5b92052ef2ce8c6c73ad79be1eb297a8fdd2ff191a49392505050565b6001600160a01b03166000908152606c602052604090205462ffffff1690565b3390565b3b151590565b60006111803061116f565b15905090565b600054610100900460ff168061119f575061119f611175565b806111ad575060005460ff16155b6111e85760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff16158015611213576000805460ff1961ff0019909116610100171660011790555b61121b611396565b600061122561116b565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611a60833981519152908290a3508015611273576000805461ff00191690555b50565b60008061128485858561143f565b80516020820151604051630b4c774160e11b81529293506001600160a01b03891692631698ee82926112bc9290918890600401611759565b60206040518083038186803b1580156112d457600080fd5b505afa1580156112e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130c91906115c1565b9695505050505050565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561135157600080fd5b505afa158015611365573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113899190611663565b5094979650505050505050565b600054610100900460ff16806113af57506113af611175565b806113bd575060005460ff16155b6113f85760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff16158015611423576000805460ff1961ff0019909116610100171660011790555b61142b611495565b8015611273576000805461ff001916905550565b61144761155c565b826001600160a01b0316846001600160a01b03161115611465579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600054610100900460ff16806114ae57506114ae611175565b806114bc575060005460ff16155b6114f75760405162461bcd60e51b815260040180806020018281038252602e815260200180611a32602e913960400191505060405180910390fd5b600054610100900460ff1615801561142b576000805460ff1961ff0019909116610100171660011790558015611273576000805461ff001916905550565b60408051608081018252600080825260208201819052918101829052606081019190915290565b604080516060810182526000808252602082018190529181019190915290565b8051801515811461026557600080fd5b805161ffff8116811461026557600080fd5b6000602082840312156115af578081fd5b81356115ba81611a0d565b9392505050565b6000602082840312156115d2578081fd5b81516115ba81611a0d565b600080604083850312156115ef578081fd5b82356115fa81611a0d565b9150602083013561160a81611a0d565b809150509250929050565b60008060408385031215611627578182fd5b823561163281611a0d565b9150602083013562ffffff8116811461160a578182fd5b60006020828403121561165a578081fd5b6115ba8261157c565b600080600080600080600060e0888a03121561167d578283fd5b875161168881611a0d565b8097505060208801518060020b811461169f578384fd5b95506116ad6040890161158c565b94506116bb6060890161158c565b93506116c96080890161158c565b925060a08801516116d981611a22565b91506116e760c0890161157c565b905092959891949750929550565b600060208284031215611706578081fd5b5051919050565b60006020828403121561171e578081fd5b81356115ba81611a22565b60006020828403121561173a578081fd5b81516115ba81611a22565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b0392909216825262ffffff16602082015260400190565b602080825260089082015267135497d4139455d360c21b604082015260600190565b60208082526006908201526504d525f4e45560d41b604082015260600190565b6020808252600890820152674d525f4348424e4560c01b604082015260600190565b6020808252600790820152664d525f51544e4360c81b604082015260600190565b6020808252600790820152664d525f55464e4360c81b604082015260600190565b6020808252600790820152664d525f43484e4360c81b604082015260600190565b6020808252600590820152644d525f524f60d81b604082015260600190565b6020808252600690820152654d525f504e4960d01b604082015260600190565b60208082526005908201526404d525f45560dc1b604082015260600190565b602080825260089082015267135497d4139095d360c21b604082015260600190565b602080825260089082015267135497d0d39095d360c21b604082015260600190565b6020808252600890820152674d525f5154534e4560c01b604082015260600190565b602080825260099082015268135497d0d2139455d360ba1b604082015260600190565b6020808252600690820152654d525f504e4560d01b604082015260600190565b60208082526008908201526709aa4be84889c62760c31b604082015260600190565b60208082526005908201526426a92fa4a160d91b604082015260600190565b81516001600160a01b0316815260208083015162ffffff90811691830191909152604080840151821690830152606092830151169181019190915260800190565b62ffffff91909116815260200190565b60ff91909116815260200190565b6001600160a01b038116811461127357600080fd5b60ff8116811461127357600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0a26469706673582212206d60035a869a9ef04a17aa3e8896313cfc220b39c50b3389cde031a0eee1050a64736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2OrderBook.json b/external/abi/perp/PerpV2OrderBook.json index fccd7ea76..7643d4b1a 100644 --- a/external/abi/perp/PerpV2OrderBook.json +++ b/external/abi/perp/PerpV2OrderBook.json @@ -925,4 +925,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101495760003560e01c80630af968001461014e57806313af40351461016c578063217a4b7014610181578063398dbcfd14610189578063436933ea146101a9578063449323d8146101c957806347b52fb7146101dc578063485cc955146101fc5780634dffaee51461020f57806359bfbc5a1461022f5780635b778b9d1461024257806367b1f5df146102555780636c8381f814610268578063715018a6146102705780637fc2673614610278578063865bcccc1461028b5780638da5cb5b1461029e578063a3bf0df8146102a6578063acf71827146102c6578063bc5920ba146102e6578063bf0b1abb146102ee578063d2f7265a14610301578063d348799714610309578063e8ab2fb31461031c578063eaad23541461033c578063ecb96fe61461034f578063ffa6132714610357575b600080fd5b61015661036a565b60405161016391906156ee565b60405180910390f35b61017f61017a366004615037565b610379565b005b6101566104d4565b61019c6101973660046150a7565b6104e3565b6040516101639190615ac9565b6101bc6101b736600461506f565b6106dc565b60405161016391906157c5565b61017f6101d7366004615037565b610756565b6101ef6101ea3660046151ae565b61082b565b6040516101639190615889565b61017f61020a36600461506f565b610a2a565b61022261021d3660046151f5565b610b18565b6040516101639190615809565b6101ef61023d366004615037565b610b9b565b61019c610250366004615347565b610bba565b61017f610263366004615037565b610c13565b610156610cb8565b61017f610cc7565b6101ef6102863660046151ae565b610d68565b6101ef6102993660046151f5565b610f79565b610156610fdb565b6102b96102b43660046153e8565b610fea565b6040516101639190615aea565b6102d96102d4366004615247565b6115bb565b6040516101639190615a6d565b61017f611640565b6101ef6102fc366004615109565b61172c565b610156611739565b61017f61031736600461565a565b611748565b61032f61032a366004615297565b6118e8565b6040516101639190615a16565b6102d961034a366004615153565b611d87565b610156611e24565b6101ef610365366004615153565b611e33565b6068546001600160a01b031681565b610381611ed6565b6001600160a01b0316610392610fdb565b6001600160a01b0316146103d6576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661041a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b0382811691161415610466576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b03828116911614156104b2576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b609c546001600160a01b031681565b6104eb614df0565b6068546001600160a01b03166104ff611ed6565b6001600160a01b03161461052e5760405162461bcd60e51b8152600401610525906158d4565b60405180910390fd5b60008080805b858110156106b757600087878381811061054a57fe5b9050602002013590506000609e60008381526020019081526020016000206040518060e00160405290816000820160009054906101000a90046001600160801b03166001600160801b03166001600160801b031681526020016000820160109054906101000a900460020b60020b60020b81526020016000820160139054906101000a900460020b60020b60020b8152602001600182015481526020016002820154815260200160038201548152602001600482015481525050905060006106646040518060a001604052808e6001600160a01b031681526020018d6001600160a01b03168152602001846020015160020b8152602001846040015160020b815260200184600001516001600160801b0316815250611eda565b805190915061067490889061220c565b965061068d81602001518761220c90919063ffffffff16565b95506106a681604001518661220c90919063ffffffff16565b945050600190920191506105349050565b506040805160608101825293845260208401929092529082015290505b949350505050565b6001600160a01b038083166000908152609d6020908152604080832093851683529281529082902080548351818402810184019094528084526060939283018282801561074857602002820191906000526020600020905b815481526020019060010190808311610734575b505050505090505b92915050565b61075e611ed6565b6001600160a01b031661076f610fdb565b6001600160a01b0316146107b3576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6107c5816001600160a01b0316612264565b6107e15760405162461bcd60e51b815260040161052590615995565b606880546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b6001600160a01b038084166000908152609d602090815260408083209386168352928152828220805484518184028101840190955280855292938493909283018282801561089857602002820191906000526020600020905b815481526020019060010190808311610884575b5050506001600160a01b038088166000908152609f6020526040808220606754915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db906108e49089906004016156ee565b60206040518083038186803b1580156108fc57600080fd5b505afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190615053565b905060005b8351811015610a1e576000609e600086848151811061095457fe5b60209081029190910181015182528181019290925260409081016000908120825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b968301879052600160981b909104810b810b810b948201859052600183015460608301528201546080820152600382015460a082015260049091015460c08201529350916109fc916109ea8761226a565b8b5160208d01518a94939291906122ea565b9050610a12610a0b83836123da565b88906124c4565b96505050600101610939565b505050505b9392505050565b600054610100900460ff1680610a435750610a43612529565b80610a51575060005460ff16155b610a8c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015610ab7576000805460ff1961ff0019909116610100171660011790555b610ac08361253a565b6001600160a01b038216610ae65760405162461bcd60e51b815260040161052590615955565b609c80546001600160a01b0319166001600160a01b0384161790558015610b13576000805461ff00191690555b505050565b6000805b82811015610b90576001600160a01b0385166000908152609d6020526040812081868685818110610b4957fe5b9050602002016020810190610b5e9190615037565b6001600160a01b031681526020810191909152604001600020541115610b88576001915050610a23565b600101610b1c565b506000949350505050565b6001600160a01b038116600090815260a060205260409020545b919050565b610bc2614df0565b6068546001600160a01b0316610bd6611ed6565b6001600160a01b031614610bfc5760405162461bcd60e51b8152600401610525906158d4565b610750610c0e36849003840184615358565b611eda565b610c1b611ed6565b6001600160a01b0316610c2c610fdb565b6001600160a01b031614610c70576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610c965760405162461bcd60e51b815260040161052590615915565b609b80546001600160a01b0319166001600160a01b0392909216919091179055565b6034546001600160a01b031690565b610ccf611ed6565b6001600160a01b0316610ce0610fdb565b6001600160a01b031614610d24576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020615c3b833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6001600160a01b038084166000908152609d6020908152604080832093861683529281528282208054845181840281018401909552808552929384939092830182828015610dd557602002820191906000526020600020905b815481526020019060010190808311610dc1575b5050506001600160a01b038088166000908152609f6020526040808220606754915163bbe4f6db60e01b815296975095919450909116915063bbe4f6db90610e219089906004016156ee565b60206040518083038186803b158015610e3957600080fd5b505afa158015610e4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e719190615053565b905060005b8351811015610a1e576000609e6000868481518110610e9157fe5b602090810291909101810151825281019190915260400160009081208054909250610ed590600160801b8104600290810b91600160981b9004900b6109ea8761226a565b6040805160e08101825284546001600160801b0381168252600160801b8104600290810b810b810b6020840152600160981b909104810b810b810b9282019290925260018501546060820152908401546080820152600384015460a0820152600484015460c0820152909150610f4f90610a0b90836123da565b81516002840155602082015160038401556040909101516004909201919091559450600101610e76565b60008060005b83811015610fd2576000858583818110610f9557fe5b9050602002016020810190610faa9190615037565b90506000610fba8883600061262e565b9050610fc6848261220c565b93505050600101610f7f565b50949350505050565b6033546001600160a01b031690565b610ff2614e11565b609b546001600160a01b0316611006611ed6565b6001600160a01b03161461102c5760405162461bcd60e51b815260040161052590615975565b606754825160405163bbe4f6db60e01b81526000926001600160a01b03169163bbe4f6db9161105e91906004016156ee565b60206040518083038186803b15801561107657600080fd5b505afa15801561108a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ae9190615053565b6060840151606754855160405163033e16f360e21b81529394506000928312936001600160a01b0390921691630cf85bcc916110ec916004016156ee565b60806040518083038186803b15801561110457600080fd5b505afa158015611118573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113c91906152ca565b606001519050600080600061117f86896060015160a060008c600001516001600160a01b03166001600160a01b03168152602001908152602001600020546128e6565b905087608001516001600160a01b03166000146111a05787608001516111ca565b87602001516111c35773fffd8963efd1fc6a506488495d951d5263988d256111ca565b6401000276a45b6001600160a01b031660808901525b604081015115801590611206575087608001516001600160a01b031681602001516001600160a01b031614155b1561156b57611213614e35565b60208201516001600160a01b03168152815161123e908890611234826129b8565b8c60200151612a2b565b15156040830152600290810b810b60208301819052620d89e719910b121561126f57620d89e719602082015261128e565b6020810151620d89e860029190910b131561128e57620d89e860208201525b61129b8160200151612b4d565b6001600160a01b03166060820152602080830151908a015161133891906112de578a608001516001600160a01b031683606001516001600160a01b0316116112fc565b8a608001516001600160a01b031683606001516001600160a01b0316105b61130a578260600151611310565b8a608001515b846080015185604001518d6020015161132d578d60a00151611333565b8d60c001515b612e74565b60c085015260a084015260808301526001600160a01b03166020830152851561137f5761136e8160c00151826080015101613066565b604083018051919091039052611398565b61138c8160a00151613066565b60408301805190910190525b60808201516001600160801b03161561143a578860200151156113d6576113d08160a001518a60a0015162ffffff16620f42406130ae565b60c08201525b60c0810151938401936000906113f59062ffffff8816620f42406130ae565b60c08301519481019490915060009061140e90836130e8565b905061142c81600160801b86608001516001600160801b0316613145565b606085018051909101905250505b80606001516001600160a01b031682602001516001600160a01b0316141561152d57806040015115611503578860400151156114c55788516001600160a01b03166000908152609f602090815260409182902083820151835160608082018652870151815260e08e0180515182860152519093015193830193909352916114c3918391906131f4565b505b60006114d5888360200151613233565b90508960200151156114e5576000035b6114f38360800151826132c2565b6001600160801b03166080840152505b886020015161151657806020015161151f565b60018160200151035b600290810b900b8252611565565b80600001516001600160a01b031682602001516001600160a01b0316146115655761155b8260200151613378565b600290810b900b82525b506111d9565b87604001511561159557606081015188516001600160a01b0316600090815260a060205260409020555b60408051606081018252915160020b825260208201939093529182015295945050505050565b6115c3614e71565b506000908152609e6020908152604091829020825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b94830194909452600160981b9004830b830b830b9381019390935260018101546060840152908101546080830152600381015460a08301526004015460c082015290565b6034546001600160a01b0316611685576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b61168d611ed6565b6034546001600160a01b039081169116146116d8576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b039283169290911690600080516020615c3b83398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b60006106d484848461262e565b609b546001600160a01b031681565b6000611752611ed6565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561178f57600080fd5b505afa1580156117a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c79190615053565b60675460405163bbe4f6db60e01b81529192506001600160a01b03169063bbe4f6db906117f89084906004016156ee565b60206040518083038186803b15801561181057600080fd5b505afa158015611824573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118489190615053565b6001600160a01b0316826001600160a01b0316146118785760405162461bcd60e51b8152600401610525906159b7565b60685460405163d348799760e01b81526001600160a01b039091169063d3487997906118ae908990899089908990600401615b0e565b600060405180830381600087803b1580156118c857600080fd5b505af11580156118dc573d6000803e3d6000fd5b50505050505050505050565b6118f0614ebd565b6068546001600160a01b0316611904611ed6565b6001600160a01b03161461192a5760405162461bcd60e51b8152600401610525906158d4565b6067546000906001600160a01b031663bbe4f6db61194e6040860160208701615037565b6040518263ffffffff1660e01b815260040161196a91906156ee565b60206040518083038186803b15801561198257600080fd5b505afa158015611996573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ba9190615053565b9050600060a0816119d16040870160208801615037565b6001600160a01b03166001600160a01b031681526020019081526020016000205490506000609f6000866020016020810190611a0d9190615037565b6001600160a01b03166001600160a01b031681526020019081526020016000209050611a37614eee565b6000611a5285611a4d60a08a0160808b0161525f565b613663565b90506000611a6a86611a4d60c08b0160a08c0161525f565b9050611b306040518060c00160405280886001600160a01b031681526020018a6080016020810190611a9c919061525f565b60020b8152602001611ab460c08c0160a08d0161525f565b60020b81526020018a6040013581526020018a60600135815260200160405180604001604052808c6000016020810190611aee9190615037565b6001600160a01b031681526020018a6001600160a01b0316815250604051602001611b199190615a4a565b6040516020818303038152906040528152506136f1565b92506000611b3d8761226a565b905082158015611b5c5750611b5c87611a4d60a08c0160808d0161525f565b15611ba157611ba1611b7460a08b0160808c0161525f565b6040805160608101825289815260c08d0135602082015260e08d013591810191909152879190849061385b565b81158015611bbe5750611bbe87611a4d60c08c0160a08d0161525f565b15611bd657611bd6611b7460c08b0160a08c0161525f565b505060408051610100810190915260009150611c969080611bfa60208b018b615037565b6001600160a01b03168152602001896020016020810190611c1b9190615037565b6001600160a01b03908116825288166020820152604001611c4260a08b0160808c0161525f565b60020b8152602001611c5a60c08b0160a08c0161525f565b60020b815260200186815260200184604001516001600160801b031681526020018960c001803603810190611c8f91906152af565b9052613899565b609c549091506001600160a01b0316611cb56040890160208a01615037565b6001600160a01b0316611ccb60208a018a615037565b6001600160a01b0316600080516020615c82833981519152611cf360a08c0160808d0161525f565b611d0360c08d0160a08e0161525f565b8751611d0e90613066565b611d1b8960200151613066565b611d318a604001516001600160801b0316613b4d565b89604051611d4496959493929190615830565b60405180910390a46040805160808101825283518152602080850151908201528082019290925291909101516001600160801b0316606082015295945050505050565b611d8f614e71565b609e6000611d9f87878787613ba5565b81526020808201929092526040908101600020815160e08101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a082015260049091015460c082015295945050505050565b6067546001600160a01b031681565b600080611ecb85609e6000611e4a8a8a8a8a613ba5565b81526020808201929092526040908101600020815160e08101835281546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9281019290925260018101546060830152918201546080820152600382015460a082015260049091015460c0820152613c01565b509695505050505050565b3390565b611ee2614df0565b6000611f008360000151846020015185604001518660600151613ba5565b6000818152609e602052604090208054919250906001600160801b0316611f395760405162461bcd60e51b815260040161052590615935565b805460808501516001600160801b0391821691161115611f6b5760405162461bcd60e51b8152600401610525906158b4565b606754602085015160405163bbe4f6db60e01b81526000926001600160a01b03169163bbe4f6db91611fa091906004016156ee565b60206040518083038186803b158015611fb857600080fd5b505afa158015611fcc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff09190615053565b905060006120656040518060a00160405280846001600160a01b03168152602001609b60009054906101000a90046001600160a01b03166001600160a01b03168152602001886040015160020b8152602001886060015160020b815260200188608001516001600160801b0316815250613cfd565b905060006120dc6040518060c0016040528089600001516001600160a01b0316815260200189602001516001600160a01b03168152602001856001600160a01b03168152602001896040015160020b8152602001896060015160020b815260200189608001516001600160801b0316815250613e48565b90506120ec838860400151613663565b61211c576040808801516020808a01516001600160a01b03166000908152609f9091529190912061211c91613f61565b61212a838860600151613663565b6121595760608701516020808901516001600160a01b03166000908152609f9091526040902061215991613f61565b609c546020880151885160408a015160608b015186516001600160a01b03958616959485169490931692600080516020615c8283398151915292919061219e90613066565b6000036121ae8960200151613066565b6000036121c78f608001516001600160801b0316613b4d565b600003896040516121dd96959493929190615830565b60405180910390a460408051606081018252835181526020938401519381019390935282015295945050505050565b600082820183811015610a23576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b3b151590565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156122a557600080fd5b505afa1580156122b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122dd9190615591565b5093979650505050505050565b6122f2614df0565b600286810b80820b600090815260208a905260408082206001908101548a860b860b84529190922090910154909290919087900b121561233457818503612336565b815b60208401526000600288810b9088900b1261235357818603612355565b815b60028a810b80820b600090815260208e905260408082208401548d850b850b835290822084015494955093929091908b900b121561239557828803612397565b825b905060008b60020b8b60020b126123b0578289036123b2565b825b6020890151909a03949094038752909603969096036040850152509198975050505050505050565b6000806123ea8460400151612b4d565b905060006124076123fe8660200151612b4d565b86518490613f85565b905060006124386124298760a001518760200151613fee90919063ffffffff16565b61243284613066565b90614053565b905060006124a5612491612478866001600160a01b0316612472600160601b6124328d608001518d60000151613fee90919063ffffffff16565b906140fc565b60c08a015160408a015161248b91613fee565b90613fee565b8851612432906001600160801b0316613066565b90506124b9600160601b61247284846124c4565b979650505050505050565b60008282018183128015906124d95750838112155b806124ee57506000831280156124ee57508381125b610a235760405162461bcd60e51b8152600401808060200182810382526021815260200180615bcb6021913960400191505060405180910390fd5b600061253430612264565b15905090565b600054610100900460ff16806125535750612553612529565b80612561575060005460ff16155b61259c5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff161580156125c7576000805460ff1961ff0019909116610100171660011790555b6125cf6141b4565b6125e1826001600160a01b0316612264565b6125fd5760405162461bcd60e51b815260040161052590615892565b606780546001600160a01b0319166001600160a01b038416179055801561262a576000805461ff00191690555b5050565b6001600160a01b038084166000908152609d602090815260408083209386168352928152828220805484518184028101840190955280855292938493909283018282801561269b57602002820191906000526020600020905b815481526020019060010190808311612687575b505060675460405163bbe4f6db60e01b815294955060009461272f94506001600160a01b03909116925063bbe4f6db91506126da9089906004016156ee565b60206040518083038186803b1580156126f257600080fd5b505afa158015612706573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061272a9190615053565b6142a4565b905060005b82518110156128dc576000609e600085848151811061274f57fe5b60209081029190910181015182528181019290925260409081016000908120825160e08101845281546001600160801b0381168252600160801b8104600290810b810b810b968301879052600160981b909104810b810b810b9482019490945260018201546060820152928101546080840152600381015460a08401526004015460c08301529092509081906127e490612b4d565b905060006127f58460400151612b4d565b90508880156128155750806001600160a01b0316866001600160a01b0316105b1561284e57612847826001600160a01b0316876001600160a01b03161161283c578261283e565b865b85518390613f85565b92506128a1565b8815801561286d5750816001600160a01b0316866001600160a01b0316115b156128a15761289e82826001600160a01b0316886001600160a01b0316106128955782612897565b875b8651614324565b92505b506128ae9050868261220c565b9550866128d25760006128c18984613c01565b5090506128ce878261220c565b9650505b5050600101612734565b5050509392505050565b6128ee614f18565b600080856001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b15801561292a57600080fd5b505afa15801561293e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129629190615591565b5050505050915091506040518060a001604052808260020b8152602001836001600160a01b031681526020018681526020018581526020016129a388614367565b6001600160801b031690529695505050505050565b6000816001600160a01b031663d0c93a7c6040518163ffffffff1660e01b815260040160206040518083038186803b1580156129f357600080fd5b505afa158015612a07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610750919061527b565b60008060008460020b8660020b81612a3f57fe5b05905060008660020b128015612a6657508460020b8660020b81612a5f57fe5b0760020b15155b15612a7057600019015b8315612ad957600080612a82836143da565b9092509050600160ff82161b800160001901600081612aa18c866143ec565b168015159650905085612abb57888360ff16860302612ace565b88612ac58261446b565b840360ff168603025b965050505050612b43565b600080612ae8836001016143da565b9092509050600019600160ff83161b0119600081612b068c866143ec565b168015159650905085612b2657888360ff0360ff16866001010102612b3c565b8883612b3183614505565b0360ff168660010101025b9650505050505b5094509492505050565b60008060008360020b12612b64578260020b612b6c565b8260020b6000035b9050620d89e8811115612baa576040805162461bcd60e51b81526020600482015260016024820152601560fa1b604482015290519081900360640190fd5b600060018216612bbe57600160801b612bd0565b6ffffcb933bd6fad37aa2d162d1a5940015b6001600160881b031690506002821615612bfa576ffff97272373d413259a46990580e213a0260801c5b6004821615612c19576ffff2e50f5f656932ef12357cf3c7fdcc0260801c5b6008821615612c38576fffe5caca7e10e4e61c3624eaa0941cd00260801c5b6010821615612c57576fffcb9843d60f6159c9db58835c9266440260801c5b6020821615612c76576fff973b41fa98c081472e6896dfb254c00260801c5b6040821615612c95576fff2ea16466c96a3843ec78b326b528610260801c5b6080821615612cb4576ffe5dee046a99a2a811c461f1969c30530260801c5b610100821615612cd4576ffcbe86c7900a88aedcffc83b479aa3a40260801c5b610200821615612cf4576ff987a7253ac413176f2b074cf7815e540260801c5b610400821615612d14576ff3392b0822b70005940c7a398e4b70f30260801c5b610800821615612d34576fe7159475a2c29b7443b29c7fa6e889d90260801c5b611000821615612d54576fd097f3bdfd2022b8845ad8f792aa58250260801c5b612000821615612d74576fa9f746462d870fdf8a65dc1f90e061e50260801c5b614000821615612d94576f70d869a156d2a1b890bb3df62baf32f70260801c5b618000821615612db4576f31be135f97d08fd981231505542fcfa60260801c5b62010000821615612dd5576f09aa508b5b7a84e1c677de54f3e99bc90260801c5b62020000821615612df5576e5d6af8dedb81196699c329225ee6040260801c5b62040000821615612e14576d2216e584f5fa1ea926041bedfe980260801c5b62080000821615612e31576b048a170391f7dc42444e8fa20260801c5b60008460020b1315612e4c578060001981612e4857fe5b0490505b600160201b810615612e5f576001612e62565b60005b60ff16602082901c0192505050919050565b60008080806001600160a01b03808916908a161015818712801590612ef9576000612ead8989620f42400362ffffff16620f4240613145565b905082612ec657612ec18c8c8c60016145ee565b612ed3565b612ed38b8d8c6001614667565b9550858110612ee4578a9650612ef3565b612ef08c8b8386614707565b96505b50612f43565b81612f1057612f0b8b8b8b6000614667565b612f1d565b612f1d8a8c8b60006145ee565b9350838860000310612f3157899550612f43565b612f408b8a8a60000385614753565b95505b6001600160a01b038a8116908716148215612fa657808015612f625750815b612f7857612f73878d8c6001614667565b612f7a565b855b9550808015612f87575081155b612f9d57612f98878d8c60006145ee565b612f9f565b845b9450612ff0565b808015612fb05750815b612fc657612fc18c888c60016145ee565b612fc8565b855b9550808015612fd5575081155b612feb57612fe68c888c6000614667565b612fed565b845b94505b8115801561300057508860000385115b1561300c578860000394505b81801561302b57508a6001600160a01b0316876001600160a01b031614155b1561303a578589039350613057565b613054868962ffffff168a620f42400362ffffff166130ae565b93505b50505095509550955095915050565b6000600160ff1b82106130aa5760405162461bcd60e51b8152600401808060200182810382526028815260200180615ca26028913960400191505060405180910390fd5b5090565b60006130bb848484613145565b9050600082806130c757fe5b8486091115610a235760001981106130de57600080fd5b6001019392505050565b60008282111561313f576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b600080806000198587098686029250828110908390030390508061317b576000841161317057600080fd5b508290049050610a23565b80841161318757600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600291820b820b600090815260209384526040908190208054835103815560018101805495840151959095039094559290910180549190920151039055565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba9390613262908590600401615822565b6101006040518083038186803b15801561327b57600080fd5b505afa15801561328f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b391906154b9565b50949998505050505050505050565b60008082600f0b121561332757826001600160801b03168260000384039150816001600160801b031610613322576040805162461bcd60e51b81526020600482015260026024820152614c5360f01b604482015290519081900360640190fd5b610750565b826001600160801b03168284019150816001600160801b03161015610750576040805162461bcd60e51b81526020600482015260026024820152614c4160f01b604482015290519081900360640190fd5b60006401000276a36001600160a01b038316108015906133b4575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b038316105b6133e9576040805162461bcd60e51b81526020600482015260016024820152602960f91b604482015290519081900360640190fd5b600160201b600160c01b03602083901b166001600160801b03811160071b81811c6001600160401b03811160061b90811c63ffffffff811160051b90811c61ffff811160041b90811c60ff8111600390811b91821c600f811160021b90811c918211600190811b92831c9790881196179094179092171790911717176080811061347b57607f810383901c9150613485565b80607f0383901b91505b908002607f81811c60ff83811c9190911c800280831c81831c1c800280841c81841c1c800280851c81851c1c800280861c81861c1c800280871c81871c1c800280881c81881c1c800280891c81891c1c8002808a1c818a1c1c8002808b1c818b1c1c8002808c1c818c1c1c8002808d1c818d1c1c8002808e1c9c81901c9c909c1c80029c8d901c9e9d607f198f0160401b60c09190911c6001603f1b161760c19b909b1c6001603e1b169a909a1760c29990991c6001603d1b169890981760c39790971c6001603c1b169690961760c49590951c6001603b1b169490941760c59390931c6001603a1b169290921760c69190911c600160391b161760c79190911c600160381b161760c89190911c600160371b161760c99190911c600160361b161760ca9190911c600160351b161760cb9190911c600160341b161760cc9190911c600160331b161760cd9190911c600160321b1617693627a301d71055774c8581026f028f6481ab7f045a5af012a19d003aa9198101608090811d906fdb2df09e81959a81455e260799a0632f8301901d600281810b9083900b1461365457886001600160a01b031661363882612b4d565b6001600160a01b0316111561364d578161364f565b805b613656565b815b9998505050505050505050565b60405163f30dba9360e01b81526000906001600160a01b0384169063f30dba9390613692908590600401615822565b6101006040518083038186803b1580156136ab57600080fd5b505afa1580156136bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136e391906154b9565b9a9950505050505050505050565b6136f9614eee565b600082606001511180613710575060008260800151115b61372c5760405162461bcd60e51b8152600401610525906158f5565b600061376761373e84600001516142a4565b61374b8560200151612b4d565b6137588660400151612b4d565b8660600151876080015161479f565b90506000816001600160801b0316116137925760405162461bcd60e51b8152600401610525906159f7565b8251602084015160408086015160a08701519151633c8a7d8d60e01b815260009485946001600160a01b0390911693633c8a7d8d936137d8933093928a91600401615702565b6040805180830381600087803b1580156137f157600080fd5b505af1158015613805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138299190615637565b915091506040518060600160405280838152602001828152602001846001600160801b03168152509350505050919050565b8160020b8360020b13613893578051600284810b810b6000908152602087815260409182902093845584015160018401558301519101555b50505050565b6000806138b88360000151846020015185606001518660800151613ba5565b6000818152609e6020526040812080549293509181906001600160801b0316613a7d5785516001600160a01b039081166000908152609d60209081526040808320828b015185168452825280832060675482516317541d4f60e31b815292519195169263baa0ea789260048082019391829003018186803b15801561393c57600080fd5b505afa158015613950573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397491906156d4565b905060ff811615806139895750815460ff8216115b6139a55760405162461bcd60e51b8152600401610525906159d7565b81546001810183556000838152602080822090920188905560608a0151875460808c015162ffffff60801b19909116600160801b600293840b62ffffff90811682029290921762ffffff60981b1916600160981b93850b92909216830291909117808b558d8601516001600160a01b03168552609f9095526040808520908e01519095613a5994928104830b93900490910b90613a419061226a565b60e08e015180516020909101518794939291906122ea565b805160028901556020810151600389015560400151600488015550613afc92505050565b6020808701516040805160e08101825286546001600160801b0381168252600160801b8104600290810b810b810b95830195909552600160981b9004840b840b840b9181019190915260018601546060820152918501546080830152600385015460a0830152600485015460c0830152613af691613c01565b90925090505b60c08601518354613b2291613b1d916001600160801b03908116911661220c565b614861565b83546001600160801b0319166001600160801b03919091161783556001909201919091559392505050565b600060016001607f1b03198212158015613b6a57506001607f1b82125b6130aa5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ba46027913960400191505060405180910390fd5b604080516001600160601b0319606096871b81166020808401919091529590961b9095166034860152600292830b60e890811b60488701529190920b901b604b8401528051602e818503018152604e9093019052815191012090565b6001600160a01b038083166000908152609f602090815260408083209185015185820151606754925163bbe4f6db60e01b815294958695613cce94613cab92169063bbe4f6db90613c56908c906004016156ee565b60206040518083038186803b158015613c6e57600080fd5b505afa158015613c82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ca69190615053565b61226a565b6001600160a01b038916600090815260a0602052604090205485939291906148a5565b9150613cf28460600151830385600001516001600160801b0316600160801b613145565b9250505b9250929050565b613d05614f46565b60008083600001516001600160a01b031663a34123a78560400151866060015187608001516040518463ffffffff1660e01b8152600401613d4893929190615863565b6040805180830381600087803b158015613d6157600080fd5b505af1158015613d75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d999190615637565b9150915083600001516001600160a01b0316634f1eb3d88560200151866040015187606001516001600160801b03806040518663ffffffff1660e01b8152600401613de8959493929190615788565b6040805180830381600087803b158015613e0157600080fd5b505af1158015613e15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e399190615563565b50509082526020820152919050565b600080613e678360000151846020015185606001518660800151613ba5565b6000818152609e6020908152604080832087830151825160e08101845282546001600160801b0381168252600160801b8104600290810b810b810b96830196909652600160981b9004850b850b850b9381019390935260018201546060840152928101546080830152600381015460a0830152600481015460c08301529394508291613ef291613c01565b60a08801518554929450909250613f1991613b1d916001600160801b0391821691166130e8565b83546001600160801b0319166001600160801b039182161780855516613f5157613f4c866000015187602001518661490d565b610fd2565b6001830181905550949350505050565b600290810b810b600090815260209290925260408220828155600181018390550155565b6000826001600160a01b0316846001600160a01b03161115613fa5579192915b836001600160a01b0316613fde606060ff16846001600160801b0316901b8686036001600160a01b0316866001600160a01b0316613145565b81613fe557fe5b04949350505050565b60008183038183128015906140035750838113155b80614018575060008312801561401857508381135b610a235760405162461bcd60e51b8152600401808060200182810382526024815260200180615cca6024913960400191505060405180910390fd5b60008261406257506000610750565b826000191480156140765750600160ff1b82145b156140b25760405162461bcd60e51b8152600401808060200182810382526027815260200180615c5b6027913960400191505060405180910390fd5b828202828482816140bf57fe5b0514610a235760405162461bcd60e51b8152600401808060200182810382526027815260200180615c5b6027913960400191505060405180910390fd5b600081614150576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b816000191480156141645750600160ff1b83145b156141a05760405162461bcd60e51b8152600401808060200182810382526021815260200180615c1a6021913960400191505060405180910390fd5b60008284816141ab57fe5b05949350505050565b600054610100900460ff16806141cd57506141cd612529565b806141db575060005460ff16155b6142165760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614241576000805460ff1961ff0019909116610100171660011790555b6142496149fc565b6000614253611ed6565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020615c3b833981519152908290a35080156142a1576000805461ff00191690555b50565b6000816001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156142df57600080fd5b505afa1580156142f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143179190615591565b5094979650505050505050565b6000826001600160a01b0316846001600160a01b03161115614344579192915b6106d4826001600160801b03168585036001600160a01b0316600160601b613145565b6000816001600160a01b0316631a6865026040518163ffffffff1660e01b815260040160206040518083038186803b1580156143a257600080fd5b505afa1580156143b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610750919061549d565b60020b600881901d9161010090910790565b60405163299ce14b60e11b81526000906001600160a01b03841690635339c2969061441b908590600401615814565b60206040518083038186803b15801561443357600080fd5b505afa158015614447573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a23919061561f565b600080821161447957600080fd5b600160801b821061448c57608091821c91015b600160401b821061449f57604091821c91015b600160201b82106144b257602091821c91015b6201000082106144c457601091821c91015b61010082106144d557600891821c91015b601082106144e557600491821c91015b600482106144f557600291821c91015b60028210610bb557600101919050565b600080821161451357600080fd5b5060ff6001600160801b0382161561452e57607f1901614536565b608082901c91505b6001600160401b0382161561454e57603f1901614556565b604082901c91505b63ffffffff82161561456b57601f1901614573565b602082901c91505b61ffff82161561458657600f190161458e565b601082901c91505b60ff8216156145a057600719016145a8565b600882901c91505b600f8216156145ba57600319016145c2565b600482901c91505b60038216156145d457600119016145dc565b600282901c91505b6001821615610bb55760001901919050565b6000836001600160a01b0316856001600160a01b0316111561460e579293925b8161463b57614636836001600160801b03168686036001600160a01b0316600160601b613145565b61465e565b61465e836001600160801b03168686036001600160a01b0316600160601b6130ae565b95945050505050565b6000836001600160a01b0316856001600160a01b03161115614687579293925b600160601b600160e01b03606084901b166001600160a01b0386860381169087166146b157600080fd5b836146e157866001600160a01b03166146d48383896001600160a01b0316613145565b816146db57fe5b046124b9565b6124b96146f88383896001600160a01b03166130ae565b886001600160a01b0316614aa5565b600080856001600160a01b03161161471e57600080fd5b6000846001600160801b03161161473457600080fd5b81614746576146368585856001614ab0565b61465e8585856001614b91565b600080856001600160a01b03161161476a57600080fd5b6000846001600160801b03161161478057600080fd5b81614792576146368585856000614b91565b61465e8585856000614ab0565b6000836001600160a01b0316856001600160a01b031611156147bf579293925b846001600160a01b0316866001600160a01b0316116147ea576147e3858585614c74565b905061465e565b836001600160a01b0316866001600160a01b0316101561484c576000614811878686614c74565b90506000614820878986614cd7565b9050806001600160801b0316826001600160801b0316106148415780614843565b815b9250505061465e565b614857858584614cd7565b9695505050505050565b6000600160801b82106130aa5760405162461bcd60e51b8152600401808060200182810382526027815260200180615ba46027913960400191505060405180910390fd5b600284810b80820b6000908152602088905260408082205487850b850b83529082205491939092849187900b12156148df578285036148e1565b825b905060008760020b8760020b126148fa578286036148fc565b825b919095030398975050505050505050565b6001600160a01b038084166000908152609d602090815260408083209386168352929052908120905b81548110156149c1578282828154811061494c57fe5b906000526020600020015414156149b95781548290600019810190811061496f57fe5b906000526020600020015482828154811061498657fe5b90600052602060002001819055508180548061499e57fe5b600190038181906000526020600020016000905590556149c1565b600101614936565b50506000908152609e6020526040812080546001600160b01b0319168155600181018290556002810182905560038101829055600401555050565b600054610100900460ff1680614a155750614a15612529565b80614a23575060005460ff16155b614a5e5760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614a89576000805460ff1961ff0019909116610100171660011790555b614a91614d14565b80156142a1576000805461ff001916905550565b808204910615150190565b60008115614b235760006001600160a01b03841115614ae657614ae184600160601b876001600160801b0316613145565b614afe565b6001600160801b038516606085901b81614afc57fe5b045b9050614b1b614b166001600160a01b03881683614db4565b614dc4565b9150506106d4565b60006001600160a01b03841115614b5157614b4c84600160601b876001600160801b03166130ae565b614b68565b614b68606085901b6001600160801b038716614aa5565b905080866001600160a01b031611614b7f57600080fd5b6001600160a01b0386160390506106d4565b600082614b9f5750836106d4565b600160601b600160e01b03606085901b168215614c2d576001600160a01b03861684810290858281614bcd57fe5b041415614bfe57818101828110614bfc57614bf283896001600160a01b0316836130ae565b93505050506106d4565b505b614c2482614c1f878a6001600160a01b03168681614c1857fe5b0490614db4565b614aa5565b925050506106d4565b6001600160a01b03861684810290858281614c4457fe5b04148015614c5157508082115b614c5a57600080fd5b808203614bf2614b16846001600160a01b038b16846130ae565b6000826001600160a01b0316846001600160a01b03161115614c94579192915b6000614cb7856001600160a01b0316856001600160a01b0316600160601b613145565b905061465e614cd284838888036001600160a01b0316613145565b614dda565b6000826001600160a01b0316846001600160a01b03161115614cf7579192915b6106d4614cd283600160601b8787036001600160a01b0316613145565b600054610100900460ff1680614d2d5750614d2d612529565b80614d3b575060005460ff16155b614d765760405162461bcd60e51b815260040180806020018281038252602e815260200180615bec602e913960400191505060405180910390fd5b600054610100900460ff16158015614a91576000805460ff1961ff00199091166101001716600117905580156142a1576000805461ff001916905550565b8082018281101561075057600080fd5b806001600160a01b0381168114610bb557600080fd5b806001600160801b0381168114610bb557600080fd5b60405180606001604052806000815260200160008152602001600081525090565b6040518060600160405280600060020b815260200160008152602001600081525090565b6040805160e081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c081019190915290565b6040518060e0016040528060006001600160801b03168152602001600060020b8152602001600060020b8152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528060008152602001600081526020016000815260200160006001600160801b031681525090565b6040518060600160405280600081526020016000815260200160006001600160801b031681525090565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604051806040016040528060008152602001600081525090565b8035610bb581615b4b565b60008083601f840112614f7c578182fd5b5081356001600160401b03811115614f92578182fd5b6020830191508360208083028501011115613cf657600080fd5b8035610bb581615b60565b8051610bb581615b60565b600060408284031215614fd3578081fd5b604080519081016001600160401b0381118282101715614fef57fe5b604052823581526020928301359281019290925250919050565b805161ffff81168114610bb557600080fd5b8035610bb581615b92565b805160ff81168114610bb557600080fd5b600060208284031215615048578081fd5b8135610a2381615b4b565b600060208284031215615064578081fd5b8151610a2381615b4b565b60008060408385031215615081578081fd5b823561508c81615b4b565b9150602083013561509c81615b4b565b809150509250929050565b600080600080606085870312156150bc578182fd5b84356150c781615b4b565b935060208501356150d781615b4b565b925060408501356001600160401b038111156150f1578283fd5b6150fd87828801614f6b565b95989497509550505050565b60008060006060848603121561511d578081fd5b833561512881615b4b565b9250602084013561513881615b4b565b9150604084013561514881615b60565b809150509250925092565b60008060008060808587031215615168578182fd5b843561517381615b4b565b9350602085013561518381615b4b565b9250604085013561519381615b6e565b915060608501356151a381615b6e565b939692955090935050565b6000806000608084860312156151c2578081fd5b83356151cd81615b4b565b925060208401356151dd81615b4b565b91506151ec8560408601614fc2565b90509250925092565b600080600060408486031215615209578081fd5b833561521481615b4b565b925060208401356001600160401b0381111561522e578182fd5b61523a86828701614f6b565b9497909650939450505050565b600060208284031215615258578081fd5b5035919050565b600060208284031215615270578081fd5b8135610a2381615b6e565b60006020828403121561528c578081fd5b8151610a2381615b6e565b600061010082840312156152a9578081fd5b50919050565b6000604082840312156152c0578081fd5b610a238383614fc2565b6000608082840312156152db578081fd5b604051608081016001600160401b03811182821017156152f757fe5b604052825161530581615b4b565b8152602083015161531581615b92565b6020820152604083015161532881615b92565b6040820152606083015161533b81615b92565b60608201529392505050565b600060a082840312156152a9578081fd5b600060a08284031215615369578081fd5b60405160a081016001600160401b038111828210171561538557fe5b604052823561539381615b4b565b815260208301356153a381615b4b565b602082015260408301356153b681615b6e565b604082015260608301356153c981615b6e565b606082015260808301356153dc81615b7d565b60808201529392505050565b600061012082840312156153fa578081fd5b60405161010081016001600160401b038111828210171561541757fe5b60405261542383614f60565b815261543160208401614fac565b602082015261544260408401614fac565b60408201526060830135606082015261545d60808401614f60565b608082015261546e60a0840161501b565b60a082015261547f60c0840161501b565b60c08201526154918460e08501614fc2565b60e08201529392505050565b6000602082840312156154ae578081fd5b8151610a2381615b7d565b600080600080600080600080610100898b0312156154d5578586fd5b88516154e081615b7d565b80985050602089015180600f0b81146154f7578687fd5b80975050604089015195506060890151945060808901518060060b811461551c578485fd5b60a08a015190945061552d81615b4b565b60c08a015190935063ffffffff81168114615546578283fd5b915061555460e08a01614fb7565b90509295985092959890939650565b60008060408385031215615575578182fd5b825161558081615b7d565b602084015190925061509c81615b7d565b600080600080600080600060e0888a0312156155ab578081fd5b87516155b681615b4b565b60208901519097506155c781615b6e565b95506155d560408901615009565b94506155e360608901615009565b93506155f160808901615009565b92506155ff60a08901615026565b915060c088015161560f81615b60565b8091505092959891949750929550565b600060208284031215615630578081fd5b5051919050565b60008060408385031215615649578182fd5b505080516020909101519092909150565b6000806000806060858703121561566f578182fd5b843593506020850135925060408501356001600160401b0380821115615693578384fd5b818701915087601f8301126156a6578384fd5b8135818111156156b4578485fd5b8860208285010111156156c5578485fd5b95989497505060200194505050565b6000602082840312156156e5578081fd5b610a2382615026565b6001600160a01b0391909116815260200190565b600060018060a01b038716825260208660020b818401528560020b604084015260018060801b038516606084015260a0608084015283518060a0850152825b8181101561575d5785810183015185820160c001528201615741565b8181111561576e578360c083870101525b50601f01601f19169290920160c001979650505050505050565b6001600160a01b03959095168552600293840b60208601529190920b60408401526001600160801b03918216606084015216608082015260a00190565b6020808252825182820181905260009190848201906040850190845b818110156157fd578351835292840192918401916001016157e1565b50909695505050505050565b901515815260200190565b60019190910b815260200190565b60029190910b815260200190565b600296870b81529490950b602085015260408401929092526060830152600f0b608082015260a081019190915260c00190565b600293840b81529190920b60208201526001600160801b03909116604082015260600190565b90815260200190565b6020808252600890820152674348445f4d524e4360c01b604082015260600190565b60208082526006908201526513d097d3915360d21b604082015260600190565b6020808252600790820152660869088be9e86960cb1b604082015260600190565b60208082526006908201526555425f5a497360d01b604082015260600190565b60208082526006908201526504f425f4348360d41b604082015260600190565b6020808252600690820152654f425f4e454f60d01b604082015260600190565b60208082526006908201526504f425f5154360d41b604082015260600190565b60208082526006908201526509e84be9e8ab60d31b604082015260600190565b6020808252600890820152674348445f43484e4360c01b604082015260600190565b60208082526006908201526522ac2fa321ab60d11b604082015260600190565b6020808252600690820152654f425f4f4e4560d01b604082015260600190565b602080825260059082015264155097d69360da1b604082015260600190565b8151815260208083015190820152604080830151908201526060918201516001600160801b03169181019190915260800190565b81516001600160a01b039081168252602092830151169181019190915260400190565b600060e08201905060018060801b038351168252602083015160020b6020830152604083015160020b6040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b81518152602080830151908201526040918201519181019190915260600190565b815160020b8152602080830151908201526040918201519181019190915260600190565b60008582528460208301526060604083015282606083015282846080840137818301608090810191909152601f909201601f191601019392505050565b6001600160a01b03811681146142a157600080fd5b80151581146142a157600080fd5b8060020b81146142a157600080fd5b6001600160801b03811681146142a157600080fd5b62ffffff811681146142a157600080fdfe53616665436173743a2076616c756520646f65736e27742066697420696e2031323820626974735369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65645369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77cb47d8bf351d355bdd5497973533eada41777b4509f2585a62ae246336ebaa9453616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a2646970667358221220cee7395b427f4286977b44509f9ce8c70c75ff66eab6e41bb1fc7d54595e29b364736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2QuoteToken.json b/external/abi/perp/PerpV2QuoteToken.json index 75313b1c3..56592f816 100644 --- a/external/abi/perp/PerpV2QuoteToken.json +++ b/external/abi/perp/PerpV2QuoteToken.json @@ -452,4 +452,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101075760003560e01c806306fdde031461010c578063095ea7b31461018957806309fd8212146101c957806313af4035146101ef57806318160ddd1461021757806323b872dd14610231578063313ce5671461026757806339509351146102855780634cd88b76146102b15780636c8381f8146103da57806370a08231146103fe578063715018a61461042457806378c8cda71461042c5780638da5cb5b1461045257806395d89b411461045a578063a457c2d714610462578063a9059cbb1461048e578063bc5920ba146104ba578063dd62ed3e146104c2578063f52e308e146104f0578063f80f5dd514610516575b600080fd5b61011461053c565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014e578181015183820152602001610136565b50505050905090810190601f16801561017b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101b56004803603604081101561019f57600080fd5b506001600160a01b0381351690602001356105d2565b604080519115158252519081900360200190f35b6101b5600480360360208110156101df57600080fd5b50356001600160a01b03166105ef565b6102156004803603602081101561020557600080fd5b50356001600160a01b031661060d565b005b61021f610768565b60408051918252519081900360200190f35b6101b56004803603606081101561024757600080fd5b506001600160a01b0381358116916020810135909116906040013561076e565b61026f6107f5565b6040805160ff9092168252519081900360200190f35b6101b56004803603604081101561029b57600080fd5b506001600160a01b0381351690602001356107fe565b610215600480360360408110156102c757600080fd5b810190602081018135600160201b8111156102e157600080fd5b8201836020820111156102f357600080fd5b803590602001918460018302840111600160201b8311171561031457600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295949360208101935035915050600160201b81111561036657600080fd5b82018360208201111561037857600080fd5b803590602001918460018302840111600160201b8311171561039957600080fd5b91908080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092955061084c945050505050565b6103e26108fa565b604080516001600160a01b039092168252519081900360200190f35b61021f6004803603602081101561041457600080fd5b50356001600160a01b0316610909565b610215610924565b6102156004803603602081101561044257600080fd5b50356001600160a01b03166109c5565b6103e2610a7a565b610114610a89565b6101b56004803603604081101561047857600080fd5b506001600160a01b038135169060200135610aea565b6101b5600480360360408110156104a457600080fd5b506001600160a01b038135169060200135610b52565b610215610b66565b61021f600480360360408110156104d857600080fd5b506001600160a01b0381358116916020013516610c52565b6102156004803603602081101561050657600080fd5b50356001600160a01b0316610c7d565b6102156004803603602081101561052c57600080fd5b50356001600160a01b0316610ce9565b606a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105c85780601f1061059d576101008083540402835291602001916105c8565b820191906000526020600020905b8154815290600101906020018083116105ab57829003601f168201915b5050505050905090565b60006105e66105df610da1565b8484610da5565b50600192915050565b6001600160a01b031660009081526099602052604090205460ff1690565b610615610da1565b6001600160a01b0316610626610a7a565b6001600160a01b03161461066a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166106ae576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156106fa576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610746576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b600061077b848484610e91565b6107eb84610787610da1565b6107e6856040518060600160405280602881526020016117fd602891396001600160a01b038a166000908152606860205260408120906107c5610da1565b6001600160a01b031681526020810191909152604001600020549190610fdc565b610da5565b5060019392505050565b606c5460ff1690565b60006105e661080b610da1565b846107e6856068600061081c610da1565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611073565b600054610100900460ff168061086557506108656110d2565b80610873575060005460ff16155b6108ae5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff161580156108d9576000805460ff1961ff0019909116610100171660011790555b6108e383836110e3565b80156108f5576000805461ff00191690555b505050565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b61092c610da1565b6001600160a01b031661093d610a7a565b6001600160a01b031614610981576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020611825833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6109cd610da1565b6001600160a01b03166109de610a7a565b6001600160a01b031614610a22576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156105c85780601f1061059d576101008083540402835291602001916105c8565b60006105e6610af7610da1565b846107e6856040518060600160405280602581526020016118ae6025913960686000610b21610da1565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610fdc565b60006105e6610b5f610da1565b8484610e91565b6034546001600160a01b0316610bab576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610bb3610da1565b6034546001600160a01b03908116911614610bfe576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061182583398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610c85610da1565b6001600160a01b0316610c96610a7a565b6001600160a01b031614610cda576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610ce6816000196111cd565b50565b610cf1610da1565b6001600160a01b0316610d02610a7a565b6001600160a01b031614610d46576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b3390565b6001600160a01b038316610dea5760405162461bcd60e51b815260040180806020018281038252602481526020018061188a6024913960400191505060405180910390fd5b6001600160a01b038216610e2f5760405162461bcd60e51b81526004018080602001828103825260228152602001806117876022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610ed65760405162461bcd60e51b81526004018080602001828103825260258152602001806118656025913960400191505060405180910390fd5b6001600160a01b038216610f1b5760405162461bcd60e51b81526004018080602001828103825260238152602001806117646023913960400191505060405180910390fd5b610f268383836112ad565b610f63816040518060600160405280602681526020016117a9602691396001600160a01b0386166000908152606760205260409020549190610fdc565b6001600160a01b038085166000908152606760205260408082209390935590841681522054610f929082611073565b6001600160a01b03808416600081815260676020908152604091829020949094558051858152905191939287169260008051602061184583398151915292918290030190a3505050565b6000818484111561106b5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611030578181015183820152602001611018565b50505050905090810190601f16801561105d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000828201838110156110cb576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b60006110dd3061130d565b15905090565b600054610100900460ff16806110fc57506110fc6110d2565b8061110a575060005460ff16155b6111455760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611170576000805460ff1961ff0019909116610100171660011790555b611178611313565b6111828383611402565b6000805260996020527f235d629dc802037ded8c61cb27fb29e40fa01b299719d8f991ffe20bdcc59f4f805460ff1916600117905580156108f5576000805461ff0019169055505050565b6001600160a01b038216611228576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b611234600083836112ad565b6069546112419082611073565b6069556001600160a01b0382166000908152606760205260409020546112679082611073565b6001600160a01b03831660008181526067602090815260408083209490945583518581529351929391926000805160206118458339815191529281900390910190a35050565b6112b88383836108f5565b6001600160a01b03831660009081526099602052604090205460ff166108f5576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b3b151590565b600054610100900460ff168061132c575061132c6110d2565b8061133a575060005460ff16155b6113755760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff161580156113a0576000805460ff1961ff0019909116610100171660011790555b6113a86114a1565b60006113b2610da1565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020611825833981519152908290a3508015610ce6576000805461ff001916905550565b600054610100900460ff168061141b575061141b6110d2565b80611429575060005460ff16155b6114645760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff1615801561148f576000805460ff1961ff0019909116610100171660011790555b61149761154a565b6108e383836115ea565b600054610100900460ff16806114ba57506114ba6110d2565b806114c8575060005460ff16155b6115035760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff1615801561152e576000805460ff1961ff0019909116610100171660011790555b61153661154a565b8015610ce6576000805461ff001916905550565b600054610100900460ff168061156357506115636110d2565b80611571575060005460ff16155b6115ac5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611536576000805460ff1961ff0019909116610100171660011790558015610ce6576000805461ff001916905550565b600054610100900460ff168061160357506116036110d2565b80611611575060005460ff16155b61164c5760405162461bcd60e51b815260040180806020018281038252602e8152602001806117cf602e913960400191505060405180910390fd5b600054610100900460ff16158015611677576000805460ff1961ff0019909116610100171660011790555b825161168a90606a9060208601906116c2565b50815161169e90606b9060208501906116c2565b50606c805460ff1916601217905580156108f5576000805461ff0019169055505050565b828054600181600116156101000203166002900490600052602060002090601f0160209004810192826116f8576000855561173e565b82601f1061171157805160ff191683800117855561173e565b8280016001018555821561173e579182015b8281111561173e578251825591602001919060010190611723565b5061174a92915061174e565b5090565b5b8082111561174a576000815560010161174f56fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e6365496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a656445524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220deb17f680c0cef1c839aafa8d7cb2c0dbe4b5f97fcd7cee4e91a5241a49d3e0864736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2Quoter.json b/external/abi/perp/PerpV2Quoter.json index 861b74d59..6346f1627 100644 --- a/external/abi/perp/PerpV2Quoter.json +++ b/external/abi/perp/PerpV2Quoter.json @@ -130,4 +130,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c8063542b7c9814610051578063c4d66de81461007a578063ecb96fe61461008f578063fa461e33146100a4575b600080fd5b61006461005f366004610e1b565b6100b7565b60405161007191906110dc565b60405180910390f35b61008d610088366004610c53565b61048a565b005b61009761057d565b6040516100719190610fa2565b61008d6100b2366004610cae565b610592565b6100bf610bf6565b60008260600151116100ec5760405162461bcd60e51b81526004016100e390611004565b60405180910390fd5b60008054835160405163033e16f360e21b8152620100009092046001600160a01b031691630cf85bcc9161012291600401610fa2565b60806040518083038186803b15801561013a57600080fd5b505afa15801561014e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101729190610da4565b80519091506001600160a01b03811661019d5760405162461bcd60e51b81526004016100e39061109e565b60008260400151905060008360200151905060006101ca8760200151886040015189606001518587610733565b9050600087604001516101e8576101e082610788565b6000036101f1565b6101f182610788565b9050846001600160a01b031663128acb08308a60200151848c608001516001600160a01b0316600014610228578c60800151610252565b8c6020015161024b5773fffd8963efd1fc6a506488495d951d5263988d25610252565b6401000276a45b8d516040516102649190602001610fa2565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610293959493929190610fb6565b6040805180830381600087803b1580156102ac57600080fd5b505af19250505080156102dc575060408051601f3d908101601f191682019092526102d991810190610c8b565b60015b61047c573d80801561030a576040519150601f19603f3d011682016040523d82523d6000602084013e61030f565b606091505b50600080600061031e846107d4565b92509250925060008060008e602001511561037157610346858b62ffffff16620f4240610858565b925061035c610357878d6000610893565b610788565b600003915061036a85610788565b90506103bb565b610399620f424061039361038a8862ffffff8f166108e2565b8e8e6000610944565b90610990565b92506103a486610788565b91506103b5610357868d6000610893565b60000390505b6040518060a001604052806103cf846109f4565b81526020016103ef6103ea6103e387610788565b8590610a17565b6109f4565b8152602001838152602001828152602001856001600160a01b03168152509d508e6040015115801561042c575060808f01516001600160a01b0316155b156104705760008f60200151610443578e51610449565b8e602001515b90508f60600151811461046e5760405162461bcd60e51b81526004016100e39061107f565b505b5050505050505061047f565b50505b505050505050919050565b600054610100900460ff16806104a357506104a3610a7c565b806104b1575060005460ff16155b6104ec5760405162461bcd60e51b815260040180806020018281038252602e8152602001806111b5602e913960400191505060405180910390fd5b600054610100900460ff16158015610517576000805460ff1961ff0019909116610100171660011790555b610529826001600160a01b0316610a8d565b6105455760405162461bcd60e51b81526004016100e390611060565b6000805462010000600160b01b031916620100006001600160a01b038516021790558015610579576000805461ff00191690555b5050565b6000546201000090046001600160a01b031681565b60008313806105a15750600082135b6105bd5760405162461bcd60e51b81526004016100e390611041565b6000818060200190518101906105d39190610c6f565b6000805460405163bbe4f6db60e01b81529293509091620100009091046001600160a01b03169063bbe4f6db9061060e908590600401610fa2565b60206040518083038186803b15801561062657600080fd5b505afa15801561063a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061065e9190610c6f565b9050336001600160a01b038216146106885760405162461bcd60e51b81526004016100e390611022565b600080610694876109f4565b61069d876109f4565b915091506000836001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156106dc57600080fd5b505afa1580156106f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107149190610ea2565b5050505050509050604051838152826020820152816040820152606081fd5b6000851561076457846107515761074c84846001610893565b61075d565b61075d84836001610893565b905061077f565b8461076f578361077c565b61077c8483856001610944565b90505b95945050505050565b6000600160ff1b82106107cc5760405162461bcd60e51b81526004018080602001828103825260288152602001806112046028913960400191505060405180910390fd5b50805b919050565b60008060008351606014610837576044845110156108045760405162461bcd60e51b81526004016100e3906110be565b6004840193508380602001905181019061081e9190610d3b565b60405162461bcd60e51b81526004016100e39190610ff1565b8380602001905181019061084b9190610f3e565b9250925092509193909250565b6000610865848484610a93565b90506000828061087157fe5b848609111561088c57600019811061088857600080fd5b6001015b9392505050565b6000816108be576108b9846108b0620f424062ffffff8716610b42565b620f4240610a93565b6108da565b6108da84620f42406108d58162ffffff8816610b42565b610858565b949350505050565b6000826108f15750600061093e565b828202828482816108fe57fe5b041461093b5760405162461bcd60e51b81526004018080602001828103825260218152602001806111e36021913960400191505060405180910390fd5b90505b92915050565b600080600083610955578585610958565b84865b909250905061098587610973620f424062ffffff8616610b42565b6108d5620f424062ffffff8616610b42565b979650505050505050565b60008082116109e3576040805162461bcd60e51b815260206004820152601a602482015279536166654d6174683a206469766973696f6e206279207a65726f60301b604482015290519081900360640190fd5b8183816109ec57fe5b049392505050565b6000808213610a0e57610a0982600003610b9f565b61093e565b61093e82610b9f565b6000818303818312801590610a2c5750838113155b80610a415750600083128015610a4157508381135b61093b5760405162461bcd60e51b815260040180806020018281038252602481526020018061122c6024913960400191505060405180910390fd5b6000610a8730610a8d565b15905090565b3b151590565b6000808060001985870986860292508281109083900303905080610ac95760008411610abe57600080fd5b50829004905061088c565b808411610ad557600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600082821115610b99576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000808212156107cc576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b805161ffff811681146107cf57600080fd5b805162ffffff811681146107cf57600080fd5b600060208284031215610c64578081fd5b813561093b8161118e565b600060208284031215610c80578081fd5b815161093b8161118e565b60008060408385031215610c9d578081fd5b505080516020909101519092909150565b600080600060608486031215610cc2578081fd5b833592506020840135915060408401356001600160401b03811115610ce5578182fd5b8401601f81018613610cf5578182fd5b8035610d08610d038261113d565b61111a565b818152876020838501011115610d1c578384fd5b8160208401602083013783602083830101528093505050509250925092565b600060208284031215610d4c578081fd5b81516001600160401b03811115610d61578182fd5b8201601f81018413610d71578182fd5b8051610d7f610d038261113d565b818152856020838501011115610d93578384fd5b61077f82602083016020860161115e565b600060808284031215610db5578081fd5b604051608081016001600160401b0381118282101715610dd157fe5b6040528251610ddf8161118e565b8152610ded60208401610c40565b6020820152610dfe60408401610c40565b6040820152610e0f60608401610c40565b60608201529392505050565b600060a08284031215610e2c578081fd5b60405160a081016001600160401b0381118282101715610e4857fe5b6040528235610e568161118e565b81526020830135610e66816111a6565b60208201526040830135610e79816111a6565b6040820152606083810135908201526080830135610e968161118e565b60808201529392505050565b600080600080600080600060e0888a031215610ebc578485fd5b8751610ec78161118e565b8097505060208801518060020b8114610ede578586fd5b9550610eec60408901610c2e565b9450610efa60608901610c2e565b9350610f0860808901610c2e565b925060a088015160ff81168114610f1d578283fd5b60c0890151909250610f2e816111a6565b8091505092959891949750929550565b600080600060608486031215610f52578081fd5b83519250602084015191506040840151610f6b8161118e565b809150509250925092565b60008151808452610f8e81602086016020860161115e565b601f01601f19169290920160200192915050565b6001600160a01b0391909116815260200190565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a06080820181905260009061098590830184610f76565b60006020825261088c6020830184610f76565b602080825260049082015263515f5a4960e01b604082015260600190565b60208082526005908201526428afa329ab60d91b604082015260600190565b602080825260059082015264515f46305360d81b604082015260600190565b602080825260059082015264515f414e4360d81b604082015260600190565b602080825260059082015264515f554f4160d81b604082015260600190565b602080825260069082015265515f42544e4560d01b604082015260600190565b602080825260049082015263515f554560e01b604082015260600190565b815181526020808301519082015260408083015190820152606080830151908201526080918201516001600160a01b03169181019190915260a00190565b6040518181016001600160401b038111828210171561113557fe5b604052919050565b60006001600160401b0382111561115057fe5b50601f01601f191660200190565b60005b83811015611179578181015183820152602001611161565b83811115611188576000848401525b50505050565b6001600160a01b03811681146111a357600080fd5b50565b80151581146111a357600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a264697066735822122031ee0ab6ae96fc44e7c40ffc3ae4d227bcd045cea1f4349e5e5fab44c0ce100964736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2TestAggregatorV3.json b/external/abi/perp/PerpV2TestAggregatorV3.json index d4aa751da..b80e8bc0f 100644 --- a/external/abi/perp/PerpV2TestAggregatorV3.json +++ b/external/abi/perp/PerpV2TestAggregatorV3.json @@ -119,4 +119,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100575760003560e01c8063313ce5671461005c57806354fd4d501461007a5780637284e4161461008f5780639a6fc8f5146100a4578063feaf968c146100c8575b600080fd5b6100646100d0565b60405161007191906101a5565b60405180910390f35b6100826100d0565b604051610071919061016c565b6100976100d7565b6040516100719190610119565b6100b76100b23660046100eb565b6100de565b604051610071959493929190610175565b6100b76100de565b6000806000fd5b6060600080fd5b6000806000806000806000fd5b6000602082840312156100fc578081fd5b81356001600160501b0381168114610112578182fd5b9392505050565b6000602080835283518082850152825b8181101561014557858101830151858201604001528201610129565b818111156101565783604083870101525b50601f01601f1916929092016040019392505050565b90815260200190565b6001600160501b039586168152602081019490945260408401929092526060830152909116608082015260a00190565b60ff9190911681526020019056fea26469706673582212203753f98b73a9090957ed70bfb25c49d2457f004d91f7f96f778e6e2f31abb8ab64736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2Vault.json b/external/abi/perp/PerpV2Vault.json index 94a6deb2b..865ee2df6 100644 --- a/external/abi/perp/PerpV2Vault.json +++ b/external/abi/perp/PerpV2Vault.json @@ -490,4 +490,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061013e5760003560e01c806313af403514610143578063313ce5671461016b5780633f4ba83a146101895780633ffd13031461019157806347e7ef24146101d4578063486ff0cd146102005780634c2845a01461027d578063572b6c05146102a35780635c975abb146102dd5780636c8381f8146102e557806370a0823114610309578063715018a61461032f5780637b9e618d146103375780637da0a8771461033f5780638456cb59146103475780638da5cb5b1461034f578063b0a1c1c414610357578063b79023031461035f578063bc5920ba14610367578063c2075b211461036f578063c399944414610377578063d2f7265a1461039d578063da742228146103a5578063f3fef3a3146103cb578063f8c8765e146103f7578063fc7b9c1814610435575b600080fd5b6101696004803603602081101561015957600080fd5b50356001600160a01b031661043d565b005b610173610598565b6040805160ff9092168252519081900360200190f35b6101696105a2565b6101c2600480360360408110156101a757600080fd5b5080356001600160a01b0316906020013562ffffff16610609565b60408051918252519081900360200190f35b610169600480360360408110156101ea57600080fd5b506001600160a01b0381351690602001356106e9565b610208610992565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561024257818101518382015260200161022a565b50505050905090810190601f16801561026f5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101c26004803603602081101561029357600080fd5b50356001600160a01b0316610a21565b6102c9600480360360208110156102b957600080fd5b50356001600160a01b0316610b29565b604080519115158252519081900360200190f35b6102c9610b3d565b6102ed610b47565b604080516001600160a01b039092168252519081900360200190f35b6101c26004803603602081101561031f57600080fd5b50356001600160a01b0316610b56565b610169610bfd565b6102ed610c9e565b6102ed610cb3565b610169610cc2565b6102ed610d27565b6102ed610d36565b6102ed610d46565b610169610d56565b6102ed610e42565b6101c26004803603602081101561038d57600080fd5b50356001600160a01b0316610e52565b6102ed610e77565b610169600480360360208110156103bb57600080fd5b50356001600160a01b0316610e87565b610169600480360360408110156103e157600080fd5b506001600160a01b038135169060200135610f3b565b6101696004803603608081101561040d57600080fd5b506001600160a01b0381358116916020810135821691604082013581169160600135166112b2565b6101c26115e3565b6104456115ea565b6001600160a01b0316610456610d27565b6001600160a01b03161461049a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0381166104de576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6065546001600160a01b038281169116141561052a576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6066546001600160a01b0382811691161415610576576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b606680546001600160a01b0319166001600160a01b0392909216919091179055565b6101305460ff1681565b6105aa6115ea565b6001600160a01b03166105bb610d27565b6001600160a01b0316146105ff576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6106076115f9565b565b60008061061584611699565b61013254604080516315f53c9b60e11b81526001600160a01b03888116600483015291519394506000936106a9939290921691632bea793691602480820192602092909190829003018186803b15801561066e57600080fd5b505afa158015610682573d6000803e3d6000fd5b505050506040513d602081101561069857600080fd5b50516101305484919060ff16611744565b905060006106b78686611767565b90506106dd6106c5826117ef565b6101305460ff166106d68686611837565b919061184d565b93505050505b92915050565b6106f1610b3d565b15610736576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6002600154141561077c576040805162461bcd60e51b815260206004820152601f60248201526000805160206127e1833981519152604482015290519081900360640190fd5b60026001556001600160a01b0382166000908152610139602052604090205460ff166107d7576040805162461bcd60e51b81526020600482015260056024820152642b2fa1a72360d91b604482015290519081900360640190fd5b60006107e16115ea565b90506107f681846107f1856117ef565b611866565b6000836001600160a01b03166370a08231836040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561084557600080fd5b505afa158015610859573d6000803e3d6000fd5b505050506040513d602081101561086f57600080fd5b5051905061087f848330866118a6565b82610903856001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156108d057600080fd5b505afa1580156108e4573d6000803e3d6000fd5b505050506040513d60208110156108fa57600080fd5b50518390611a02565b1461093d576040805162461bcd60e51b8152602060048201526005602482015264565f42414960d81b604482015290519081900360640190fd5b816001600160a01b0316846001600160a01b03167f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7856040518082815260200191505060405180910390a35050600180555050565b610136805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a195780601f106109ee57610100808354040283529160200191610a19565b820191906000526020600020905b8154815290600101906020018083116109fc57829003601f168201915b505050505081565b60006106e3610b2461013160009054906101000a90046001600160a01b03166001600160a01b0316639f044f316040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7857600080fd5b505afa158015610a8c573d6000803e3d6000fd5b505050506040513d6020811015610aa257600080fd5b50516101325460408051633666e41760e11b81526001600160a01b03888116600483015291519190921691636ccdc82e916024808301926020929190829003018186803b158015610af257600080fd5b505afa158015610b06573d6000803e3d6000fd5b505050506040513d6020811015610b1c57600080fd5b505190611a5f565b6117ef565b60fd546001600160a01b0390811691161490565b60995460ff165b90565b6066546001600160a01b031690565b60008060005b61013754811015610bf65760006101378281548110610b7757fe5b600091825260209091200154610130546001600160a01b0391821692506101009004168114610bd75760405162461bcd60e51b81526004018080602001828103825260238152602001806128816023913960400191505060405180910390fd5b610beb610be48683611a74565b8490611aa0565b925050600101610b5c565b5092915050565b610c056115ea565b6001600160a01b0316610c16610d27565b6001600160a01b031614610c5a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6065546040516000916001600160a01b0316906000805160206128c5833981519152908390a3606580546001600160a01b0319908116909155606680549091169055565b6101305461010090046001600160a01b031681565b60fd546001600160a01b031681565b610cca6115ea565b6001600160a01b0316610cdb610d27565b6001600160a01b031614610d1f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610607611b05565b6065546001600160a01b031690565b610132546001600160a01b031681565b610133546001600160a01b031681565b6066546001600160a01b0316610d9b576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610da36115ea565b6066546001600160a01b03908116911614610dee576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6066546065546040516001600160a01b0392831692909116906000805160206128c583398151915290600090a360668054606580546001600160a01b03199081166001600160a01b03841617909155169055565b610131546001600160a01b031681565b60006106e3610e72610e6b84610e66611b88565b610609565b6000611bff565b611c0f565b610134546001600160a01b031681565b610e8f6115ea565b6001600160a01b0316610ea0610d27565b6001600160a01b031614610ee4576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610ef6816001600160a01b0316611c66565b610f2f576040805162461bcd60e51b8152602060048201526005602482015264565f414e4360d81b604482015290519081900360640190fd5b610f3881611c6c565b50565b610f43610b3d565b15610f88576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b60026001541415610fce576040805162461bcd60e51b815260206004820152601f60248201526000805160206127e1833981519152604482015290519081900360640190fd5b60026001556000610fdd6115ea565b61013454604080516375cdc89760e11b81526001600160a01b038085166004830152915193945091169163eb9b912e9160248082019260009290919082900301818387803b15801561102e57600080fd5b505af1158015611042573d6000803e3d6000fd5b50506101325460408051636a256b2960e01b81526001600160a01b038681166004830152915160009550919092169250636a256b299160248082019260209290919082900301818787803b15801561109957600080fd5b505af11580156110ad573d6000803e3d6000fd5b505050506040513d60208110156110c357600080fd5b505190506110d0836117ef565b6110e6826110e0610b2486610e52565b90611aa0565b1215611122576040805162461bcd60e51b8152602060048201526006602482015265565f4e45464360d01b604482015290519081900360640190fd5b610130546001600160a01b0385811661010090920416141561123a576000846001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561118d57600080fd5b505afa1580156111a1573d6000803e3d6000fd5b505050506040513d60208110156111b757600080fd5b505190508381101561123857610133546040805163317afabb60e21b815283870360048201819052915191926001600160a01b03169163c5ebeaec9160248082019260009290919082900301818387803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b5050610135805490930190925550505b505b61125282856107f161124b876117ef565b8590611d06565b61125d848385611d6b565b816001600160a01b0316846001600160a01b03167fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb856040518082815260200191505060405180910390a35050600180555050565b600054610100900460ff16806112cb57506112cb611eb7565b806112d9575060005460ff16155b6113145760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561133f576000805460ff1961ff0019909116610100171660011790555b6000856001600160a01b031663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561137c57600080fd5b505af1158015611390573d6000803e3d6000fd5b505050506040513d60208110156113a657600080fd5b50516040805163313ce56760e01b815290519192506000916001600160a01b0384169163313ce567916004808301926020929190829003018186803b1580156113ee57600080fd5b505afa158015611402573d6000803e3d6000fd5b505050506040513d602081101561141857600080fd5b50519050601260ff8216111561145e576040805162461bcd60e51b81526020600482015260066024820152651597d254d51160d21b604482015290519081900360640190fd5b611470866001600160a01b0316611c66565b6114ab576040805162461bcd60e51b8152602060048201526007602482015266565f4348434e4360c81b604482015290519081900360640190fd5b6114bd856001600160a01b0316611c66565b6114f7576040805162461bcd60e51b8152602060048201526006602482015265565f41424e4360d01b604482015290519081900360640190fd5b6114ff611ec8565b611507611f71565b610130805460ff191660ff831617610100600160a81b0319166101006001600160a01b03858116919091029190911790915561013380546001600160a01b03191691891691909117905561155a8261200e565b61013180546001600160a01b038089166001600160a01b0319928316179092556101328054888416908316179055610134805492871692909116919091179055604080518082019091526005808252640322e302e360dc1b60209092019182526115c79161013691612748565b50505080156115dc576000805461ff00191690555b5050505050565b6101355481565b60006115f46120cd565b905090565b611601610b3d565b611649576040805162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604482015290519081900360640190fd5b6099805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa61167c6115ea565b604080516001600160a01b039092168252519081900360200190a1565b6000806116a583610b56565b610132546040805163ee817e8b60e01b81526001600160a01b0387811660048301529151939450600093919092169163ee817e8b916024808301926020929190829003018186803b1580156116f957600080fd5b505afa15801561170d573d6000803e3d6000fd5b505050506040513d602081101561172357600080fd5b50516101305490915061173c908390839060ff16611744565b949350505050565b600061175d611757846110e087866120ff565b83612115565b90505b9392505050565b610132546040805163293a507760e01b81526001600160a01b03858116600483015291516000938493169163293a5077916024808301926020929190829003018186803b1580156117b757600080fd5b505afa1580156117cb573d6000803e3d6000fd5b505050506040513d60208110156117e157600080fd5b5051905061173c8184611a5f565b6000600160ff1b82106118335760405162461bcd60e51b815260040180806020018281038252602881526020018061290c6028913960400191505060405180910390fd5b5090565b60008183126118465781611760565b5090919050565b600061175d6117578461186087866120ff565b90611d06565b611874816110e08585611a74565b6001600160a01b0393841660009081526101386020908152604080832095909616825293909352929091209190915550565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b178152925182516000948594938a169392918291908083835b6020831061192a5780518252601f19909201916020918201910161190b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461198c576040519150601f19603f3d011682016040523d82523d6000602084013e611991565b606091505b50915091508180156119bf5750805115806119bf57508080602001905160208110156119bc57600080fd5b50515b6119fa5760405162461bcd60e51b81526004018080602001828103825260318152602001806128016031913960400191505060405180910390fd5b505050505050565b600082821115611a59576040805162461bcd60e51b815260206004820152601e60248201527f536166654d6174683a207375627472616374696f6e206f766572666c6f770000604482015290519081900360640190fd5b50900390565b6000611760838362ffffff16620f424061212b565b6001600160a01b0391821660009081526101386020908152604080832093909416825291909152205490565b6000828201818312801590611ab55750838112155b80611aca5750600083128015611aca57508381125b6117605760405162461bcd60e51b81526004018080602001828103825260218152602001806128326021913960400191505060405180910390fd5b611b0d610b3d565b15611b52576040805162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b604482015290519081900360640190fd5b6099805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861167c6115ea565b6101315460408051632f60a15160e01b815290516000926001600160a01b031691632f60a151916004808301926020929190829003018186803b158015611bce57600080fd5b505afa158015611be2573d6000803e3d6000fd5b505050506040513d6020811015611bf857600080fd5b5051905090565b6000818312156118465781611760565b600080821215611833576040805162461bcd60e51b815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015290519081900360640190fd5b3b151590565b6001600160a01b038116611cb2576040805162461bcd60e51b81526020600482015260086024820152674252435f4954464160c01b604482015290519081900360640190fd5b60fd80546001600160a01b0383166001600160a01b0319909116811790915560408051918252517fa4388ecc389b1390354ae0c65a856c0d7dd4fb648419f5d3ac0b99e38f46fd119181900360200190a150565b6000818303818312801590611d1b5750838113155b80611d305750600083128015611d3057508381135b6117605760405162461bcd60e51b81526004018080602001828103825260248152602001806129616024913960400191505060405180910390fd5b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b1781529251825160009485949389169392918291908083835b60208310611de75780518252601f199092019160209182019101611dc8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611e49576040519150601f19603f3d011682016040523d82523d6000602084013e611e4e565b606091505b5091509150818015611e7c575080511580611e7c5750808060200190516020811015611e7957600080fd5b50515b6115dc5760405162461bcd60e51b815260040180806020018281038252602d815260200180612934602d913960400191505060405180910390fd5b6000611ec230611c66565b15905090565b600054610100900460ff1680611ee15750611ee1611eb7565b80611eef575060005460ff16155b611f2a5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611f55576000805460ff1961ff0019909116610100171660011790555b611f5d6121da565b8015610f38576000805461ff001916905550565b600054610100900460ff1680611f8a5750611f8a611eb7565b80611f98575060005460ff16155b611fd35760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611ffe576000805460ff1961ff0019909116610100171660011790555b61200661227f565b611f5d61236e565b6001600160a01b0381166000908152610139602052604090205460ff1615612065576040805162461bcd60e51b8152602060048201526005602482015264565f43544560d81b604482015290519081900360640190fd5b6001600160a01b0316600081815261013960205260408120805460ff19166001908117909155610137805491820181559091527f43dc304bb3613567eca51c4fb9e7f3128bc51bba882a32550e891d6cbd8a0fa10180546001600160a01b0319169091179055565b6000601836108015906120e457506120e433610b29565b156120f8575060131936013560601c610b44565b5033610b44565b60006117608360ff601285900316600a0a61240b565b60006117608360ff601285900316600a0a6124b4565b6000808060001985870986860292508281109083900303905080612161576000841161215657600080fd5b508290049050611760565b80841161216d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b600054610100900460ff16806121f357506121f3611eb7565b80612201575060005460ff16155b61223c5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015612267576000805460ff1961ff0019909116610100171660011790555b600180558015610f38576000805461ff001916905550565b600054610100900460ff16806122985750612298611eb7565b806122a6575060005460ff16155b6122e15760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561230c576000805460ff1961ff0019909116610100171660011790555b61231461256c565b600061231e6115ea565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000906000805160206128c5833981519152908290a3508015610f38576000805461ff001916905550565b600054610100900460ff16806123875750612387611eb7565b80612395575060005460ff16155b6123d05760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff161580156123fb576000805460ff1961ff0019909116610100171660011790555b6124036125fd565b611f5d61269d565b60008261241a575060006106e3565b8260001914801561242e5750600160ff1b82145b1561246a5760405162461bcd60e51b81526004018080602001828103825260278152602001806128e56027913960400191505060405180910390fd5b8282028284828161247757fe5b05146117605760405162461bcd60e51b81526004018080602001828103825260278152602001806128e56027913960400191505060405180910390fd5b600081612508576040805162461bcd60e51b815260206004820181905260248201527f5369676e6564536166654d6174683a206469766973696f6e206279207a65726f604482015290519081900360640190fd5b8160001914801561251c5750600160ff1b83145b156125585760405162461bcd60e51b81526004018080602001828103825260218152602001806128a46021913960400191505060405180910390fd5b600082848161256357fe5b05949350505050565b600054610100900460ff16806125855750612585611eb7565b80612593575060005460ff16155b6125ce5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff161580156125f9576000805460ff1961ff0019909116610100171660011790555b611f5d5b600054610100900460ff16806126165750612616611eb7565b80612624575060005460ff16155b61265f5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff16158015611f5d576000805460ff1961ff0019909116610100171660011790558015610f38576000805461ff001916905550565b600054610100900460ff16806126b657506126b6611eb7565b806126c4575060005460ff16155b6126ff5760405162461bcd60e51b815260040180806020018281038252602e815260200180612853602e913960400191505060405180910390fd5b600054610100900460ff1615801561272a576000805460ff1961ff0019909116610100171660011790555b6099805460ff191690558015610f38576000805461ff001916905550565b828054600181600116156101000203166002900490600052602060002090601f01602090048101928261277e57600085556127c4565b82601f1061279757805160ff19168380011785556127c4565b828001600101855582156127c4579182015b828111156127c45782518255916020019190600101906127a9565b506118339291505b8082111561183357600081556001016127cc56fe5265656e7472616e637947756172643a207265656e7472616e742063616c6c005472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645369676e6564536166654d6174683a206164646974696f6e206f766572666c6f77496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a6564544244202d20746f6b656e2074776170202a2074726164657227732062616c616e63655369676e6564536166654d6174683a206469766973696f6e206f766572666c6f778be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7753616665436173743a2076616c756520646f65736e27742066697420696e20616e20696e743235365472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65645369676e6564536166654d6174683a207375627472616374696f6e206f766572666c6f77a2646970667358221220ce1551b3baf9ef0ea7225fe1cfcffc5ef95d676bf6146512a1ec031cfaccd21264736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/external/abi/perp/PerpV2VirtualToken.json b/external/abi/perp/PerpV2VirtualToken.json index 6fb6849c2..45fca9c8c 100644 --- a/external/abi/perp/PerpV2VirtualToken.json +++ b/external/abi/perp/PerpV2VirtualToken.json @@ -434,4 +434,4 @@ "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106100fc5760003560e01c806306fdde0314610101578063095ea7b31461017e57806309fd8212146101be57806313af4035146101e457806318160ddd1461020c57806323b872dd14610226578063313ce5671461025c578063395093511461027a5780636c8381f8146102a657806370a08231146102ca578063715018a6146102f057806378c8cda7146102f85780638da5cb5b1461031e57806395d89b4114610326578063a457c2d71461032e578063a9059cbb1461035a578063bc5920ba14610386578063dd62ed3e1461038e578063f52e308e146103bc578063f80f5dd5146103e2575b600080fd5b610109610408565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561014357818101518382015260200161012b565b50505050905090810190601f1680156101705780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6101aa6004803603604081101561019457600080fd5b506001600160a01b03813516906020013561049e565b604080519115158252519081900360200190f35b6101aa600480360360208110156101d457600080fd5b50356001600160a01b03166104bb565b61020a600480360360208110156101fa57600080fd5b50356001600160a01b03166104d9565b005b610214610634565b60408051918252519081900360200190f35b6101aa6004803603606081101561023c57600080fd5b506001600160a01b0381358116916020810135909116906040013561063a565b6102646106c1565b6040805160ff9092168252519081900360200190f35b6101aa6004803603604081101561029057600080fd5b506001600160a01b0381351690602001356106ca565b6102ae610718565b604080516001600160a01b039092168252519081900360200190f35b610214600480360360208110156102e057600080fd5b50356001600160a01b0316610727565b61020a610742565b61020a6004803603602081101561030e57600080fd5b50356001600160a01b03166107e3565b6102ae610898565b6101096108a7565b6101aa6004803603604081101561034457600080fd5b506001600160a01b038135169060200135610908565b6101aa6004803603604081101561037057600080fd5b506001600160a01b038135169060200135610970565b61020a610984565b610214600480360360408110156103a457600080fd5b506001600160a01b0381358116916020013516610a70565b61020a600480360360208110156103d257600080fd5b50356001600160a01b0316610a9b565b61020a600480360360208110156103f857600080fd5b50356001600160a01b0316610b07565b606a8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104945780601f1061046957610100808354040283529160200191610494565b820191906000526020600020905b81548152906001019060200180831161047757829003601f168201915b5050505050905090565b60006104b26104ab610bbf565b8484610bc3565b50600192915050565b6001600160a01b031660009081526099602052604090205460ff1690565b6104e1610bbf565b6001600160a01b03166104f2610898565b6001600160a01b031614610536576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b03811661057a576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b03828116911614156105c6576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b0382811691161415610612576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b60695490565b6000610647848484610caf565b6106b784610653610bbf565b6106b2856040518060600160405280602881526020016110a1602891396001600160a01b038a16600090815260686020526040812090610691610bbf565b6001600160a01b031681526020810191909152604001600020549190610dfa565b610bc3565b5060019392505050565b606c5460ff1690565b60006104b26106d7610bbf565b846106b285606860006106e8610bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490610e91565b6034546001600160a01b031690565b6001600160a01b031660009081526067602052604090205490565b61074a610bbf565b6001600160a01b031661075b610898565b6001600160a01b03161461079f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b0316906000805160206110c9833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b6107eb610bbf565b6001600160a01b03166107fc610898565b6001600160a01b031614610840576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19169055815192835290517fde8cf212af7ce38b2840785a2768d97ff2dbf3c21b516961cec0061e134c2a1e9281900390910190a150565b6033546001600160a01b031690565b606b8054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156104945780601f1061046957610100808354040283529160200191610494565b60006104b2610915610bbf565b846106b285604051806060016040528060258152602001611152602591396068600061093f610bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190610dfa565b60006104b261097d610bbf565b8484610caf565b6034546001600160a01b03166109c9576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b6109d1610bbf565b6034546001600160a01b03908116911614610a1c576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b0392831692909116906000805160206110c983398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b6001600160a01b03918216600090815260686020908152604080832093909416825291909152205490565b610aa3610bbf565b6001600160a01b0316610ab4610898565b6001600160a01b031614610af8576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b610b0481600019610ef0565b50565b610b0f610bbf565b6001600160a01b0316610b20610898565b6001600160a01b031614610b64576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116600081815260996020908152604091829020805460ff19166001179055815192835290517f4790a4adb426ca2345bb5108f6e454eae852a7bf687544cd66a7270dff3a41d69281900390910190a150565b3390565b6001600160a01b038316610c085760405162461bcd60e51b815260040180806020018281038252602481526020018061112e6024913960400191505060405180910390fd5b6001600160a01b038216610c4d5760405162461bcd60e51b81526004018080602001828103825260228152602001806110596022913960400191505060405180910390fd5b6001600160a01b03808416600081815260686020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316610cf45760405162461bcd60e51b81526004018080602001828103825260258152602001806111096025913960400191505060405180910390fd5b6001600160a01b038216610d395760405162461bcd60e51b81526004018080602001828103825260238152602001806110366023913960400191505060405180910390fd5b610d44838383610fd0565b610d818160405180606001604052806026815260200161107b602691396001600160a01b0386166000908152606760205260409020549190610dfa565b6001600160a01b038085166000908152606760205260408082209390935590841681522054610db09082610e91565b6001600160a01b0380841660008181526067602090815260409182902094909455805185815290519193928716926000805160206110e983398151915292918290030190a3505050565b60008184841115610e895760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015610e4e578181015183820152602001610e36565b50505050905090810190601f168015610e7b5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600082820183811015610ee9576040805162461bcd60e51b815260206004820152601b60248201527a536166654d6174683a206164646974696f6e206f766572666c6f7760281b604482015290519081900360640190fd5b9392505050565b6001600160a01b038216610f4b576040805162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015290519081900360640190fd5b610f5760008383610fd0565b606954610f649082610e91565b6069556001600160a01b038216600090815260676020526040902054610f8a9082610e91565b6001600160a01b03831660008181526067602090815260408083209490945583518581529351929391926000805160206110e98339815191529281900390910190a35050565b610fdb838383611030565b6001600160a01b03831660009081526099602052604090205460ff16611030576040805162461bcd60e51b815260206004820152600560248201526456545f4e5760d81b604482015290519081900360640190fd5b50505056fe45524332303a207472616e7366657220746f20746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f206164647265737345524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737345524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220df3f55b773b943d00d1f14758331408fd26a5755fc712ad272b393789084cb0864736f6c63430007060033", "linkReferences": {}, "deployedLinkReferences": {} -} +} \ No newline at end of file diff --git a/hardhat.config.ts b/hardhat.config.ts index 2b0140416..6f8fe55bc 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -68,6 +68,13 @@ const config: HardhatUserConfig = { externalArtifacts: ["external/**/*.json"], }, mocha: mochaConfig, + + // These are external artifacts we don't compile but would like to improve + // test performance for by hardcoding the gas into the abi at runtime + // @ts-ignore + externalGasMods: [ + "external/abi/perp", + ], }; function getHardhatPrivateKeys() { diff --git a/tasks/subtasks.ts b/tasks/subtasks.ts index 2c46c6193..96ea51507 100644 --- a/tasks/subtasks.ts +++ b/tasks/subtasks.ts @@ -1,9 +1,13 @@ +import fs from "fs-extra"; + import { TASK_COMPILE_SOLIDITY_GET_ARTIFACT_FROM_COMPILATION_OUTPUT, } from "hardhat/builtin-tasks/task-names"; +import { TASK_TYPECHAIN_GENERATE_TYPES } from "@typechain/hardhat/dist/constants"; + import { subtask } from "hardhat/config"; -import { addGasToAbiMethods } from "../utils/tasks"; +import { addGasToAbiMethods, removeGasFromAbiMethods } from "../utils/tasks"; // Injects network block limit (minus 1 million) in the abi so // ethers uses it instead of running gas estimation. @@ -21,4 +25,34 @@ subtask(TASK_COMPILE_SOLIDITY_GET_ARTIFACT_FROM_COMPILATION_OUTPUT) } ); +// Hooks into the typechain task to inject hardcoded gas into external ABIs (and run them fast) +// ABIs picked up by this task need their location listed in the externalGasMods array +// in `hardhat.config.json`. Temporarily rewrites artifact so typechain picks up the network +// specific gas requirement without introducing any git changes. +subtask(TASK_TYPECHAIN_GENERATE_TYPES) + .setAction(async (_, env, runSuper) => { + const artifacts: any[] = []; + + for (const project of (env.config as any).externalGasMods) { + const files = fs.readdirSync(project); + + for (const file of files) { + const artifactPath = `${process.cwd()}/${project}/${file}`; + const artifact = require(artifactPath); + + artifact.abi = addGasToAbiMethods(env.network.config, artifact.abi); + fs.outputFileSync(artifactPath, JSON.stringify(artifact, undefined, " ")); + artifacts.push({artifact, artifactPath}); + } + } + + await runSuper(); + + for (const item of artifacts) { + item.artifact.abi = removeGasFromAbiMethods(item.artifact.abi); + fs.outputFileSync(item.artifactPath, JSON.stringify(item.artifact, undefined, " ")); + } + } +); + export {}; diff --git a/utils/tasks/artifactUtils.ts b/utils/tasks/artifactUtils.ts index 1a3483398..5cbc15ed5 100644 --- a/utils/tasks/artifactUtils.ts +++ b/utils/tasks/artifactUtils.ts @@ -40,3 +40,22 @@ export function addGasToAbiMethods( return modifiedAbi; } + +// Removes gas field from ABI. Useful when temporarily modifying external artifacts +// that have variable gas requirements depending on use context (e.g coverage, different networks) +export function removeGasFromAbiMethods(abi: any[]) { + const modifiedAbi: any[] = []; + + for (const abiElement of abi) { + if (abiElement.type !== "function") { + modifiedAbi.push(abiElement); + continue; + } + + delete abiElement.gas; + + modifiedAbi.push(abiElement); + } + + return modifiedAbi; +} From f9afe5bf88db515c7ef5803a461d87e9d01fb774 Mon Sep 17 00:00:00 2001 From: cgewecke Date: Thu, 21 Oct 2021 10:30:06 -0700 Subject: [PATCH 6/6] Lint with es-lint (after rebase) --- tasks/subtasks.ts | 2 +- test/fixtures/perpV2.spec.ts | 32 +++---- utils/deploys/deployMocks.ts | 2 +- utils/fixtures/perpV2Fixture.ts | 151 ++++++++++++++++---------------- yarn.lock | 7 +- 5 files changed, 99 insertions(+), 95 deletions(-) diff --git a/tasks/subtasks.ts b/tasks/subtasks.ts index 96ea51507..7ea5da486 100644 --- a/tasks/subtasks.ts +++ b/tasks/subtasks.ts @@ -53,6 +53,6 @@ subtask(TASK_TYPECHAIN_GENERATE_TYPES) fs.outputFileSync(item.artifactPath, JSON.stringify(item.artifact, undefined, " ")); } } -); + ); export {}; diff --git a/test/fixtures/perpV2.spec.ts b/test/fixtures/perpV2.spec.ts index 8b9d16dff..7dc4c8d70 100644 --- a/test/fixtures/perpV2.spec.ts +++ b/test/fixtures/perpV2.spec.ts @@ -62,14 +62,14 @@ describe("PerpV2Fixture", () => { const initialAmmBaseTokenPrice = await perpV2.getAMMBaseTokenPrice(); await perpV2.clearingHouse.connect(taker.wallet).openPosition({ - baseToken: perpV2.baseToken.address, - isBaseToQuote: false, - isExactInput: true, - oppositeAmountBound: 0, - amount: ether(100), - sqrtPriceLimitX96: 0, - deadline: constants.MaxUint256, - referralCode: constants.HashZero, + baseToken: perpV2.baseToken.address, + isBaseToQuote: false, + isExactInput: true, + oppositeAmountBound: 0, + amount: ether(100), + sqrtPriceLimitX96: 0, + deadline: constants.MaxUint256, + referralCode: constants.HashZero, }); const finalAmmBaseTokenPrice = await perpV2.getAMMBaseTokenPrice(); @@ -126,14 +126,14 @@ describe("PerpV2Fixture", () => { // Take long position await perpV2.clearingHouse.connect(taker.wallet).openPosition({ - baseToken: perpV2.baseToken.address, - isBaseToQuote: false, - isExactInput: true, - oppositeAmountBound: 0, - amount: ether(takerBuyAmount), - sqrtPriceLimitX96: 0, - deadline: constants.MaxUint256, - referralCode: constants.HashZero, + baseToken: perpV2.baseToken.address, + isBaseToQuote: false, + isExactInput: true, + oppositeAmountBound: 0, + amount: ether(takerBuyAmount), + sqrtPriceLimitX96: 0, + deadline: constants.MaxUint256, + referralCode: constants.HashZero, }); }); diff --git a/utils/deploys/deployMocks.ts b/utils/deploys/deployMocks.ts index 4a5b4ae14..18ef710a9 100644 --- a/utils/deploys/deployMocks.ts +++ b/utils/deploys/deployMocks.ts @@ -371,7 +371,7 @@ export default class DeployMocks { return await new ChainlinkAggregatorMock__factory(this._deployerSigner).deploy(decimals); } - /************************************* + /** *********************************** * Instance getters ************************************/ diff --git a/utils/fixtures/perpV2Fixture.ts b/utils/fixtures/perpV2Fixture.ts index ea59ae2af..7343e1c58 100644 --- a/utils/fixtures/perpV2Fixture.ts +++ b/utils/fixtures/perpV2Fixture.ts @@ -16,7 +16,6 @@ import { Account } from "../test/types"; import { PerpV2AccountBalance, PerpV2BaseToken, - PerpV2ChainlinkPriceFeed, PerpV2ClearingHouseConfig, PerpV2Exchange, PerpV2InsuranceFund, @@ -147,10 +146,10 @@ export class PerpV2Fixture { this.vault = await this._deployer.external.deployPerpV2Vault(); await this.vault.initialize( - this.insuranceFund.address, - this.clearingHouseConfig.address, - this.accountBalance.address, - this.exchange.address, + this.insuranceFund.address, + this.clearingHouseConfig.address, + this.accountBalance.address, + this.exchange.address, ); await this.insuranceFund.setBorrower(this.vault.address); @@ -172,12 +171,12 @@ export class PerpV2Fixture { this.clearingHouse = await this._deployer.external.deployPerpV2ClearingHouse(); await this.clearingHouse.initialize( - this.clearingHouseConfig.address, - this.vault.address, - this.quoteToken.address, - this.uniV3Factory.address, - this.exchange.address, - this.accountBalance.address, + this.clearingHouseConfig.address, + this.vault.address, + this.quoteToken.address, + this.uniV3Factory.address, + this.exchange.address, + this.accountBalance.address, ); await this.quoteToken.mintMaximumTo(this.clearingHouse.address); @@ -204,32 +203,32 @@ export class PerpV2Fixture { baseTokenAmount: BigNumberish, quoteTokenAmount: BigNumberish ): Promise { - await this.pool.initialize(this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount)); - await this.pool.increaseObservationCardinalityNext((2 ^ 16) - 1); - - const tickSpacing = await this.pool.tickSpacing(); - const lowerTick = this._getMinTick(tickSpacing); - const upperTick = this._getMaxTick(tickSpacing); - - await this.marketRegistry.addPool(this.baseToken.address, this._feeTier); - await this.marketRegistry.setFeeRatio(this.baseToken.address, this._feeTier); - - // prepare collateral for maker - const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._usdcDecimals); - await this.usdc.mint(maker.address, makerCollateralAmount); - await this.deposit(maker, BigNumber.from(ONE_MILLION), this.usdc); - - // maker add liquidity at ratio - await this.clearingHouse.connect(maker.wallet).addLiquidity({ - baseToken: this.baseToken.address, - base: baseTokenAmount, - quote: quoteTokenAmount, - lowerTick, - upperTick, - minBase: 0, - minQuote: 0, - deadline: constants.MaxUint256, - }); + await this.pool.initialize(this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount)); + await this.pool.increaseObservationCardinalityNext((2 ^ 16) - 1); + + const tickSpacing = await this.pool.tickSpacing(); + const lowerTick = this._getMinTick(tickSpacing); + const upperTick = this._getMaxTick(tickSpacing); + + await this.marketRegistry.addPool(this.baseToken.address, this._feeTier); + await this.marketRegistry.setFeeRatio(this.baseToken.address, this._feeTier); + + // prepare collateral for maker + const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._usdcDecimals); + await this.usdc.mint(maker.address, makerCollateralAmount); + await this.deposit(maker, BigNumber.from(ONE_MILLION), this.usdc); + + // maker add liquidity at ratio + await this.clearingHouse.connect(maker.wallet).addLiquidity({ + baseToken: this.baseToken.address, + base: baseTokenAmount, + quote: quoteTokenAmount, + lowerTick, + upperTick, + minBase: 0, + minQuote: 0, + deadline: constants.MaxUint256, + }); } public async initializePoolWithLiquidityWithinTicks( @@ -239,28 +238,28 @@ export class PerpV2Fixture { lowerTick: number, upperTick: number ): Promise { - await this.pool.initialize(this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount)); - await this.pool.increaseObservationCardinalityNext((2 ^ 16) - 1); - - await this.marketRegistry.addPool(this.baseToken.address, this._feeTier); - await this.marketRegistry.setFeeRatio(this.baseToken.address, this._feeTier); - - // prepare collateral for maker - const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._usdcDecimals); - await this.usdc.mint(maker.address, makerCollateralAmount); - await this.deposit(maker, BigNumber.from(ONE_MILLION), this.usdc); - - // maker add liquidity at ratio - await this.clearingHouse.connect(maker.wallet).addLiquidity({ - baseToken: this.baseToken.address, - base: baseTokenAmount, - quote: quoteTokenAmount, - lowerTick, - upperTick, - minBase: 0, - minQuote: 0, - deadline: constants.MaxUint256, - }); + await this.pool.initialize(this._encodePriceSqrt(quoteTokenAmount, baseTokenAmount)); + await this.pool.increaseObservationCardinalityNext((2 ^ 16) - 1); + + await this.marketRegistry.addPool(this.baseToken.address, this._feeTier); + await this.marketRegistry.setFeeRatio(this.baseToken.address, this._feeTier); + + // prepare collateral for maker + const makerCollateralAmount = utils.parseUnits(ONE_MILLION, this._usdcDecimals); + await this.usdc.mint(maker.address, makerCollateralAmount); + await this.deposit(maker, BigNumber.from(ONE_MILLION), this.usdc); + + // maker add liquidity at ratio + await this.clearingHouse.connect(maker.wallet).addLiquidity({ + baseToken: this.baseToken.address, + base: baseTokenAmount, + quote: quoteTokenAmount, + lowerTick, + upperTick, + minBase: 0, + minQuote: 0, + deadline: constants.MaxUint256, + }); } public async setBaseTokenOraclePrice(price: string): Promise { @@ -316,16 +315,16 @@ export class PerpV2Fixture { baseToken: randomToken0, mockAggregator: randomMockAggregator0, } = await this._createBaseTokenFixture( - "RandomTestToken0", - "randomToken0", + "RandomTestToken0", + "randomToken0", ); const { baseToken: randomToken1, mockAggregator: randomMockAggregator1, } = await this._createBaseTokenFixture( - "RandomTestToken1", - "randomToken1", + "RandomTestToken1", + "randomToken1", ); let token0: PerpV2BaseToken; @@ -334,25 +333,25 @@ export class PerpV2Fixture { let mockAggregator1: ChainlinkAggregatorMock; if (this._isAscendingTokenOrder(randomToken0.address, randomToken1.address)) { - token0 = randomToken0; - mockAggregator0 = randomMockAggregator0; - token1 = randomToken1 as PerpV2VirtualToken as PerpV2QuoteToken; - mockAggregator1 = randomMockAggregator1; + token0 = randomToken0; + mockAggregator0 = randomMockAggregator0; + token1 = randomToken1 as PerpV2VirtualToken as PerpV2QuoteToken; + mockAggregator1 = randomMockAggregator1; } else { - token0 = randomToken1; - mockAggregator0 = randomMockAggregator1; - token1 = randomToken0 as PerpV2VirtualToken as PerpV2QuoteToken; - mockAggregator1 = randomMockAggregator0; + token0 = randomToken1; + mockAggregator0 = randomMockAggregator1; + token1 = randomToken0 as PerpV2VirtualToken as PerpV2QuoteToken; + mockAggregator1 = randomMockAggregator0; } return { - token0, - mockAggregator0, - token1, - mockAggregator1, + token0, + mockAggregator0, + token1, + mockAggregator1, }; } private _isAscendingTokenOrder(addr0: string, addr1: string): boolean { - return addr0.toLowerCase() < addr1.toLowerCase(); + return addr0.toLowerCase() < addr1.toLowerCase(); } } diff --git a/yarn.lock b/yarn.lock index 7116dbf2a..dee357ced 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5372,7 +5372,7 @@ glob-parent@^5.1.0, glob-parent@~5.1.0: dependencies: is-glob "^4.0.1" -glob-parent@~5.1.2: +glob-parent@^5.1.2, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -6979,6 +6979,11 @@ lodash@4.17.20, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17. resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== +lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + log-driver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8"