@perp/curie-deployments
Version:
Perpetual Protocol Curie (v2) contract artifacts (ABIs) and deployed addresses
647 lines • 50.5 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "MarketRegistry",
"sourceName": "contracts/MarketRegistry.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": false,
"internalType": "uint24",
"name": "discountRatio",
"type": "uint24"
}
],
"name": "FeeDiscountRatioChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": false,
"internalType": "bool",
"name": "isFeeManager",
"type": "bool"
}
],
"name": "FeeManagerChanged",
"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": "address",
"name": "baseToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint24",
"name": "feeRatio",
"type": "uint24"
}
],
"name": "InsuranceFundFeeRatioChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "baseToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint24",
"name": "spreadRatio",
"type": "uint24"
}
],
"name": "MarketMaxPriceSpreadRatioChanged",
"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": "getClearingHouse",
"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": "uint24",
"name": "maxPriceSpreadRatio",
"type": "uint24"
}
],
"internalType": "struct IMarketRegistry.MarketInfo",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "trader",
"type": "address"
},
{
"internalType": "address",
"name": "baseToken",
"type": "address"
}
],
"name": "getMarketInfoByTrader",
"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": "uint24",
"name": "maxPriceSpreadRatio",
"type": "uint24"
}
],
"internalType": "struct IMarketRegistry.MarketInfo",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "baseToken",
"type": "address"
}
],
"name": "getMarketMaxPriceSpreadRatio",
"outputs": [
{
"internalType": "uint24",
"name": "",
"type": "uint24"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getMaxOrdersPerMarket",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "baseToken",
"type": "address"
}
],
"name": "getPool",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getQuoteToken",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getUniswapV3Factory",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "baseToken",
"type": "address"
}
],
"name": "hasPool",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"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": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "isFeeManager",
"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": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "clearingHouseArg",
"type": "address"
}
],
"name": "setClearingHouse",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "trader",
"type": "address"
},
{
"internalType": "uint24",
"name": "discountRatio",
"type": "uint24"
}
],
"name": "setFeeDiscountRatio",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "accountArg",
"type": "address"
},
{
"internalType": "bool",
"name": "isFeeManagerArg",
"type": "bool"
}
],
"name": "setFeeManager",
"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": "address",
"name": "baseToken",
"type": "address"
},
{
"internalType": "uint24",
"name": "ratio",
"type": "uint24"
}
],
"name": "setMarketMaxPriceSpreadRatio",
"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": "updateOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x608060405234801561001057600080fd5b50612380806100206000396000f3fe608060405234801561001057600080fd5b506004361061016e5760003560e01c80638866c9dd116100ce578063bc5920ba11610087578063bc5920ba146102e4578063c0c8e63f146102ec578063c575ff79146102ff578063c7bf443414610307578063ce19556a1461031a578063ece090c41461032d578063edd0b5cb146103425761016e565b80638866c9dd146102885780638da5cb5b1461029b578063a680d183146102a3578063b081983b146102b6578063bb235d11146102be578063bbe4f6db146102d15761016e565b80633feb42121161012b5780633feb421214610217578063449323d81461022a578063485cc9551461023d5780634a64d67d146102505780636c8381f814610265578063715018a61461026d578063831f72b4146102755761016e565b806308ff49ad146101735780630cf85bcc1461019c578063119c32ff146101bc5780631246dbf5146101d157806313af4035146101f15780633fcbaa7d14610204575b600080fd5b610186610181366004611da0565b610355565b6040516101939190612286565b60405180910390f35b6101af6101aa366004611da0565b6103bb565b6040516101939190612239565b6101cf6101ca366004611e3d565b61047c565b005b6101e46101df366004611da0565b61053e565b6040516101939190611fe9565b6101cf6101ff366004611da0565b610561565b6101e4610212366004611da0565b6106bc565b6101cf610225366004611e3d565b6106da565b6101cf610238366004611da0565b610802565b6101cf61024b366004611dd8565b6108a9565b6102586109ef565b6040516101939190611f74565b6102586109fe565b6101cf610a0d565b6101cf610283366004611f3c565b610aae565b6101af610296366004611dd8565b610b5e565b610258610c76565b6101866102b1366004611da0565b610c85565b610258610c96565b6101cf6102cc366004611e3d565b610ca5565b6102586102df366004611da0565b610dbf565b6101cf610e1a565b6101cf6102fa366004611e3d565b610f06565b610258610fc4565b610258610315366004611e3d565b610fd3565b6101cf610328366004611e10565b6115ed565b6103356116d9565b6040516101939190612296565b610186610350366004611da0565b6116e9565b6001600160a01b038082166000908152609c602052604081205490918391166103995760405162461bcd60e51b8152600401610390906121b8565b60405180910390fd5b50506001600160a01b03166000908152609d602052604090205462ffffff1690565b6103c3611d40565b6001600160a01b038083166000908152609c60205260409020548391166103fc5760405162461bcd60e51b8152600401610390906121b8565b6040805160a0810182526001600160a01b038086166000818152609c6020908152858220549093168452818152609e83528481205462ffffff90811684860152828252609f845285822054811685870152918152609d9092529290205490911660608201526080810161046e85611746565b62ffffff1690529392505050565b610484611799565b6001600160a01b0316610495610c76565b6001600160a01b0316146104d9576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038216600081815260a0602052604090819020805462ffffff191662ffffff8516179055517fb36b0a82967a9496ce3df9cf912c7fb7e1b7b1ecc188c314765b8010146ae02090610532908490612286565b60405180910390a25050565b6001600160a01b038181166000908152609c60205260409020541615155b919050565b610569611799565b6001600160a01b031661057a610c76565b6001600160a01b0316146105be576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610602576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b038281169116141561064e576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b038281169116141561069a576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0316600090815260a2602052604090205460ff1690565b6001600160a01b038083166000908152609c60205260409020548391166107135760405162461bcd60e51b8152600401610390906121b8565b81620f42408162ffffff16111561073c5760405162461bcd60e51b8152600401610390906120d1565b610744611799565b6001600160a01b0316610755610c76565b6001600160a01b031614610799576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152609d602052604090819020805462ffffff191662ffffff8616179055517f4f2c8571cf1c1d45fa37ea4bd4ae08b528b6db54a9409cce6eb0023fb87d5e88906107f49086908690611fcb565b60405180910390a150505050565b61080a611799565b6001600160a01b031661081b610c76565b6001600160a01b03161461085f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b600054610100900460ff16806108c257506108c261179d565b806108d0575060005460ff16155b61090b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff16158015610936576000805460ff1961ff0019909116610100171660011790555b61093e6117ae565b610950836001600160a01b0316611858565b61096c5760405162461bcd60e51b8152600401610390906120b0565b61097e826001600160a01b0316611858565b61099a5760405162461bcd60e51b81526004016103909061208f565b609a80546001600160a01b038086166001600160a01b031992831617909255609b805460ff60a01b199386169216919091179190911660ff60a01b17905580156109ea576000805461ff00191690555b505050565b609b546001600160a01b031690565b6034546001600160a01b031690565b610a15611799565b6001600160a01b0316610a26610c76565b6001600160a01b031614610a6a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020612305833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b610ab6611799565b6001600160a01b0316610ac7610c76565b6001600160a01b031614610b0b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b609b805460ff60a01b1916600160a01b60ff8416021790556040517ff3d121ca0d4fa5acf57cf8a09acedf5326b6ca02f25764d2a05a4dba8e4a777e90610b53908390612296565b60405180910390a150565b610b66611d40565b6001600160a01b038083166000908152609c6020526040902054839116610b9f5760405162461bcd60e51b8152600401610390906121b8565b6001600160a01b038416600090815260a16020526040812054610bfc90610bf790610bd390620f42409062ffffff1661185e565b6001600160a01b0387166000908152609e602052604090205462ffffff1690611890565b6118a5565b6040805160a0810182526001600160a01b038088166000818152609c602090815285822054909316845262ffffff80871684860152828252609f845285822054811685870152918152609d90925292902054909116606082015290915060808101610c6686611746565b62ffffff16905295945050505050565b6033546001600160a01b031690565b6000610c9082611746565b92915050565b609a546001600160a01b031690565b6001600160a01b038083166000908152609c6020526040902054839116610cde5760405162461bcd60e51b8152600401610390906121b8565b81620f42408162ffffff161115610d075760405162461bcd60e51b8152600401610390906120d1565b610d0f611799565b6001600160a01b0316610d20610c76565b6001600160a01b031614610d64576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152609e602052604090819020805462ffffff191662ffffff8616179055517f8129297a1a8d252870739804c1d9cdbc86121230ce172c23ec11a940ccab01ef906107f49086908690611fcb565b6001600160a01b038082166000908152609c60205260408120549091839116610dfa5760405162461bcd60e51b8152600401610390906121b8565b50506001600160a01b039081166000908152609c60205260409020541690565b6034546001600160a01b0316610e5f576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610e67611799565b6034546001600160a01b03908116911614610eb2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061230583398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b80620f42408162ffffff161115610f2f5760405162461bcd60e51b8152600401610390906120d1565b33600090815260a2602052604090205460ff16610f5e5760405162461bcd60e51b815260040161039090612219565b6001600160a01b038316600081815260a1602052604090819020805462ffffff191662ffffff8616179055517f0ed4e5aa6674fae312ed5fae8e535f1a92aac8eb2ae5187f22074fe1175461ff90610fb7908590612286565b60405180910390a2505050565b6067546001600160a01b031690565b6000610fdd611799565b6001600160a01b0316610fee610c76565b6001600160a01b031614611032576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038381166000908152609c6020526040902054161561106a5760405162461bcd60e51b815260040161039090612110565b826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156110a357600080fd5b505afa1580156110b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110db9190611f58565b60ff166012146110fd5760405162461bcd60e51b8152600401610390906121d8565b6067546040516370a0823160e01b8152600019916001600160a01b03808716926370a0823192611131921690600401611f74565b60206040518083038186803b15801561114957600080fd5b505afa15801561115d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111819190611f24565b1461119e5760405162461bcd60e51b81526004016103909061206d565b609b54604080516318160ddd60e01b81529051600019926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190611f24565b146112395760405162461bcd60e51b815260040161039090612173565b609b546001600160a01b03908116908416106112675760405162461bcd60e51b8152600401610390906121fa565b609a54609b54600091611288916001600160a01b03918216911686866118e9565b90506001600160a01b0381166112b05760405162461bcd60e51b815260040161039090612016565b60006112bb82611989565b5050505050506001600160a01b0316905080600014156112ed5760405162461bcd60e51b8152600401610390906120f0565b6067546040516304fec10960e11b81526001600160a01b03878116926309fd82129261131f9290911690600401611f74565b60206040518083038186803b15801561133757600080fd5b505afa15801561134b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f9190611e71565b61138b5760405162461bcd60e51b815260040161039090612151565b6040516304fec10960e11b81526001600160a01b038616906309fd8212906113b7908590600401611f74565b60206040518083038186803b1580156113cf57600080fd5b505afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190611e71565b6114235760405162461bcd60e51b81526004016103909061212f565b609b546067546040516304fec10960e11b81526001600160a01b03928316926309fd82129261145792911690600401611f74565b60206040518083038186803b15801561146f57600080fd5b505afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190611e71565b6114c35760405162461bcd60e51b815260040161039090612195565b609b546040516304fec10960e11b81526001600160a01b03909116906309fd8212906114f3908590600401611f74565b60206040518083038186803b15801561150b57600080fd5b505afa15801561151f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115439190611e71565b61155f5760405162461bcd60e51b815260040161039090611ff4565b6001600160a01b038086166000818152609c6020908152604080832080549588166001600160a01b031990961686179055609f8252808320805462ffffff8b1662ffffff199182168117909255609e90935281842080549093168117909255519092917f8b17db32f8ec22477a8f9475d5b92052ef2ce8c6c73ad79be1eb297a8fdd2ff191a4509392505050565b6115f5611799565b6001600160a01b0316611606610c76565b6001600160a01b03161461164a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038216600090815260a2602052604090205460ff1615158115151415611676576116d5565b6001600160a01b038216600090815260a2602052604090819020805460ff1916831515179055517f5ebc35a80ef50a8b2bdf50b969adf054f41a373f49432c70dedb1596fe204be7906116cc9084908490611fb0565b60405180910390a15b5050565b609b54600160a01b900460ff1690565b6001600160a01b038082166000908152609c602052604081205490918391166117245760405162461bcd60e51b8152600401610390906121b8565b50506001600160a01b03166000908152609e602052604090205462ffffff1690565b6001600160a01b038116600090815260a06020526040812054819062ffffff1661177357620186a0611792565b6001600160a01b038316600090815260a0602052604090205462ffffff165b9392505050565b3390565b60006117a830611858565b15905090565b600054610100900460ff16806117c757506117c761179d565b806117d5575060005460ff16155b6118105760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff1615801561183b576000805460ff1961ff0019909116610100171660011790555b611843611a1c565b8015611855576000805461ff00191690555b50565b3b151590565b60008262ffffff168262ffffff16111561188a5760405162461bcd60e51b815260040161039090612036565b50900390565b6000611792838362ffffff16620f4240611b0b565b8062ffffff8116811461055c5760405162461bcd60e51b81526004018080602001828103825260268152602001806123256026913960400191505060405180910390fd5b6000806118f7858585611bba565b80516020820151604051630b4c774160e11b81529293506001600160a01b03891692631698ee829261192f9290918890600401611f88565b60206040518083038186803b15801561194757600080fd5b505afa15801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190611dbc565b9695505050505050565b6000806000806000806000876001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156119cd57600080fd5b505afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a059190611e8d565b959e949d50929b5090995097509550909350915050565b600054610100900460ff1680611a355750611a3561179d565b80611a43575060005460ff16155b611a7e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611aa9576000805460ff1961ff0019909116610100171660011790555b611ab1611c10565b6000611abb611799565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020612305833981519152908290a3508015611855576000805461ff001916905550565b6000808060001985870986860292508281109083900303905080611b415760008411611b3657600080fd5b508290049050611792565b808411611b4d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b611bc2611d6e565b826001600160a01b0316846001600160a01b03161115611be0579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600054610100900460ff1680611c295750611c2961179d565b80611c37575060005460ff16155b611c725760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611c9d576000805460ff1961ff0019909116610100171660011790555b611843600054610100900460ff1680611cb95750611cb961179d565b80611cc7575060005460ff16155b611d025760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611843576000805460ff1961ff0019909116610100171660011790558015611855576000805461ff001916905550565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516060810182526000808252602082018190529181019190915290565b805161ffff8116811461055c57600080fd5b600060208284031215611db1578081fd5b8135611792816122a4565b600060208284031215611dcd578081fd5b8151611792816122a4565b60008060408385031215611dea578081fd5b8235611df5816122a4565b91506020830135611e05816122a4565b809150509250929050565b60008060408385031215611e22578182fd5b8235611e2d816122a4565b91506020830135611e05816122b9565b60008060408385031215611e4f578182fd5b8235611e5a816122a4565b9150602083013562ffffff81168114611e05578182fd5b600060208284031215611e82578081fd5b8151611792816122b9565b600080600080600080600060e0888a031215611ea7578283fd5b8751611eb2816122a4565b8097505060208801518060020b8114611ec9578384fd5b9550611ed760408901611d8e565b9450611ee560608901611d8e565b9350611ef360808901611d8e565b925060a0880151611f03816122c7565b60c0890151909250611f14816122b9565b8091505092959891949750929550565b600060208284031215611f35578081fd5b5051919050565b600060208284031215611f4d578081fd5b8135611792816122c7565b600060208284031215611f69578081fd5b8151611792816122c7565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b0392909216825262ffffff16602082015260400190565b901515815260200190565b602080825260089082015267135497d4139455d360c21b604082015260600190565b60208082526006908201526504d525f4e45560d41b604082015260600190565b6020808252601e908201527f506572704d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252600890820152674d525f4348424e4560c01b604082015260600190565b6020808252600790820152664d525f51544e4360c81b604082015260600190565b6020808252600790820152664d525f55464e4360c81b604082015260600190565b6020808252600590820152644d525f524f60d81b604082015260600190565b6020808252600690820152654d525f504e4960d01b604082015260600190565b60208082526005908201526404d525f45560dc1b604082015260600190565b602080825260089082015267135497d4139095d360c21b604082015260600190565b602080825260089082015267135497d0d39095d360c21b604082015260600190565b6020808252600890820152674d525f5154534e4560c01b604082015260600190565b602080825260099082015268135497d0d2139455d360ba1b604082015260600190565b6020808252600690820152654d525f504e4560d01b604082015260600190565b60208082526008908201526709aa4be84889c62760c31b604082015260600190565b60208082526005908201526426a92fa4a160d91b604082015260600190565b6020808252600690820152654d525f4f464d60d01b604082015260600190565b81516001600160a01b0316815260208083015162ffffff90811691830191909152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b62ffffff91909116815260200190565b60ff91909116815260200190565b6001600160a01b038116811461185557600080fd5b801515811461185557600080fd5b60ff8116811461185557600080fdfe496e697469616c697a61626c653a20636f6e747261637420697320616c726561647920696e697469616c697a65648be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e053616665436173743a2076616c756520646f65736e27742066697420696e2032342062697473a2646970667358221220cd400d32008e36c5b3d270f3387e3e946ec9be58e3905b0cb0d0eeccd76abce464736f6c63430007060033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016e5760003560e01c80638866c9dd116100ce578063bc5920ba11610087578063bc5920ba146102e4578063c0c8e63f146102ec578063c575ff79146102ff578063c7bf443414610307578063ce19556a1461031a578063ece090c41461032d578063edd0b5cb146103425761016e565b80638866c9dd146102885780638da5cb5b1461029b578063a680d183146102a3578063b081983b146102b6578063bb235d11146102be578063bbe4f6db146102d15761016e565b80633feb42121161012b5780633feb421214610217578063449323d81461022a578063485cc9551461023d5780634a64d67d146102505780636c8381f814610265578063715018a61461026d578063831f72b4146102755761016e565b806308ff49ad146101735780630cf85bcc1461019c578063119c32ff146101bc5780631246dbf5146101d157806313af4035146101f15780633fcbaa7d14610204575b600080fd5b610186610181366004611da0565b610355565b6040516101939190612286565b60405180910390f35b6101af6101aa366004611da0565b6103bb565b6040516101939190612239565b6101cf6101ca366004611e3d565b61047c565b005b6101e46101df366004611da0565b61053e565b6040516101939190611fe9565b6101cf6101ff366004611da0565b610561565b6101e4610212366004611da0565b6106bc565b6101cf610225366004611e3d565b6106da565b6101cf610238366004611da0565b610802565b6101cf61024b366004611dd8565b6108a9565b6102586109ef565b6040516101939190611f74565b6102586109fe565b6101cf610a0d565b6101cf610283366004611f3c565b610aae565b6101af610296366004611dd8565b610b5e565b610258610c76565b6101866102b1366004611da0565b610c85565b610258610c96565b6101cf6102cc366004611e3d565b610ca5565b6102586102df366004611da0565b610dbf565b6101cf610e1a565b6101cf6102fa366004611e3d565b610f06565b610258610fc4565b610258610315366004611e3d565b610fd3565b6101cf610328366004611e10565b6115ed565b6103356116d9565b6040516101939190612296565b610186610350366004611da0565b6116e9565b6001600160a01b038082166000908152609c602052604081205490918391166103995760405162461bcd60e51b8152600401610390906121b8565b60405180910390fd5b50506001600160a01b03166000908152609d602052604090205462ffffff1690565b6103c3611d40565b6001600160a01b038083166000908152609c60205260409020548391166103fc5760405162461bcd60e51b8152600401610390906121b8565b6040805160a0810182526001600160a01b038086166000818152609c6020908152858220549093168452818152609e83528481205462ffffff90811684860152828252609f845285822054811685870152918152609d9092529290205490911660608201526080810161046e85611746565b62ffffff1690529392505050565b610484611799565b6001600160a01b0316610495610c76565b6001600160a01b0316146104d9576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038216600081815260a0602052604090819020805462ffffff191662ffffff8516179055517fb36b0a82967a9496ce3df9cf912c7fb7e1b7b1ecc188c314765b8010146ae02090610532908490612286565b60405180910390a25050565b6001600160a01b038181166000908152609c60205260409020541615155b919050565b610569611799565b6001600160a01b031661057a610c76565b6001600160a01b0316146105be576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038116610602576040805162461bcd60e51b81526020600482015260066024820152650534f5f4e57360d41b604482015290519081900360640190fd5b6033546001600160a01b038281169116141561064e576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414f60d01b604482015290519081900360640190fd5b6034546001600160a01b038281169116141561069a576040805162461bcd60e51b8152602060048201526006602482015265534f5f53414360d01b604482015290519081900360640190fd5b603480546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0316600090815260a2602052604090205460ff1690565b6001600160a01b038083166000908152609c60205260409020548391166107135760405162461bcd60e51b8152600401610390906121b8565b81620f42408162ffffff16111561073c5760405162461bcd60e51b8152600401610390906120d1565b610744611799565b6001600160a01b0316610755610c76565b6001600160a01b031614610799576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152609d602052604090819020805462ffffff191662ffffff8616179055517f4f2c8571cf1c1d45fa37ea4bd4ae08b528b6db54a9409cce6eb0023fb87d5e88906107f49086908690611fcb565b60405180910390a150505050565b61080a611799565b6001600160a01b031661081b610c76565b6001600160a01b03161461085f576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b606780546001600160a01b0319166001600160a01b0383169081179091556040517fd0654f5900f9e7e4e605a19334306e6a2786bbf960ac0484a4c12feb6428fe2f90600090a250565b600054610100900460ff16806108c257506108c261179d565b806108d0575060005460ff16155b61090b5760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff16158015610936576000805460ff1961ff0019909116610100171660011790555b61093e6117ae565b610950836001600160a01b0316611858565b61096c5760405162461bcd60e51b8152600401610390906120b0565b61097e826001600160a01b0316611858565b61099a5760405162461bcd60e51b81526004016103909061208f565b609a80546001600160a01b038086166001600160a01b031992831617909255609b805460ff60a01b199386169216919091179190911660ff60a01b17905580156109ea576000805461ff00191690555b505050565b609b546001600160a01b031690565b6034546001600160a01b031690565b610a15611799565b6001600160a01b0316610a26610c76565b6001600160a01b031614610a6a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6033546040516000916001600160a01b031690600080516020612305833981519152908390a3603380546001600160a01b0319908116909155603480549091169055565b610ab6611799565b6001600160a01b0316610ac7610c76565b6001600160a01b031614610b0b576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b609b805460ff60a01b1916600160a01b60ff8416021790556040517ff3d121ca0d4fa5acf57cf8a09acedf5326b6ca02f25764d2a05a4dba8e4a777e90610b53908390612296565b60405180910390a150565b610b66611d40565b6001600160a01b038083166000908152609c6020526040902054839116610b9f5760405162461bcd60e51b8152600401610390906121b8565b6001600160a01b038416600090815260a16020526040812054610bfc90610bf790610bd390620f42409062ffffff1661185e565b6001600160a01b0387166000908152609e602052604090205462ffffff1690611890565b6118a5565b6040805160a0810182526001600160a01b038088166000818152609c602090815285822054909316845262ffffff80871684860152828252609f845285822054811685870152918152609d90925292902054909116606082015290915060808101610c6686611746565b62ffffff16905295945050505050565b6033546001600160a01b031690565b6000610c9082611746565b92915050565b609a546001600160a01b031690565b6001600160a01b038083166000908152609c6020526040902054839116610cde5760405162461bcd60e51b8152600401610390906121b8565b81620f42408162ffffff161115610d075760405162461bcd60e51b8152600401610390906120d1565b610d0f611799565b6001600160a01b0316610d20610c76565b6001600160a01b031614610d64576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b0384166000908152609e602052604090819020805462ffffff191662ffffff8616179055517f8129297a1a8d252870739804c1d9cdbc86121230ce172c23ec11a940ccab01ef906107f49086908690611fcb565b6001600160a01b038082166000908152609c60205260408120549091839116610dfa5760405162461bcd60e51b8152600401610390906121b8565b50506001600160a01b039081166000908152609c60205260409020541690565b6034546001600160a01b0316610e5f576040805162461bcd60e51b81526020600482015260056024820152640534f5f43360dc1b604482015290519081900360640190fd5b610e67611799565b6034546001600160a01b03908116911614610eb2576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4360d01b604482015290519081900360640190fd5b6034546033546040516001600160a01b03928316929091169060008051602061230583398151915290600090a360348054603380546001600160a01b03199081166001600160a01b03841617909155169055565b80620f42408162ffffff161115610f2f5760405162461bcd60e51b8152600401610390906120d1565b33600090815260a2602052604090205460ff16610f5e5760405162461bcd60e51b815260040161039090612219565b6001600160a01b038316600081815260a1602052604090819020805462ffffff191662ffffff8616179055517f0ed4e5aa6674fae312ed5fae8e535f1a92aac8eb2ae5187f22074fe1175461ff90610fb7908590612286565b60405180910390a2505050565b6067546001600160a01b031690565b6000610fdd611799565b6001600160a01b0316610fee610c76565b6001600160a01b031614611032576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038381166000908152609c6020526040902054161561106a5760405162461bcd60e51b815260040161039090612110565b826001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156110a357600080fd5b505afa1580156110b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110db9190611f58565b60ff166012146110fd5760405162461bcd60e51b8152600401610390906121d8565b6067546040516370a0823160e01b8152600019916001600160a01b03808716926370a0823192611131921690600401611f74565b60206040518083038186803b15801561114957600080fd5b505afa15801561115d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111819190611f24565b1461119e5760405162461bcd60e51b81526004016103909061206d565b609b54604080516318160ddd60e01b81529051600019926001600160a01b0316916318160ddd916004808301926020929190829003018186803b1580156111e457600080fd5b505afa1580156111f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061121c9190611f24565b146112395760405162461bcd60e51b815260040161039090612173565b609b546001600160a01b03908116908416106112675760405162461bcd60e51b8152600401610390906121fa565b609a54609b54600091611288916001600160a01b03918216911686866118e9565b90506001600160a01b0381166112b05760405162461bcd60e51b815260040161039090612016565b60006112bb82611989565b5050505050506001600160a01b0316905080600014156112ed5760405162461bcd60e51b8152600401610390906120f0565b6067546040516304fec10960e11b81526001600160a01b03878116926309fd82129261131f9290911690600401611f74565b60206040518083038186803b15801561133757600080fd5b505afa15801561134b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136f9190611e71565b61138b5760405162461bcd60e51b815260040161039090612151565b6040516304fec10960e11b81526001600160a01b038616906309fd8212906113b7908590600401611f74565b60206040518083038186803b1580156113cf57600080fd5b505afa1580156113e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114079190611e71565b6114235760405162461bcd60e51b81526004016103909061212f565b609b546067546040516304fec10960e11b81526001600160a01b03928316926309fd82129261145792911690600401611f74565b60206040518083038186803b15801561146f57600080fd5b505afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190611e71565b6114c35760405162461bcd60e51b815260040161039090612195565b609b546040516304fec10960e11b81526001600160a01b03909116906309fd8212906114f3908590600401611f74565b60206040518083038186803b15801561150b57600080fd5b505afa15801561151f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115439190611e71565b61155f5760405162461bcd60e51b815260040161039090611ff4565b6001600160a01b038086166000818152609c6020908152604080832080549588166001600160a01b031990961686179055609f8252808320805462ffffff8b1662ffffff199182168117909255609e90935281842080549093168117909255519092917f8b17db32f8ec22477a8f9475d5b92052ef2ce8c6c73ad79be1eb297a8fdd2ff191a4509392505050565b6115f5611799565b6001600160a01b0316611606610c76565b6001600160a01b03161461164a576040805162461bcd60e51b8152602060048201526006602482015265534f5f434e4f60d01b604482015290519081900360640190fd5b6001600160a01b038216600090815260a2602052604090205460ff1615158115151415611676576116d5565b6001600160a01b038216600090815260a2602052604090819020805460ff1916831515179055517f5ebc35a80ef50a8b2bdf50b969adf054f41a373f49432c70dedb1596fe204be7906116cc9084908490611fb0565b60405180910390a15b5050565b609b54600160a01b900460ff1690565b6001600160a01b038082166000908152609c602052604081205490918391166117245760405162461bcd60e51b8152600401610390906121b8565b50506001600160a01b03166000908152609e602052604090205462ffffff1690565b6001600160a01b038116600090815260a06020526040812054819062ffffff1661177357620186a0611792565b6001600160a01b038316600090815260a0602052604090205462ffffff165b9392505050565b3390565b60006117a830611858565b15905090565b600054610100900460ff16806117c757506117c761179d565b806117d5575060005460ff16155b6118105760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff1615801561183b576000805460ff1961ff0019909116610100171660011790555b611843611a1c565b8015611855576000805461ff00191690555b50565b3b151590565b60008262ffffff168262ffffff16111561188a5760405162461bcd60e51b815260040161039090612036565b50900390565b6000611792838362ffffff16620f4240611b0b565b8062ffffff8116811461055c5760405162461bcd60e51b81526004018080602001828103825260268152602001806123256026913960400191505060405180910390fd5b6000806118f7858585611bba565b80516020820151604051630b4c774160e11b81529293506001600160a01b03891692631698ee829261192f9290918890600401611f88565b60206040518083038186803b15801561194757600080fd5b505afa15801561195b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061197f9190611dbc565b9695505050505050565b6000806000806000806000876001600160a01b0316633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b1580156119cd57600080fd5b505afa1580156119e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a059190611e8d565b959e949d50929b5090995097509550909350915050565b600054610100900460ff1680611a355750611a3561179d565b80611a43575060005460ff16155b611a7e5760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611aa9576000805460ff1961ff0019909116610100171660011790555b611ab1611c10565b6000611abb611799565b603380546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020612305833981519152908290a3508015611855576000805461ff001916905550565b6000808060001985870986860292508281109083900303905080611b415760008411611b3657600080fd5b508290049050611792565b808411611b4d57600080fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b611bc2611d6e565b826001600160a01b0316846001600160a01b03161115611be0579192915b50604080516060810182526001600160a01b03948516815292909316602083015262ffffff169181019190915290565b600054610100900460ff1680611c295750611c2961179d565b80611c37575060005460ff16155b611c725760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611c9d576000805460ff1961ff0019909116610100171660011790555b611843600054610100900460ff1680611cb95750611cb961179d565b80611cc7575060005460ff16155b611d025760405162461bcd60e51b815260040180806020018281038252602e8152602001806122d7602e913960400191505060405180910390fd5b600054610100900460ff16158015611843576000805460ff1961ff0019909116610100171660011790558015611855576000805461ff001916905550565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b604080516060810182526000808252602082018190529181019190915290565b805161ffff8116811461055c57600080fd5b600060208284031215611db1578081fd5b8135611792816122a4565b600060208284031215611dcd578081fd5b8151611792816122a4565b60008060408385031215611dea578081fd5b8235611df5816122a4565b91506020830135611e05816122a4565b809150509250929050565b60008060408385031215611e22578182fd5b8235611e2d816122a4565b91506020830135611e05816122b9565b60008060408385031215611e4f578182fd5b8235611e5a816122a4565b9150602083013562ffffff81168114611e05578182fd5b600060208284031215611e82578081fd5b8151611792816122b9565b600080600080600080600060e0888a031215611ea7578283fd5b8751611eb2816122a4565b8097505060208801518060020b8114611ec9578384fd5b9550611ed760408901611d8e565b9450611ee560608901611d8e565b9350611ef360808901611d8e565b925060a0880151611f03816122c7565b60c0890151909250611f14816122b9565b8091505092959891949750929550565b600060208284031215611f35578081fd5b5051919050565b600060208284031215611f4d578081fd5b8135611792816122c7565b600060208284031215611f69578081fd5b8151611792816122c7565b6001600160a01b0391909116815260200190565b6001600160a01b03938416815291909216602082015262ffffff909116604082015260600190565b6001600160a01b039290921682521515602082015260400190565b6001600160a01b0392909216825262ffffff16602082015260400190565b901515815260200190565b602080825260089082015267135497d4139455d360c21b604082015260600190565b60208082526006908201526504d525f4e45560d41b604082015260600190565b6020808252601e908201527f506572704d6174683a207375627472616374696f6e206f766572666c6f770000604082015260600190565b6020808252600890820152674d525f4348424e4560c01b604082015260600190565b6020808252600790820152664d525f51544e4360c81b604082015260600190565b6020808252600790820152664d525f55464e4360c81b604082015260600190565b6020808252600590820152644d525f524f60d81b604082015260600190565b6020808252600690820152654d525f504e4960d01b604082015260600190565b60208082526005908201526404d525f45560dc1b604082015260600190565b602080825260089082015267135497d4139095d360c21b604082015260600190565b602080825260089082015267135497d0d39095d360c21b604082015260600190565b6020808252600890820152674d525f5154534e4560c01b604082015260600190565b602080825260099082015268135497d0d2139455d360ba1b604082015260600190565b6020808252600690820152654d525f504e4560d01b604082015260600190565b60208082526008908201526709aa4be84889c62760c31b604082015260600190565b60208082526005908201526426a92fa4a160d91b604082015260600190565b6020808252600690820152654d525f4f464d60d01b604082015260600190565b81516001600160a01b0316815260208083015162ffffff90811691830191909152604080840151821690830152606080840151821690830152608092830151169181019190915260a00190565b62ffffff91909116815260200190565b60ff91909116815260200190565b6001600160a01b03