From c708e8367b0bf0e3c0d1c1066d5893df1ac2b9d7 Mon Sep 17 00:00:00 2001 From: mihaisc Date: Fri, 12 Nov 2021 15:22:35 +0200 Subject: [PATCH] another update --- abis/BFactory.json | 328 ++++ abis/BPool.json | 1529 +++++++++++++++++ schema.graphql | 22 +- scripts/generatebargesubgraph.js | 48 +- src/mappings/dispenser.ts | 2 +- .../{dataToken.ts => erc20Template.ts} | 0 src/mappings/erc721Factory.ts | 2 +- src/mappings/factoryRouter.ts | 11 - src/mappings/pool.ts | 31 + src/mappings/poolFactory.ts | 27 + src/mappings/utils/constants.ts | 25 + src/mappings/utils/generic.ts | 38 + src/mappings/utils/poolUtils.ts | 21 + subgraph.yaml | 74 +- 14 files changed, 2099 insertions(+), 59 deletions(-) create mode 100644 abis/BFactory.json create mode 100644 abis/BPool.json rename src/mappings/{dataToken.ts => erc20Template.ts} (100%) delete mode 100644 src/mappings/factoryRouter.ts create mode 100644 src/mappings/pool.ts create mode 100644 src/mappings/poolFactory.ts create mode 100644 src/mappings/utils/constants.ts create mode 100644 src/mappings/utils/generic.ts create mode 100644 src/mappings/utils/poolUtils.ts diff --git a/abis/BFactory.json b/abis/BFactory.json new file mode 100644 index 0000000..1c766e2 --- /dev/null +++ b/abis/BFactory.json @@ -0,0 +1,328 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BFactory", + "sourceName": "contracts/pools/balancer/BFactory.sol", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_bpoolTemplate", + "type": "address" + }, + { + "internalType": "address", + "name": "_opfCollector", + "type": "address" + }, + { + "internalType": "address[]", + "name": "_preCreatedPools", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "newBPoolAddress", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "registeredBy", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "datatokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "basetokenAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "bpoolTemplateAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "ssAddress", + "type": "address" + } + ], + "name": "BPoolCreated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "instance", + "type": "address" + } + ], + "name": "InstanceDeployed", + "type": "event" + }, + { + "inputs": [], + "name": "BONE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BPOW_PRECISION", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "EXIT_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INIT_POOL_SUPPLY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BOUND_TOKENS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BPOW_BASE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_IN_RATIO", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_OUT_RATIO", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_TOTAL_WEIGHT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_WEIGHT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_BALANCE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_BOUND_TOKENS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_BPOW_BASE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_WEIGHT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolTemplate", + "type": "address" + } + ], + "name": "isPoolTemplate", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "opfCollector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + } + ], + "bytecode": "0x608060405234801561001057600080fd5b5060405161071938038061071983398101604081905261002f91610207565b6001600160a01b0383166100a05760405162461bcd60e51b815260206004820152602d60248201527f42466163746f72793a20696e76616c69642062706f6f6c2074656d706c61746560448201526c207a65726f206164647265737360981b60648201526084015b60405180910390fd5b6001600160a01b0382166100f65760405162461bcd60e51b815260206004820152601660248201527f42466163746f72793a207a65726f2061646472657373000000000000000000006044820152606401610097565b600080546001600160a01b0319166001600160a01b03841617905561013c836001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b8051156101e35760005b81518110156101e15760006001600160a01b0316336001600160a01b03168383815181106101765761017661031f565b602090810291909101810151604080516000808252938101849052908101929092526001600160a01b0316907fbb6121447d29a04cc37bfd93cdf6a9dd08229f2d941116c1528f04698c4e790e9060600160405180910390a4806101d9816102f6565b915050610146565b505b50505061034b565b80516001600160a01b038116811461020257600080fd5b919050565b60008060006060848603121561021c57600080fd5b610225846101eb565b925060206102348186016101eb565b60408601519093506001600160401b038082111561025157600080fd5b818701915087601f83011261026557600080fd5b81518181111561027757610277610335565b8060051b604051601f19603f8301168101818110858211171561029c5761029c610335565b604052828152858101935084860182860187018c10156102bb57600080fd5b600095505b838610156102e5576102d1816101eb565b8552600195909501949386019386016102c0565b508096505050505050509250925092565b600060001982141561031857634e487b7160e01b600052601160045260246000fd5b5060010190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6103bf8061035a6000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063b7b800a4116100a2578063c07c00fe11610071578063c07c00fe146101b8578063c36596a61461013e578063c6580d12146101f4578063e4a28a521461011b578063ec093021146101fc57600080fd5b8063b7b800a414610198578063ba019dab146101a0578063bc063e1a146101a8578063bc694ea2146101b057600080fd5b8063867378c5116100e9578063867378c5146101555780639381cd2b1461015d578063992e2a9214610165578063a28f78f11461016d578063b0e0d1361461019857600080fd5b806309a3bbe41461011b578063189d00ca14610136578063218b53821461013e57806376c7a3c71461014d575b600080fd5b610123610204565b6040519081526020015b60405180910390f35b61012361021a565b610123670de0b6b3a764000081565b610123610231565b610123610246565b61012361025d565b610123610270565b600054610180906001600160a01b031681565b6040516001600160a01b03909116815260200161012d565b610123600281565b610123600181565b61012361028e565b6101236102a1565b6101e46101c63660046102d3565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161012d565b610123600081565b6101236102c0565b610217670de0b6b3a7640000603261033d565b81565b6102176402540be400670de0b6b3a764000061031b565b610217620f4240670de0b6b3a764000061031b565b61021764e8d4a51000670de0b6b3a764000061031b565b610217670de0b6b3a7640000606461033d565b6102836003670de0b6b3a764000061031b565b610217906001610303565b610217600a670de0b6b3a764000061031b565b60016102b6670de0b6b3a7640000600261033d565b610217919061035c565b6102176002670de0b6b3a764000061031b565b6000602082840312156102e557600080fd5b81356001600160a01b03811681146102fc57600080fd5b9392505050565b6000821982111561031657610316610373565b500190565b60008261033857634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561035757610357610373565b500290565b60008282101561036e5761036e610373565b500390565b634e487b7160e01b600052601160045260246000fdfea264697066735822122051baecb88b2e3924258c058b6adf28c8a64ed8675ac122a5a6e5e1267dbdf04f64736f6c63430008070033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063b7b800a4116100a2578063c07c00fe11610071578063c07c00fe146101b8578063c36596a61461013e578063c6580d12146101f4578063e4a28a521461011b578063ec093021146101fc57600080fd5b8063b7b800a414610198578063ba019dab146101a0578063bc063e1a146101a8578063bc694ea2146101b057600080fd5b8063867378c5116100e9578063867378c5146101555780639381cd2b1461015d578063992e2a9214610165578063a28f78f11461016d578063b0e0d1361461019857600080fd5b806309a3bbe41461011b578063189d00ca14610136578063218b53821461013e57806376c7a3c71461014d575b600080fd5b610123610204565b6040519081526020015b60405180910390f35b61012361021a565b610123670de0b6b3a764000081565b610123610231565b610123610246565b61012361025d565b610123610270565b600054610180906001600160a01b031681565b6040516001600160a01b03909116815260200161012d565b610123600281565b610123600181565b61012361028e565b6101236102a1565b6101e46101c63660046102d3565b6001600160a01b031660009081526001602052604090205460ff1690565b604051901515815260200161012d565b610123600081565b6101236102c0565b610217670de0b6b3a7640000603261033d565b81565b6102176402540be400670de0b6b3a764000061031b565b610217620f4240670de0b6b3a764000061031b565b61021764e8d4a51000670de0b6b3a764000061031b565b610217670de0b6b3a7640000606461033d565b6102836003670de0b6b3a764000061031b565b610217906001610303565b610217600a670de0b6b3a764000061031b565b60016102b6670de0b6b3a7640000600261033d565b610217919061035c565b6102176002670de0b6b3a764000061031b565b6000602082840312156102e557600080fd5b81356001600160a01b03811681146102fc57600080fd5b9392505050565b6000821982111561031657610316610373565b500190565b60008261033857634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561035757610357610373565b500290565b60008282101561036e5761036e610373565b500390565b634e487b7160e01b600052601160045260246000fdfea264697066735822122051baecb88b2e3924258c058b6adf28c8a64ed8675ac122a5a6e5e1267dbdf04f64736f6c63430008070033", + "linkReferences": {}, + "deployedLinkReferences": {} + } \ No newline at end of file diff --git a/abis/BPool.json b/abis/BPool.json new file mode 100644 index 0000000..42ea510 --- /dev/null +++ b/abis/BPool.json @@ -0,0 +1,1529 @@ +{ + "_format": "hh-sol-artifact-1", + "contractName": "BPool", + "sourceName": "contracts/pools/balancer/BPool.sol", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amt", + "type": "uint256" + } + ], + "name": "Approval", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "bptAmount", + "type": "uint256" + } + ], + "name": "LOG_BPT", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes4", + "name": "sig", + "type": "bytes4" + }, + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "LOG_CALL", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "LOG_EXIT", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "LOG_JOIN", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "caller", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "timestamp", + "type": "uint256" + } + ], + "name": "LOG_SWAP", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "swapFeeAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "oceanFeeAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "marketFeeAmount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "tokenFees", + "type": "address" + } + ], + "name": "SWAP_FEES", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amt", + "type": "uint256" + } + ], + "name": "Transfer", + "type": "event" + }, + { + "inputs": [], + "name": "BONE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "BPOW_PRECISION", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "EXIT_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "INIT_POOL_SUPPLY", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BOUND_TOKENS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_BPOW_BASE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_IN_RATIO", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_OUT_RATIO", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_TOTAL_WEIGHT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MAX_WEIGHT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_BALANCE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_BOUND_TOKENS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_BPOW_BASE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_FEE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "MIN_WEIGHT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_marketCollector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_opfCollector", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "_swapMarketFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + } + ], + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amt", + "type": "uint256" + } + ], + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "whom", + "type": "address" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + } + ], + "name": "calcPoolInSingleOut", + "outputs": [ + { + "internalType": "uint256", + "name": "poolAmountIn", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + } + ], + "name": "calcPoolOutSingleIn", + "outputs": [ + { + "internalType": "uint256", + "name": "poolAmountOut", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolAmountOut", + "type": "uint256" + } + ], + "name": "calcSingleInPoolOut", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolAmountIn", + "type": "uint256" + } + ], + "name": "calcSingleOutPoolIn", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + } + ], + "name": "collectMarketFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "collectOPF", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "communityFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amt", + "type": "uint256" + } + ], + "name": "decreaseApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "minAmountsOut", + "type": "uint256[]" + } + ], + "name": "exitPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPoolAmountIn", + "type": "uint256" + } + ], + "name": "exitswapExternAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "poolAmountIn", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + } + ], + "name": "exitswapPoolAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + } + ], + "name": "getAmountInExactOut", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + } + ], + "name": "getAmountOutExactIn", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getBalance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getBaseTokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getController", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getCurrentTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getDataTokenAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getDenormalizedWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getFinalTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "tokens", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "token", + "type": "address" + } + ], + "name": "getNormalizedWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getNumTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getOPFFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + } + ], + "name": "getSpotPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "spotPrice", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getSwapFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "getTotalDenormalizedWeight", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amt", + "type": "uint256" + } + ], + "name": "increaseApproval", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "controller", + "type": "address" + }, + { + "internalType": "address", + "name": "factory", + "type": "address" + }, + { + "internalType": "uint256[]", + "name": "swapFees", + "type": "uint256[]" + }, + { + "internalType": "bool", + "name": "publicSwap", + "type": "bool" + }, + { + "internalType": "bool", + "name": "finalized", + "type": "bool" + }, + { + "internalType": "address[2]", + "name": "tokens", + "type": "address[2]" + }, + { + "internalType": "address[2]", + "name": "feeCollectors", + "type": "address[2]" + } + ], + "name": "initialize", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "t", + "type": "address" + } + ], + "name": "isBound", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isFinalized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isInitialized", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "isPublicSwap", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "poolAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256[]", + "name": "maxAmountsIn", + "type": "uint256[]" + } + ], + "name": "joinPool", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "minPoolAmountOut", + "type": "uint256" + } + ], + "name": "joinswapExternAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "poolAmountOut", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "poolAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + } + ], + "name": "joinswapPoolAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "marketFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "swapFee", + "type": "uint256" + } + ], + "name": "setSwapFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dataTokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "dataTokenAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "dataTokenWeight", + "type": "uint256" + }, + { + "internalType": "address", + "name": "baseTokenAddress", + "type": "address" + }, + { + "internalType": "uint256", + "name": "baseTokenAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "baseTokenWeight", + "type": "uint256" + } + ], + "name": "setup", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "minAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPrice", + "type": "uint256" + } + ], + "name": "swapExactAmountIn", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "spotPriceAfter", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "tokenIn", + "type": "address" + }, + { + "internalType": "uint256", + "name": "maxAmountIn", + "type": "uint256" + }, + { + "internalType": "address", + "name": "tokenOut", + "type": "address" + }, + { + "internalType": "uint256", + "name": "tokenAmountOut", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "maxPrice", + "type": "uint256" + } + ], + "name": "swapExactAmountOut", + "outputs": [ + { + "internalType": "uint256", + "name": "tokenAmountIn", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "spotPriceAfter", + "type": "uint256" + } + ], + "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": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amt", + "type": "uint256" + } + ], + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amt", + "type": "uint256" + } + ], + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_newCollector", + "type": "address" + } + ], + "name": "updateMarketFeeCollector", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ], + "bytecode": "0x60c0604052601360808190527f42616c616e63657220506f6f6c20546f6b656e0000000000000000000000000060a09081526200004091600a91906200008f565b506040805180820190915260038082526210941560ea1b60209092019182526200006d91600b916200008f565b50600c805460ff191660121790553480156200008857600080fd5b5062000172565b8280546200009d9062000135565b90600052602060002090601f016020900481019282620000c157600085556200010c565b82601f10620000dc57805160ff19168380011785556200010c565b828001600101855582156200010c579182015b828111156200010c578251825591602001919060010190620000ef565b506200011a9291506200011e565b5090565b5b808211156200011a57600081556001016200011f565b600181811c908216806200014a57607f821691505b602082108114156200016c57634e487b7160e01b600052602260045260246000fd5b50919050565b61573480620001826000396000f3fe608060405234801561001057600080fd5b50600436106104075760003560e01c80638201aa3f11610220578063be3bbd2e11610130578063e4a28a52116100b8578063f68045a511610087578063f68045a514610875578063f8b2cb4f1461087d578063fbb9dd5014610890578063fde924f7146108a3578063ff9b1850146108b557600080fd5b8063e4a28a521461048f578063ec09302114610847578063f0f13f0b1461084f578063f1b8a9b71461086257600080fd5b8063cc77828d116100ff578063cc77828d146107e3578063cd2ed8fb146107eb578063d4cadf68146107f3578063d73dd623146107fb578063dd62ed3e1461080e57600080fd5b8063be3bbd2e146107b3578063c070a6d8146107c8578063c36596a6146104cf578063c6580d12146107db57600080fd5b8063a3b3a16d116101b3578063b0e0d13611610182578063b0e0d13614610793578063b7b800a414610793578063ba019dab1461079b578063bc063e1a146107a3578063bc694ea2146107ab57600080fd5b8063a3b3a16d14610747578063a562ddf01461075a578063a9059cbb1461076d578063b02f0b731461078057600080fd5b80639381cd2b116101ef5780639381cd2b1461071c578063948d8ce61461072457806395d89b4114610737578063992e2a921461073f57600080fd5b80638201aa3f146106e7578063867378c5146106fa5780638d4e408314610702578063936c34771461071457600080fd5b806334e199071161031b5780634f69c0d4116102ae578063700dd7e81161027d578063700dd7e814610673578063703305181461067b57806370a082311461068e57806376c7a3c7146106b75780637c5e9ea4146106bf57600080fd5b80634f69c0d4146106275780635db342771461063a578063661884631461064d5780636d06dfa01461066057600080fd5b8063430ed5d0116102ea578063430ed5d0146105e757806346ab38f1146105fa57806349e9350f1461060d5780634df947d01461061657600080fd5b806334e199071461059c578063380376a6146105af578063392e53cd146105c25780633950b3fd146105d457600080fd5b8063189d00ca1161039e5780632f37b6241161036d5780632f37b6241461050457806330062192146105305780633018205f14610550578063313ce5671461056757806331e2761b1461057c57600080fd5b8063189d00ca146104c7578063218b5382146104cf57806323b872dd146104de5780632ea07d8a146104f157600080fd5b806309a3bbe4116103da57806309a3bbe41461048f57806309ef3f5b1461049757806315e84af9146104ac57806318160ddd146104bf57600080fd5b806302c967481461040c57806304ad79541461043257806306fdde0314610457578063095ea7b31461046c575b600080fd5b61041f61041a366004615234565b6108c8565b6040519081526020015b60405180910390f35b6003546001600160a01b03165b6040516001600160a01b039091168152602001610429565b61045f610d46565b60405161042991906153cb565b61047f61047a3660046151bc565b610dd8565b6040519015158152602001610429565b61041f610e33565b6104aa6104a5366004615267565b610e49565b005b61041f6104ba3660046150a0565b610fe8565b60095461041f565b61041f6110cc565b61041f670de0b6b3a764000081565b61047f6104ec366004615180565b6110e3565b61041f6104ff366004615180565b611237565b61047f610512366004615085565b6001600160a01b031660009081526010602052604090205460ff1690565b61041f61053e366004615085565b60056020526000908152604090205481565b600c546201000090046001600160a01b031661043f565b600c5460405160ff9091168152602001610429565b61041f61058a366004615085565b60066020526000908152604090205481565b6104aa6105aa3660046152dc565b6112f2565b61041f6105bd366004615180565b61143b565b601254600160a01b900460ff1661047f565b61041f6105e23660046151bc565b6114ec565b61041f6105f53660046151bc565b611554565b61041f610608366004615234565b6115b4565b61041f60005481565b6004546001600160a01b031661043f565b6104aa61063536600461530e565b6119b1565b61041f610648366004615234565b611bd8565b61047f61065b3660046151bc565b611fdc565b61041f61066e366004615234565b6120b2565b61041f61249a565b6104aa610689366004615085565b612523565b61041f61069c366004615085565b6001600160a01b031660009081526007602052604090205490565b61041f612597565b6106d26106cd3660046151e6565b6125ac565b60408051928352602083019190915201610429565b6106d26106f53660046151e6565b6128fd565b61041f612c32565b600e54600160a01b900460ff1661047f565b61041f612c49565b61041f612c7b565b61041f610732366004615085565b612c8e565b61045f612d14565b61041f612d23565b61041f6107553660046151bc565b612d41565b600d5461043f906001600160a01b031681565b61047f61077b3660046151bc565b612da1565b6104aa61078e36600461530e565b612db7565b61041f600281565b61041f600181565b61041f612ff2565b61041f613005565b6107bb613024565b604051610429919061537e565b61047f6107d63660046150d3565b6130d7565b61041f600081565b6107bb613347565b600f5461041f565b60015461041f565b61047f6108093660046151bc565b613372565b61041f61081c3660046150a0565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61041f6133e5565b600e5461043f906001600160a01b031681565b61041f610870366004615085565b6133f8565b6104aa61348c565b61041f61088b366004615085565b6135e6565b6104aa61089e366004615085565b613668565b600c54600160b01b900460ff1661047f565b61041f6108c33660046151bc565b613813565b600c54600090610100900460ff16156108fc5760405162461bcd60e51b81526004016108f3906154c0565b60405180910390fd5b600c805461ff001916610100179055600e54600160a01b900460ff166109345760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03841660009081526010602052604090205460ff1661096c5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03841660009081526010602052604090206003908101546109b0916109a090670de0b6b3a764000061557a565b6109ab906001615562565b613873565b8311156109cf5760405162461bcd60e51b81526004016108f3906154e5565b6001600160a01b038416600090815260106020526040902060038101546002820154600954601154610a04939291908861394e565b915081610a235760405162461bcd60e51b81526004016108f39061544a565b82821115610a435760405162461bcd60e51b81526004016108f39061549a565b610a51816003015485613a12565b60038201556000610a628382613873565b604080518781524260208201529192506001600160a01b03881691339160008051602061567f833981519152910160405180910390a360405183815260008051602061569f8339815191529060200160405180910390a1610ac33384613a6f565b610ad5610ad08483613a12565b613a79565b600254610aeb906001600160a01b031682613a85565b610af6863387613a8f565b6003546000906001600160a01b0388811691161415610b2157506004546001600160a01b0316610b2f565b506003546001600160a01b03165b60125460035460405163efd4810360e01b81526001600160a01b039283169263efd4810392610b67929116908590899060040161535a565b60206040518083038186803b158015610b7f57600080fd5b505afa158015610b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb791906152bf565b151560011415610d3157600380546001600160a01b03166000908152601060205260408120918201546002830154600954601154610bf8939291908a613b5d565b9050610c08826003015482613a12565b6003830155610c18866000613873565b600c54604080518481524260208201529296506001600160a01b038681169362010000909304169160008051602061567f833981519152910160405180910390a3600c54610c75906201000090046001600160a01b031687613a6f565b610c82610ad08786613a12565b600254610c98906001600160a01b031685613a85565b600c54610cb69084906201000090046001600160a01b031683613a8f565b6012546003546040516307b01ab360e41b81526001600160a01b03918216600482015285821660248201526044810184905260648101899052911690637b01ab30906084015b600060405180830381600087803b158015610d1657600080fd5b505af1158015610d2a573d6000803e3d6000fd5b5050505050505b505050600c805461ff00191690559392505050565b6060600a8054610d55906155c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d81906155c4565b8015610dce5780601f10610da357610100808354040283529160200191610dce565b820191906000526020600020905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290916000805160206156df83398151915290610e219086815260200190565b60405180910390a35060015b92915050565b610e46670de0b6b3a7640000603261558e565b81565b600c546201000090046001600160a01b03163314610ea25760405162461bcd60e51b815260206004820152601660248201527522a9292fa4a72b20a624a22fa1a7a72a2927a62622a960511b60448201526064016108f3565b6003546001600160a01b03878116911614610eff5760405162461bcd60e51b815260206004820152601d60248201527f4552525f494e56414c49445f44415441544f4b454e5f4144445245535300000060448201526064016108f3565b6004546001600160a01b03848116911614610f5c5760405162461bcd60e51b815260206004820152601d60248201527f4552525f494e56414c49445f42415345544f4b454e5f4144445245535300000060448201526064016108f3565b610f67868686613c27565b604080518681524260208201526001600160a01b0388169133916000805160206156bf833981519152910160405180910390a3610fa5838383613c27565b604080518381524260208201526001600160a01b0385169133916000805160206156bf833981519152910160405180910390a3610fe0613e11565b505050505050565b600c54600090610100900460ff16156110135760405162461bcd60e51b81526004016108f3906154c0565b6001600160a01b03831660009081526010602052604090205460ff1661104b5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03821660009081526010602052604090205460ff166110835760405162461bcd60e51b81526004016108f390615510565b6001600160a01b038084166000908152601060205260408082209285168252902060038083015460028085015492840154908401546110c3939190613e70565b95945050505050565b610e466402540be400670de0b6b3a764000061557a565b6000336001600160a01b038516148061111f57506001600160a01b03841660009081526008602090815260408083203384529091529020548211155b6111635760405162461bcd60e51b815260206004820152601560248201527422a9292fa12a27a5a2a72fa120a22fa1a0a62622a960591b60448201526064016108f3565b61116e848484613ee8565b336001600160a01b038516148015906111ac57506001600160a01b038416600090815260086020908152604080832033845290915290205460001914155b1561122d576001600160a01b03841660009081526008602090815260408083203384529091529020546111df9083613a12565b6001600160a01b0385811660009081526008602090815260408083203380855290835292819020859055519384529186169290916000805160206156df833981519152910160405180910390a35b5060019392505050565b6001600160a01b03831660009081526010602052604081205460ff1661126f5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03831660009081526010602052604090205460ff166112a75760405162461bcd60e51b81526004016108f390615510565b6001600160a01b038085166000908152601060205260408082209286168252902060038083015460028085015492840154908401546112e893919088613ffa565b9695505050505050565b600e54600160a01b900460ff161561133f5760405162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b60448201526064016108f3565b600c546201000090046001600160a01b031633146113945760405162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b60448201526064016108f3565b6113a9620f4240670de0b6b3a764000061557a565b8110156113e65760405162461bcd60e51b815260206004820152600b60248201526a4552525f4d494e5f46454560a81b60448201526064016108f3565b6113f9600a670de0b6b3a764000061557a565b8111156114365760405162461bcd60e51b815260206004820152600b60248201526a4552525f4d41585f46454560a81b60448201526064016108f3565b600155565b6001600160a01b03831660009081526010602052604081205460ff166114735760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03831660009081526010602052604090205460ff166114ab5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b038085166000908152601060205260408082209286168252902060038083015460028085015492840154908401546112e8939190886140a2565b6001600160a01b03821660009081526010602090815260408083208151608081018352815460ff16151581526001820154938101939093526002810154918301829052600301546060830181905260095460115461154c93919087614148565b949350505050565b6001600160a01b03821660009081526010602090815260408083208151608081018352815460ff16151581526001820154938101939093526002810154918301829052600301546060830181905260095460115461154c93919087613b5d565b600c54600090610100900460ff16156115df5760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff166116175760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03841660009081526010602052604090205460ff1661164f5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b0384166000908152601060205260409020600381015460028201546009546011546116849392919088613b5d565b9150828210156116a65760405162461bcd60e51b81526004016108f390615473565b6001600160a01b03851660009081526010602052604090206003908101546116da916109a090670de0b6b3a764000061557a565b8211156116f95760405162461bcd60e51b81526004016108f3906154e5565b611707816003015483613a12565b600382015560006117188582613873565b604080518581524260208201529192506001600160a01b03881691339160008051602061567f833981519152910160405180910390a360405185815260008051602061569f8339815191529060200160405180910390a16117793386613a6f565b611786610ad08683613a12565b60025461179c906001600160a01b031682613a85565b6117a7863385613a8f565b6003546000906001600160a01b03888116911614156117d257506004546001600160a01b03166117e0565b506003546001600160a01b03165b60125460035460405163efd4810360e01b81526001600160a01b039283169263efd48103926118189291169085908b9060040161535a565b60206040518083038186803b15801561183057600080fd5b505afa158015611844573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186891906152bf565b151560011415610d3157600380546001600160a01b031660009081526010602052604081209182015460028301546009546011546118a9939291908c613b5d565b90506118b9826003015482613a12565b60038301556118c9886000613873565b600c54604080518481524260208201529296506001600160a01b038681169362010000909304169160008051602061567f833981519152910160405180910390a3600c54611926906201000090046001600160a01b031689613a6f565b611933610ad08986613a12565b600254611949906001600160a01b031685613a85565b600c546119679084906201000090046001600160a01b031683613a8f565b6012546003546040516307b01ab360e41b81526001600160a01b039182166004820152858216602482015260448101849052606481018b9052911690637b01ab3090608401610cfc565b600c54610100900460ff16156119d95760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff16611a115760405162461bcd60e51b81526004016108f390615537565b6000611a1c60095490565b90506000611a2a85836141dd565b905080611a495760405162461bcd60e51b81526004016108f39061544a565b60005b600f54811015611b91576000600f8281548110611a6b57611a6b61565a565b60009182526020808320909101546001600160a01b03168083526010909152604082206003015490925090611aa08583613873565b905080611abf5760405162461bcd60e51b81526004016108f39061544a565b878785818110611ad157611ad161565a565b90506020020135811115611af75760405162461bcd60e51b81526004016108f39061549a565b6001600160a01b038316600090815260106020526040902060030154611b1d90826142f5565b6001600160a01b0384166000818152601060205260409081902060030192909255905133906000805160206156bf83398151915290611b689085904290918252602082015260400190565b60405180910390a3611b7b833383614347565b5050508080611b89906155ff565b915050611a4c565b50611b9b8561437a565b611ba53386613a85565b60405185815260008051602061569f8339815191529060200160405180910390a15050600c805461ff0019169055505050565b600c54600090610100900460ff1615611c035760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff16611c3b5760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03841660009081526010602052604090205460ff16611c735760405162461bcd60e51b81526004016108f390615510565b6001600160a01b038416600090815260106020526040902060030154611ca6906109ab6002670de0b6b3a764000061557a565b831115611cc55760405162461bcd60e51b81526004016108f390615420565b6001600160a01b038416600090815260106020526040902060038101546002820154600954601154611cfa9392919088614148565b915082821015611d1c5760405162461bcd60e51b81526004016108f390615473565b611d2a8160030154856142f5565b6003820155604080518581524260208201526001600160a01b0387169133916000805160206156bf833981519152910160405180910390a360405182815260008051602061569f8339815191529060200160405180910390a1611d8c8261437a565b611d963383613a85565b611da1853386614347565b600380546001600160a01b031660009081526010602052604081209182015460028301546009546011548493611ddb939092909189614383565b6003549091506001600160a01b0389811691161415611e07576004546001600160a01b03169150611e16565b6003546001600160a01b031691505b6012546003546040516326b1f01f60e01b81526001600160a01b03928316926326b1f01f92611e4e929116908690869060040161535a565b60206040518083038186803b158015611e6657600080fd5b505afa158015611e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9e91906152bf565b151560011415611fc6576012546003546040516399039fcf60e01b81526001600160a01b03928316926399039fcf92611ee0929116908690869060040161535a565b600060405180830381600087803b158015611efa57600080fd5b505af1158015611f0e573d6000803e3d6000fd5b50505050611f208360030154826142f5565b6003840155600c54604080518381524260208201526001600160a01b038581169362010000900416916000805160206156bf833981519152910160405180910390a360405185815260008051602061569f8339815191529060200160405180910390a1611f8c8561437a565b600c54611fa8906201000090046001600160a01b031686613a85565b600c54611fc69083906201000090046001600160a01b031683614347565b50505050600c805461ff00191690559392505050565b3360009081526008602090815260408083206001600160a01b038616845290915281205480831115612031573360009081526008602090815260408083206001600160a01b0388168452909152812055612060565b61203b8184613a12565b3360009081526008602090815260408083206001600160a01b03891684529091529020555b3360008181526008602090815260408083206001600160a01b038916808552908352928190205490519081529192916000805160206156df833981519152910160405180910390a35060019392505050565b600c54600090610100900460ff16156120dd5760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff166121155760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03841660009081526010602052604090205460ff1661214d5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b0384166000908152601060205260409020600381015460028201546009546011546121829392919088614383565b9150816121a15760405162461bcd60e51b81526004016108f39061544a565b828211156121c15760405162461bcd60e51b81526004016108f39061549a565b6001600160a01b0385166000908152601060205260409020600301546121f4906109ab6002670de0b6b3a764000061557a565b8211156122135760405162461bcd60e51b81526004016108f390615420565b6122218160030154836142f5565b6003820155604080518381524260208201526001600160a01b0387169133916000805160206156bf833981519152910160405180910390a360405184815260008051602061569f8339815191529060200160405180910390a16122838461437a565b61228d3385613a85565b612298853384614347565b600380546001600160a01b031660009081526010602052604081209182015460028301546009546011546122cf939291908a614383565b6003549091506000906001600160a01b03898116911614156122fd57506004546001600160a01b031661230b565b506003546001600160a01b03165b6012546003546040516326b1f01f60e01b81526001600160a01b03928316926326b1f01f92612343929116908590879060040161535a565b60206040518083038186803b15801561235b57600080fd5b505afa15801561236f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239391906152bf565b151560011415611fc6576012546003546040516399039fcf60e01b81526001600160a01b03928316926399039fcf926123d5929116908590879060040161535a565b600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b505050506124158360030154836142f5565b6003840155600c54604080518481524260208201526001600160a01b038481169362010000900416916000805160206156bf833981519152910160405180910390a36124608761437a565b600c5461247c906201000090046001600160a01b031688613a85565b600c54611fc69082906201000090046001600160a01b031684614347565b60025460048054604051637c0aa57760e11b81526001600160a01b0391821692810192909252600092169063f8154aee9060240160206040518083038186803b1580156124e657600080fd5b505afa1580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e91906152f5565b905090565b600d546001600160a01b031633146125755760405162461bcd60e51b815260206004820152601560248201527427a7262c9026a0a925a2aa1021a7a62622a1aa27a960591b60448201526064016108f3565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610e46620f4240670de0b6b3a764000061557a565b600c546000908190610100900460ff16156125d95760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff166126115760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03871660009081526010602052604090205460ff166126495760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03851660009081526010602052604090205460ff166126815760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03808816600090815260106020526040808220928816825290206003808201546126be916109a090670de0b6b3a764000061557a565b8611156126dd5760405162461bcd60e51b81526004016108f3906154e5565b60006126fb8360030154846002015484600301548560020154613e70565b9050858111156127435760405162461bcd60e51b81526020600482015260136024820152724552525f4241445f4c494d49545f505249434560681b60448201526064016108f3565b600080604051806080016040528086600301548152602001866002015481526020018560030154815260200185600201548152509050612784818a8e61441d565b90975091508a8711156127a95760405162461bcd60e51b81526004016108f39061549a565b6127b78560030154836142f5565b85600301819055506127cd84600301548a613a12565b6003808601829055860154600280880154908701546127ec9390613e70565b95508286101561280e5760405162461bcd60e51b81526004016108f39061544a565b878611156128505760405162461bcd60e51b815260206004820152600f60248201526e4552525f4c494d49545f505249434560881b60448201526064016108f3565b61285a878a6141dd565b8311156128795760405162461bcd60e51b81526004016108f39061544a565b60408051888152602081018b9052428183015290516001600160a01b038c811692908f169133917f50ef2fc267012b5c84b56835f16ffd5331ac5a151a3760d74908721ba78b0efe919081900360600190a46128d68c3389614347565b6128e18a338b613a8f565b5050505050600c805461ff001916905590969095509350505050565b600c546000908190610100900460ff161561292a5760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff166129625760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03871660009081526010602052604090205460ff1661299a5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03851660009081526010602052604090205460ff166129d25760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03808816600090815260106020526040808220928816825290206003820154612a0f906109ab6002670de0b6b3a764000061557a565b881115612a2e5760405162461bcd60e51b81526004016108f390615420565b6000612a4c8360030154846002015484600301548560020154613e70565b905085811115612a945760405162461bcd60e51b81526020600482015260136024820152724552525f4241445f4c494d49545f505249434560681b60448201526064016108f3565b600080604051806080016040528086600301548152602001866002015481526020018560030154815260200185600201548152509050612ad5818c8e61463b565b909750915088871015612afa5760405162461bcd60e51b81526004016108f390615473565b612b088560030154836142f5565b8560030181905550612b1e846003015488613a12565b600380860182905586015460028088015490870154612b3d9390613e70565b955082861015612b5f5760405162461bcd60e51b81526004016108f39061544a565b87861115612ba15760405162461bcd60e51b815260206004820152600f60248201526e4552525f4c494d49545f505249434560881b60448201526064016108f3565b612bab8b886141dd565b831115612bca5760405162461bcd60e51b81526004016108f39061544a565b604080518c815260208101899052428183015290516001600160a01b038c811692908f169133917f50ef2fc267012b5c84b56835f16ffd5331ac5a151a3760d74908721ba78b0efe919081900360600190a4612c278c338d614347565b6128e18a3389613a8f565b610e4664e8d4a51000670de0b6b3a764000061557a565b600c54600090610100900460ff1615612c745760405162461bcd60e51b81526004016108f3906154c0565b5060115490565b610e46670de0b6b3a7640000606461558e565b600c54600090610100900460ff1615612cb95760405162461bcd60e51b81526004016108f3906154c0565b6001600160a01b03821660009081526010602052604090205460ff16612cf15760405162461bcd60e51b81526004016108f390615510565b506001600160a01b0381166000908152601060205260409020600201545b919050565b6060600b8054610d55906155c4565b612d366003670de0b6b3a764000061557a565b610e46906001615562565b6001600160a01b03821660009081526010602090815260408083208151608081018352815460ff16151581526001820154938101939093526002810154918301829052600301546060830181905260095460115461154c9391908761394e565b6000612dae338484613ee8565b50600192915050565b600c54610100900460ff1615612ddf5760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff16612e175760405162461bcd60e51b81526004016108f390615537565b6000612e2260095490565b90506000612e31856000613873565b90506000612e3f8683613a12565b90506000612e4d82856141dd565b905080612e6c5760405162461bcd60e51b81526004016108f39061544a565b612e763388613a6f565b600254612e8c906001600160a01b031684613a85565b612e9582613a79565b60005b600f54811015612fdd576000600f8281548110612eb757612eb761565a565b60009182526020808320909101546001600160a01b03168083526010909152604082206003015490925090612eec8583613873565b905080612f0b5760405162461bcd60e51b81526004016108f39061544a565b898985818110612f1d57612f1d61565a565b90506020020135811015612f435760405162461bcd60e51b81526004016108f390615473565b6001600160a01b038316600090815260106020526040902060030154612f699082613a12565b6001600160a01b03841660008181526010602052604090819020600301929092559051339060008051602061567f83398151915290612fb49085904290918252602082015260400190565b60405180910390a3612fc7833383613a8f565b5050508080612fd5906155ff565b915050612e98565b5050600c805461ff0019169055505050505050565b610e46600a670de0b6b3a764000061557a565b600161301a670de0b6b3a7640000600261558e565b610e4691906155ad565b600c54606090610100900460ff161561304f5760405162461bcd60e51b81526004016108f3906154c0565b600e54600160a01b900460ff166130785760405162461bcd60e51b81526004016108f390615537565b600f805480602002602001604051908101604052809291908181526020018280548015610dce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116130b0575050505050905090565b601254600090600160a01b900460ff16156131345760405162461bcd60e51b815260206004820152601760248201527f4552525f414c52454144595f494e495449414c495a454400000000000000000060448201526064016108f3565b6001600160a01b03891661318a5760405162461bcd60e51b815260206004820152601e60248201527f4552525f494e56414c49445f434f4e54524f4c4c45525f41444452455353000060448201526064016108f3565b6001600160a01b0388166131e05760405162461bcd60e51b815260206004820152601b60248201527f4552525f494e56414c49445f464143544f52595f41444452455353000000000060448201526064016108f3565b6131f5620f4240670de0b6b3a764000061557a565b878760008181106132085761320861565a565b90506020020135101561324b5760405162461bcd60e51b815260206004820152600b60248201526a4552525f4d494e5f46454560a81b60448201526064016108f3565b61325e600a670de0b6b3a764000061557a565b878760008181106132715761327161565a565b9050602002013511156132b45760405162461bcd60e51b815260206004820152600b60248201526a4552525f4d41585f46454560a81b60448201526064016108f3565b61333a8989898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805180820182528c93508b9250908a9060029083908390808284376000920191909152505060408051808201825291508a906002908390839080828437600092019190915250614840915050565b9998505050505050505050565b600c54606090610100900460ff16156130785760405162461bcd60e51b81526004016108f3906154c0565b3360009081526008602090815260408083206001600160a01b03861684529091528120546133a090836142f5565b3360008181526008602090815260408083206001600160a01b038916808552908352928190208590555193845290926000805160206156df8339815191529101610e21565b610e466002670de0b6b3a764000061557a565b600c54600090610100900460ff16156134235760405162461bcd60e51b81526004016108f3906154c0565b6001600160a01b03821660009081526010602052604090205460ff1661345b5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b0382166000908152601060205260409020600201546011546134859082906141dd565b9392505050565b6000613496613024565b905060005b81518110156135e2576000600560008484815181106134bc576134bc61565a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490506000600560008585815181106134ff576134ff61565a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555082828151811061353d5761353d61565a565b6020908102919091010151600e5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb90604401602060405180830381600087803b15801561359557600080fd5b505af11580156135a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135cd91906152bf565b505080806135da906155ff565b91505061349b565b5050565b600c54600090610100900460ff16156136115760405162461bcd60e51b81526004016108f3906154c0565b6001600160a01b03821660009081526010602052604090205460ff166136495760405162461bcd60e51b81526004016108f390615510565b506001600160a01b031660009081526010602052604090206003015490565b600d546001600160a01b031633146136ba5760405162461bcd60e51b815260206004820152601560248201527427a7262c9026a0a925a2aa1021a7a62622a1aa27a960591b60448201526064016108f3565b60006136c4613024565b905060005b815181101561380e576000600660008484815181106136ea576136ea61565a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054905060006006600085858151811061372d5761372d61565a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555082828151811061376b5761376b61565a565b602090810291909101015160405163a9059cbb60e01b81526001600160a01b038681166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156137c157600080fd5b505af11580156137d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f991906152bf565b50508080613806906155ff565b9150506136c9565b505050565b6001600160a01b03821660009081526010602090815260408083208151608081018352815460ff16151581526001820154938101939093526002810154918301829052600301546060830181905260095460115461154c93919087614383565b600080613880838561558e565b9050831580613897575082613895858361557a565b145b6138d65760405162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b60448201526064016108f3565b60006138eb6002670de0b6b3a764000061557a565b6138f59083615562565b90508181101561393a5760405162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b60448201526064016108f3565b60006112e8670de0b6b3a76400008361557a565b60008061395b86856141dd565b90506000613971670de0b6b3a764000083613a12565b9050600061398182600154613873565b905060006139a08661399b670de0b6b3a764000085613a12565b6141dd565b905060006139ae8b83613a12565b905060006139bc828d6141dd565b905060006139ca828861497e565b905060006139d8828d613873565b905060006139e68d83613a12565b90506139ff8161399b670de0b6b3a76400006000613a12565b9f9e505050505050505050505050505050565b6000806000613a218585614aaa565b915091508015613a675760405162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b60448201526064016108f3565b509392505050565b6135e28282614ae1565b613a8281614aec565b50565b6135e28282614bb8565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044015b602060405180830381600087803b158015613ade57600080fd5b505af1158015613af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1691906152bf565b905080613b575760405162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b60448201526064016108f3565b50505050565b600080613b6a86856141dd565b90506000613b85846109ab670de0b6b3a76400006000613a12565b90506000613b938783613a12565b90506000613ba182896141dd565b90506000613bc082613bbb670de0b6b3a7640000886141dd565b61497e565b90506000613bce828d613873565b90506000613bdc8d83613a12565b90506000613bfd613bf5670de0b6b3a76400008a613a12565b600154613873565b9050613c15826109ab670de0b6b3a764000084613a12565b9e9d5050505050505050505050505050565b600c546201000090046001600160a01b03163314613c7c5760405162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b60448201526064016108f3565b6001600160a01b03831660009081526010602052604090205460ff1615613cd45760405162461bcd60e51b815260206004820152600c60248201526b11549497d254d7d093d5539160a21b60448201526064016108f3565b600e54600160a01b900460ff1615613d215760405162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b60448201526064016108f3565b600f54600211613d645760405162461bcd60e51b815260206004820152600e60248201526d4552525f4d41585f544f4b454e5360901b60448201526064016108f3565b604080516080810182526001808252600f805460208085019182526000858701818152606087018281526001600160a01b038c1680845260109094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b031916909117905561380e838383614bc3565b600e805460ff60a01b1916600160a01b179055600c805460ff60b01b1916600160b01b179055613e52613e4d670de0b6b3a7640000606461558e565b61437a565b613e6e33613e69670de0b6b3a7640000606461558e565b613a85565b565b600080613e7d86866141dd565b90506000613e8b85856141dd565b90506000613e9983836141dd565b90506000613edc670de0b6b3a764000061399b670de0b6b3a7640000600054613ec061249a565b600154613ecd9190615562565b613ed79190615562565b613a12565b905061333a8282613873565b6001600160a01b038316600090815260076020526040902054811115613f475760405162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b60448201526064016108f3565b6001600160a01b038316600090815260076020526040902054613f6a9082613a12565b6001600160a01b038085166000908152600760205260408082209390935590841681522054613f9990826142f5565b6001600160a01b0380841660008181526007602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613fed9085815260200190565b60405180910390a3505050565b60008061400784876141dd565b905060006140158685613a12565b9050600061402387836141dd565b90506000614031828561497e565b905061404581670de0b6b3a7640000613a12565b90506000805461405361249a565b6001546140609190615562565b61406a9190615562565b905061407e670de0b6b3a764000082613a12565b955061409361408d8c84613873565b876141dd565b9b9a5050505050505050505050565b6000806140af86856141dd565b9050600080546140bd61249a565b6001546140ca9190615562565b6140d49190615562565b905060006140ea670de0b6b3a764000083613a12565b90506140f68582613873565b905060006141088a61399b8c856142f5565b90506000614116828661497e565b9050600061412c670de0b6b3a764000083613a12565b90506141388a82613873565b9c9b505050505050505050505050565b60008061415586856141dd565b9050600061416e613bf5670de0b6b3a764000084613a12565b90506000614188856109ab670de0b6b3a764000085613a12565b905060006141968a836142f5565b905060006141a4828c6141dd565b905060006141b2828761497e565b905060006141c0828c613873565b90506141cc818c613a12565b9d9c50505050505050505050505050565b60008161421b5760405162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b60448201526064016108f3565b600061422f670de0b6b3a76400008561558e565b905083158061424e5750670de0b6b3a764000061424c858361557a565b145b61428d5760405162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b60448201526064016108f3565b600061429a60028561557a565b6142a49083615562565b9050818110156142e95760405162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b60448201526064016108f3565b60006112e8858361557a565b6000806143028385615562565b9050838110156134855760405162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b60448201526064016108f3565b6040516323b872dd60e01b81526000906001600160a01b038516906323b872dd90613ac49086903090879060040161535a565b613a8281614e13565b60008061439086856141dd565b9050600061439e86856142f5565b905060006143ac82886141dd565b905060006143c2670de0b6b3a7640000856141dd565b905060006143d0838361497e565b905060006143de828d613873565b905060006143ec828e613a12565b90506000614405613bf5670de0b6b3a76400008a613a12565b9050613c158261399b670de0b6b3a764000084613a12565b6000808061443a86600360200201518760015b60200201516141dd565b9050600061444f876002602002015187613a12565b905060006144648860026020020151836141dd565b90506000614472828561497e565b905061448681670de0b6b3a7640000613a12565b90506000805461449461249a565b6001546144a19190615562565b6144ab9190615562565b8a519091506144d0906144be9084613873565b61399b670de0b6b3a764000084613a12565b965060006144f088613ed78a6109ab670de0b6b3a7640000613ed761249a565b6001600160a01b038a1660009081526005602052604090205490915061451690826142f5565b600560008b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600061455d89613ed78b6109ab670de0b6b3a7640000600054613a12565b6001600160a01b038b1660009081526006602052604090205490915061458390826142f5565b6001600160a01b038b166000908152600660205260409020558b516145c0906145ac9086613873565b61399b670de0b6b3a7640000600154613a12565b97507f90d9f1d0641138b6407ac37bea3a905d63a371c2d91a484f68d59924634d4ef36145ff8a613ed78c6109ab670de0b6b3a7640000600154613a12565b604080519182526020820185905281018390526001600160a01b038c16606082015260800160405180910390a150505050505050935093915050565b600080806146528660016020020151876003614430565b9050600061467286613ed7886109ab670de0b6b3a7640000613ed761249a565b6001600160a01b03861660009081526005602052604090205490915061469890826142f5565b60056000876001600160a01b03166001600160a01b031681526020019081526020016000208190555060006146df87613ed7896109ab670de0b6b3a7640000600054613a12565b6001600160a01b03871660009081526006602052604090205490915061470590826142f5565b6001600160a01b038716600090815260066020526040812091909155805461472b61249a565b6001546147389190615562565b6147429190615562565b90507f90d9f1d0641138b6407ac37bea3a905d63a371c2d91a484f68d59924634d4ef361478189613ed78b6109ab670de0b6b3a7640000600154613a12565b604080519182526020820186905281018490526001600160a01b038916606082015260800160405180910390a160006147c2670de0b6b3a764000083613a12565b90506147ce8982613873565b8a519091506000906147e49061399b81856142f5565b905060006147f2828861497e565b90506000614808670de0b6b3a764000083613a12565b905061481b8d6002602002015182613873565b99508961482c8d613ed7898b615562565b995099505050505050505050935093915050565b600c805462010000600160b01b031916620100006001600160a01b038a81169190910291909117909155600280546001600160a01b0319169188169190911790558451600090869082906148965761489661565a565b6020026020010151600181905550856001815181106148b7576148b761565a565b602090810291909101810151600055600c8054961515600160b01b0260ff60b01b199097169690961795869055600e80548551600380546001600160a01b039283166001600160a01b03199182161790915596840151600480549183169189169190911790558551600d805491831691891691909117905594909201518416951515600160a01b908102959095166001600160a81b0319928316179590951790945550601280549093166201000090940416929092178217908190550460ff169392505050565b600060018310156149c95760405162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b60448201526064016108f3565b60016149de670de0b6b3a7640000600261558e565b6149e891906155ad565b831115614a305760405162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b60448201526064016108f3565b6000614a3b83614e82565b90506000614a498483613a12565b90506000614a5f86614a5a85614ea0565b614eb4565b905081614a70579250610e2d915050565b6000614a938784614a8e6402540be400670de0b6b3a764000061557a565b614f28565b9050614a9f8282613873565b979650505050505050565b600080828410614ac957614abe83856155ad565b600091509150614ada565b614ad384846155ad565b6001915091505b9250929050565b6135e2823083613ee8565b30600090815260076020526040902054811115614b425760405162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b60448201526064016108f3565b30600090815260076020526040902054614b5c9082613a12565b30600090815260076020526040902055600954614b799082613a12565b60095560405181815260009030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350565b6135e2308383613ee8565b670de0b6b3a7640000811015614c0c5760405162461bcd60e51b815260206004820152600e60248201526d11549497d3525397d5d15251d21560921b60448201526064016108f3565b614c1f670de0b6b3a7640000603261558e565b811115614c5f5760405162461bcd60e51b815260206004820152600e60248201526d11549497d3505617d5d15251d21560921b60448201526064016108f3565b614c7664e8d4a51000670de0b6b3a764000061557a565b821015614cb75760405162461bcd60e51b815260206004820152600f60248201526e4552525f4d494e5f42414c414e434560881b60448201526064016108f3565b6001600160a01b03831660009081526010602052604090206002015480821115614d5357614cf0601154614ceb8484613a12565b6142f5565b601155614d06670de0b6b3a7640000603261558e565b6011541115614d4e5760405162461bcd60e51b815260206004820152601460248201527311549497d3505617d513d5105317d5d15251d21560621b60448201526064016108f3565b614d6f565b80821015614d6f57614d6b601154613ed78385613a12565b6011555b6001600160a01b03841660009081526010602052604090206002810183905560030180549084905580841115614db857614db38533614dae8785613a12565b614347565b614e0c565b80841015614e0c576000614dcc8286613a12565b90506000614ddb826000613873565b9050614df18733614dec8585613a12565b613a8f565b600254614e099088906001600160a01b031683613a8f565b50505b5050505050565b30600090815260076020526040902054614e2d90826142f5565b30600090815260076020526040902055600954614e4a90826142f5565b60095560405181815230906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001614bad565b6000670de0b6b3a7640000614e9683614ea0565b610e2d919061558e565b6000610e2d670de0b6b3a76400008361557a565b60008281614ec360028561561a565b614ed557670de0b6b3a7640000614ed7565b815b9050614ee460028561557a565b93505b831561154c57614ef78283613873565b9150614f0460028561561a565b15614f1657614f138183613873565b90505b614f2160028561557a565b9350614ee7565b6000828180614f3f87670de0b6b3a7640000614aaa565b9092509050670de0b6b3a764000080600060015b888410615009576000614f6e670de0b6b3a76400008361558e565b9050600080614f8e8a614f8985670de0b6b3a7640000613a12565b614aaa565b91509150614fa0876109ab848c613873565b9650614fac87846141dd565b965086614fbb57505050615009565b8715614fc5579315935b8015614fcf579315935b8415614fe657614fdf8688613a12565b9550614ff3565b614ff086886142f5565b95505b5050508080615001906155ff565b915050614f53565b50909998505050505050505050565b80356001600160a01b0381168114612d0f57600080fd5b8060408101831015610e2d57600080fd5b60008083601f84011261505257600080fd5b50813567ffffffffffffffff81111561506a57600080fd5b6020830191508360208260051b8501011115614ada57600080fd5b60006020828403121561509757600080fd5b61348582615018565b600080604083850312156150b357600080fd5b6150bc83615018565b91506150ca60208401615018565b90509250929050565b600080600080600080600080610120898b0312156150f057600080fd5b6150f989615018565b975061510760208a01615018565b9650604089013567ffffffffffffffff81111561512357600080fd5b61512f8b828c01615040565b909750955050606089013561514381615670565b9350608089013561515381615670565b92506151628a60a08b0161502f565b91506151718a60e08b0161502f565b90509295985092959890939650565b60008060006060848603121561519557600080fd5b61519e84615018565b92506151ac60208501615018565b9150604084013590509250925092565b600080604083850312156151cf57600080fd5b6151d883615018565b946020939093013593505050565b600080600080600060a086880312156151fe57600080fd5b61520786615018565b94506020860135935061521c60408701615018565b94979396509394606081013594506080013592915050565b60008060006060848603121561524957600080fd5b61525284615018565b95602085013595506040909401359392505050565b60008060008060008060c0878903121561528057600080fd5b61528987615018565b955060208701359450604087013593506152a560608801615018565b92506080870135915060a087013590509295509295509295565b6000602082840312156152d157600080fd5b815161348581615670565b6000602082840312156152ee57600080fd5b5035919050565b60006020828403121561530757600080fd5b5051919050565b60008060006040848603121561532357600080fd5b83359250602084013567ffffffffffffffff81111561534157600080fd5b61534d86828701615040565b9497909650939450505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252825182820181905260009190848201906040850190845b818110156153bf5783516001600160a01b03168352928401929184019160010161539a565b50909695505050505050565b600060208083528351808285015260005b818110156153f8578581018301518582016040015282016153dc565b8181111561540a576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f4552525f4d41585f494e5f524154494f60801b604082015260600190565b6020808252600f908201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604082015260600190565b6020808252600d908201526c11549497d31253525517d3d555609a1b604082015260600190565b6020808252600c908201526b22a9292fa624a6a4aa2fa4a760a11b604082015260600190565b6020808252600b908201526a4552525f5245454e54525960a81b604082015260600190565b6020808252601190820152704552525f4d41585f4f55545f524154494f60781b604082015260600190565b6020808252600d908201526c11549497d393d517d093d55391609a1b604082015260600190565b60208082526011908201527011549497d393d517d19253905312569151607a1b604082015260600190565b600082198211156155755761557561562e565b500190565b60008261558957615589615644565b500490565b60008160001904831182151516156155a8576155a861562e565b500290565b6000828210156155bf576155bf61562e565b500390565b600181811c908216806155d857607f821691505b602082108114156155f957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156156135761561361562e565b5060010190565b60008261562957615629615644565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8015158114613a8257600080fdfe9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3fcda32798d5a9d032f49b37fea876d422f18f6e386e0f07db6029b693624b2c215a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220125e08fd18e8888a8af56d86376b74e0d0fa89e2206ecb76f9bafb647d54865064736f6c63430008070033", + "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106104075760003560e01c80638201aa3f11610220578063be3bbd2e11610130578063e4a28a52116100b8578063f68045a511610087578063f68045a514610875578063f8b2cb4f1461087d578063fbb9dd5014610890578063fde924f7146108a3578063ff9b1850146108b557600080fd5b8063e4a28a521461048f578063ec09302114610847578063f0f13f0b1461084f578063f1b8a9b71461086257600080fd5b8063cc77828d116100ff578063cc77828d146107e3578063cd2ed8fb146107eb578063d4cadf68146107f3578063d73dd623146107fb578063dd62ed3e1461080e57600080fd5b8063be3bbd2e146107b3578063c070a6d8146107c8578063c36596a6146104cf578063c6580d12146107db57600080fd5b8063a3b3a16d116101b3578063b0e0d13611610182578063b0e0d13614610793578063b7b800a414610793578063ba019dab1461079b578063bc063e1a146107a3578063bc694ea2146107ab57600080fd5b8063a3b3a16d14610747578063a562ddf01461075a578063a9059cbb1461076d578063b02f0b731461078057600080fd5b80639381cd2b116101ef5780639381cd2b1461071c578063948d8ce61461072457806395d89b4114610737578063992e2a921461073f57600080fd5b80638201aa3f146106e7578063867378c5146106fa5780638d4e408314610702578063936c34771461071457600080fd5b806334e199071161031b5780634f69c0d4116102ae578063700dd7e81161027d578063700dd7e814610673578063703305181461067b57806370a082311461068e57806376c7a3c7146106b75780637c5e9ea4146106bf57600080fd5b80634f69c0d4146106275780635db342771461063a578063661884631461064d5780636d06dfa01461066057600080fd5b8063430ed5d0116102ea578063430ed5d0146105e757806346ab38f1146105fa57806349e9350f1461060d5780634df947d01461061657600080fd5b806334e199071461059c578063380376a6146105af578063392e53cd146105c25780633950b3fd146105d457600080fd5b8063189d00ca1161039e5780632f37b6241161036d5780632f37b6241461050457806330062192146105305780633018205f14610550578063313ce5671461056757806331e2761b1461057c57600080fd5b8063189d00ca146104c7578063218b5382146104cf57806323b872dd146104de5780632ea07d8a146104f157600080fd5b806309a3bbe4116103da57806309a3bbe41461048f57806309ef3f5b1461049757806315e84af9146104ac57806318160ddd146104bf57600080fd5b806302c967481461040c57806304ad79541461043257806306fdde0314610457578063095ea7b31461046c575b600080fd5b61041f61041a366004615234565b6108c8565b6040519081526020015b60405180910390f35b6003546001600160a01b03165b6040516001600160a01b039091168152602001610429565b61045f610d46565b60405161042991906153cb565b61047f61047a3660046151bc565b610dd8565b6040519015158152602001610429565b61041f610e33565b6104aa6104a5366004615267565b610e49565b005b61041f6104ba3660046150a0565b610fe8565b60095461041f565b61041f6110cc565b61041f670de0b6b3a764000081565b61047f6104ec366004615180565b6110e3565b61041f6104ff366004615180565b611237565b61047f610512366004615085565b6001600160a01b031660009081526010602052604090205460ff1690565b61041f61053e366004615085565b60056020526000908152604090205481565b600c546201000090046001600160a01b031661043f565b600c5460405160ff9091168152602001610429565b61041f61058a366004615085565b60066020526000908152604090205481565b6104aa6105aa3660046152dc565b6112f2565b61041f6105bd366004615180565b61143b565b601254600160a01b900460ff1661047f565b61041f6105e23660046151bc565b6114ec565b61041f6105f53660046151bc565b611554565b61041f610608366004615234565b6115b4565b61041f60005481565b6004546001600160a01b031661043f565b6104aa61063536600461530e565b6119b1565b61041f610648366004615234565b611bd8565b61047f61065b3660046151bc565b611fdc565b61041f61066e366004615234565b6120b2565b61041f61249a565b6104aa610689366004615085565b612523565b61041f61069c366004615085565b6001600160a01b031660009081526007602052604090205490565b61041f612597565b6106d26106cd3660046151e6565b6125ac565b60408051928352602083019190915201610429565b6106d26106f53660046151e6565b6128fd565b61041f612c32565b600e54600160a01b900460ff1661047f565b61041f612c49565b61041f612c7b565b61041f610732366004615085565b612c8e565b61045f612d14565b61041f612d23565b61041f6107553660046151bc565b612d41565b600d5461043f906001600160a01b031681565b61047f61077b3660046151bc565b612da1565b6104aa61078e36600461530e565b612db7565b61041f600281565b61041f600181565b61041f612ff2565b61041f613005565b6107bb613024565b604051610429919061537e565b61047f6107d63660046150d3565b6130d7565b61041f600081565b6107bb613347565b600f5461041f565b60015461041f565b61047f6108093660046151bc565b613372565b61041f61081c3660046150a0565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b61041f6133e5565b600e5461043f906001600160a01b031681565b61041f610870366004615085565b6133f8565b6104aa61348c565b61041f61088b366004615085565b6135e6565b6104aa61089e366004615085565b613668565b600c54600160b01b900460ff1661047f565b61041f6108c33660046151bc565b613813565b600c54600090610100900460ff16156108fc5760405162461bcd60e51b81526004016108f3906154c0565b60405180910390fd5b600c805461ff001916610100179055600e54600160a01b900460ff166109345760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03841660009081526010602052604090205460ff1661096c5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03841660009081526010602052604090206003908101546109b0916109a090670de0b6b3a764000061557a565b6109ab906001615562565b613873565b8311156109cf5760405162461bcd60e51b81526004016108f3906154e5565b6001600160a01b038416600090815260106020526040902060038101546002820154600954601154610a04939291908861394e565b915081610a235760405162461bcd60e51b81526004016108f39061544a565b82821115610a435760405162461bcd60e51b81526004016108f39061549a565b610a51816003015485613a12565b60038201556000610a628382613873565b604080518781524260208201529192506001600160a01b03881691339160008051602061567f833981519152910160405180910390a360405183815260008051602061569f8339815191529060200160405180910390a1610ac33384613a6f565b610ad5610ad08483613a12565b613a79565b600254610aeb906001600160a01b031682613a85565b610af6863387613a8f565b6003546000906001600160a01b0388811691161415610b2157506004546001600160a01b0316610b2f565b506003546001600160a01b03165b60125460035460405163efd4810360e01b81526001600160a01b039283169263efd4810392610b67929116908590899060040161535a565b60206040518083038186803b158015610b7f57600080fd5b505afa158015610b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb791906152bf565b151560011415610d3157600380546001600160a01b03166000908152601060205260408120918201546002830154600954601154610bf8939291908a613b5d565b9050610c08826003015482613a12565b6003830155610c18866000613873565b600c54604080518481524260208201529296506001600160a01b038681169362010000909304169160008051602061567f833981519152910160405180910390a3600c54610c75906201000090046001600160a01b031687613a6f565b610c82610ad08786613a12565b600254610c98906001600160a01b031685613a85565b600c54610cb69084906201000090046001600160a01b031683613a8f565b6012546003546040516307b01ab360e41b81526001600160a01b03918216600482015285821660248201526044810184905260648101899052911690637b01ab30906084015b600060405180830381600087803b158015610d1657600080fd5b505af1158015610d2a573d6000803e3d6000fd5b5050505050505b505050600c805461ff00191690559392505050565b6060600a8054610d55906155c4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d81906155c4565b8015610dce5780601f10610da357610100808354040283529160200191610dce565b820191906000526020600020905b815481529060010190602001808311610db157829003601f168201915b5050505050905090565b3360008181526008602090815260408083206001600160a01b038716808552925280832085905551919290916000805160206156df83398151915290610e219086815260200190565b60405180910390a35060015b92915050565b610e46670de0b6b3a7640000603261558e565b81565b600c546201000090046001600160a01b03163314610ea25760405162461bcd60e51b815260206004820152601660248201527522a9292fa4a72b20a624a22fa1a7a72a2927a62622a960511b60448201526064016108f3565b6003546001600160a01b03878116911614610eff5760405162461bcd60e51b815260206004820152601d60248201527f4552525f494e56414c49445f44415441544f4b454e5f4144445245535300000060448201526064016108f3565b6004546001600160a01b03848116911614610f5c5760405162461bcd60e51b815260206004820152601d60248201527f4552525f494e56414c49445f42415345544f4b454e5f4144445245535300000060448201526064016108f3565b610f67868686613c27565b604080518681524260208201526001600160a01b0388169133916000805160206156bf833981519152910160405180910390a3610fa5838383613c27565b604080518381524260208201526001600160a01b0385169133916000805160206156bf833981519152910160405180910390a3610fe0613e11565b505050505050565b600c54600090610100900460ff16156110135760405162461bcd60e51b81526004016108f3906154c0565b6001600160a01b03831660009081526010602052604090205460ff1661104b5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03821660009081526010602052604090205460ff166110835760405162461bcd60e51b81526004016108f390615510565b6001600160a01b038084166000908152601060205260408082209285168252902060038083015460028085015492840154908401546110c3939190613e70565b95945050505050565b610e466402540be400670de0b6b3a764000061557a565b6000336001600160a01b038516148061111f57506001600160a01b03841660009081526008602090815260408083203384529091529020548211155b6111635760405162461bcd60e51b815260206004820152601560248201527422a9292fa12a27a5a2a72fa120a22fa1a0a62622a960591b60448201526064016108f3565b61116e848484613ee8565b336001600160a01b038516148015906111ac57506001600160a01b038416600090815260086020908152604080832033845290915290205460001914155b1561122d576001600160a01b03841660009081526008602090815260408083203384529091529020546111df9083613a12565b6001600160a01b0385811660009081526008602090815260408083203380855290835292819020859055519384529186169290916000805160206156df833981519152910160405180910390a35b5060019392505050565b6001600160a01b03831660009081526010602052604081205460ff1661126f5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03831660009081526010602052604090205460ff166112a75760405162461bcd60e51b81526004016108f390615510565b6001600160a01b038085166000908152601060205260408082209286168252902060038083015460028085015492840154908401546112e893919088613ffa565b9695505050505050565b600e54600160a01b900460ff161561133f5760405162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b60448201526064016108f3565b600c546201000090046001600160a01b031633146113945760405162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b60448201526064016108f3565b6113a9620f4240670de0b6b3a764000061557a565b8110156113e65760405162461bcd60e51b815260206004820152600b60248201526a4552525f4d494e5f46454560a81b60448201526064016108f3565b6113f9600a670de0b6b3a764000061557a565b8111156114365760405162461bcd60e51b815260206004820152600b60248201526a4552525f4d41585f46454560a81b60448201526064016108f3565b600155565b6001600160a01b03831660009081526010602052604081205460ff166114735760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03831660009081526010602052604090205460ff166114ab5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b038085166000908152601060205260408082209286168252902060038083015460028085015492840154908401546112e8939190886140a2565b6001600160a01b03821660009081526010602090815260408083208151608081018352815460ff16151581526001820154938101939093526002810154918301829052600301546060830181905260095460115461154c93919087614148565b949350505050565b6001600160a01b03821660009081526010602090815260408083208151608081018352815460ff16151581526001820154938101939093526002810154918301829052600301546060830181905260095460115461154c93919087613b5d565b600c54600090610100900460ff16156115df5760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff166116175760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03841660009081526010602052604090205460ff1661164f5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b0384166000908152601060205260409020600381015460028201546009546011546116849392919088613b5d565b9150828210156116a65760405162461bcd60e51b81526004016108f390615473565b6001600160a01b03851660009081526010602052604090206003908101546116da916109a090670de0b6b3a764000061557a565b8211156116f95760405162461bcd60e51b81526004016108f3906154e5565b611707816003015483613a12565b600382015560006117188582613873565b604080518581524260208201529192506001600160a01b03881691339160008051602061567f833981519152910160405180910390a360405185815260008051602061569f8339815191529060200160405180910390a16117793386613a6f565b611786610ad08683613a12565b60025461179c906001600160a01b031682613a85565b6117a7863385613a8f565b6003546000906001600160a01b03888116911614156117d257506004546001600160a01b03166117e0565b506003546001600160a01b03165b60125460035460405163efd4810360e01b81526001600160a01b039283169263efd48103926118189291169085908b9060040161535a565b60206040518083038186803b15801561183057600080fd5b505afa158015611844573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186891906152bf565b151560011415610d3157600380546001600160a01b031660009081526010602052604081209182015460028301546009546011546118a9939291908c613b5d565b90506118b9826003015482613a12565b60038301556118c9886000613873565b600c54604080518481524260208201529296506001600160a01b038681169362010000909304169160008051602061567f833981519152910160405180910390a3600c54611926906201000090046001600160a01b031689613a6f565b611933610ad08986613a12565b600254611949906001600160a01b031685613a85565b600c546119679084906201000090046001600160a01b031683613a8f565b6012546003546040516307b01ab360e41b81526001600160a01b039182166004820152858216602482015260448101849052606481018b9052911690637b01ab3090608401610cfc565b600c54610100900460ff16156119d95760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff16611a115760405162461bcd60e51b81526004016108f390615537565b6000611a1c60095490565b90506000611a2a85836141dd565b905080611a495760405162461bcd60e51b81526004016108f39061544a565b60005b600f54811015611b91576000600f8281548110611a6b57611a6b61565a565b60009182526020808320909101546001600160a01b03168083526010909152604082206003015490925090611aa08583613873565b905080611abf5760405162461bcd60e51b81526004016108f39061544a565b878785818110611ad157611ad161565a565b90506020020135811115611af75760405162461bcd60e51b81526004016108f39061549a565b6001600160a01b038316600090815260106020526040902060030154611b1d90826142f5565b6001600160a01b0384166000818152601060205260409081902060030192909255905133906000805160206156bf83398151915290611b689085904290918252602082015260400190565b60405180910390a3611b7b833383614347565b5050508080611b89906155ff565b915050611a4c565b50611b9b8561437a565b611ba53386613a85565b60405185815260008051602061569f8339815191529060200160405180910390a15050600c805461ff0019169055505050565b600c54600090610100900460ff1615611c035760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff16611c3b5760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03841660009081526010602052604090205460ff16611c735760405162461bcd60e51b81526004016108f390615510565b6001600160a01b038416600090815260106020526040902060030154611ca6906109ab6002670de0b6b3a764000061557a565b831115611cc55760405162461bcd60e51b81526004016108f390615420565b6001600160a01b038416600090815260106020526040902060038101546002820154600954601154611cfa9392919088614148565b915082821015611d1c5760405162461bcd60e51b81526004016108f390615473565b611d2a8160030154856142f5565b6003820155604080518581524260208201526001600160a01b0387169133916000805160206156bf833981519152910160405180910390a360405182815260008051602061569f8339815191529060200160405180910390a1611d8c8261437a565b611d963383613a85565b611da1853386614347565b600380546001600160a01b031660009081526010602052604081209182015460028301546009546011548493611ddb939092909189614383565b6003549091506001600160a01b0389811691161415611e07576004546001600160a01b03169150611e16565b6003546001600160a01b031691505b6012546003546040516326b1f01f60e01b81526001600160a01b03928316926326b1f01f92611e4e929116908690869060040161535a565b60206040518083038186803b158015611e6657600080fd5b505afa158015611e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9e91906152bf565b151560011415611fc6576012546003546040516399039fcf60e01b81526001600160a01b03928316926399039fcf92611ee0929116908690869060040161535a565b600060405180830381600087803b158015611efa57600080fd5b505af1158015611f0e573d6000803e3d6000fd5b50505050611f208360030154826142f5565b6003840155600c54604080518381524260208201526001600160a01b038581169362010000900416916000805160206156bf833981519152910160405180910390a360405185815260008051602061569f8339815191529060200160405180910390a1611f8c8561437a565b600c54611fa8906201000090046001600160a01b031686613a85565b600c54611fc69083906201000090046001600160a01b031683614347565b50505050600c805461ff00191690559392505050565b3360009081526008602090815260408083206001600160a01b038616845290915281205480831115612031573360009081526008602090815260408083206001600160a01b0388168452909152812055612060565b61203b8184613a12565b3360009081526008602090815260408083206001600160a01b03891684529091529020555b3360008181526008602090815260408083206001600160a01b038916808552908352928190205490519081529192916000805160206156df833981519152910160405180910390a35060019392505050565b600c54600090610100900460ff16156120dd5760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff166121155760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03841660009081526010602052604090205460ff1661214d5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b0384166000908152601060205260409020600381015460028201546009546011546121829392919088614383565b9150816121a15760405162461bcd60e51b81526004016108f39061544a565b828211156121c15760405162461bcd60e51b81526004016108f39061549a565b6001600160a01b0385166000908152601060205260409020600301546121f4906109ab6002670de0b6b3a764000061557a565b8211156122135760405162461bcd60e51b81526004016108f390615420565b6122218160030154836142f5565b6003820155604080518381524260208201526001600160a01b0387169133916000805160206156bf833981519152910160405180910390a360405184815260008051602061569f8339815191529060200160405180910390a16122838461437a565b61228d3385613a85565b612298853384614347565b600380546001600160a01b031660009081526010602052604081209182015460028301546009546011546122cf939291908a614383565b6003549091506000906001600160a01b03898116911614156122fd57506004546001600160a01b031661230b565b506003546001600160a01b03165b6012546003546040516326b1f01f60e01b81526001600160a01b03928316926326b1f01f92612343929116908590879060040161535a565b60206040518083038186803b15801561235b57600080fd5b505afa15801561236f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061239391906152bf565b151560011415611fc6576012546003546040516399039fcf60e01b81526001600160a01b03928316926399039fcf926123d5929116908590879060040161535a565b600060405180830381600087803b1580156123ef57600080fd5b505af1158015612403573d6000803e3d6000fd5b505050506124158360030154836142f5565b6003840155600c54604080518481524260208201526001600160a01b038481169362010000900416916000805160206156bf833981519152910160405180910390a36124608761437a565b600c5461247c906201000090046001600160a01b031688613a85565b600c54611fc69082906201000090046001600160a01b031684614347565b60025460048054604051637c0aa57760e11b81526001600160a01b0391821692810192909252600092169063f8154aee9060240160206040518083038186803b1580156124e657600080fd5b505afa1580156124fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061251e91906152f5565b905090565b600d546001600160a01b031633146125755760405162461bcd60e51b815260206004820152601560248201527427a7262c9026a0a925a2aa1021a7a62622a1aa27a960591b60448201526064016108f3565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b610e46620f4240670de0b6b3a764000061557a565b600c546000908190610100900460ff16156125d95760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff166126115760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03871660009081526010602052604090205460ff166126495760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03851660009081526010602052604090205460ff166126815760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03808816600090815260106020526040808220928816825290206003808201546126be916109a090670de0b6b3a764000061557a565b8611156126dd5760405162461bcd60e51b81526004016108f3906154e5565b60006126fb8360030154846002015484600301548560020154613e70565b9050858111156127435760405162461bcd60e51b81526020600482015260136024820152724552525f4241445f4c494d49545f505249434560681b60448201526064016108f3565b600080604051806080016040528086600301548152602001866002015481526020018560030154815260200185600201548152509050612784818a8e61441d565b90975091508a8711156127a95760405162461bcd60e51b81526004016108f39061549a565b6127b78560030154836142f5565b85600301819055506127cd84600301548a613a12565b6003808601829055860154600280880154908701546127ec9390613e70565b95508286101561280e5760405162461bcd60e51b81526004016108f39061544a565b878611156128505760405162461bcd60e51b815260206004820152600f60248201526e4552525f4c494d49545f505249434560881b60448201526064016108f3565b61285a878a6141dd565b8311156128795760405162461bcd60e51b81526004016108f39061544a565b60408051888152602081018b9052428183015290516001600160a01b038c811692908f169133917f50ef2fc267012b5c84b56835f16ffd5331ac5a151a3760d74908721ba78b0efe919081900360600190a46128d68c3389614347565b6128e18a338b613a8f565b5050505050600c805461ff001916905590969095509350505050565b600c546000908190610100900460ff161561292a5760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff166129625760405162461bcd60e51b81526004016108f390615537565b6001600160a01b03871660009081526010602052604090205460ff1661299a5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03851660009081526010602052604090205460ff166129d25760405162461bcd60e51b81526004016108f390615510565b6001600160a01b03808816600090815260106020526040808220928816825290206003820154612a0f906109ab6002670de0b6b3a764000061557a565b881115612a2e5760405162461bcd60e51b81526004016108f390615420565b6000612a4c8360030154846002015484600301548560020154613e70565b905085811115612a945760405162461bcd60e51b81526020600482015260136024820152724552525f4241445f4c494d49545f505249434560681b60448201526064016108f3565b600080604051806080016040528086600301548152602001866002015481526020018560030154815260200185600201548152509050612ad5818c8e61463b565b909750915088871015612afa5760405162461bcd60e51b81526004016108f390615473565b612b088560030154836142f5565b8560030181905550612b1e846003015488613a12565b600380860182905586015460028088015490870154612b3d9390613e70565b955082861015612b5f5760405162461bcd60e51b81526004016108f39061544a565b87861115612ba15760405162461bcd60e51b815260206004820152600f60248201526e4552525f4c494d49545f505249434560881b60448201526064016108f3565b612bab8b886141dd565b831115612bca5760405162461bcd60e51b81526004016108f39061544a565b604080518c815260208101899052428183015290516001600160a01b038c811692908f169133917f50ef2fc267012b5c84b56835f16ffd5331ac5a151a3760d74908721ba78b0efe919081900360600190a4612c278c338d614347565b6128e18a3389613a8f565b610e4664e8d4a51000670de0b6b3a764000061557a565b600c54600090610100900460ff1615612c745760405162461bcd60e51b81526004016108f3906154c0565b5060115490565b610e46670de0b6b3a7640000606461558e565b600c54600090610100900460ff1615612cb95760405162461bcd60e51b81526004016108f3906154c0565b6001600160a01b03821660009081526010602052604090205460ff16612cf15760405162461bcd60e51b81526004016108f390615510565b506001600160a01b0381166000908152601060205260409020600201545b919050565b6060600b8054610d55906155c4565b612d366003670de0b6b3a764000061557a565b610e46906001615562565b6001600160a01b03821660009081526010602090815260408083208151608081018352815460ff16151581526001820154938101939093526002810154918301829052600301546060830181905260095460115461154c9391908761394e565b6000612dae338484613ee8565b50600192915050565b600c54610100900460ff1615612ddf5760405162461bcd60e51b81526004016108f3906154c0565b600c805461ff001916610100179055600e54600160a01b900460ff16612e175760405162461bcd60e51b81526004016108f390615537565b6000612e2260095490565b90506000612e31856000613873565b90506000612e3f8683613a12565b90506000612e4d82856141dd565b905080612e6c5760405162461bcd60e51b81526004016108f39061544a565b612e763388613a6f565b600254612e8c906001600160a01b031684613a85565b612e9582613a79565b60005b600f54811015612fdd576000600f8281548110612eb757612eb761565a565b60009182526020808320909101546001600160a01b03168083526010909152604082206003015490925090612eec8583613873565b905080612f0b5760405162461bcd60e51b81526004016108f39061544a565b898985818110612f1d57612f1d61565a565b90506020020135811015612f435760405162461bcd60e51b81526004016108f390615473565b6001600160a01b038316600090815260106020526040902060030154612f699082613a12565b6001600160a01b03841660008181526010602052604090819020600301929092559051339060008051602061567f83398151915290612fb49085904290918252602082015260400190565b60405180910390a3612fc7833383613a8f565b5050508080612fd5906155ff565b915050612e98565b5050600c805461ff0019169055505050505050565b610e46600a670de0b6b3a764000061557a565b600161301a670de0b6b3a7640000600261558e565b610e4691906155ad565b600c54606090610100900460ff161561304f5760405162461bcd60e51b81526004016108f3906154c0565b600e54600160a01b900460ff166130785760405162461bcd60e51b81526004016108f390615537565b600f805480602002602001604051908101604052809291908181526020018280548015610dce57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116130b0575050505050905090565b601254600090600160a01b900460ff16156131345760405162461bcd60e51b815260206004820152601760248201527f4552525f414c52454144595f494e495449414c495a454400000000000000000060448201526064016108f3565b6001600160a01b03891661318a5760405162461bcd60e51b815260206004820152601e60248201527f4552525f494e56414c49445f434f4e54524f4c4c45525f41444452455353000060448201526064016108f3565b6001600160a01b0388166131e05760405162461bcd60e51b815260206004820152601b60248201527f4552525f494e56414c49445f464143544f52595f41444452455353000000000060448201526064016108f3565b6131f5620f4240670de0b6b3a764000061557a565b878760008181106132085761320861565a565b90506020020135101561324b5760405162461bcd60e51b815260206004820152600b60248201526a4552525f4d494e5f46454560a81b60448201526064016108f3565b61325e600a670de0b6b3a764000061557a565b878760008181106132715761327161565a565b9050602002013511156132b45760405162461bcd60e51b815260206004820152600b60248201526a4552525f4d41585f46454560a81b60448201526064016108f3565b61333a8989898980806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250506040805180820182528c93508b9250908a9060029083908390808284376000920191909152505060408051808201825291508a906002908390839080828437600092019190915250614840915050565b9998505050505050505050565b600c54606090610100900460ff16156130785760405162461bcd60e51b81526004016108f3906154c0565b3360009081526008602090815260408083206001600160a01b03861684529091528120546133a090836142f5565b3360008181526008602090815260408083206001600160a01b038916808552908352928190208590555193845290926000805160206156df8339815191529101610e21565b610e466002670de0b6b3a764000061557a565b600c54600090610100900460ff16156134235760405162461bcd60e51b81526004016108f3906154c0565b6001600160a01b03821660009081526010602052604090205460ff1661345b5760405162461bcd60e51b81526004016108f390615510565b6001600160a01b0382166000908152601060205260409020600201546011546134859082906141dd565b9392505050565b6000613496613024565b905060005b81518110156135e2576000600560008484815181106134bc576134bc61565a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000205490506000600560008585815181106134ff576134ff61565a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555082828151811061353d5761353d61565a565b6020908102919091010151600e5460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810184905291169063a9059cbb90604401602060405180830381600087803b15801561359557600080fd5b505af11580156135a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135cd91906152bf565b505080806135da906155ff565b91505061349b565b5050565b600c54600090610100900460ff16156136115760405162461bcd60e51b81526004016108f3906154c0565b6001600160a01b03821660009081526010602052604090205460ff166136495760405162461bcd60e51b81526004016108f390615510565b506001600160a01b031660009081526010602052604090206003015490565b600d546001600160a01b031633146136ba5760405162461bcd60e51b815260206004820152601560248201527427a7262c9026a0a925a2aa1021a7a62622a1aa27a960591b60448201526064016108f3565b60006136c4613024565b905060005b815181101561380e576000600660008484815181106136ea576136ea61565a565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054905060006006600085858151811061372d5761372d61565a565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555082828151811061376b5761376b61565a565b602090810291909101015160405163a9059cbb60e01b81526001600160a01b038681166004830152602482018490529091169063a9059cbb90604401602060405180830381600087803b1580156137c157600080fd5b505af11580156137d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137f991906152bf565b50508080613806906155ff565b9150506136c9565b505050565b6001600160a01b03821660009081526010602090815260408083208151608081018352815460ff16151581526001820154938101939093526002810154918301829052600301546060830181905260095460115461154c93919087614383565b600080613880838561558e565b9050831580613897575082613895858361557a565b145b6138d65760405162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b60448201526064016108f3565b60006138eb6002670de0b6b3a764000061557a565b6138f59083615562565b90508181101561393a5760405162461bcd60e51b815260206004820152601060248201526f4552525f4d554c5f4f564552464c4f5760801b60448201526064016108f3565b60006112e8670de0b6b3a76400008361557a565b60008061395b86856141dd565b90506000613971670de0b6b3a764000083613a12565b9050600061398182600154613873565b905060006139a08661399b670de0b6b3a764000085613a12565b6141dd565b905060006139ae8b83613a12565b905060006139bc828d6141dd565b905060006139ca828861497e565b905060006139d8828d613873565b905060006139e68d83613a12565b90506139ff8161399b670de0b6b3a76400006000613a12565b9f9e505050505050505050505050505050565b6000806000613a218585614aaa565b915091508015613a675760405162461bcd60e51b81526020600482015260116024820152704552525f5355425f554e444552464c4f5760781b60448201526064016108f3565b509392505050565b6135e28282614ae1565b613a8281614aec565b50565b6135e28282614bb8565b60405163a9059cbb60e01b81526001600160a01b038381166004830152602482018390526000919085169063a9059cbb906044015b602060405180830381600087803b158015613ade57600080fd5b505af1158015613af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b1691906152bf565b905080613b575760405162461bcd60e51b815260206004820152600f60248201526e4552525f45524332305f46414c534560881b60448201526064016108f3565b50505050565b600080613b6a86856141dd565b90506000613b85846109ab670de0b6b3a76400006000613a12565b90506000613b938783613a12565b90506000613ba182896141dd565b90506000613bc082613bbb670de0b6b3a7640000886141dd565b61497e565b90506000613bce828d613873565b90506000613bdc8d83613a12565b90506000613bfd613bf5670de0b6b3a76400008a613a12565b600154613873565b9050613c15826109ab670de0b6b3a764000084613a12565b9e9d5050505050505050505050505050565b600c546201000090046001600160a01b03163314613c7c5760405162461bcd60e51b815260206004820152601260248201527122a9292fa727aa2fa1a7a72a2927a62622a960711b60448201526064016108f3565b6001600160a01b03831660009081526010602052604090205460ff1615613cd45760405162461bcd60e51b815260206004820152600c60248201526b11549497d254d7d093d5539160a21b60448201526064016108f3565b600e54600160a01b900460ff1615613d215760405162461bcd60e51b815260206004820152601060248201526f11549497d254d7d1925390531256915160821b60448201526064016108f3565b600f54600211613d645760405162461bcd60e51b815260206004820152600e60248201526d4552525f4d41585f544f4b454e5360901b60448201526064016108f3565b604080516080810182526001808252600f805460208085019182526000858701818152606087018281526001600160a01b038c1680845260109094529782209651875460ff1916901515178755925186860155915160028601559451600390940193909355805491820181559091527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020180546001600160a01b031916909117905561380e838383614bc3565b600e805460ff60a01b1916600160a01b179055600c805460ff60b01b1916600160b01b179055613e52613e4d670de0b6b3a7640000606461558e565b61437a565b613e6e33613e69670de0b6b3a7640000606461558e565b613a85565b565b600080613e7d86866141dd565b90506000613e8b85856141dd565b90506000613e9983836141dd565b90506000613edc670de0b6b3a764000061399b670de0b6b3a7640000600054613ec061249a565b600154613ecd9190615562565b613ed79190615562565b613a12565b905061333a8282613873565b6001600160a01b038316600090815260076020526040902054811115613f475760405162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b60448201526064016108f3565b6001600160a01b038316600090815260076020526040902054613f6a9082613a12565b6001600160a01b038085166000908152600760205260408082209390935590841681522054613f9990826142f5565b6001600160a01b0380841660008181526007602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90613fed9085815260200190565b60405180910390a3505050565b60008061400784876141dd565b905060006140158685613a12565b9050600061402387836141dd565b90506000614031828561497e565b905061404581670de0b6b3a7640000613a12565b90506000805461405361249a565b6001546140609190615562565b61406a9190615562565b905061407e670de0b6b3a764000082613a12565b955061409361408d8c84613873565b876141dd565b9b9a5050505050505050505050565b6000806140af86856141dd565b9050600080546140bd61249a565b6001546140ca9190615562565b6140d49190615562565b905060006140ea670de0b6b3a764000083613a12565b90506140f68582613873565b905060006141088a61399b8c856142f5565b90506000614116828661497e565b9050600061412c670de0b6b3a764000083613a12565b90506141388a82613873565b9c9b505050505050505050505050565b60008061415586856141dd565b9050600061416e613bf5670de0b6b3a764000084613a12565b90506000614188856109ab670de0b6b3a764000085613a12565b905060006141968a836142f5565b905060006141a4828c6141dd565b905060006141b2828761497e565b905060006141c0828c613873565b90506141cc818c613a12565b9d9c50505050505050505050505050565b60008161421b5760405162461bcd60e51b815260206004820152600c60248201526b4552525f4449565f5a45524f60a01b60448201526064016108f3565b600061422f670de0b6b3a76400008561558e565b905083158061424e5750670de0b6b3a764000061424c858361557a565b145b61428d5760405162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b60448201526064016108f3565b600061429a60028561557a565b6142a49083615562565b9050818110156142e95760405162461bcd60e51b815260206004820152601060248201526f11549497d1125597d25395115493905360821b60448201526064016108f3565b60006112e8858361557a565b6000806143028385615562565b9050838110156134855760405162461bcd60e51b815260206004820152601060248201526f4552525f4144445f4f564552464c4f5760801b60448201526064016108f3565b6040516323b872dd60e01b81526000906001600160a01b038516906323b872dd90613ac49086903090879060040161535a565b613a8281614e13565b60008061439086856141dd565b9050600061439e86856142f5565b905060006143ac82886141dd565b905060006143c2670de0b6b3a7640000856141dd565b905060006143d0838361497e565b905060006143de828d613873565b905060006143ec828e613a12565b90506000614405613bf5670de0b6b3a76400008a613a12565b9050613c158261399b670de0b6b3a764000084613a12565b6000808061443a86600360200201518760015b60200201516141dd565b9050600061444f876002602002015187613a12565b905060006144648860026020020151836141dd565b90506000614472828561497e565b905061448681670de0b6b3a7640000613a12565b90506000805461449461249a565b6001546144a19190615562565b6144ab9190615562565b8a519091506144d0906144be9084613873565b61399b670de0b6b3a764000084613a12565b965060006144f088613ed78a6109ab670de0b6b3a7640000613ed761249a565b6001600160a01b038a1660009081526005602052604090205490915061451690826142f5565b600560008b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600061455d89613ed78b6109ab670de0b6b3a7640000600054613a12565b6001600160a01b038b1660009081526006602052604090205490915061458390826142f5565b6001600160a01b038b166000908152600660205260409020558b516145c0906145ac9086613873565b61399b670de0b6b3a7640000600154613a12565b97507f90d9f1d0641138b6407ac37bea3a905d63a371c2d91a484f68d59924634d4ef36145ff8a613ed78c6109ab670de0b6b3a7640000600154613a12565b604080519182526020820185905281018390526001600160a01b038c16606082015260800160405180910390a150505050505050935093915050565b600080806146528660016020020151876003614430565b9050600061467286613ed7886109ab670de0b6b3a7640000613ed761249a565b6001600160a01b03861660009081526005602052604090205490915061469890826142f5565b60056000876001600160a01b03166001600160a01b031681526020019081526020016000208190555060006146df87613ed7896109ab670de0b6b3a7640000600054613a12565b6001600160a01b03871660009081526006602052604090205490915061470590826142f5565b6001600160a01b038716600090815260066020526040812091909155805461472b61249a565b6001546147389190615562565b6147429190615562565b90507f90d9f1d0641138b6407ac37bea3a905d63a371c2d91a484f68d59924634d4ef361478189613ed78b6109ab670de0b6b3a7640000600154613a12565b604080519182526020820186905281018490526001600160a01b038916606082015260800160405180910390a160006147c2670de0b6b3a764000083613a12565b90506147ce8982613873565b8a519091506000906147e49061399b81856142f5565b905060006147f2828861497e565b90506000614808670de0b6b3a764000083613a12565b905061481b8d6002602002015182613873565b99508961482c8d613ed7898b615562565b995099505050505050505050935093915050565b600c805462010000600160b01b031916620100006001600160a01b038a81169190910291909117909155600280546001600160a01b0319169188169190911790558451600090869082906148965761489661565a565b6020026020010151600181905550856001815181106148b7576148b761565a565b602090810291909101810151600055600c8054961515600160b01b0260ff60b01b199097169690961795869055600e80548551600380546001600160a01b039283166001600160a01b03199182161790915596840151600480549183169189169190911790558551600d805491831691891691909117905594909201518416951515600160a01b908102959095166001600160a81b0319928316179590951790945550601280549093166201000090940416929092178217908190550460ff169392505050565b600060018310156149c95760405162461bcd60e51b81526020600482015260156024820152744552525f42504f575f424153455f544f4f5f4c4f5760581b60448201526064016108f3565b60016149de670de0b6b3a7640000600261558e565b6149e891906155ad565b831115614a305760405162461bcd60e51b815260206004820152601660248201527508aa4a4be84a09eaebe8482a68abea89e9ebe90928e960531b60448201526064016108f3565b6000614a3b83614e82565b90506000614a498483613a12565b90506000614a5f86614a5a85614ea0565b614eb4565b905081614a70579250610e2d915050565b6000614a938784614a8e6402540be400670de0b6b3a764000061557a565b614f28565b9050614a9f8282613873565b979650505050505050565b600080828410614ac957614abe83856155ad565b600091509150614ada565b614ad384846155ad565b6001915091505b9250929050565b6135e2823083613ee8565b30600090815260076020526040902054811115614b425760405162461bcd60e51b815260206004820152601460248201527311549497d25394d551919250d251539517d0905360621b60448201526064016108f3565b30600090815260076020526040902054614b5c9082613a12565b30600090815260076020526040902055600954614b799082613a12565b60095560405181815260009030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a350565b6135e2308383613ee8565b670de0b6b3a7640000811015614c0c5760405162461bcd60e51b815260206004820152600e60248201526d11549497d3525397d5d15251d21560921b60448201526064016108f3565b614c1f670de0b6b3a7640000603261558e565b811115614c5f5760405162461bcd60e51b815260206004820152600e60248201526d11549497d3505617d5d15251d21560921b60448201526064016108f3565b614c7664e8d4a51000670de0b6b3a764000061557a565b821015614cb75760405162461bcd60e51b815260206004820152600f60248201526e4552525f4d494e5f42414c414e434560881b60448201526064016108f3565b6001600160a01b03831660009081526010602052604090206002015480821115614d5357614cf0601154614ceb8484613a12565b6142f5565b601155614d06670de0b6b3a7640000603261558e565b6011541115614d4e5760405162461bcd60e51b815260206004820152601460248201527311549497d3505617d513d5105317d5d15251d21560621b60448201526064016108f3565b614d6f565b80821015614d6f57614d6b601154613ed78385613a12565b6011555b6001600160a01b03841660009081526010602052604090206002810183905560030180549084905580841115614db857614db38533614dae8785613a12565b614347565b614e0c565b80841015614e0c576000614dcc8286613a12565b90506000614ddb826000613873565b9050614df18733614dec8585613a12565b613a8f565b600254614e099088906001600160a01b031683613a8f565b50505b5050505050565b30600090815260076020526040902054614e2d90826142f5565b30600090815260076020526040902055600954614e4a90826142f5565b60095560405181815230906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001614bad565b6000670de0b6b3a7640000614e9683614ea0565b610e2d919061558e565b6000610e2d670de0b6b3a76400008361557a565b60008281614ec360028561561a565b614ed557670de0b6b3a7640000614ed7565b815b9050614ee460028561557a565b93505b831561154c57614ef78283613873565b9150614f0460028561561a565b15614f1657614f138183613873565b90505b614f2160028561557a565b9350614ee7565b6000828180614f3f87670de0b6b3a7640000614aaa565b9092509050670de0b6b3a764000080600060015b888410615009576000614f6e670de0b6b3a76400008361558e565b9050600080614f8e8a614f8985670de0b6b3a7640000613a12565b614aaa565b91509150614fa0876109ab848c613873565b9650614fac87846141dd565b965086614fbb57505050615009565b8715614fc5579315935b8015614fcf579315935b8415614fe657614fdf8688613a12565b9550614ff3565b614ff086886142f5565b95505b5050508080615001906155ff565b915050614f53565b50909998505050505050505050565b80356001600160a01b0381168114612d0f57600080fd5b8060408101831015610e2d57600080fd5b60008083601f84011261505257600080fd5b50813567ffffffffffffffff81111561506a57600080fd5b6020830191508360208260051b8501011115614ada57600080fd5b60006020828403121561509757600080fd5b61348582615018565b600080604083850312156150b357600080fd5b6150bc83615018565b91506150ca60208401615018565b90509250929050565b600080600080600080600080610120898b0312156150f057600080fd5b6150f989615018565b975061510760208a01615018565b9650604089013567ffffffffffffffff81111561512357600080fd5b61512f8b828c01615040565b909750955050606089013561514381615670565b9350608089013561515381615670565b92506151628a60a08b0161502f565b91506151718a60e08b0161502f565b90509295985092959890939650565b60008060006060848603121561519557600080fd5b61519e84615018565b92506151ac60208501615018565b9150604084013590509250925092565b600080604083850312156151cf57600080fd5b6151d883615018565b946020939093013593505050565b600080600080600060a086880312156151fe57600080fd5b61520786615018565b94506020860135935061521c60408701615018565b94979396509394606081013594506080013592915050565b60008060006060848603121561524957600080fd5b61525284615018565b95602085013595506040909401359392505050565b60008060008060008060c0878903121561528057600080fd5b61528987615018565b955060208701359450604087013593506152a560608801615018565b92506080870135915060a087013590509295509295509295565b6000602082840312156152d157600080fd5b815161348581615670565b6000602082840312156152ee57600080fd5b5035919050565b60006020828403121561530757600080fd5b5051919050565b60008060006040848603121561532357600080fd5b83359250602084013567ffffffffffffffff81111561534157600080fd5b61534d86828701615040565b9497909650939450505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6020808252825182820181905260009190848201906040850190845b818110156153bf5783516001600160a01b03168352928401929184019160010161539a565b50909695505050505050565b600060208083528351808285015260005b818110156153f8578581018301518582016040015282016153dc565b8181111561540a576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526010908201526f4552525f4d41585f494e5f524154494f60801b604082015260600190565b6020808252600f908201526e08aa4a4be9a82a890be82a0a0a49eb608b1b604082015260600190565b6020808252600d908201526c11549497d31253525517d3d555609a1b604082015260600190565b6020808252600c908201526b22a9292fa624a6a4aa2fa4a760a11b604082015260600190565b6020808252600b908201526a4552525f5245454e54525960a81b604082015260600190565b6020808252601190820152704552525f4d41585f4f55545f524154494f60781b604082015260600190565b6020808252600d908201526c11549497d393d517d093d55391609a1b604082015260600190565b60208082526011908201527011549497d393d517d19253905312569151607a1b604082015260600190565b600082198211156155755761557561562e565b500190565b60008261558957615589615644565b500490565b60008160001904831182151516156155a8576155a861562e565b500290565b6000828210156155bf576155bf61562e565b500390565b600181811c908216806155d857607f821691505b602082108114156155f957634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156156135761561361562e565b5060010190565b60008261562957615629615644565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b8015158114613a8257600080fdfe9d9058fd2f25ccc389fec7720abef0ca83472f5abfafd5f10d37f51e6a0493f3fcda32798d5a9d032f49b37fea876d422f18f6e386e0f07db6029b693624b2c215a8ca63e37b2cff1677df2b6b82d36fcf8a524228bd7a4b4d02d107c28c1e8a8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925a2646970667358221220125e08fd18e8888a8af56d86376b74e0d0fa89e2206ecb76f9bafb647d54865064736f6c63430008070033", + "linkReferences": {}, + "deployedLinkReferences": {} + } \ No newline at end of file diff --git a/schema.graphql b/schema.graphql index 166d92f..dd045a3 100644 --- a/schema.graphql +++ b/schema.graphql @@ -16,7 +16,7 @@ type Token @entity { publishMarketFeeAmmount: BigDecimal # fee amount. Fixed value, expressed in wei in contracts, needs conversion in decimals. templateId: Int # template ID of the datatoken - holderCount: BigInt # Number of addresses holding a balance of datatoken + holderCount: BigInt # Number of addresses holding a balance of datatoken , TODO: can we actually calculate this? what happens when users trade the dts orderCount: BigInt # Number of orders executed for this datatoken createdTimestamp: Int # Block time datatoken was created @@ -63,6 +63,8 @@ type Pool @entity { cap: BigDecimal # Maximum supply if any, converted from wei isActive: Boolean! # pool is active + baseToken: PoolToken! @derivedFrom(field: "pool") + datatoken: PoolToken! @derivedFrom(field: "pool") poolFee: BigDecimal! # Pool Fee percent, fee goes to all liquidity providers : SWAP, JOIN , EXIT opfFee: BigDecimal! # OPF Fee percent, fee that goes to Ocean Protocol Foundation : SWAP marketFee: BigDecimal! # Market fee percent, fee that goes to the market where the pool was created : SWAP @@ -88,8 +90,6 @@ type Pool @entity { tx: Bytes # Pool creation transaction id block: Int # Block number when it was created - # split in basetokne and datatoken like in fre - tokens: [PoolToken!] @derivedFrom(field: "pool") shares: [PoolShare!] @derivedFrom(field: "pool") transactions: [PoolTransaction!] @derivedFrom(field: "pool") } @@ -111,7 +111,7 @@ type PoolShare @entity { balance: BigDecimal! } -#check balancer v2 graph TX + type PoolTransaction @entity { id: ID! # tx + caller pool: Pool! # Pool related to this tx @@ -124,15 +124,18 @@ type PoolTransaction @entity { opfFee: BigDecimal! # OPF Fee percent, fee that goes to Ocean Protocol Foundation : SWAP marketFee: BigDecimal! + event: String # TODO: what is this? + tx: Bytes! - event: String block: Int! - createdTimestamp: Int! - gasUsed: BigDecimal! - gasPrice: BigDecimal! + timestamp: Int! + + gasLimit: BigDecimal! + gasPrice: BigDecimal! # in eth # change to baseToken and dataToken - tokens: [TokenValuePair!] # tokens transfered , if value is negative it means it was removed. + baseToken: TokenValuePair # tokens transfered , if value is negative it means it was removed, + datatoken: TokenValuePair } type Order @entity { # renamed from TokenOrder to Order @@ -242,7 +245,6 @@ type Dispenser @entity { datatoken: Token! allowedSwapper: String - withMint: Boolean # if the owner allowes the fre to mint isMinter: Boolean # if the fre has the minter role on the datatoken maxTokens: BigDecimal! # max tokens that can be dispensed maxBalance: BigDecimal! # max balance of requester. If the balance is higher, the dispense is rejected diff --git a/scripts/generatebargesubgraph.js b/scripts/generatebargesubgraph.js index 27d4644..400baca 100644 --- a/scripts/generatebargesubgraph.js +++ b/scripts/generatebargesubgraph.js @@ -4,26 +4,42 @@ var fs = require('fs') async function replaceContractAddresses() { // load barge addresses first try { - const data = JSON.parse( - fs.readFileSync( - '/home/mihai/.ocean/ocean-contracts/artifacts/address.json', - 'utf8' - ) - ) - const { - DTFactory, - // eslint-disable-next-line no-unused-vars - ERC721Factory - } = data.development - let subgraph = fs.readFileSync('subgraph.yaml', 'utf8') - if (!data) { - return false - } + // const data = JSON.parse( + // fs.readFileSync( + // '/home/mihai/.ocean/ocean-contracts/artifacts/address.json', + // 'utf8' + // ) + // ) + // const { + // DTFactory, + // // eslint-disable-next-line no-unused-vars + // ERC721Factory + // } = data.development + // let subgraph = fs.readFileSync('subgraph.yaml', 'utf8') + // if (!data) { + // return false + // } + + const ERC721Factory = '0x0599a4a2873B38D836E10302De1ca4834F7BDF4E' + const FixedRateExchange = '0x2356DeCd8CFB6c6f2bf46b5ED4531818B4662337' + const Dispenser = '0xb119b8895801111ff323ba63a77D4Fe78ED057a5' + // ERC721Factory subgraph = subgraph.replace( - /0x17d55A3501999FFBF9b0623cDB258611419d01F5/g, + /0x0599a4a2873B38D836E10302De1ca4834F7BDF4E/g, ERC721Factory ) + + subgraph = subgraph.replace( + /0x2356DeCd8CFB6c6f2bf46b5ED4531818B4662337/g, + FixedRateExchange + ) + + subgraph = subgraph.replace( + /0xb119b8895801111ff323ba63a77D4Fe78ED057a5/g, + Dispenser + ) + // network subgraph = subgraph.replace(/network: mainnet/g, 'network: barge') diff --git a/src/mappings/dispenser.ts b/src/mappings/dispenser.ts index b41c1de..0a9d29b 100644 --- a/src/mappings/dispenser.ts +++ b/src/mappings/dispenser.ts @@ -7,7 +7,7 @@ import { } from '../@types/Dispenser/Dispenser' import { DispenserCreated } from '../@types/ERC721Factory/ERC721Factory' import { DispenserTransaction } from '../@types/schema' -import { ZERO_BD } from '../helpers' +import { ZERO_BD } from './utils/constants' import { createDispenser, getDispenser } from './utils/dispenserUtils' import { getUser } from './utils/userUtils' diff --git a/src/mappings/dataToken.ts b/src/mappings/erc20Template.ts similarity index 100% rename from src/mappings/dataToken.ts rename to src/mappings/erc20Template.ts diff --git a/src/mappings/erc721Factory.ts b/src/mappings/erc721Factory.ts index f423dac..84af3f4 100644 --- a/src/mappings/erc721Factory.ts +++ b/src/mappings/erc721Factory.ts @@ -1,6 +1,6 @@ import { NFTCreated, TokenCreated } from '../@types/ERC721Factory/ERC721Factory' import { Nft, Token } from '../@types/schema' -import { ZERO_BD } from '../helpers' +import { ZERO_BD } from './utils/constants' import { getUser } from './utils/userUtils' export function handleNftCreated(event: NFTCreated): void { diff --git a/src/mappings/factoryRouter.ts b/src/mappings/factoryRouter.ts deleted file mode 100644 index 289e009..0000000 --- a/src/mappings/factoryRouter.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { NewPool } from '../@types/ERC20Template/ERC20Template' -import { Pool } from '../@types/schema' - -export function handleNewPool(event: NewPool): void { - const newPool = new Pool(event.params.poolAddress.toHex()) - - newPool.createdTimestamp = event.block.timestamp.toI32() - newPool.tx = event.transaction.hash - newPool.block = event.block.number.toI32() - newPool.save() -} diff --git a/src/mappings/pool.ts b/src/mappings/pool.ts new file mode 100644 index 0000000..8bcf031 --- /dev/null +++ b/src/mappings/pool.ts @@ -0,0 +1,31 @@ +import { Pool, PoolTransaction } from '../@types/schema' +import { LOG_JOIN } from '../@types/templates/BPool/BPool' +import { integer, PoolTransactionType } from './utils/constants' +import { gweiToEth } from './utils/generic' +import { getUser } from './utils/userUtils' + +export function handleJoin(event: LOG_JOIN): void { + const pool = Pool.load(event.address.toHex()) + + // should we do something else here? + if (pool === null || pool.isFinalized === true) return + + pool.transactionCount = pool.transactionCount.plus(integer.ONE) + pool.joinCount = pool.joinCount.plus(integer.ONE) + + const poolTx = new PoolTransaction(event.transaction.hash.toHex()) + const user = getUser(event.params.caller.toHex()) + poolTx.user = user.id + poolTx.pool = pool.id + poolTx.type = PoolTransactionType.JOIN + + poolTx.timestamp = event.block.timestamp.toI32() + poolTx.tx = event.transaction.hash + poolTx.block = event.block.number.toI32() + + poolTx.gasPrice = gweiToEth(event.transaction.gasPrice.toBigDecimal()) + poolTx.gasLimit = event.transaction.gasLimit.toBigDecimal() + + poolTx.save() + pool.save() +} diff --git a/src/mappings/poolFactory.ts b/src/mappings/poolFactory.ts new file mode 100644 index 0000000..4c53706 --- /dev/null +++ b/src/mappings/poolFactory.ts @@ -0,0 +1,27 @@ +import { BPoolCreated } from '../@types/FactoryRouter/FactoryRouter' +import { Pool } from '../@types/schema' +import { getPoolToken } from './utils/poolUtils' + +export function handleNewPool(event: BPoolCreated): void { + const pool = new Pool(event.params.newBPoolAddress.toHex()) + + const baseToken = getPoolToken( + event.params.newBPoolAddress.toHex(), + event.params.basetokenAddress.toHex() + ) + pool.baseToken = baseToken.id + + const datatoken = getPoolToken( + event.params.newBPoolAddress.toHex(), + event.params.datatokenAddress.toHex() + ) + pool.datatoken = datatoken.id + + pool.owner = event.params.registeredBy.toHex() + + pool.createdTimestamp = event.block.timestamp.toI32() + pool.tx = event.transaction.hash + pool.block = event.block.number.toI32() + + pool.save() +} diff --git a/src/mappings/utils/constants.ts b/src/mappings/utils/constants.ts new file mode 100644 index 0000000..cd96cd9 --- /dev/null +++ b/src/mappings/utils/constants.ts @@ -0,0 +1,25 @@ +import { BigDecimal, BigInt } from '@graphprotocol/graph-ts' + +export const ENABLE_DEBUG = true + +export const enum PoolTransactionType { + JOIN = 'join', + EXIT = 'exit', + SWAP = 'swap', + SETUP = 'setup' +} + +export namespace integer { + export const NEGATIVE_ONE = BigInt.fromI32(-1) + export const ZERO = BigInt.fromI32(0) + export const ONE = BigInt.fromI32(1) + export const TWO = BigInt.fromI32(2) + export const ONE_BASE_18 = BigInt.fromI32(10).pow(18 as u8) +} + +export namespace deciaml { + export const ZERO_BD = BigDecimal.fromString('0.0') + export const MINUS_1_BD = BigDecimal.fromString('-1.0') + export const ONE_BD = BigDecimal.fromString('1.0') + export const BONE = BigDecimal.fromString('1000000000000000000') +} diff --git a/src/mappings/utils/generic.ts b/src/mappings/utils/generic.ts new file mode 100644 index 0000000..5d30bc6 --- /dev/null +++ b/src/mappings/utils/generic.ts @@ -0,0 +1,38 @@ +import { BigDecimal, BigInt, dataSource } from '@graphprotocol/graph-ts' + +const network = dataSource.network() + +export function getOceanAddress(): string { + // switch is not working for some reason + if (network == 'ropsten') return '0x5e8dcb2afa23844bcc311b00ad1a0c30025aade9' + if (network == 'rinkeby') return '0x8967bcf84170c91b0d24d4302c2376283b0b3a07' + if (network == 'polygon') return '0x282d8efce846a88b159800bd4130ad77443fa1a1' + if (network == 'moonbeamalpha') + return '0xf6410bf5d773c7a41ebff972f38e7463fa242477' + if (network == 'gaiaxtestnet') + return '0x80e63f73cac60c1662f27d2dfd2ea834acddbaa8' + if (network == 'catenaxtestnet') + return '0x80e63f73cac60c1662f27d2dfd2ea834acddbaa8' + if (network == 'mumbai') return '0xd8992ed72c445c35cb4a2be468568ed1079357c8' + if (network == 'bsc') return '0xdce07662ca8ebc241316a15b611c89711414dd1a' + if (network == 'celoalfajores') + return '0xd8992ed72c445c35cb4a2be468568ed1079357c8' + if (network == 'energyweb') + return '0x593122aae80a6fc3183b2ac0c4ab3336debee528' + if (network == 'moonriver') + return '0x99c409e5f62e4bd2ac142f17cafb6810b8f0baae' + return '0x967da4048cd07ab37855c090aaf366e4ce1b9f48' +} + +export const OCEAN: string = getOceanAddress() + +export function tokenToDecimal(amount: BigDecimal, decimals: i32): BigDecimal { + const scale = BigInt.fromI32(10) + .pow(decimals as u8) + .toBigDecimal() + return amount.div(scale) +} + +export function gweiToEth(ammount: BigDecimal): BigDecimal { + return ammount.div(BigDecimal.fromString('1.000.000.000')) +} diff --git a/src/mappings/utils/poolUtils.ts b/src/mappings/utils/poolUtils.ts new file mode 100644 index 0000000..55678a4 --- /dev/null +++ b/src/mappings/utils/poolUtils.ts @@ -0,0 +1,21 @@ +import { PoolToken } from '../../@types/schema' + +export function getPoolTokenId( + poolAddress: string, + tokenAddress: string +): string { + return `${poolAddress}-${tokenAddress}` +} + +export function getPoolToken( + poolAddress: string, + tokenAddress: string +): PoolToken { + let poolToken = PoolToken.load(getPoolTokenId(poolAddress, tokenAddress)) + if (poolToken === null) { + poolToken = new PoolToken(getPoolTokenId(poolAddress, tokenAddress)) + // TODO: add data to pooltoken + } + + return poolToken +} diff --git a/subgraph.yaml b/subgraph.yaml index e0c24a5..0979264 100644 --- a/subgraph.yaml +++ b/subgraph.yaml @@ -58,26 +58,6 @@ dataSources: handler: handleAllowedSwapperChanged - event: Swapped(indexed bytes32,indexed address,uint256,uint256,address,uint256,uint256) handler: handleSwap - - kind: ethereum/contract - name: FactoryRouter - network: barge - source: - address: '0x5509dc151e25BdA96d508A5994654980b7574883' - abi: FactoryRouter - startBlock: 0 - mapping: - kind: ethereum/events - apiVersion: 0.0.5 - language: wasm/assemblyscript - file: ./src/mappings/factoryRouter.ts - entities: - - FactoryRouter - abis: - - name: FactoryRouter - file: ./abis/FactoryRouter.json - eventHandlers: - - event: NewPool(indexed address,bool) - handler: handleNewPool - kind: ethereum/contract name: Dispenser network: barge @@ -126,8 +106,62 @@ templates: file: ./abis/ERC20Template.json - name: ERC20 file: ./abis/ERC20.json + - name: ERC20Roles + file: ./abis/ERC20Roles.json eventHandlers: - event: OrderStarted(indexed address,address,uint256,uint256,uint256,indexed address,indexed address,uint256) handler: handleOrderStarted - event: MinterApproved(address,address) handler: handleMinterApproved + - event: AddedMinter(indexed address,indexed address,uint256,uint256) + handler: handleAddMinter + - event: RemovedMinter(indexed address,indexed address,uint256,uint256) + handler: handleRemoveMinter + - event: AddedFeeManager(indexed address,indexed address,uint256,uint256) + handler: handlerAddFeeManager + - event: RemovedFeeManager(indexed address,indexed address,uint256,uint256) + handler: handlerRemoveFeeManager + - event: CleanedPermissions(indexed address,uint256,uint256) + handler: handleCleanPermissions + - kind: ethereum/contract + name: BFactory + network: barge + source: + abi: BFactory + mapping: + kind: ethereum/events + apiVersion: 0.0.5 + language: wasm/assemblyscript + file: ./src/mappings/poolFactory.ts + entities: + - BFactory + abis: + - name: BFactory + file: ./abis/BFactory.json + eventHandlers: + - event: BPoolCreated(indexed address,indexed address,indexed address,address,address,address) + handler: handleNewPool + - kind: ethereum/contract + name: BPool + network: barge + source: + abi: BPool + mapping: + kind: ethereum/events + apiVersion: 0.0.5 + language: wasm/assemblyscript + file: ./src/mappings/pool.ts + entities: + - BPool + abis: + - name: BPool + file: ./abis/BPool.json + eventHandlers: + - event: LOG_SWAP(indexed address,indexed address,indexed address,uint256,uint256,uint256) + handler: handleSwap + - event: LOG_JOIN(indexed address,indexed address,uint256,uint256) + handler: handleJoin + - event: LOG_EXIT(indexed address,indexed address,uint256,uint256) + handler: handleExit + - event: LOG_BPT(uint256) + handler: handleBpt \ No newline at end of file